projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch '5353-set-node-size' refs #5353
[arvados.git]
/
services
/
keepstore
/
volume.go
diff --git
a/services/keepstore/volume.go
b/services/keepstore/volume.go
index daf003e1956a6dd1d951a8b17394ae7ec792ee71..7966c41b92bd89958308ec77765f0b7a5a1f0fd9 100644
(file)
--- a/
services/keepstore/volume.go
+++ b/
services/keepstore/volume.go
@@
-1,7
+1,3
@@
-// A Volume is an interface representing a Keep back-end storage unit:
-// for example, a single mounted disk, a RAID array, an Amazon S3 volume,
-// etc.
-
package main
import (
package main
import (
@@
-10,6
+6,9
@@
import (
"time"
)
"time"
)
+// A Volume is an interface representing a Keep back-end storage unit:
+// for example, a single mounted disk, a RAID array, an Amazon S3 volume,
+// etc.
type Volume interface {
// Get a block. IFF the returned error is nil, the caller must
// put the returned slice back into the buffer pool when it's
type Volume interface {
// Get a block. IFF the returned error is nil, the caller must
// put the returned slice back into the buffer pool when it's
@@
-37,7
+36,7
@@
type Volume interface {
// access log if the block is not found on any other volumes
// either).
//
// access log if the block is not found on any other volumes
// either).
//
- // If the data in the backing store is bigger than B
LOCKSIZE
,
+ // If the data in the backing store is bigger than B
lockSize
,
// Get is permitted to return an error without reading any of
// the data.
Get(loc string) ([]byte, error)
// Get is permitted to return an error without reading any of
// the data.
Get(loc string) ([]byte, error)
@@
-53,7
+52,7
@@
type Volume interface {
//
// loc is as described in Get.
//
//
// loc is as described in Get.
//
- // len(block) is guaranteed to be between 0 and B
LOCKSIZE
.
+ // len(block) is guaranteed to be between 0 and B
lockSize
.
//
// If a block is already stored under the same name (loc) with
// different content, Put must either overwrite the existing
//
// If a block is already stored under the same name (loc) with
// different content, Put must either overwrite the existing
@@
-151,7
+150,7
@@
type Volume interface {
// loc is as described in Get.
//
// If the timestamp for the given locator is newer than
// loc is as described in Get.
//
// If the timestamp for the given locator is newer than
- // blob
_signature_ttl
, Delete must not delete the data.
+ // blob
SignatureTTL
, Delete must not delete the data.
//
// If a Delete operation overlaps with any Touch or Put
// operations on the same locator, the implementation must
//
// If a Delete operation overlaps with any Touch or Put
// operations on the same locator, the implementation must
@@
-172,7
+171,7
@@
type Volume interface {
// reliably or fail outright.
//
// Corollary: A successful Touch or Put guarantees a block
// reliably or fail outright.
//
// Corollary: A successful Touch or Put guarantees a block
- // will not be deleted for at least blob
_signature_ttl
+ // will not be deleted for at least blob
SignatureTTL
// seconds.
Delete(loc string) error
// seconds.
Delete(loc string) error
@@
-196,6
+195,11
@@
type Volume interface {
// will fail because it is full, but Mtime or Delete can
// succeed -- then Writable should return false.
Writable() bool
// will fail because it is full, but Mtime or Delete can
// succeed -- then Writable should return false.
Writable() bool
+
+ // Replication returns the storage redundancy of the
+ // underlying device. It will be passed on to clients in
+ // responses to PUT requests.
+ Replication() int
}
// A VolumeManager tells callers which volumes can read, which volumes
}
// A VolumeManager tells callers which volumes can read, which volumes
@@
-228,6
+232,7
@@
type RRVolumeManager struct {
counter uint32
}
counter uint32
}
+// MakeRRVolumeManager initializes RRVolumeManager
func MakeRRVolumeManager(volumes []Volume) *RRVolumeManager {
vm := &RRVolumeManager{}
for _, v := range volumes {
func MakeRRVolumeManager(volumes []Volume) *RRVolumeManager {
vm := &RRVolumeManager{}
for _, v := range volumes {
@@
-239,14
+244,17
@@
func MakeRRVolumeManager(volumes []Volume) *RRVolumeManager {
return vm
}
return vm
}
+// AllReadable returns an array of all readable volumes
func (vm *RRVolumeManager) AllReadable() []Volume {
return vm.readables
}
func (vm *RRVolumeManager) AllReadable() []Volume {
return vm.readables
}
+// AllWritable returns an array of all writable volumes
func (vm *RRVolumeManager) AllWritable() []Volume {
return vm.writables
}
func (vm *RRVolumeManager) AllWritable() []Volume {
return vm.writables
}
+// NextWritable returns the next writable
func (vm *RRVolumeManager) NextWritable() Volume {
if len(vm.writables) == 0 {
return nil
func (vm *RRVolumeManager) NextWritable() Volume {
if len(vm.writables) == 0 {
return nil
@@
-255,10
+263,11
@@
func (vm *RRVolumeManager) NextWritable() Volume {
return vm.writables[i%uint32(len(vm.writables))]
}
return vm.writables[i%uint32(len(vm.writables))]
}
+// Close the RRVolumeManager
func (vm *RRVolumeManager) Close() {
}
func (vm *RRVolumeManager) Close() {
}
-// VolumeStatus
+// VolumeStatus
provides status information of the volume consisting of:
// * mount_point
// * device_num (an integer identifying the underlying storage system)
// * bytes_free
// * mount_point
// * device_num (an integer identifying the underlying storage system)
// * bytes_free