| ... | ... |
@@ -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 |
|