github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/lib/objectserver/client/api.go (about) 1 package client 2 3 import ( 4 "io" 5 6 "github.com/Cloud-Foundations/Dominator/lib/hash" 7 "github.com/Cloud-Foundations/Dominator/lib/objectserver" 8 "github.com/Cloud-Foundations/Dominator/lib/srpc" 9 ) 10 11 type ObjectClient struct { 12 address string 13 client *srpc.Client 14 exclusiveGet bool 15 } 16 17 func NewObjectClient(address string) *ObjectClient { 18 return &ObjectClient{address: address} 19 } 20 21 func AttachObjectClient(client *srpc.Client) *ObjectClient { 22 return &ObjectClient{client: client} 23 } 24 25 func (objClient *ObjectClient) AddObject(reader io.Reader, length uint64, 26 expectedHash *hash.Hash) (hash.Hash, bool, error) { 27 return objClient.addObject(reader, length, expectedHash) 28 } 29 30 func (objClient *ObjectClient) CheckObjects(hashes []hash.Hash) ( 31 []uint64, error) { 32 return objClient.checkObjects(hashes) 33 } 34 35 func (objClient *ObjectClient) Close() error { 36 return objClient.close() 37 } 38 39 func (objClient *ObjectClient) GetObject(hashVal hash.Hash) ( 40 uint64, io.ReadCloser, error) { 41 return objectserver.GetObject(objClient, hashVal) 42 } 43 44 func (objClient *ObjectClient) GetObjects(hashes []hash.Hash) ( 45 objectserver.ObjectsReader, error) { 46 return objClient.getObjects(hashes) 47 } 48 49 func (objClient *ObjectClient) SetExclusiveGetObjects(exclusive bool) { 50 objClient.exclusiveGet = exclusive 51 } 52 53 type ObjectsReader struct { 54 sizes []uint64 55 client *ObjectClient 56 reader *srpc.Conn 57 nextIndex int64 58 } 59 60 func (or *ObjectsReader) Close() error { 61 return or.close() 62 } 63 64 func (or *ObjectsReader) NextObject() (uint64, io.ReadCloser, error) { 65 return or.nextObject() 66 } 67 68 func (or *ObjectsReader) ObjectSizes() []uint64 { 69 return or.sizes 70 } 71 72 type ObjectAdderQueue struct { 73 conn *srpc.Conn 74 getResponseChan chan<- struct{} 75 errorChan <-chan error 76 sendSemaphore chan struct{} 77 } 78 79 func NewObjectAdderQueue(client *srpc.Client) (*ObjectAdderQueue, error) { 80 return newObjectAdderQueue(client) 81 } 82 83 func (objQ *ObjectAdderQueue) Add(reader io.Reader, length uint64) ( 84 hash.Hash, error) { 85 return objQ.add(reader, length) 86 } 87 88 func (objQ *ObjectAdderQueue) AddData(data []byte, hashVal hash.Hash) error { 89 return objQ.addData(data, hashVal) 90 } 91 92 func (objQ *ObjectAdderQueue) Close() error { 93 return objQ.close() 94 }