Commit bd05f55
committed
Unpack TF plugins in a more atomic way.
The original implementation of plugin cache handling unpacks plugin
archives in a way that can result in race conditions when multiple
terraform processes are accessing the same plugin cache. Since the
archives are being decompressed in chunks and output files are written
directly to the cache, we observed following manifestations of the issue:
- `text file busy` errors if other terraform processes are already
running the plugin and another process tries to replace it.
- various plugin checksum errors triggered likely by simultaneous checksumming
and rewriting the file.
This PR changes the zip archives with plugins are handled:
1. Instead of writing directly to the target directory,
`installFromLocalArchive` is now writing to a temporary staging
directory prefixed with`.temp` that resides in the plugin cache dir
to ensure this is on the same filesystem.
2. After unpacking, the directory structure of the staging directory is
replicated in the `targetDir`. The directories are created as needed
and any files are moved using `os.Rename`. After this, the staging
directory is removed.
3. Since the temporary staging directories can be picked up by
`SearchLocalDirectory` and make it fail in the situation when they're
removed during directory traversal, the function has been modified to
skip any entry that starts with dot.
Signed-off-by: Milan Plzik <milan.plzik@grafana.com>1 parent b4a634c commit bd05f55
File tree
3 files changed
+64
-10
lines changed- internal
- getproviders
- providercache
3 files changed
+64
-10
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
48 | | - | |
| 48 | + | |
| 49 | + | |
49 | 50 | | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
50 | 67 | | |
51 | 68 | | |
52 | 69 | | |
| |||
56 | 73 | | |
57 | 74 | | |
58 | 75 | | |
59 | | - | |
60 | | - | |
61 | | - | |
62 | | - | |
63 | | - | |
64 | | - | |
65 | | - | |
| 76 | + | |
66 | 77 | | |
67 | 78 | | |
68 | 79 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2299 | 2299 | | |
2300 | 2300 | | |
2301 | 2301 | | |
2302 | | - | |
| 2302 | + | |
2303 | 2303 | | |
2304 | 2304 | | |
2305 | 2305 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| 9 | + | |
9 | 10 | | |
10 | 11 | | |
| 12 | + | |
11 | 13 | | |
12 | 14 | | |
13 | 15 | | |
| |||
122 | 124 | | |
123 | 125 | | |
124 | 126 | | |
125 | | - | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
126 | 169 | | |
127 | 170 | | |
128 | 171 | | |
| |||
0 commit comments