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  }