Browse code

Random improvments

Guillaume J. Charmes authored on 2013/10/03 12:18:15
Showing 10 changed files
... ...
@@ -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", &currentTransaction)
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)
... ...
@@ -11,7 +11,7 @@ bundle_test() {
11 11
 		for test_dir in $(find_test_dirs); do (
12 12
 			set -x
13 13
 			cd $test_dir
14
-			go test -v -ldflags "$LDFLAGS" $BUILDFLAGS
14
+			DEBUG=1 go test -v -ldflags "$LDFLAGS" $BUILDFLAGS -run TestRunHostname
15 15
 		)  done
16 16
 	} 2>&1 | tee $DEST/test.log
17 17
 }
... ...
@@ -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