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  }