github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/lib/objectserver/memory/api.go (about)

     1  package memory
     2  
     3  import (
     4  	"io"
     5  	"sync"
     6  
     7  	"github.com/Cloud-Foundations/Dominator/lib/hash"
     8  	"github.com/Cloud-Foundations/Dominator/lib/objectserver"
     9  )
    10  
    11  type ObjectServer struct {
    12  	rwLock    sync.RWMutex // Protect map mutations.
    13  	objectMap map[hash.Hash][]byte
    14  }
    15  
    16  func NewObjectServer() *ObjectServer {
    17  	return newObjectServer()
    18  }
    19  
    20  func (objSrv *ObjectServer) AddObject(reader io.Reader, length uint64,
    21  	expectedHash *hash.Hash) (hash.Hash, bool, error) {
    22  	return objSrv.addObject(reader, length, expectedHash)
    23  }
    24  
    25  func (objSrv *ObjectServer) CheckObjects(hashes []hash.Hash) ([]uint64, error) {
    26  	return objSrv.checkObjects(hashes)
    27  }
    28  
    29  func (objSrv *ObjectServer) GetObject(hashVal hash.Hash) (
    30  	uint64, io.ReadCloser, error) {
    31  	return objSrv.getObject(hashVal)
    32  }
    33  
    34  func (objSrv *ObjectServer) GetObjects(hashes []hash.Hash) (
    35  	objectserver.ObjectsReader, error) {
    36  	return objSrv.getObjects(hashes)
    37  }
    38  
    39  func (objSrv *ObjectServer) ListObjectSizes() map[hash.Hash]uint64 {
    40  	return objSrv.listObjectSizes()
    41  }
    42  
    43  func (objSrv *ObjectServer) ListObjects() []hash.Hash {
    44  	return objSrv.listObjects()
    45  }
    46  
    47  func (objSrv *ObjectServer) NumObjects() uint64 {
    48  	objSrv.rwLock.RLock()
    49  	defer objSrv.rwLock.RUnlock()
    50  	return uint64(len(objSrv.objectMap))
    51  }
    52  
    53  type ObjectsReader struct {
    54  	objectServer *ObjectServer
    55  	hashes       []hash.Hash
    56  	nextIndex    int64
    57  	sizes        []uint64
    58  }
    59  
    60  func (or *ObjectsReader) Close() error {
    61  	return nil
    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  }