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 }