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  }