github.com/kim0/docker@v0.6.2-0.20161130212042-4addda3f07e7/daemon/graphdriver/proxy.go (about) 1 package graphdriver 2 3 import ( 4 "errors" 5 "fmt" 6 "io" 7 8 "github.com/docker/docker/pkg/archive" 9 ) 10 11 type graphDriverProxy struct { 12 name string 13 client pluginClient 14 } 15 16 type graphDriverRequest struct { 17 ID string `json:",omitempty"` 18 Parent string `json:",omitempty"` 19 MountLabel string `json:",omitempty"` 20 } 21 22 type graphDriverResponse struct { 23 Err string `json:",omitempty"` 24 Dir string `json:",omitempty"` 25 Exists bool `json:",omitempty"` 26 Status [][2]string `json:",omitempty"` 27 Changes []archive.Change `json:",omitempty"` 28 Size int64 `json:",omitempty"` 29 Metadata map[string]string `json:",omitempty"` 30 } 31 32 type graphDriverInitRequest struct { 33 Home string 34 Opts []string 35 } 36 37 func (d *graphDriverProxy) Init(home string, opts []string) error { 38 args := &graphDriverInitRequest{ 39 Home: home, 40 Opts: opts, 41 } 42 var ret graphDriverResponse 43 if err := d.client.Call("GraphDriver.Init", args, &ret); err != nil { 44 return err 45 } 46 if ret.Err != "" { 47 return errors.New(ret.Err) 48 } 49 return nil 50 } 51 52 func (d *graphDriverProxy) String() string { 53 return d.name 54 } 55 56 func (d *graphDriverProxy) CreateReadWrite(id, parent, mountLabel string, storageOpt map[string]string) error { 57 args := &graphDriverRequest{ 58 ID: id, 59 Parent: parent, 60 MountLabel: mountLabel, 61 } 62 var ret graphDriverResponse 63 if err := d.client.Call("GraphDriver.CreateReadWrite", args, &ret); err != nil { 64 return err 65 } 66 if ret.Err != "" { 67 return errors.New(ret.Err) 68 } 69 return nil 70 } 71 72 func (d *graphDriverProxy) Create(id, parent, mountLabel string, storageOpt map[string]string) error { 73 args := &graphDriverRequest{ 74 ID: id, 75 Parent: parent, 76 MountLabel: mountLabel, 77 } 78 var ret graphDriverResponse 79 if err := d.client.Call("GraphDriver.Create", args, &ret); err != nil { 80 return err 81 } 82 if ret.Err != "" { 83 return errors.New(ret.Err) 84 } 85 return nil 86 } 87 88 func (d *graphDriverProxy) Remove(id string) error { 89 args := &graphDriverRequest{ID: id} 90 var ret graphDriverResponse 91 if err := d.client.Call("GraphDriver.Remove", args, &ret); err != nil { 92 return err 93 } 94 if ret.Err != "" { 95 return errors.New(ret.Err) 96 } 97 return nil 98 } 99 100 func (d *graphDriverProxy) Get(id, mountLabel string) (string, error) { 101 args := &graphDriverRequest{ 102 ID: id, 103 MountLabel: mountLabel, 104 } 105 var ret graphDriverResponse 106 if err := d.client.Call("GraphDriver.Get", args, &ret); err != nil { 107 return "", err 108 } 109 var err error 110 if ret.Err != "" { 111 err = errors.New(ret.Err) 112 } 113 return ret.Dir, err 114 } 115 116 func (d *graphDriverProxy) Put(id string) error { 117 args := &graphDriverRequest{ID: id} 118 var ret graphDriverResponse 119 if err := d.client.Call("GraphDriver.Put", args, &ret); err != nil { 120 return err 121 } 122 if ret.Err != "" { 123 return errors.New(ret.Err) 124 } 125 return nil 126 } 127 128 func (d *graphDriverProxy) Exists(id string) bool { 129 args := &graphDriverRequest{ID: id} 130 var ret graphDriverResponse 131 if err := d.client.Call("GraphDriver.Exists", args, &ret); err != nil { 132 return false 133 } 134 return ret.Exists 135 } 136 137 func (d *graphDriverProxy) Status() [][2]string { 138 args := &graphDriverRequest{} 139 var ret graphDriverResponse 140 if err := d.client.Call("GraphDriver.Status", args, &ret); err != nil { 141 return nil 142 } 143 return ret.Status 144 } 145 146 func (d *graphDriverProxy) GetMetadata(id string) (map[string]string, error) { 147 args := &graphDriverRequest{ 148 ID: id, 149 } 150 var ret graphDriverResponse 151 if err := d.client.Call("GraphDriver.GetMetadata", args, &ret); err != nil { 152 return nil, err 153 } 154 if ret.Err != "" { 155 return nil, errors.New(ret.Err) 156 } 157 return ret.Metadata, nil 158 } 159 160 func (d *graphDriverProxy) Cleanup() error { 161 args := &graphDriverRequest{} 162 var ret graphDriverResponse 163 if err := d.client.Call("GraphDriver.Cleanup", args, &ret); err != nil { 164 return nil 165 } 166 if ret.Err != "" { 167 return errors.New(ret.Err) 168 } 169 return nil 170 } 171 172 func (d *graphDriverProxy) Diff(id, parent string) (io.ReadCloser, error) { 173 args := &graphDriverRequest{ 174 ID: id, 175 Parent: parent, 176 } 177 body, err := d.client.Stream("GraphDriver.Diff", args) 178 if err != nil { 179 return nil, err 180 } 181 return body, nil 182 } 183 184 func (d *graphDriverProxy) Changes(id, parent string) ([]archive.Change, error) { 185 args := &graphDriverRequest{ 186 ID: id, 187 Parent: parent, 188 } 189 var ret graphDriverResponse 190 if err := d.client.Call("GraphDriver.Changes", args, &ret); err != nil { 191 return nil, err 192 } 193 if ret.Err != "" { 194 return nil, errors.New(ret.Err) 195 } 196 197 return ret.Changes, nil 198 } 199 200 func (d *graphDriverProxy) ApplyDiff(id, parent string, diff io.Reader) (int64, error) { 201 var ret graphDriverResponse 202 if err := d.client.SendFile(fmt.Sprintf("GraphDriver.ApplyDiff?id=%s&parent=%s", id, parent), diff, &ret); err != nil { 203 return -1, err 204 } 205 if ret.Err != "" { 206 return -1, errors.New(ret.Err) 207 } 208 return ret.Size, nil 209 } 210 211 func (d *graphDriverProxy) DiffSize(id, parent string) (int64, error) { 212 args := &graphDriverRequest{ 213 ID: id, 214 Parent: parent, 215 } 216 var ret graphDriverResponse 217 if err := d.client.Call("GraphDriver.DiffSize", args, &ret); err != nil { 218 return -1, err 219 } 220 if ret.Err != "" { 221 return -1, errors.New(ret.Err) 222 } 223 return ret.Size, nil 224 }