diff options
| -rw-r--r-- | objectstore/mix/mix.go (renamed from objectstore/chain/chain.go) | 104 | ||||
| -rw-r--r-- | repository/open.go | 4 |
2 files changed, 54 insertions, 54 deletions
diff --git a/objectstore/chain/chain.go b/objectstore/mix/mix.go index 8e10feb6..00b2a4af 100644 --- a/objectstore/chain/chain.go +++ b/objectstore/mix/mix.go @@ -1,6 +1,6 @@ -// Package chain provides an adaptive wrapper over multiple object storage +// Package mix provides an adaptive wrapper over multiple object storage // backends. -package chain +package mix import ( "errors" @@ -13,8 +13,8 @@ import ( "codeberg.org/lindenii/furgit/objecttype" ) -// Chain queries multiple object databases with an MRU backend preference. -type Chain struct { +// Mix queries multiple object databases with an MRU backend preference. +type Mix struct { mu sync.RWMutex backendHead *backendNode @@ -22,8 +22,8 @@ type Chain struct { backendNodeByStore map[objectstore.Store]*backendNode } -// New creates a Chain from backends. -func New(backends ...objectstore.Store) *Chain { +// New creates a Mix from backends. +func New(backends ...objectstore.Store) *Mix { nodeByStore := make(map[objectstore.Store]*backendNode, len(backends)) var ( @@ -52,7 +52,7 @@ func New(backends ...objectstore.Store) *Chain { nodeByStore[backend] = node } - return &Chain{ + return &Mix{ backendHead: head, backendTail: tail, backendNodeByStore: nodeByStore, @@ -60,11 +60,11 @@ func New(backends ...objectstore.Store) *Chain { } // ReadBytesFull reads a full serialized object from one backend that has it. -func (chain *Chain) ReadBytesFull(id objectid.ObjectID) ([]byte, error) { - for i, backend := 0, chain.firstBackend(); backend != nil; i, backend = i+1, chain.nextBackend(backend) { +func (mix *Mix) ReadBytesFull(id objectid.ObjectID) ([]byte, error) { + for i, backend := 0, mix.firstBackend(); backend != nil; i, backend = i+1, mix.nextBackend(backend) { full, err := backend.ReadBytesFull(id) if err == nil { - chain.touchBackend(backend) + mix.touchBackend(backend) return full, nil } @@ -81,11 +81,11 @@ func (chain *Chain) ReadBytesFull(id objectid.ObjectID) ([]byte, error) { // ReadBytesContent reads an object's type and content bytes from one backend // that has it. -func (chain *Chain) ReadBytesContent(id objectid.ObjectID) (objecttype.Type, []byte, error) { - for i, backend := 0, chain.firstBackend(); backend != nil; i, backend = i+1, chain.nextBackend(backend) { +func (mix *Mix) ReadBytesContent(id objectid.ObjectID) (objecttype.Type, []byte, error) { + for i, backend := 0, mix.firstBackend(); backend != nil; i, backend = i+1, mix.nextBackend(backend) { ty, content, err := backend.ReadBytesContent(id) if err == nil { - chain.touchBackend(backend) + mix.touchBackend(backend) return ty, content, nil } @@ -102,11 +102,11 @@ func (chain *Chain) ReadBytesContent(id objectid.ObjectID) (objecttype.Type, []b // ReadReaderFull reads a full serialized object stream from one backend that // has it. -func (chain *Chain) ReadReaderFull(id objectid.ObjectID) (io.ReadCloser, error) { - for i, backend := 0, chain.firstBackend(); backend != nil; i, backend = i+1, chain.nextBackend(backend) { +func (mix *Mix) ReadReaderFull(id objectid.ObjectID) (io.ReadCloser, error) { + for i, backend := 0, mix.firstBackend(); backend != nil; i, backend = i+1, mix.nextBackend(backend) { reader, err := backend.ReadReaderFull(id) if err == nil { - chain.touchBackend(backend) + mix.touchBackend(backend) return reader, nil } @@ -123,11 +123,11 @@ func (chain *Chain) ReadReaderFull(id objectid.ObjectID) (io.ReadCloser, error) // ReadReaderContent reads an object's type, declared content length, and // content stream from one backend that has it. -func (chain *Chain) ReadReaderContent(id objectid.ObjectID) (objecttype.Type, int64, io.ReadCloser, error) { - for i, backend := 0, chain.firstBackend(); backend != nil; i, backend = i+1, chain.nextBackend(backend) { +func (mix *Mix) ReadReaderContent(id objectid.ObjectID) (objecttype.Type, int64, io.ReadCloser, error) { + for i, backend := 0, mix.firstBackend(); backend != nil; i, backend = i+1, mix.nextBackend(backend) { ty, size, reader, err := backend.ReadReaderContent(id) if err == nil { - chain.touchBackend(backend) + mix.touchBackend(backend) return ty, size, reader, nil } @@ -143,11 +143,11 @@ func (chain *Chain) ReadReaderContent(id objectid.ObjectID) (objecttype.Type, in } // ReadSize reads object content length from one backend that has it. -func (chain *Chain) ReadSize(id objectid.ObjectID) (int64, error) { - for i, backend := 0, chain.firstBackend(); backend != nil; i, backend = i+1, chain.nextBackend(backend) { +func (mix *Mix) ReadSize(id objectid.ObjectID) (int64, error) { + for i, backend := 0, mix.firstBackend(); backend != nil; i, backend = i+1, mix.nextBackend(backend) { size, err := backend.ReadSize(id) if err == nil { - chain.touchBackend(backend) + mix.touchBackend(backend) return size, nil } @@ -163,11 +163,11 @@ func (chain *Chain) ReadSize(id objectid.ObjectID) (int64, error) { } // ReadHeader reads object header data from one backend that has it. -func (chain *Chain) ReadHeader(id objectid.ObjectID) (objecttype.Type, int64, error) { - for i, backend := 0, chain.firstBackend(); backend != nil; i, backend = i+1, chain.nextBackend(backend) { +func (mix *Mix) ReadHeader(id objectid.ObjectID) (objecttype.Type, int64, error) { + for i, backend := 0, mix.firstBackend(); backend != nil; i, backend = i+1, mix.nextBackend(backend) { ty, size, err := backend.ReadHeader(id) if err == nil { - chain.touchBackend(backend) + mix.touchBackend(backend) return ty, size, nil } @@ -183,15 +183,15 @@ func (chain *Chain) ReadHeader(id objectid.ObjectID) (objecttype.Type, int64, er } // Close closes all backends and joins close errors. -func (chain *Chain) Close() error { - chain.mu.RLock() +func (mix *Mix) Close() error { + mix.mu.RLock() - backends := make([]objectstore.Store, 0, len(chain.backendNodeByStore)) - for node := chain.backendHead; node != nil; node = node.next { + backends := make([]objectstore.Store, 0, len(mix.backendNodeByStore)) + for node := mix.backendHead; node != nil; node = node.next { backends = append(backends, node.backend) } - chain.mu.RUnlock() + mix.mu.RUnlock() var errs []error @@ -211,22 +211,22 @@ type backendNode struct { next *backendNode } -func (chain *Chain) firstBackend() objectstore.Store { - chain.mu.RLock() - defer chain.mu.RUnlock() +func (mix *Mix) firstBackend() objectstore.Store { + mix.mu.RLock() + defer mix.mu.RUnlock() - if chain.backendHead == nil { + if mix.backendHead == nil { return nil } - return chain.backendHead.backend + return mix.backendHead.backend } -func (chain *Chain) nextBackend(current objectstore.Store) objectstore.Store { - chain.mu.RLock() - defer chain.mu.RUnlock() +func (mix *Mix) nextBackend(current objectstore.Store) objectstore.Store { + mix.mu.RLock() + defer mix.mu.RUnlock() - node := chain.backendNodeByStore[current] + node := mix.backendNodeByStore[current] if node == nil || node.next == nil { return nil } @@ -234,18 +234,18 @@ func (chain *Chain) nextBackend(current objectstore.Store) objectstore.Store { return node.next.backend } -func (chain *Chain) touchBackend(backend objectstore.Store) { +func (mix *Mix) touchBackend(backend objectstore.Store) { if backend == nil { return } - if !chain.mu.TryLock() { + if !mix.mu.TryLock() { return } - defer chain.mu.Unlock() + defer mix.mu.Unlock() - node := chain.backendNodeByStore[backend] - if node == nil || node == chain.backendHead { + node := mix.backendNodeByStore[backend] + if node == nil || node == mix.backendHead { return } @@ -257,19 +257,19 @@ func (chain *Chain) touchBackend(backend objectstore.Store) { node.next.prev = node.prev } - if chain.backendTail == node { - chain.backendTail = node.prev + if mix.backendTail == node { + mix.backendTail = node.prev } node.prev = nil - node.next = chain.backendHead - if chain.backendHead != nil { - chain.backendHead.prev = node + node.next = mix.backendHead + if mix.backendHead != nil { + mix.backendHead.prev = node } - chain.backendHead = node - if chain.backendTail == nil { - chain.backendTail = node + mix.backendHead = node + if mix.backendTail == nil { + mix.backendTail = node } } diff --git a/repository/open.go b/repository/open.go index 5879f6ee..3c7f05d5 100644 --- a/repository/open.go +++ b/repository/open.go @@ -8,8 +8,8 @@ import ( "codeberg.org/lindenii/furgit/config" "codeberg.org/lindenii/furgit/objectid" "codeberg.org/lindenii/furgit/objectstore" - objectchain "codeberg.org/lindenii/furgit/objectstore/chain" objectloose "codeberg.org/lindenii/furgit/objectstore/loose" + objectmix "codeberg.org/lindenii/furgit/objectstore/mix" objectpacked "codeberg.org/lindenii/furgit/objectstore/packed" "codeberg.org/lindenii/furgit/refstore" refchain "codeberg.org/lindenii/furgit/refstore/chain" @@ -123,7 +123,7 @@ func openObjectStore(root *os.Root, algo objectid.Algorithm) (objectstore.Store, return nil, nil, fmt.Errorf("repository: open objects/pack: %w", err) } - objectsChain := objectchain.New(backends...) + objectsChain := objectmix.New(backends...) objectsRootForWriting, err := root.OpenRoot("objects") if err != nil { |
