github.com/Cloud-Foundations/Dominator@v0.3.4/lib/objectserver/api.go (about) 1 package objectserver 2 3 import ( 4 "io" 5 "time" 6 7 "github.com/Cloud-Foundations/Dominator/lib/hash" 8 ) 9 10 type FullObjectServer interface { 11 DeleteObject(hashVal hash.Hash) error 12 ObjectServer 13 ObjectsRefcounter 14 LastMutationTime() time.Time 15 ListObjectSizes() map[hash.Hash]uint64 16 ListObjects() []hash.Hash 17 NumObjects() uint64 18 } 19 20 type AddCallback func(hashVal hash.Hash, length uint64, isNew bool) 21 22 type AddCallbackSetter interface { 23 SetAddCallback(callback AddCallback) 24 } 25 26 type GarbageCollector func(bytesToDelete uint64) ( 27 bytesDeleted uint64, err error) 28 29 type GarbageCollectorSetter interface { 30 SetGarbageCollector(gc GarbageCollector) 31 } 32 33 type ObjectLinker interface { 34 LinkObject(filename string, hashVal hash.Hash) (bool, error) 35 } 36 37 type ObjectGetter interface { 38 GetObject(hashVal hash.Hash) (uint64, io.ReadCloser, error) 39 } 40 41 type ObjectsChecker interface { 42 CheckObjects(hashes []hash.Hash) ([]uint64, error) 43 } 44 45 type ObjectsGetter interface { 46 GetObjects(hashes []hash.Hash) (ObjectsReader, error) 47 } 48 49 type ObjectsIterator interface { 50 ForEachObject(objectFunc func(hash.Hash) error) error 51 } 52 53 type ObjectsRefcounter interface { 54 AdjustRefcounts(bool, ObjectsIterator) error 55 DeleteUnreferenced(percentage uint8, bytes uint64) (uint64, uint64, error) 56 ListUnreferenced() map[hash.Hash]uint64 57 } 58 59 type FullObjectsReader interface { 60 ObjectsReader 61 ObjectSizes() []uint64 62 } 63 64 type ObjectsReader interface { 65 Close() error 66 NextObject() (uint64, io.ReadCloser, error) 67 } 68 69 type ObjectServer interface { 70 AddObject(reader io.Reader, length uint64, expectedHash *hash.Hash) ( 71 hash.Hash, bool, error) 72 ObjectGetter 73 ObjectsChecker 74 ObjectsGetter 75 } 76 77 type StashingObjectServer interface { 78 CommitObject(hash.Hash) error 79 DeleteStashedObject(hashVal hash.Hash) error 80 ObjectServer 81 StashOrVerifyObject(io.Reader, uint64, *hash.Hash) ( 82 hash.Hash, []byte, error) 83 } 84 85 func CopyObject(filename string, objectsGetter ObjectsGetter, 86 hashVal hash.Hash) error { 87 return copyObject(filename, objectsGetter, hashVal) 88 } 89 90 func GetObject(objSrv ObjectsGetter, hashVal hash.Hash) ( 91 uint64, io.ReadCloser, error) { 92 return getObject(objSrv, hashVal) 93 } 94 95 func LinkObject(filename string, objectsGetter ObjectsGetter, 96 hashVal hash.Hash) (bool, error) { 97 return linkObject(filename, objectsGetter, hashVal) 98 }