... | ... |
@@ -24,54 +24,57 @@ |
24 | 24 |
# |
25 | 25 |
|
26 | 26 |
docker-version 0.6.1 |
27 |
-from ubuntu:12.04 |
|
28 |
-maintainer Solomon Hykes <solomon@dotcloud.com> |
|
27 |
+from ubuntu:12.10 |
|
28 |
+maintainer Solomon Hykes <solomon@dotcloud.com> |
|
29 | 29 |
|
30 | 30 |
# Build dependencies |
31 |
-run echo 'deb http://archive.ubuntu.com/ubuntu precise main universe' > /etc/apt/sources.list |
|
32 |
-run apt-get update |
|
33 |
-run apt-get install -y -q curl |
|
34 |
-run apt-get install -y -q git |
|
35 |
-run apt-get install -y -q mercurial |
|
36 |
-run apt-get install -y -q build-essential |
|
31 |
+run apt-get update |
|
32 |
+run apt-get install -y -q curl |
|
33 |
+run apt-get install -y -q git |
|
34 |
+run apt-get install -y -q mercurial |
|
35 |
+run apt-get install -y -q build-essential |
|
37 | 36 |
|
38 | 37 |
# Install Go from source (for eventual cross-compiling) |
39 |
-run curl -s https://go.googlecode.com/files/go1.2rc1.src.tar.gz | tar -v -C / -xz && mv /go /goroot |
|
40 |
-run cd /goroot/src && ./make.bash |
|
41 |
-env GOROOT /goroot |
|
42 |
-env PATH $PATH:/goroot/bin |
|
43 |
-env GOPATH /go:/go/src/github.com/dotcloud/docker/vendor |
|
38 |
+run curl -s https://go.googlecode.com/files/go1.2rc1.src.tar.gz | tar -v -C / -xz && mv /go /goroot |
|
39 |
+run cd /goroot/src && ./make.bash |
|
40 |
+env GOROOT /goroot |
|
41 |
+env PATH $PATH:/goroot/bin |
|
42 |
+env GOPATH /go:/go/src/github.com/dotcloud/docker/vendor |
|
44 | 43 |
|
45 | 44 |
# Create Go cache with tag netgo (for static compilation of Go while preserving CGO support) |
46 |
-run go install -ldflags '-w -linkmode external -extldflags "-static -Wl,--unresolved-symbols=ignore-in-shared-libs"' -tags netgo -a std |
|
45 |
+run go install -ldflags '-w -linkmode external -extldflags "-static -Wl,--unresolved-symbols=ignore-in-shared-libs"' -tags netgo -a std |
|
47 | 46 |
|
48 | 47 |
# Get lvm2 source for compiling statically |
49 |
-run git clone git://git.fedorahosted.org/git/lvm2.git /lvm2 |
|
50 |
-run cd /lvm2 && git checkout v2_02_102 |
|
48 |
+run git clone git://git.fedorahosted.org/git/lvm2.git /lvm2 |
|
49 |
+run cd /lvm2 && git checkout v2_02_102 |
|
50 |
+ |
|
51 | 51 |
# can't use git clone -b because it's not supported by git versions before 1.7.10 |
52 | 52 |
run cd /lvm2 && ./configure --enable-static_link && make && make install_device-mapper |
53 | 53 |
# see https://git.fedorahosted.org/cgit/lvm2.git/refs/tags for release tags |
54 | 54 |
|
55 | 55 |
# Ubuntu stuff |
56 |
-run apt-get install -y -q ruby1.9.3 rubygems libffi-dev |
|
57 |
-run gem install --no-rdoc --no-ri fpm |
|
58 |
-run apt-get install -y -q reprepro dpkg-sig |
|
56 |
+run apt-get install -y -q ruby1.9.3 rubygems libffi-dev |
|
57 |
+run gem install --no-rdoc --no-ri fpm |
|
58 |
+run apt-get install -y -q reprepro dpkg-sig |
|
59 | 59 |
|
60 | 60 |
# Install s3cmd 1.0.1 (earlier versions don't support env variables in the config) |
61 |
-run apt-get install -y -q python-pip |
|
62 |
-run pip install s3cmd |
|
63 |
-run pip install python-magic |
|
64 |
-run /bin/echo -e '[default]\naccess_key=$AWS_ACCESS_KEY\nsecret_key=$AWS_SECRET_KEY\n' > /.s3cfg |
|
61 |
+run apt-get install -y -q python-pip |
|
62 |
+run pip install s3cmd |
|
63 |
+run pip install python-magic |
|
64 |
+run /bin/echo -e '[default]\naccess_key=$AWS_ACCESS_KEY\nsecret_key=$AWS_SECRET_KEY\n' > /.s3cfg |
|
65 | 65 |
|
66 | 66 |
# Runtime dependencies |
67 |
-run apt-get install -y -q iptables |
|
68 |
-run apt-get install -y -q lxc |
|
67 |
+run apt-get install -y -q iptables |
|
68 |
+run dpkg-divert --local --rename --add /sbin/initctl && \ |
|
69 |
+ ln -s /bin/true /sbin/initctl && \ |
|
70 |
+ apt-get install -y -q lxc |
|
69 | 71 |
|
70 |
-volume /var/lib/docker |
|
71 |
-workdir /go/src/github.com/dotcloud/docker |
|
72 |
+volume /var/lib/docker |
|
73 |
+workdir /go/src/github.com/dotcloud/docker |
|
72 | 74 |
|
73 | 75 |
# Wrap all commands in the "docker-in-docker" script to allow nested containers |
74 | 76 |
entrypoint ["hack/dind"] |
75 | 77 |
|
76 | 78 |
# Upload docker source |
77 |
-add . /go/src/github.com/dotcloud/docker |
|
79 |
+add . /go/src/github.com/dotcloud/docker |
|
80 |
+ |
... | ... |
@@ -620,6 +620,7 @@ func postContainersStart(srv *Server, version float64, w http.ResponseWriter, r |
620 | 620 |
} |
621 | 621 |
name := vars["name"] |
622 | 622 |
if err := srv.ContainerStart(name, hostConfig); err != nil { |
623 |
+ utils.Debugf("error ContainerStart: %s", err) |
|
623 | 624 |
return err |
624 | 625 |
} |
625 | 626 |
w.WriteHeader(http.StatusNoContent) |
... | ... |
@@ -66,9 +66,8 @@ func (wrapper *DeviceSetWrapper) HasActivatedDevice(hash string) bool { |
66 | 66 |
} |
67 | 67 |
|
68 | 68 |
func NewDeviceSetWrapper(wrapped DeviceSet, prefix string) DeviceSet { |
69 |
- wrapper := &DeviceSetWrapper{ |
|
69 |
+ return &DeviceSetWrapper{ |
|
70 | 70 |
wrapped: wrapped, |
71 | 71 |
prefix: prefix, |
72 | 72 |
} |
73 |
- return wrapper |
|
74 | 73 |
} |
... | ... |
@@ -1,12 +1,11 @@ |
1 | 1 |
package devmapper |
2 | 2 |
|
3 | 3 |
import ( |
4 |
- "github.com/dotcloud/docker/utils" |
|
5 | 4 |
"encoding/json" |
6 | 5 |
"fmt" |
6 |
+ "github.com/dotcloud/docker/utils" |
|
7 | 7 |
"io" |
8 | 8 |
"io/ioutil" |
9 |
- "log" |
|
10 | 9 |
"os" |
11 | 10 |
"os/exec" |
12 | 11 |
"path" |
... | ... |
@@ -15,9 +14,11 @@ import ( |
15 | 15 |
"syscall" |
16 | 16 |
) |
17 | 17 |
|
18 |
-const defaultDataLoopbackSize int64 = 100 * 1024 * 1024 * 1024 |
|
19 |
-const defaultMetaDataLoopbackSize int64 = 2 * 1024 * 1024 * 1024 |
|
20 |
-const defaultBaseFsSize uint64 = 10 * 1024 * 1024 * 1024 |
|
18 |
+const ( |
|
19 |
+ defaultDataLoopbackSize int64 = 100 * 1024 * 1024 * 1024 |
|
20 |
+ defaultMetaDataLoopbackSize int64 = 2 * 1024 * 1024 * 1024 |
|
21 |
+ defaultBaseFsSize uint64 = 10 * 1024 * 1024 * 1024 |
|
22 |
+) |
|
21 | 23 |
|
22 | 24 |
type DevInfo struct { |
23 | 25 |
Hash string `json:"-"` |
... | ... |
@@ -33,14 +34,14 @@ type MetaData struct { |
33 | 33 |
} |
34 | 34 |
|
35 | 35 |
type DeviceSetDM struct { |
36 |
- initialized bool |
|
37 |
- root string |
|
38 |
- devicePrefix string |
|
39 | 36 |
MetaData |
37 |
+ initialized bool |
|
38 |
+ root string |
|
39 |
+ devicePrefix string |
|
40 | 40 |
TransactionId uint64 |
41 | 41 |
NewTransactionId uint64 |
42 | 42 |
nextFreeDevice int |
43 |
- activeMounts map[string]int |
|
43 |
+ activeMounts map[string]int |
|
44 | 44 |
} |
45 | 45 |
|
46 | 46 |
func getDevName(name string) string { |
... | ... |
@@ -68,7 +69,7 @@ func (devices *DeviceSetDM) jsonFile() string { |
68 | 68 |
} |
69 | 69 |
|
70 | 70 |
func (devices *DeviceSetDM) getPoolName() string { |
71 |
- return fmt.Sprintf("%s-pool", devices.devicePrefix) |
|
71 |
+ return devices.devicePrefix + "-pool" |
|
72 | 72 |
} |
73 | 73 |
|
74 | 74 |
func (devices *DeviceSetDM) getPoolDevName() string { |
... | ... |
@@ -80,8 +81,7 @@ func (devices *DeviceSetDM) createTask(t TaskType, name string) (*Task, error) { |
80 | 80 |
if task == nil { |
81 | 81 |
return nil, fmt.Errorf("Can't create task of type %d", int(t)) |
82 | 82 |
} |
83 |
- err := task.SetName(name) |
|
84 |
- if err != nil { |
|
83 |
+ if err := task.SetName(name); err != nil { |
|
85 | 84 |
return nil, fmt.Errorf("Can't set task name %s", name) |
86 | 85 |
} |
87 | 86 |
return task, nil |
... | ... |
@@ -92,60 +92,53 @@ func (devices *DeviceSetDM) getInfo(name string) (*Info, error) { |
92 | 92 |
if task == nil { |
93 | 93 |
return nil, err |
94 | 94 |
} |
95 |
- err = task.Run() |
|
96 |
- if err != nil { |
|
95 |
+ if err := task.Run(); err != nil { |
|
97 | 96 |
return nil, err |
98 | 97 |
} |
99 |
- info, err := task.GetInfo() |
|
100 |
- if err != nil { |
|
101 |
- return nil, err |
|
102 |
- } |
|
103 |
- return info, nil |
|
98 |
+ return task.GetInfo() |
|
104 | 99 |
} |
105 | 100 |
|
106 | 101 |
func (devices *DeviceSetDM) getStatus(name string) (uint64, uint64, string, string, error) { |
107 | 102 |
task, err := devices.createTask(DeviceStatus, name) |
108 | 103 |
if task == nil { |
104 |
+ utils.Debugf("getStatus: Error createTask: %s", err) |
|
109 | 105 |
return 0, 0, "", "", err |
110 | 106 |
} |
111 |
- err = task.Run() |
|
112 |
- if err != nil { |
|
107 |
+ if err := task.Run(); err != nil { |
|
108 |
+ utils.Debugf("getStatus: Error Run: %s", err) |
|
113 | 109 |
return 0, 0, "", "", err |
114 | 110 |
} |
115 | 111 |
|
116 | 112 |
devinfo, err := task.GetInfo() |
117 | 113 |
if err != nil { |
114 |
+ utils.Debugf("getStatus: Error GetInfo: %s", err) |
|
118 | 115 |
return 0, 0, "", "", err |
119 | 116 |
} |
120 | 117 |
if devinfo.Exists == 0 { |
118 |
+ utils.Debugf("getStatus: Non existing device %s", name) |
|
121 | 119 |
return 0, 0, "", "", fmt.Errorf("Non existing device %s", name) |
122 | 120 |
} |
123 | 121 |
|
124 |
- var next uintptr = 0 |
|
125 |
- next, start, length, target_type, params := task.GetNextTarget(next) |
|
126 |
- |
|
122 |
+ _, start, length, target_type, params := task.GetNextTarget(0) |
|
127 | 123 |
return start, length, target_type, params, nil |
128 | 124 |
} |
129 | 125 |
|
130 | 126 |
func (devices *DeviceSetDM) setTransactionId(oldId uint64, newId uint64) error { |
131 | 127 |
task, err := devices.createTask(DeviceTargetMsg, devices.getPoolDevName()) |
132 | 128 |
if task == nil { |
129 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
133 | 130 |
return err |
134 | 131 |
} |
135 | 132 |
|
136 |
- err = task.SetSector(0) |
|
137 |
- if err != nil { |
|
133 |
+ if err := task.SetSector(0); err != nil { |
|
138 | 134 |
return fmt.Errorf("Can't set sector") |
139 | 135 |
} |
140 | 136 |
|
141 |
- message := fmt.Sprintf("set_transaction_id %d %d", oldId, newId) |
|
142 |
- err = task.SetMessage(message) |
|
143 |
- if err != nil { |
|
137 |
+ if err := task.SetMessage(fmt.Sprintf("set_transaction_id %d %d", oldId, newId)); err != nil { |
|
144 | 138 |
return fmt.Errorf("Can't set message") |
145 | 139 |
} |
146 | 140 |
|
147 |
- err = task.Run() |
|
148 |
- if err != nil { |
|
141 |
+ if err := task.Run(); err != nil { |
|
149 | 142 |
return fmt.Errorf("Error running setTransactionId") |
150 | 143 |
} |
151 | 144 |
return nil |
... | ... |
@@ -167,18 +160,17 @@ func (devices *DeviceSetDM) ensureImage(name string, size int64) (string, error) |
167 | 167 |
return "", err |
168 | 168 |
} |
169 | 169 |
|
170 |
- _, err := os.Stat(filename) |
|
171 |
- if err != nil { |
|
170 |
+ if _, err := os.Stat(filename); err != nil { |
|
172 | 171 |
if !os.IsNotExist(err) { |
173 | 172 |
return "", err |
174 | 173 |
} |
175 |
- log.Printf("Creating loopback file %s for device-manage use", filename) |
|
174 |
+ utils.Debugf("Creating loopback file %s for device-manage use", filename) |
|
176 | 175 |
file, err := os.OpenFile(filename, os.O_RDWR|os.O_CREATE, 0600) |
177 | 176 |
if err != nil { |
178 | 177 |
return "", err |
179 | 178 |
} |
180 |
- err = file.Truncate(size) |
|
181 |
- if err != nil { |
|
179 |
+ |
|
180 |
+ if err = file.Truncate(size); err != nil { |
|
182 | 181 |
return "", err |
183 | 182 |
} |
184 | 183 |
} |
... | ... |
@@ -189,6 +181,7 @@ func (devices *DeviceSetDM) createPool(dataFile *os.File, metadataFile *os.File) |
189 | 189 |
utils.Debugf("Activating device-mapper pool %s", devices.getPoolName()) |
190 | 190 |
task, err := devices.createTask(DeviceCreate, devices.getPoolName()) |
191 | 191 |
if task == nil { |
192 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
192 | 193 |
return err |
193 | 194 |
} |
194 | 195 |
|
... | ... |
@@ -198,19 +191,16 @@ func (devices *DeviceSetDM) createPool(dataFile *os.File, metadataFile *os.File) |
198 | 198 |
} |
199 | 199 |
|
200 | 200 |
params := metadataFile.Name() + " " + dataFile.Name() + " 512 8192" |
201 |
- err = task.AddTarget(0, size/512, "thin-pool", params) |
|
202 |
- if err != nil { |
|
201 |
+ if err := task.AddTarget(0, size/512, "thin-pool", params); err != nil { |
|
203 | 202 |
return fmt.Errorf("Can't add target") |
204 | 203 |
} |
205 | 204 |
|
206 | 205 |
var cookie uint32 = 0 |
207 |
- err = task.SetCookie(&cookie, 0) |
|
208 |
- if err != nil { |
|
206 |
+ if err := task.SetCookie(&cookie, 0); err != nil { |
|
209 | 207 |
return fmt.Errorf("Can't set cookie") |
210 | 208 |
} |
211 | 209 |
|
212 |
- err = task.Run() |
|
213 |
- if err != nil { |
|
210 |
+ if err := task.Run(); err != nil { |
|
214 | 211 |
return fmt.Errorf("Error running DeviceCreate") |
215 | 212 |
} |
216 | 213 |
|
... | ... |
@@ -222,10 +212,10 @@ func (devices *DeviceSetDM) createPool(dataFile *os.File, metadataFile *os.File) |
222 | 222 |
func (devices *DeviceSetDM) suspendDevice(info *DevInfo) error { |
223 | 223 |
task, err := devices.createTask(DeviceSuspend, info.Name()) |
224 | 224 |
if task == nil { |
225 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
225 | 226 |
return err |
226 | 227 |
} |
227 |
- err = task.Run() |
|
228 |
- if err != nil { |
|
228 |
+ if err := task.Run(); err != nil { |
|
229 | 229 |
return fmt.Errorf("Error running DeviceSuspend") |
230 | 230 |
} |
231 | 231 |
return nil |
... | ... |
@@ -234,17 +224,16 @@ func (devices *DeviceSetDM) suspendDevice(info *DevInfo) error { |
234 | 234 |
func (devices *DeviceSetDM) resumeDevice(info *DevInfo) error { |
235 | 235 |
task, err := devices.createTask(DeviceResume, info.Name()) |
236 | 236 |
if task == nil { |
237 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
237 | 238 |
return err |
238 | 239 |
} |
239 | 240 |
|
240 | 241 |
var cookie uint32 = 0 |
241 |
- err = task.SetCookie(&cookie, 0) |
|
242 |
- if err != nil { |
|
242 |
+ if err := task.SetCookie(&cookie, 0); err != nil { |
|
243 | 243 |
return fmt.Errorf("Can't set cookie") |
244 | 244 |
} |
245 | 245 |
|
246 |
- err = task.Run() |
|
247 |
- if err != nil { |
|
246 |
+ if err := task.Run(); err != nil { |
|
248 | 247 |
return fmt.Errorf("Error running DeviceSuspend") |
249 | 248 |
} |
250 | 249 |
|
... | ... |
@@ -256,68 +245,60 @@ func (devices *DeviceSetDM) resumeDevice(info *DevInfo) error { |
256 | 256 |
func (devices *DeviceSetDM) createDevice(deviceId int) error { |
257 | 257 |
task, err := devices.createTask(DeviceTargetMsg, devices.getPoolDevName()) |
258 | 258 |
if task == nil { |
259 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
259 | 260 |
return err |
260 | 261 |
} |
261 | 262 |
|
262 |
- err = task.SetSector(0) |
|
263 |
- if err != nil { |
|
263 |
+ if err := task.SetSector(0); err != nil { |
|
264 | 264 |
return fmt.Errorf("Can't set sector") |
265 | 265 |
} |
266 | 266 |
|
267 |
- message := fmt.Sprintf("create_thin %d", deviceId) |
|
268 |
- err = task.SetMessage(message) |
|
269 |
- if err != nil { |
|
267 |
+ if err := task.SetMessage(fmt.Sprintf("create_thin %d", deviceId)); err != nil { |
|
270 | 268 |
return fmt.Errorf("Can't set message") |
271 | 269 |
} |
272 | 270 |
|
273 |
- err = task.Run() |
|
274 |
- if err != nil { |
|
271 |
+ if err := task.Run(); err != nil { |
|
275 | 272 |
return fmt.Errorf("Error running createDevice") |
276 | 273 |
} |
277 | 274 |
return nil |
278 | 275 |
} |
279 | 276 |
|
280 | 277 |
func (devices *DeviceSetDM) createSnapDevice(deviceId int, baseInfo *DevInfo) error { |
281 |
- doSuspend := false |
|
282 | 278 |
devinfo, _ := devices.getInfo(baseInfo.Name()) |
283 |
- if devinfo != nil && devinfo.Exists != 0 { |
|
284 |
- doSuspend = true |
|
285 |
- } |
|
279 |
+ doSuspend := devinfo != nil && devinfo.Exists != 0 |
|
286 | 280 |
|
287 | 281 |
if doSuspend { |
288 |
- err := devices.suspendDevice(baseInfo) |
|
289 |
- if err != nil { |
|
282 |
+ if err := devices.suspendDevice(baseInfo); err != nil { |
|
283 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
290 | 284 |
return err |
291 | 285 |
} |
292 | 286 |
} |
293 | 287 |
|
294 | 288 |
task, err := devices.createTask(DeviceTargetMsg, devices.getPoolDevName()) |
295 | 289 |
if task == nil { |
296 |
- _ = devices.resumeDevice(baseInfo) |
|
290 |
+ devices.resumeDevice(baseInfo) |
|
291 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
297 | 292 |
return err |
298 | 293 |
} |
299 |
- err = task.SetSector(0) |
|
300 |
- if err != nil { |
|
301 |
- _ = devices.resumeDevice(baseInfo) |
|
294 |
+ |
|
295 |
+ if err := task.SetSector(0); err != nil { |
|
296 |
+ devices.resumeDevice(baseInfo) |
|
302 | 297 |
return fmt.Errorf("Can't set sector") |
303 | 298 |
} |
304 | 299 |
|
305 |
- message := fmt.Sprintf("create_snap %d %d", deviceId, baseInfo.DeviceId) |
|
306 |
- err = task.SetMessage(message) |
|
307 |
- if err != nil { |
|
308 |
- _ = devices.resumeDevice(baseInfo) |
|
300 |
+ if err := task.SetMessage(fmt.Sprintf("create_snap %d %d", deviceId, baseInfo.DeviceId)); err != nil { |
|
301 |
+ devices.resumeDevice(baseInfo) |
|
309 | 302 |
return fmt.Errorf("Can't set message") |
310 | 303 |
} |
311 | 304 |
|
312 |
- err = task.Run() |
|
313 |
- if err != nil { |
|
314 |
- _ = devices.resumeDevice(baseInfo) |
|
305 |
+ if err := task.Run(); err != nil { |
|
306 |
+ devices.resumeDevice(baseInfo) |
|
315 | 307 |
return fmt.Errorf("Error running DeviceCreate") |
316 | 308 |
} |
317 | 309 |
|
318 | 310 |
if doSuspend { |
319 |
- err = devices.resumeDevice(baseInfo) |
|
320 |
- if err != nil { |
|
311 |
+ if err := devices.resumeDevice(baseInfo); err != nil { |
|
312 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
321 | 313 |
return err |
322 | 314 |
} |
323 | 315 |
} |
... | ... |
@@ -328,22 +309,19 @@ func (devices *DeviceSetDM) createSnapDevice(deviceId int, baseInfo *DevInfo) er |
328 | 328 |
func (devices *DeviceSetDM) deleteDevice(deviceId int) error { |
329 | 329 |
task, err := devices.createTask(DeviceTargetMsg, devices.getPoolDevName()) |
330 | 330 |
if task == nil { |
331 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
331 | 332 |
return err |
332 | 333 |
} |
333 | 334 |
|
334 |
- err = task.SetSector(0) |
|
335 |
- if err != nil { |
|
335 |
+ if err := task.SetSector(0); err != nil { |
|
336 | 336 |
return fmt.Errorf("Can't set sector") |
337 | 337 |
} |
338 | 338 |
|
339 |
- message := fmt.Sprintf("delete %d", deviceId) |
|
340 |
- err = task.SetMessage(message) |
|
341 |
- if err != nil { |
|
339 |
+ if err := task.SetMessage(fmt.Sprintf("delete %d", deviceId)); err != nil { |
|
342 | 340 |
return fmt.Errorf("Can't set message") |
343 | 341 |
} |
344 | 342 |
|
345 |
- err = task.Run() |
|
346 |
- if err != nil { |
|
343 |
+ if err := task.Run(); err != nil { |
|
347 | 344 |
return fmt.Errorf("Error running deleteDevice") |
348 | 345 |
} |
349 | 346 |
return nil |
... | ... |
@@ -352,10 +330,10 @@ func (devices *DeviceSetDM) deleteDevice(deviceId int) error { |
352 | 352 |
func (devices *DeviceSetDM) removeDevice(name string) error { |
353 | 353 |
task, err := devices.createTask(DeviceRemove, name) |
354 | 354 |
if task == nil { |
355 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
355 | 356 |
return err |
356 | 357 |
} |
357 |
- err = task.Run() |
|
358 |
- if err != nil { |
|
358 |
+ if err = task.Run(); err != nil { |
|
359 | 359 |
return fmt.Errorf("Error running removeDevice") |
360 | 360 |
} |
361 | 361 |
return nil |
... | ... |
@@ -364,23 +342,21 @@ func (devices *DeviceSetDM) removeDevice(name string) error { |
364 | 364 |
func (devices *DeviceSetDM) activateDevice(info *DevInfo) error { |
365 | 365 |
task, err := devices.createTask(DeviceCreate, info.Name()) |
366 | 366 |
if task == nil { |
367 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
367 | 368 |
return err |
368 | 369 |
} |
369 | 370 |
|
370 | 371 |
params := fmt.Sprintf("%s %d", devices.getPoolDevName(), info.DeviceId) |
371 |
- err = task.AddTarget(0, info.Size/512, "thin", params) |
|
372 |
- if err != nil { |
|
372 |
+ if err := task.AddTarget(0, info.Size/512, "thin", params); err != nil { |
|
373 | 373 |
return fmt.Errorf("Can't add target") |
374 | 374 |
} |
375 | 375 |
|
376 | 376 |
var cookie uint32 = 0 |
377 |
- err = task.SetCookie(&cookie, 0) |
|
378 |
- if err != nil { |
|
377 |
+ if err := task.SetCookie(&cookie, 0); err != nil { |
|
379 | 378 |
return fmt.Errorf("Can't set cookie") |
380 | 379 |
} |
381 | 380 |
|
382 |
- err = task.Run() |
|
383 |
- if err != nil { |
|
381 |
+ if err := task.Run(); err != nil { |
|
384 | 382 |
return fmt.Errorf("Error running DeviceCreate") |
385 | 383 |
} |
386 | 384 |
|
... | ... |
@@ -404,61 +380,60 @@ func (devices *DeviceSetDM) allocateTransactionId() uint64 { |
404 | 404 |
func (devices *DeviceSetDM) saveMetadata() error { |
405 | 405 |
jsonData, err := json.Marshal(devices.MetaData) |
406 | 406 |
if err != nil { |
407 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
407 | 408 |
return err |
408 | 409 |
} |
409 | 410 |
tmpFile, err := ioutil.TempFile(filepath.Dir(devices.jsonFile()), ".json") |
410 | 411 |
if err != nil { |
412 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
411 | 413 |
return err |
412 | 414 |
} |
413 | 415 |
|
414 | 416 |
n, err := tmpFile.Write(jsonData) |
415 | 417 |
if err != nil { |
418 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
416 | 419 |
return err |
417 | 420 |
} |
418 | 421 |
if n < len(jsonData) { |
419 |
- err = io.ErrShortWrite |
|
422 |
+ return io.ErrShortWrite |
|
420 | 423 |
} |
421 |
- err = tmpFile.Sync() |
|
422 |
- if err != nil { |
|
424 |
+ if err := tmpFile.Sync(); err != nil { |
|
425 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
423 | 426 |
return err |
424 | 427 |
} |
425 |
- err = tmpFile.Close() |
|
426 |
- if err != nil { |
|
428 |
+ if err := tmpFile.Close(); err != nil { |
|
429 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
427 | 430 |
return err |
428 | 431 |
} |
429 |
- err = os.Rename(tmpFile.Name(), devices.jsonFile()) |
|
430 |
- if err != nil { |
|
432 |
+ if err := os.Rename(tmpFile.Name(), devices.jsonFile()); err != nil { |
|
433 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
431 | 434 |
return err |
432 | 435 |
} |
433 | 436 |
|
434 | 437 |
if devices.NewTransactionId != devices.TransactionId { |
435 |
- err = devices.setTransactionId(devices.TransactionId, devices.NewTransactionId) |
|
436 |
- if err != nil { |
|
438 |
+ if err = devices.setTransactionId(devices.TransactionId, devices.NewTransactionId); err != nil { |
|
439 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
437 | 440 |
return err |
438 | 441 |
} |
439 | 442 |
devices.TransactionId = devices.NewTransactionId |
440 | 443 |
} |
441 |
- |
|
442 | 444 |
return nil |
443 | 445 |
} |
444 | 446 |
|
445 | 447 |
func (devices *DeviceSetDM) registerDevice(id int, hash string, size uint64) (*DevInfo, error) { |
446 |
- transaction := devices.allocateTransactionId() |
|
447 |
- |
|
448 | 448 |
info := &DevInfo{ |
449 | 449 |
Hash: hash, |
450 | 450 |
DeviceId: id, |
451 | 451 |
Size: size, |
452 |
- TransactionId: transaction, |
|
452 |
+ TransactionId: devices.allocateTransactionId(), |
|
453 | 453 |
Initialized: false, |
454 | 454 |
devices: devices, |
455 | 455 |
} |
456 | 456 |
|
457 | 457 |
devices.Devices[hash] = info |
458 |
- err := devices.saveMetadata() |
|
459 |
- if err != nil { |
|
458 |
+ if err := devices.saveMetadata(); err != nil { |
|
460 | 459 |
// Try to remove unused device |
461 |
- devices.Devices[hash] = nil |
|
460 |
+ delete(devices.Devices, hash) |
|
462 | 461 |
return nil, err |
463 | 462 |
} |
464 | 463 |
|
... | ... |
@@ -471,9 +446,7 @@ func (devices *DeviceSetDM) activateDeviceIfNeeded(hash string) error { |
471 | 471 |
return fmt.Errorf("Unknown device %s", hash) |
472 | 472 |
} |
473 | 473 |
|
474 |
- name := info.Name() |
|
475 |
- devinfo, _ := devices.getInfo(name) |
|
476 |
- if devinfo != nil && devinfo.Exists != 0 { |
|
474 |
+ if devinfo, _ := devices.getInfo(info.Name()); devinfo != nil && devinfo.Exists != 0 { |
|
477 | 475 |
return nil |
478 | 476 |
} |
479 | 477 |
|
... | ... |
@@ -483,13 +456,12 @@ func (devices *DeviceSetDM) activateDeviceIfNeeded(hash string) error { |
483 | 483 |
func (devices *DeviceSetDM) createFilesystem(info *DevInfo) error { |
484 | 484 |
devname := info.DevName() |
485 | 485 |
|
486 |
- err := exec.Command("mkfs.ext4", "-E", |
|
487 |
- "discard,lazy_itable_init=0,lazy_journal_init=0", devname).Run() |
|
486 |
+ err := exec.Command("mkfs.ext4", "-E", "discard,lazy_itable_init=0,lazy_journal_init=0", devname).Run() |
|
488 | 487 |
if err != nil { |
489 |
- err = exec.Command("mkfs.ext4", "-E", |
|
490 |
- "discard,lazy_itable_init=0", devname).Run() |
|
488 |
+ err = exec.Command("mkfs.ext4", "-E", "discard,lazy_itable_init=0", devname).Run() |
|
491 | 489 |
} |
492 | 490 |
if err != nil { |
491 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
493 | 492 |
return err |
494 | 493 |
} |
495 | 494 |
return nil |
... | ... |
@@ -498,31 +470,29 @@ func (devices *DeviceSetDM) createFilesystem(info *DevInfo) error { |
498 | 498 |
func (devices *DeviceSetDM) loadMetaData() error { |
499 | 499 |
_, _, _, params, err := devices.getStatus(devices.getPoolName()) |
500 | 500 |
if err != nil { |
501 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
501 | 502 |
return err |
502 | 503 |
} |
503 |
- var currentTransaction uint64 |
|
504 |
- _, err = fmt.Sscanf(params, "%d", ¤tTransaction) |
|
505 |
- if err != nil { |
|
504 |
+ |
|
505 |
+ if _, err := fmt.Sscanf(params, "%d", &devices.TransactionId); err != nil { |
|
506 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
506 | 507 |
return err |
507 | 508 |
} |
508 |
- |
|
509 |
- devices.TransactionId = currentTransaction |
|
510 | 509 |
devices.NewTransactionId = devices.TransactionId |
511 | 510 |
|
512 | 511 |
jsonData, err := ioutil.ReadFile(devices.jsonFile()) |
513 | 512 |
if err != nil && !os.IsNotExist(err) { |
513 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
514 | 514 |
return err |
515 | 515 |
} |
516 | 516 |
|
517 |
- metadata := &MetaData{ |
|
518 |
- Devices: make(map[string]*DevInfo), |
|
519 |
- } |
|
517 |
+ devices.MetaData.Devices = make(map[string]*DevInfo) |
|
520 | 518 |
if jsonData != nil { |
521 |
- if err := json.Unmarshal(jsonData, metadata); err != nil { |
|
519 |
+ if err := json.Unmarshal(jsonData, &devices.MetaData); err != nil { |
|
520 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
522 | 521 |
return err |
523 | 522 |
} |
524 | 523 |
} |
525 |
- devices.MetaData = *metadata |
|
526 | 524 |
|
527 | 525 |
for hash, d := range devices.Devices { |
528 | 526 |
d.Hash = hash |
... | ... |
@@ -533,12 +503,11 @@ func (devices *DeviceSetDM) loadMetaData() error { |
533 | 533 |
} |
534 | 534 |
|
535 | 535 |
// If the transaction id is larger than the actual one we lost the device due to some crash |
536 |
- if d.TransactionId > currentTransaction { |
|
537 |
- log.Printf("Removing lost device %s with id %d", hash, d.TransactionId) |
|
536 |
+ if d.TransactionId > devices.TransactionId { |
|
537 |
+ utils.Debugf("Removing lost device %s with id %d", hash, d.TransactionId) |
|
538 | 538 |
delete(devices.Devices, hash) |
539 | 539 |
} |
540 | 540 |
} |
541 |
- |
|
542 | 541 |
return nil |
543 | 542 |
} |
544 | 543 |
|
... | ... |
@@ -549,45 +518,46 @@ func (devices *DeviceSetDM) setupBaseImage() error { |
549 | 549 |
} |
550 | 550 |
|
551 | 551 |
if oldInfo != nil && !oldInfo.Initialized { |
552 |
- log.Printf("Removing uninitialized base image") |
|
552 |
+ utils.Debugf("Removing uninitialized base image") |
|
553 | 553 |
if err := devices.RemoveDevice(""); err != nil { |
554 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
554 | 555 |
return err |
555 | 556 |
} |
556 | 557 |
} |
557 | 558 |
|
558 |
- log.Printf("Initializing base device-manager snapshot") |
|
559 |
+ utils.Debugf("Initializing base device-manager snapshot") |
|
559 | 560 |
|
560 | 561 |
id := devices.allocateDeviceId() |
561 | 562 |
|
562 | 563 |
// Create initial device |
563 |
- err := devices.createDevice(id) |
|
564 |
- if err != nil { |
|
564 |
+ if err := devices.createDevice(id); err != nil { |
|
565 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
565 | 566 |
return err |
566 | 567 |
} |
567 | 568 |
|
568 | 569 |
info, err := devices.registerDevice(id, "", defaultBaseFsSize) |
569 | 570 |
if err != nil { |
570 | 571 |
_ = devices.deleteDevice(id) |
572 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
571 | 573 |
return err |
572 | 574 |
} |
573 | 575 |
|
574 |
- log.Printf("Creating filesystem on base device-manager snapshot") |
|
576 |
+ utils.Debugf("Creating filesystem on base device-manager snapshot") |
|
575 | 577 |
|
576 |
- err = devices.activateDeviceIfNeeded("") |
|
577 |
- if err != nil { |
|
578 |
+ if err = devices.activateDeviceIfNeeded(""); err != nil { |
|
579 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
578 | 580 |
return err |
579 | 581 |
} |
580 | 582 |
|
581 |
- err = devices.createFilesystem(info) |
|
582 |
- if err != nil { |
|
583 |
+ if err := devices.createFilesystem(info); err != nil { |
|
584 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
583 | 585 |
return err |
584 | 586 |
} |
585 | 587 |
|
586 | 588 |
info.Initialized = true |
587 |
- |
|
588 |
- err = devices.saveMetadata() |
|
589 |
- if err != nil { |
|
589 |
+ if err = devices.saveMetadata(); err != nil { |
|
590 | 590 |
info.Initialized = false |
591 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
591 | 592 |
return err |
592 | 593 |
} |
593 | 594 |
|
... | ... |
@@ -597,64 +567,67 @@ func (devices *DeviceSetDM) setupBaseImage() error { |
597 | 597 |
func (devices *DeviceSetDM) initDevmapper() error { |
598 | 598 |
info, err := devices.getInfo(devices.getPoolName()) |
599 | 599 |
if info == nil { |
600 |
+ utils.Debugf("Error device getInfo: %s", err) |
|
600 | 601 |
return err |
601 | 602 |
} |
603 |
+ utils.Debugf("initDevmapper(). Pool exists: %v", info.Exists) |
|
602 | 604 |
|
603 | 605 |
if info.Exists != 0 { |
604 | 606 |
/* Pool exists, assume everything is up */ |
605 |
- err = devices.loadMetaData() |
|
606 |
- if err != nil { |
|
607 |
+ if err := devices.loadMetaData(); err != nil { |
|
608 |
+ utils.Debugf("Error device loadMetaData: %s\n", err) |
|
607 | 609 |
return err |
608 | 610 |
} |
609 |
- err = devices.setupBaseImage() |
|
610 |
- if err != nil { |
|
611 |
+ if err := devices.setupBaseImage(); err != nil { |
|
612 |
+ utils.Debugf("Error device setupBaseImage: %s\n", err) |
|
611 | 613 |
return err |
612 | 614 |
} |
613 | 615 |
return nil |
614 | 616 |
} |
615 | 617 |
|
616 |
- createdLoopback := false |
|
617 |
- if !devices.hasImage("data") || !devices.hasImage("metadata") { |
|
618 |
- /* If we create the loopback mounts we also need to initialize the base fs */ |
|
619 |
- createdLoopback = true |
|
620 |
- } |
|
618 |
+ /* If we create the loopback mounts we also need to initialize the base fs */ |
|
619 |
+ createdLoopback := !devices.hasImage("data") || !devices.hasImage("metadata") |
|
621 | 620 |
|
622 | 621 |
data, err := devices.ensureImage("data", defaultDataLoopbackSize) |
623 | 622 |
if err != nil { |
623 |
+ utils.Debugf("Error device ensureImage (data): %s\n", err) |
|
624 | 624 |
return err |
625 | 625 |
} |
626 | 626 |
|
627 | 627 |
metadata, err := devices.ensureImage("metadata", defaultMetaDataLoopbackSize) |
628 | 628 |
if err != nil { |
629 |
+ utils.Debugf("Error device ensureImage (metadata): %s\n", err) |
|
629 | 630 |
return err |
630 | 631 |
} |
631 | 632 |
|
632 | 633 |
dataFile, err := AttachLoopDevice(data) |
633 | 634 |
if err != nil { |
635 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
634 | 636 |
return err |
635 | 637 |
} |
636 | 638 |
defer dataFile.Close() |
637 | 639 |
|
638 | 640 |
metadataFile, err := AttachLoopDevice(metadata) |
639 | 641 |
if err != nil { |
642 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
640 | 643 |
return err |
641 | 644 |
} |
642 | 645 |
defer metadataFile.Close() |
643 | 646 |
|
644 |
- err = devices.createPool(dataFile, metadataFile) |
|
645 |
- if err != nil { |
|
647 |
+ if err := devices.createPool(dataFile, metadataFile); err != nil { |
|
648 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
646 | 649 |
return err |
647 | 650 |
} |
648 | 651 |
|
649 | 652 |
if !createdLoopback { |
650 |
- err = devices.loadMetaData() |
|
651 |
- if err != nil { |
|
653 |
+ if err = devices.loadMetaData(); err != nil { |
|
654 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
652 | 655 |
return err |
653 | 656 |
} |
654 | 657 |
} |
655 | 658 |
|
656 |
- err = devices.setupBaseImage() |
|
657 |
- if err != nil { |
|
659 |
+ if err := devices.setupBaseImage(); err != nil { |
|
660 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
658 | 661 |
return err |
659 | 662 |
} |
660 | 663 |
|
... | ... |
@@ -663,6 +636,7 @@ func (devices *DeviceSetDM) initDevmapper() error { |
663 | 663 |
|
664 | 664 |
func (devices *DeviceSetDM) AddDevice(hash, baseHash string) error { |
665 | 665 |
if err := devices.ensureInit(); err != nil { |
666 |
+ utils.Debugf("Error init: %s\n", err) |
|
666 | 667 |
return err |
667 | 668 |
} |
668 | 669 |
|
... | ... |
@@ -672,19 +646,20 @@ func (devices *DeviceSetDM) AddDevice(hash, baseHash string) error { |
672 | 672 |
|
673 | 673 |
baseInfo := devices.Devices[baseHash] |
674 | 674 |
if baseInfo == nil { |
675 |
+ utils.Debugf("Base Hash not found") |
|
675 | 676 |
return fmt.Errorf("Unknown base hash %s", baseHash) |
676 | 677 |
} |
677 | 678 |
|
678 | 679 |
deviceId := devices.allocateDeviceId() |
679 | 680 |
|
680 |
- err := devices.createSnapDevice(deviceId, baseInfo) |
|
681 |
- if err != nil { |
|
681 |
+ if err := devices.createSnapDevice(deviceId, baseInfo); err != nil { |
|
682 |
+ utils.Debugf("Error creating snap device: %s\n", err) |
|
682 | 683 |
return err |
683 | 684 |
} |
684 | 685 |
|
685 |
- _, err = devices.registerDevice(deviceId, hash, baseInfo.Size) |
|
686 |
- if err != nil { |
|
687 |
- _ = devices.deleteDevice(deviceId) |
|
686 |
+ if _, err := devices.registerDevice(deviceId, hash, baseInfo.Size); err != nil { |
|
687 |
+ devices.deleteDevice(deviceId) |
|
688 |
+ utils.Debugf("Error registering device: %s\n", err) |
|
688 | 689 |
return err |
689 | 690 |
} |
690 | 691 |
return nil |
... | ... |
@@ -692,6 +667,7 @@ func (devices *DeviceSetDM) AddDevice(hash, baseHash string) error { |
692 | 692 |
|
693 | 693 |
func (devices *DeviceSetDM) RemoveDevice(hash string) error { |
694 | 694 |
if err := devices.ensureInit(); err != nil { |
695 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
695 | 696 |
return err |
696 | 697 |
} |
697 | 698 |
|
... | ... |
@@ -702,31 +678,31 @@ func (devices *DeviceSetDM) RemoveDevice(hash string) error { |
702 | 702 |
|
703 | 703 |
devinfo, _ := devices.getInfo(info.Name()) |
704 | 704 |
if devinfo != nil && devinfo.Exists != 0 { |
705 |
- err := devices.removeDevice(info.Name()) |
|
706 |
- if err != nil { |
|
705 |
+ if err := devices.removeDevice(info.Name()); err != nil { |
|
706 |
+ utils.Debugf("Error removing device: %s\n", err) |
|
707 | 707 |
return err |
708 | 708 |
} |
709 | 709 |
} |
710 | 710 |
|
711 | 711 |
if info.Initialized { |
712 | 712 |
info.Initialized = false |
713 |
- err := devices.saveMetadata() |
|
714 |
- if err != nil { |
|
713 |
+ if err := devices.saveMetadata(); err != nil { |
|
714 |
+ utils.Debugf("Error saving meta data: %s\n", err) |
|
715 | 715 |
return err |
716 | 716 |
} |
717 | 717 |
} |
718 | 718 |
|
719 |
- err := devices.deleteDevice(info.DeviceId) |
|
720 |
- if err != nil { |
|
719 |
+ if err := devices.deleteDevice(info.DeviceId); err != nil { |
|
720 |
+ utils.Debugf("Error deleting device: %s\n", err) |
|
721 | 721 |
return err |
722 | 722 |
} |
723 | 723 |
|
724 |
- _ = devices.allocateTransactionId() |
|
724 |
+ devices.allocateTransactionId() |
|
725 | 725 |
delete(devices.Devices, info.Hash) |
726 | 726 |
|
727 |
- err = devices.saveMetadata() |
|
728 |
- if err != nil { |
|
727 |
+ if err := devices.saveMetadata(); err != nil { |
|
729 | 728 |
devices.Devices[info.Hash] = info |
729 |
+ utils.Debugf("Error saving meta data: %s\n", err) |
|
730 | 730 |
return err |
731 | 731 |
} |
732 | 732 |
|
... | ... |
@@ -735,6 +711,7 @@ func (devices *DeviceSetDM) RemoveDevice(hash string) error { |
735 | 735 |
|
736 | 736 |
func (devices *DeviceSetDM) DeactivateDevice(hash string) error { |
737 | 737 |
if err := devices.ensureInit(); err != nil { |
738 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
738 | 739 |
return err |
739 | 740 |
} |
740 | 741 |
|
... | ... |
@@ -745,11 +722,12 @@ func (devices *DeviceSetDM) DeactivateDevice(hash string) error { |
745 | 745 |
|
746 | 746 |
devinfo, err := devices.getInfo(info.Name()) |
747 | 747 |
if err != nil { |
748 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
748 | 749 |
return err |
749 | 750 |
} |
750 | 751 |
if devinfo.Exists != 0 { |
751 |
- err := devices.removeDevice(info.Name()) |
|
752 |
- if err != nil { |
|
752 |
+ if err := devices.removeDevice(info.Name()); err != nil { |
|
753 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
753 | 754 |
return err |
754 | 755 |
} |
755 | 756 |
} |
... | ... |
@@ -764,9 +742,8 @@ func (devices *DeviceSetDM) Shutdown() error { |
764 | 764 |
|
765 | 765 |
for path, count := range devices.activeMounts { |
766 | 766 |
for i := count; i > 0; i-- { |
767 |
- err := syscall.Unmount(path, 0) |
|
768 |
- if err != nil { |
|
769 |
- fmt.Printf("Shutdown unmounting %s, error: %s\n", path, err) |
|
767 |
+ if err := syscall.Unmount(path, 0); err != nil { |
|
768 |
+ utils.Debugf("Shutdown unmounting %s, error: %s\n", path, err) |
|
770 | 769 |
} |
771 | 770 |
} |
772 | 771 |
delete(devices.activeMounts, path) |
... | ... |
@@ -774,16 +751,14 @@ func (devices *DeviceSetDM) Shutdown() error { |
774 | 774 |
|
775 | 775 |
for _, d := range devices.Devices { |
776 | 776 |
if err := devices.DeactivateDevice(d.Hash); err != nil { |
777 |
- fmt.Printf("Shutdown deactivate %s , error: %s\n", d.Hash, err) |
|
777 |
+ utils.Debugf("Shutdown deactivate %s , error: %s\n", d.Hash, err) |
|
778 | 778 |
} |
779 | 779 |
} |
780 | 780 |
|
781 |
- |
|
782 | 781 |
pool := devices.getPoolDevName() |
783 |
- devinfo, err := devices.getInfo(pool) |
|
784 |
- if err == nil && devinfo.Exists != 0 { |
|
782 |
+ if devinfo, err := devices.getInfo(pool); err == nil && devinfo.Exists != 0 { |
|
785 | 783 |
if err := devices.removeDevice(pool); err != nil { |
786 |
- fmt.Printf("Shutdown deactivate %s , error: %s\n", pool, err) |
|
784 |
+ utils.Debugf("Shutdown deactivate %s , error: %s\n", pool, err) |
|
787 | 785 |
} |
788 | 786 |
} |
789 | 787 |
|
... | ... |
@@ -792,21 +767,23 @@ func (devices *DeviceSetDM) Shutdown() error { |
792 | 792 |
|
793 | 793 |
func (devices *DeviceSetDM) MountDevice(hash, path string) error { |
794 | 794 |
if err := devices.ensureInit(); err != nil { |
795 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
795 | 796 |
return err |
796 | 797 |
} |
797 | 798 |
|
798 |
- err := devices.activateDeviceIfNeeded(hash) |
|
799 |
- if err != nil { |
|
799 |
+ if err := devices.activateDeviceIfNeeded(hash); err != nil { |
|
800 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
800 | 801 |
return err |
801 | 802 |
} |
802 | 803 |
|
803 | 804 |
info := devices.Devices[hash] |
804 | 805 |
|
805 |
- err = syscall.Mount(info.DevName(), path, "ext4", syscall.MS_MGC_VAL, "discard") |
|
806 |
+ err := syscall.Mount(info.DevName(), path, "ext4", syscall.MS_MGC_VAL, "discard") |
|
806 | 807 |
if err != nil && err == syscall.EINVAL { |
807 | 808 |
err = syscall.Mount(info.DevName(), path, "ext4", syscall.MS_MGC_VAL, "") |
808 | 809 |
} |
809 | 810 |
if err != nil { |
811 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
810 | 812 |
return err |
811 | 813 |
} |
812 | 814 |
|
... | ... |
@@ -817,13 +794,12 @@ func (devices *DeviceSetDM) MountDevice(hash, path string) error { |
817 | 817 |
} |
818 | 818 |
|
819 | 819 |
func (devices *DeviceSetDM) UnmountDevice(hash, path string) error { |
820 |
- err := syscall.Unmount(path, 0) |
|
821 |
- if err != nil { |
|
820 |
+ if err := syscall.Unmount(path, 0); err != nil { |
|
821 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
822 | 822 |
return err |
823 | 823 |
} |
824 | 824 |
|
825 |
- count := devices.activeMounts[path] |
|
826 |
- if count > 1 { |
|
825 |
+ if count := devices.activeMounts[path]; count > 1 { |
|
827 | 826 |
devices.activeMounts[path] = count - 1 |
828 | 827 |
} else { |
829 | 828 |
delete(devices.activeMounts, path) |
... | ... |
@@ -832,14 +808,11 @@ func (devices *DeviceSetDM) UnmountDevice(hash, path string) error { |
832 | 832 |
return nil |
833 | 833 |
} |
834 | 834 |
|
835 |
- |
|
836 | 835 |
func (devices *DeviceSetDM) HasDevice(hash string) bool { |
837 | 836 |
if err := devices.ensureInit(); err != nil { |
838 | 837 |
return false |
839 | 838 |
} |
840 |
- |
|
841 |
- info := devices.Devices[hash] |
|
842 |
- return info != nil |
|
839 |
+ return devices.Devices[hash] != nil |
|
843 | 840 |
} |
844 | 841 |
|
845 | 842 |
func (devices *DeviceSetDM) HasInitializedDevice(hash string) bool { |
... | ... |
@@ -860,16 +833,13 @@ func (devices *DeviceSetDM) HasActivatedDevice(hash string) bool { |
860 | 860 |
if info == nil { |
861 | 861 |
return false |
862 | 862 |
} |
863 |
- name := info.Name() |
|
864 |
- devinfo, _ := devices.getInfo(name) |
|
865 |
- if devinfo != nil && devinfo.Exists != 0 { |
|
866 |
- return true |
|
867 |
- } |
|
868 |
- return false |
|
863 |
+ devinfo, _ := devices.getInfo(info.Name()) |
|
864 |
+ return devinfo != nil && devinfo.Exists != 0 |
|
869 | 865 |
} |
870 | 866 |
|
871 | 867 |
func (devices *DeviceSetDM) SetInitialized(hash string) error { |
872 | 868 |
if err := devices.ensureInit(); err != nil { |
869 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
873 | 870 |
return err |
874 | 871 |
} |
875 | 872 |
|
... | ... |
@@ -879,9 +849,9 @@ func (devices *DeviceSetDM) SetInitialized(hash string) error { |
879 | 879 |
} |
880 | 880 |
|
881 | 881 |
info.Initialized = true |
882 |
- err := devices.saveMetadata() |
|
883 |
- if err != nil { |
|
882 |
+ if err := devices.saveMetadata(); err != nil { |
|
884 | 883 |
info.Initialized = false |
884 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
885 | 885 |
return err |
886 | 886 |
} |
887 | 887 |
|
... | ... |
@@ -889,10 +859,11 @@ func (devices *DeviceSetDM) SetInitialized(hash string) error { |
889 | 889 |
} |
890 | 890 |
|
891 | 891 |
func (devices *DeviceSetDM) ensureInit() error { |
892 |
+ utils.Debugf("ensureInit(). Initialized: %v", devices.initialized) |
|
892 | 893 |
if !devices.initialized { |
893 | 894 |
devices.initialized = true |
894 |
- err := devices.initDevmapper() |
|
895 |
- if err != nil { |
|
895 |
+ if err := devices.initDevmapper(); err != nil { |
|
896 |
+ utils.Debugf("\n--->Err: %s\n", err) |
|
896 | 897 |
return err |
897 | 898 |
} |
898 | 899 |
} |
... | ... |
@@ -907,13 +878,11 @@ func NewDeviceSetDM(root string) *DeviceSetDM { |
907 | 907 |
base = "docker-" + base |
908 | 908 |
} |
909 | 909 |
|
910 |
- devices := &DeviceSetDM{ |
|
911 |
- initialized: false, |
|
912 |
- root: root, |
|
910 |
+ return &DeviceSetDM{ |
|
911 |
+ initialized: false, |
|
912 |
+ root: root, |
|
913 | 913 |
devicePrefix: base, |
914 |
+ MetaData: MetaData{Devices: make(map[string]*DevInfo)}, |
|
915 |
+ activeMounts: make(map[string]int), |
|
914 | 916 |
} |
915 |
- devices.Devices = make(map[string]*DevInfo) |
|
916 |
- devices.activeMounts = make(map[string]int) |
|
917 |
- |
|
918 |
- return devices |
|
919 | 917 |
} |
... | ... |
@@ -108,30 +108,32 @@ get_block_size(int fd) |
108 | 108 |
|
109 | 109 |
*/ |
110 | 110 |
import "C" |
111 |
-import "unsafe" |
|
112 |
-import "fmt" |
|
113 |
-import "runtime" |
|
114 |
-import "os" |
|
111 |
+ |
|
112 |
+import ( |
|
113 |
+ "fmt" |
|
114 |
+ "github.com/dotcloud/docker/utils" |
|
115 |
+ "os" |
|
116 |
+ "runtime" |
|
117 |
+ "unsafe" |
|
118 |
+) |
|
115 | 119 |
|
116 | 120 |
func SetDevDir(dir string) error { |
117 | 121 |
c_dir := C.CString(dir) |
118 | 122 |
defer C.free(unsafe.Pointer(c_dir)) |
119 |
- res := C.dm_set_dev_dir(c_dir) |
|
120 |
- if res != 1 { |
|
123 |
+ |
|
124 |
+ if res := C.dm_set_dev_dir(c_dir); res != 1 { |
|
125 |
+ utils.Debugf("Error dm_set_dev_dir") |
|
121 | 126 |
return fmt.Errorf("dm_set_dev_dir failed") |
122 | 127 |
} |
123 | 128 |
return nil |
124 | 129 |
} |
125 | 130 |
|
126 | 131 |
func GetLibraryVersion() (string, error) { |
127 |
- buffer := (*C.char)(C.malloc(128)) |
|
128 |
- defer C.free(unsafe.Pointer(buffer)) |
|
129 |
- res := C.dm_get_library_version(buffer, 128) |
|
130 |
- if res != 1 { |
|
132 |
+ buffer := make([]byte, 128) |
|
133 |
+ if res := C.dm_get_library_version((*C.char)(unsafe.Pointer(&buffer)), 128); res != 1 { |
|
131 | 134 |
return "", fmt.Errorf("dm_get_library_version failed") |
132 |
- } else { |
|
133 |
- return C.GoString(buffer), nil |
|
134 | 135 |
} |
136 |
+ return string(buffer), nil |
|
135 | 137 |
} |
136 | 138 |
|
137 | 139 |
type TaskType int |
... | ... |
@@ -183,18 +185,17 @@ func (t *Task) destroy() { |
183 | 183 |
} |
184 | 184 |
|
185 | 185 |
func TaskCreate(tasktype TaskType) *Task { |
186 |
- c_task := C.dm_task_create(C.int(int(tasktype))) |
|
186 |
+ c_task := C.dm_task_create(C.int(tasktype)) |
|
187 | 187 |
if c_task == nil { |
188 | 188 |
return nil |
189 | 189 |
} |
190 |
- task := &Task{c_task} |
|
190 |
+ task := &Task{unmanaged: c_task} |
|
191 | 191 |
runtime.SetFinalizer(task, (*Task).destroy) |
192 | 192 |
return task |
193 | 193 |
} |
194 | 194 |
|
195 | 195 |
func (t *Task) Run() error { |
196 |
- res := C.dm_task_run(t.unmanaged) |
|
197 |
- if res != 1 { |
|
196 |
+ if res := C.dm_task_run(t.unmanaged); res != 1 { |
|
198 | 197 |
return fmt.Errorf("dm_task_run failed") |
199 | 198 |
} |
200 | 199 |
return nil |
... | ... |
@@ -204,8 +205,10 @@ func (t *Task) SetName(name string) error { |
204 | 204 |
c_name := C.CString(name) |
205 | 205 |
defer C.free(unsafe.Pointer(c_name)) |
206 | 206 |
|
207 |
- res := C.dm_task_set_name(t.unmanaged, c_name) |
|
208 |
- if res != 1 { |
|
207 |
+ if res := C.dm_task_set_name(t.unmanaged, c_name); res != 1 { |
|
208 |
+ if os.Getenv("DEBUG") != "" { |
|
209 |
+ C.perror(C.CString(fmt.Sprintf("[debug] Error dm_task_set_name(%s, %#v)", name, t.unmanaged))) |
|
210 |
+ } |
|
209 | 211 |
return fmt.Errorf("dm_task_set_name failed") |
210 | 212 |
} |
211 | 213 |
return nil |
... | ... |
@@ -215,26 +218,22 @@ func (t *Task) SetMessage(message string) error { |
215 | 215 |
c_message := C.CString(message) |
216 | 216 |
defer C.free(unsafe.Pointer(c_message)) |
217 | 217 |
|
218 |
- res := C.dm_task_set_message(t.unmanaged, c_message) |
|
219 |
- if res != 1 { |
|
218 |
+ if res := C.dm_task_set_message(t.unmanaged, c_message); res != 1 { |
|
220 | 219 |
return fmt.Errorf("dm_task_set_message failed") |
221 | 220 |
} |
222 | 221 |
return nil |
223 | 222 |
} |
224 | 223 |
|
225 | 224 |
func (t *Task) SetSector(sector uint64) error { |
226 |
- res := C.dm_task_set_sector(t.unmanaged, C.uint64_t(sector)) |
|
227 |
- if res != 1 { |
|
225 |
+ if res := C.dm_task_set_sector(t.unmanaged, C.uint64_t(sector)); res != 1 { |
|
228 | 226 |
return fmt.Errorf("dm_task_set_add_node failed") |
229 | 227 |
} |
230 | 228 |
return nil |
231 | 229 |
} |
232 | 230 |
|
233 | 231 |
func (t *Task) SetCookie(cookie *uint32, flags uint16) error { |
234 |
- var c_cookie C.uint32_t |
|
235 |
- c_cookie = C.uint32_t(*cookie) |
|
236 |
- res := C.dm_task_set_cookie(t.unmanaged, &c_cookie, C.uint16_t(flags)) |
|
237 |
- if res != 1 { |
|
232 |
+ c_cookie := C.uint32_t(*cookie) |
|
233 |
+ if res := C.dm_task_set_cookie(t.unmanaged, &c_cookie, C.uint16_t(flags)); res != 1 { |
|
238 | 234 |
return fmt.Errorf("dm_task_set_add_node failed") |
239 | 235 |
} |
240 | 236 |
*cookie = uint32(c_cookie) |
... | ... |
@@ -242,8 +241,7 @@ func (t *Task) SetCookie(cookie *uint32, flags uint16) error { |
242 | 242 |
} |
243 | 243 |
|
244 | 244 |
func (t *Task) SetRo() error { |
245 |
- res := C.dm_task_set_ro(t.unmanaged) |
|
246 |
- if res != 1 { |
|
245 |
+ if res := C.dm_task_set_ro(t.unmanaged); res != 1 { |
|
247 | 246 |
return fmt.Errorf("dm_task_set_ro failed") |
248 | 247 |
} |
249 | 248 |
return nil |
... | ... |
@@ -256,8 +254,7 @@ func (t *Task) AddTarget(start uint64, size uint64, ttype string, params string) |
256 | 256 |
c_params := C.CString(params) |
257 | 257 |
defer C.free(unsafe.Pointer(c_params)) |
258 | 258 |
|
259 |
- res := C.dm_task_add_target(t.unmanaged, C.uint64_t(start), C.uint64_t(size), c_ttype, c_params) |
|
260 |
- if res != 1 { |
|
259 |
+ if res := C.dm_task_add_target(t.unmanaged, C.uint64_t(start), C.uint64_t(size), c_ttype, c_params); res != 1 { |
|
261 | 260 |
return fmt.Errorf("dm_task_add_target failed") |
262 | 261 |
} |
263 | 262 |
return nil |
... | ... |
@@ -267,49 +264,39 @@ func (t *Task) GetDriverVersion() (string, error) { |
267 | 267 |
buffer := (*C.char)(C.malloc(128)) |
268 | 268 |
defer C.free(unsafe.Pointer(buffer)) |
269 | 269 |
|
270 |
- res := C.dm_task_get_driver_version(t.unmanaged, buffer, 128) |
|
271 |
- if res != 1 { |
|
270 |
+ if res := C.dm_task_get_driver_version(t.unmanaged, buffer, 128); res != 1 { |
|
272 | 271 |
return "", fmt.Errorf("dm_task_get_driver_version") |
273 |
- } else { |
|
274 |
- return C.GoString(buffer), nil |
|
275 | 272 |
} |
273 |
+ return C.GoString(buffer), nil |
|
276 | 274 |
} |
277 | 275 |
|
278 | 276 |
func (t *Task) GetInfo() (*Info, error) { |
279 | 277 |
c_info := C.struct_dm_info{} |
280 |
- res := C.dm_task_get_info(t.unmanaged, &c_info) |
|
281 |
- if res != 1 { |
|
278 |
+ if res := C.dm_task_get_info(t.unmanaged, &c_info); res != 1 { |
|
282 | 279 |
return nil, fmt.Errorf("dm_task_get_driver_version") |
283 |
- } else { |
|
284 |
- info := &Info{} |
|
285 |
- info.Exists = int(c_info.exists) |
|
286 |
- info.Suspended = int(c_info.suspended) |
|
287 |
- info.LiveTable = int(c_info.live_table) |
|
288 |
- info.InactiveTable = int(c_info.inactive_table) |
|
289 |
- info.OpenCount = int32(c_info.open_count) |
|
290 |
- info.EventNr = uint32(c_info.event_nr) |
|
291 |
- info.Major = uint32(c_info.major) |
|
292 |
- info.Minor = uint32(c_info.minor) |
|
293 |
- info.ReadOnly = int(c_info.read_only) |
|
294 |
- info.TargetCount = int32(c_info.target_count) |
|
295 |
- |
|
296 |
- return info, nil |
|
297 | 280 |
} |
281 |
+ return &Info{ |
|
282 |
+ Exists: int(c_info.exists), |
|
283 |
+ Suspended: int(c_info.suspended), |
|
284 |
+ LiveTable: int(c_info.live_table), |
|
285 |
+ InactiveTable: int(c_info.inactive_table), |
|
286 |
+ OpenCount: int32(c_info.open_count), |
|
287 |
+ EventNr: uint32(c_info.event_nr), |
|
288 |
+ Major: uint32(c_info.major), |
|
289 |
+ Minor: uint32(c_info.minor), |
|
290 |
+ ReadOnly: int(c_info.read_only), |
|
291 |
+ TargetCount: int32(c_info.target_count), |
|
292 |
+ }, nil |
|
298 | 293 |
} |
299 | 294 |
|
300 | 295 |
func (t *Task) GetNextTarget(next uintptr) (uintptr, uint64, uint64, string, string) { |
301 |
- nextp := unsafe.Pointer(next) |
|
302 |
- var c_start C.uint64_t |
|
303 |
- var c_length C.uint64_t |
|
304 |
- var c_target_type *C.char |
|
305 |
- var c_params *C.char |
|
306 |
- |
|
307 |
- nextp = C.dm_get_next_target(t.unmanaged, nextp, &c_start, &c_length, &c_target_type, &c_params) |
|
308 |
- |
|
309 |
- target_type := C.GoString(c_target_type) |
|
310 |
- params := C.GoString(c_params) |
|
296 |
+ var ( |
|
297 |
+ c_start, c_length C.uint64_t |
|
298 |
+ c_target_type, c_params *C.char |
|
299 |
+ ) |
|
311 | 300 |
|
312 |
- return uintptr(nextp), uint64(c_start), uint64(c_length), target_type, params |
|
301 |
+ nextp := C.dm_get_next_target(t.unmanaged, unsafe.Pointer(next), &c_start, &c_length, &c_target_type, &c_params) |
|
302 |
+ return uintptr(nextp), uint64(c_start), uint64(c_length), C.GoString(c_target_type), C.GoString(c_params) |
|
313 | 303 |
} |
314 | 304 |
|
315 | 305 |
func AttachLoopDevice(filename string) (*os.File, error) { |
... | ... |
@@ -321,19 +308,16 @@ func AttachLoopDevice(filename string) (*os.File, error) { |
321 | 321 |
if res == nil { |
322 | 322 |
return nil, fmt.Errorf("error loopback mounting") |
323 | 323 |
} |
324 |
- file := os.NewFile(uintptr(fd), C.GoString(res)) |
|
325 |
- C.free(unsafe.Pointer(res)) |
|
326 |
- return file, nil |
|
324 |
+ defer C.free(unsafe.Pointer(res)) |
|
325 |
+ return os.NewFile(uintptr(fd), C.GoString(res)), nil |
|
327 | 326 |
} |
328 | 327 |
|
329 | 328 |
func GetBlockDeviceSize(file *os.File) (uint64, error) { |
330 |
- fd := file.Fd() |
|
331 |
- size := C.get_block_size(C.int(fd)) |
|
332 |
- if size == -1 { |
|
329 |
+ if size := C.get_block_size(C.int(file.Fd())); size == -1 { |
|
333 | 330 |
return 0, fmt.Errorf("Can't get block size") |
331 |
+ } else { |
|
332 |
+ return uint64(size), nil |
|
334 | 333 |
} |
335 |
- return uint64(size), nil |
|
336 |
- |
|
337 | 334 |
} |
338 | 335 |
|
339 | 336 |
func UdevWait(cookie uint32) error { |
... | ... |
@@ -354,12 +338,10 @@ func RemoveDevice(name string) error { |
354 | 354 |
if task == nil { |
355 | 355 |
return fmt.Errorf("Can't create task of type DeviceRemove") |
356 | 356 |
} |
357 |
- err := task.SetName(name) |
|
358 |
- if err != nil { |
|
357 |
+ if err := task.SetName(name); err != nil { |
|
359 | 358 |
return fmt.Errorf("Can't set task name %s", name) |
360 | 359 |
} |
361 |
- err = task.Run() |
|
362 |
- if err != nil { |
|
360 |
+ if err := task.Run(); err != nil { |
|
363 | 361 |
return fmt.Errorf("Error running removeDevice") |
364 | 362 |
} |
365 | 363 |
return nil |
... | ... |
@@ -123,7 +123,7 @@ func daemon(pidfile string, flGraphPath string, protoAddrs []string, autoRestart |
123 | 123 |
defer removePidFile(pidfile) |
124 | 124 |
|
125 | 125 |
c := make(chan os.Signal, 1) |
126 |
- signal.Notify(c, os.Interrupt, os.Kill, os.Signal(syscall.SIGTERM)) |
|
126 |
+ signal.Notify(c, os.Interrupt, os.Kill, syscall.SIGTERM) |
|
127 | 127 |
go func() { |
128 | 128 |
sig := <-c |
129 | 129 |
log.Printf("Received signal '%v', exiting\n", sig) |
... | ... |
@@ -378,28 +378,28 @@ func (image *Image) ensureImageDevice(devices DeviceSet) error { |
378 | 378 |
} |
379 | 379 |
|
380 | 380 |
utils.Debugf("Creating device-mapper device for image id %s", image.ID) |
381 |
- err = devices.AddDevice(image.ID, image.Parent) |
|
382 |
- if err != nil { |
|
381 |
+ if err := devices.AddDevice(image.ID, image.Parent); err != nil { |
|
382 |
+ utils.Debugf("Error add device: %s", err) |
|
383 | 383 |
return err |
384 | 384 |
} |
385 | 385 |
|
386 |
- err = devices.MountDevice(image.ID, mountDir) |
|
387 |
- if err != nil { |
|
388 |
- _ = devices.RemoveDevice(image.ID) |
|
386 |
+ if err := devices.MountDevice(image.ID, mountDir); err != nil { |
|
387 |
+ utils.Debugf("Error mounting device: %s", err) |
|
388 |
+ devices.RemoveDevice(image.ID) |
|
389 | 389 |
return err |
390 | 390 |
} |
391 | 391 |
|
392 |
- err = ioutil.WriteFile(path.Join(mountDir, ".docker-id"), []byte(image.ID), 0600) |
|
393 |
- if err != nil { |
|
394 |
- _ = devices.UnmountDevice(image.ID, mountDir) |
|
395 |
- _ = devices.RemoveDevice(image.ID) |
|
392 |
+ if err := ioutil.WriteFile(path.Join(mountDir, ".docker-id"), []byte(image.ID), 0600); err != nil { |
|
393 |
+ utils.Debugf("Error writing file: %s", err) |
|
394 |
+ devices.UnmountDevice(image.ID, mountDir) |
|
395 |
+ devices.RemoveDevice(image.ID) |
|
396 | 396 |
return err |
397 | 397 |
} |
398 | 398 |
|
399 |
- err = image.applyLayer(layerPath(root), mountDir) |
|
400 |
- if err != nil { |
|
401 |
- _ = devices.UnmountDevice(image.ID, mountDir) |
|
402 |
- _ = devices.RemoveDevice(image.ID) |
|
399 |
+ if err = image.applyLayer(layerPath(root), mountDir); err != nil { |
|
400 |
+ utils.Debugf("Error applying layer: %s", err) |
|
401 |
+ devices.UnmountDevice(image.ID, mountDir) |
|
402 |
+ devices.RemoveDevice(image.ID) |
|
403 | 403 |
return err |
404 | 404 |
} |
405 | 405 |
|
... | ... |
@@ -415,16 +415,15 @@ func (image *Image) ensureImageDevice(devices DeviceSet) error { |
415 | 415 |
_ = devices.RemoveDevice(image.ID) |
416 | 416 |
return err |
417 | 417 |
} |
418 |
- err = image.applyLayer(dockerinitLayer, mountDir) |
|
419 |
- if err != nil { |
|
420 |
- _ = devices.UnmountDevice(image.ID, mountDir) |
|
421 |
- _ = devices.RemoveDevice(image.ID) |
|
418 |
+ |
|
419 |
+ if err := image.applyLayer(dockerinitLayer, mountDir); err != nil { |
|
420 |
+ devices.UnmountDevice(image.ID, mountDir) |
|
421 |
+ devices.RemoveDevice(image.ID) |
|
422 | 422 |
return err |
423 | 423 |
} |
424 | 424 |
|
425 |
- err = devices.UnmountDevice(image.ID, mountDir) |
|
426 |
- if err != nil { |
|
427 |
- _ = devices.RemoveDevice(image.ID) |
|
425 |
+ if err := devices.UnmountDevice(image.ID, mountDir); err != nil { |
|
426 |
+ devices.RemoveDevice(image.ID) |
|
428 | 427 |
return err |
429 | 428 |
} |
430 | 429 |
|
... | ... |
@@ -455,8 +454,8 @@ func (image *Image) Mount(runtime *Runtime, root, rw string, id string) error { |
455 | 455 |
if err != nil { |
456 | 456 |
return err |
457 | 457 |
} |
458 |
- err = image.ensureImageDevice(devices) |
|
459 |
- if err != nil { |
|
458 |
+ |
|
459 |
+ if err := image.ensureImageDevice(devices); err != nil { |
|
460 | 460 |
return err |
461 | 461 |
} |
462 | 462 |
|
... | ... |
@@ -471,8 +470,7 @@ func (image *Image) Mount(runtime *Runtime, root, rw string, id string) error { |
471 | 471 |
} |
472 | 472 |
|
473 | 473 |
utils.Debugf("Mounting container %s at %s for container", id, root) |
474 |
- err = devices.MountDevice(id, root) |
|
475 |
- if err != nil { |
|
474 |
+ if err := devices.MountDevice(id, root); err != nil { |
|
476 | 475 |
return err |
477 | 476 |
} |
478 | 477 |
|
... | ... |
@@ -1307,7 +1307,7 @@ func NewServer(flGraphPath string, deviceSet DeviceSet, autoRestart, enableCors |
1307 | 1307 |
if err != nil { |
1308 | 1308 |
return nil, err |
1309 | 1309 |
} |
1310 |
- srv := &Server{ |
|
1310 |
+ runtime.srv = &Server{ |
|
1311 | 1311 |
runtime: runtime, |
1312 | 1312 |
enableCors: enableCors, |
1313 | 1313 |
pullingPool: make(map[string]struct{}), |
... | ... |
@@ -1316,18 +1316,14 @@ func NewServer(flGraphPath string, deviceSet DeviceSet, autoRestart, enableCors |
1316 | 1316 |
listeners: make(map[string]chan utils.JSONMessage), |
1317 | 1317 |
reqFactory: nil, |
1318 | 1318 |
} |
1319 |
- runtime.srv = srv |
|
1320 |
- return srv, nil |
|
1319 |
+ return runtime.srv, nil |
|
1321 | 1320 |
} |
1322 | 1321 |
|
1323 | 1322 |
func (srv *Server) HTTPRequestFactory(metaHeaders map[string][]string) *utils.HTTPRequestFactory { |
1324 | 1323 |
if srv.reqFactory == nil { |
1325 |
- ud := utils.NewHTTPUserAgentDecorator(srv.versionInfos()...) |
|
1326 |
- md := &utils.HTTPMetaHeadersDecorator{ |
|
1327 |
- Headers: metaHeaders, |
|
1328 |
- } |
|
1329 |
- factory := utils.NewHTTPRequestFactory(ud, md) |
|
1330 |
- srv.reqFactory = factory |
|
1324 |
+ srv.reqFactory = utils.NewHTTPRequestFactory( |
|
1325 |
+ utils.NewHTTPUserAgentDecorator(srv.versionInfos()...), |
|
1326 |
+ &utils.HTTPMetaHeadersDecorator{Headers: metaHeaders}) |
|
1331 | 1327 |
} |
1332 | 1328 |
return srv.reqFactory |
1333 | 1329 |
} |
... | ... |
@@ -59,7 +59,15 @@ func Debugf(format string, a ...interface{}) { |
59 | 59 |
file = file[strings.LastIndex(file, "/")+1:] |
60 | 60 |
} |
61 | 61 |
|
62 |
- fmt.Fprintf(os.Stderr, fmt.Sprintf("[debug] %s:%d %s\n", file, line, format), a...) |
|
62 |
+ _, file2, line2, ok := runtime.Caller(2) |
|
63 |
+ if !ok { |
|
64 |
+ file2 = "<unknown>" |
|
65 |
+ line2 = -1 |
|
66 |
+ } else { |
|
67 |
+ file2 = file2[strings.LastIndex(file2, "/")+1:] |
|
68 |
+ } |
|
69 |
+ |
|
70 |
+ fmt.Fprintf(os.Stderr, fmt.Sprintf("[debug] %s:%d %s:%d %s\n", file, line, file2, line2, format), a...) |
|
63 | 71 |
} |
64 | 72 |
} |
65 | 73 |
|