[arvados] updated: 2.7.0-6008-g62168c2db5
git repository hosting
git at public.arvados.org
Fri Feb 16 15:30:11 UTC 2024
Summary of changes:
services/keepstore/s3_volume.go | 4 +--
services/keepstore/volume.go | 64 +++++++++++++++++++++++++++++++++++++++--
2 files changed, 63 insertions(+), 5 deletions(-)
via 62168c2db5c36de2362cd1d5785b598b187bbef3 (commit)
via e6d11bb6b7d0008ba31e0ea07d577e7787236c74 (commit)
from 022107bd52092c658208e74161581c6bedda4a5f (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
commit 62168c2db5c36de2362cd1d5785b598b187bbef3
Author: Tom Clegg <tom at curii.com>
Date: Fri Feb 16 10:22:28 2024 -0500
2960: Tweak s3 concurrent download parameters.
Trials show performance difference is negligible between 11x 6MiB and
13x 5MiB. Given that, I figure lower concurrency wins because it
involves less processing.
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom at curii.com>
diff --git a/services/keepstore/s3_volume.go b/services/keepstore/s3_volume.go
index d4b90540ea..dc857c3264 100644
--- a/services/keepstore/s3_volume.go
+++ b/services/keepstore/s3_volume.go
@@ -42,8 +42,8 @@ const (
s3DefaultConnectTimeout = arvados.Duration(time.Minute)
maxClockSkew = 600 * time.Second
nearlyRFC1123 = "Mon, 2 Jan 2006 15:04:05 GMT"
- s3downloaderPartSize = 5 * 1024 * 1024
- s3downloaderReadConcurrency = 13
+ s3downloaderPartSize = 6 * 1024 * 1024
+ s3downloaderReadConcurrency = 11
s3uploaderPartSize = 5 * 1024 * 1024
s3uploaderWriteConcurrency = 5
)
commit e6d11bb6b7d0008ba31e0ea07d577e7787236c74
Author: Tom Clegg <tom at curii.com>
Date: Thu Feb 15 19:05:33 2024 -0500
2960: Add back volume implementation requirements.
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom at curii.com>
diff --git a/services/keepstore/volume.go b/services/keepstore/volume.go
index f1b6781da6..cd61804913 100644
--- a/services/keepstore/volume.go
+++ b/services/keepstore/volume.go
@@ -15,15 +15,73 @@ import (
// volume is the interface to a back-end storage device.
type volume interface {
+ // Return a unique identifier for the backend device. If
+ // possible, this should be chosen such that keepstore
+ // processes running on different hosts, and accessing the
+ // same backend device, will return the same string.
+ //
+ // This helps keep-balance avoid redundantly downloading
+ // multiple index listings for the same backend device.
+ DeviceID() string
+
+ // Copy a block from the backend device to writeTo.
+ //
+ // As with all volume methods, the hash argument is a
+ // 32-character hexadecimal string.
+ //
+ // Data can be written to writeTo in any order, and concurrent
+ // calls to writeTo.WriteAt() are allowed. However, BlockRead
+ // must not do multiple writes that intersect with any given
+ // byte offset.
+ //
+ // BlockRead is not expected to verify data integrity.
+ //
+ // If the indicated block does not exist, or has been trashed,
+ // BlockRead must return os.ErrNotExist.
BlockRead(ctx context.Context, hash string, writeTo io.WriterAt) error
+
+ // Store a block on the backend device, and set its timestamp
+ // to the current time.
+ //
+ // The implementation must ensure that regardless of any
+ // errors encountered while writing, a partially written block
+ // is not left behind: a subsequent BlockRead call must return
+ // either a) the data previously stored under the given hash,
+ // if any, or b) os.ErrNotExist.
BlockWrite(ctx context.Context, hash string, data []byte) error
- DeviceID() string
+
+ // Update the indicated block's stored timestamp to the
+ // current time.
BlockTouch(hash string) error
+
+ // Return the indicated block's stored timestamp.
+ Mtime(hash string) (time.Time, error)
+
+ // Mark the indicated block as trash, such that -- unless it
+ // is untrashed before time.Now() + BlobTrashLifetime --
+ // BlockRead returns os.ErrNotExist and the block is not
+ // listed by Index.
BlockTrash(hash string) error
+
+ // Un-mark the indicated block as trash. If the block has not
+ // been trashed, return os.ErrNotExist.
BlockUntrash(hash string) error
- Index(ctx context.Context, prefix string, writeTo io.Writer) error
- Mtime(hash string) (time.Time, error)
+
+ // Permanently delete all blocks that have been marked as
+ // trash for BlobTrashLifetime or longer.
EmptyTrash()
+
+ // Write an index of all non-trashed blocks available on the
+ // backend device whose hash begins with the given prefix
+ // (prefix is a string of zero or more hexadecimal digits).
+ //
+ // Each block is written as "{hash}+{size} {timestamp}\n"
+ // where timestamp is a decimal-formatted number of
+ // nanoseconds since the UTC Unix epoch.
+ //
+ // Index should abort and return ctx.Err() if ctx is cancelled
+ // before indexing is complete.
+ Index(ctx context.Context, prefix string, writeTo io.Writer) error
}
type volumeDriver func(newVolumeParams) (volume, error)
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list