...

Source file src/golang.org/x/mod/sumdb/storage/storage.go

Documentation: golang.org/x/mod/sumdb/storage

     1  // Copyright 2019 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // Package storage defines storage interfaces for and a basic implementation of a checksum database.
     6  package storage
     7  
     8  import "context"
     9  
    10  // A Storage is a transaction key-value storage system.
    11  type Storage interface {
    12  	// ReadOnly runs f in a read-only transaction.
    13  	// It is equivalent to ReadWrite except that the
    14  	// transaction's BufferWrite method will fail unconditionally.
    15  	// (The implementation may be able to optimize the
    16  	// transaction if it knows at the start that no writes will happen.)
    17  	ReadOnly(ctx context.Context, f func(context.Context, Transaction) error) error
    18  
    19  	// ReadWrite runs f in a read-write transaction.
    20  	// If f returns an error, the transaction aborts and returns that error.
    21  	// If f returns nil, the transaction attempts to commit and then then return nil.
    22  	// Otherwise it tries again. Note that f may be called multiple times and that
    23  	// the result only describes the effect of the final call to f.
    24  	// The caller must take care not to use any state computed during
    25  	// earlier calls to f, or even the last call to f when an error is returned.
    26  	ReadWrite(ctx context.Context, f func(context.Context, Transaction) error) error
    27  }
    28  
    29  // A Transaction provides read and write operations within a transaction,
    30  // as executed by Storage's ReadOnly or ReadWrite methods.
    31  type Transaction interface {
    32  	// ReadValue reads the value associated with a single key.
    33  	// If there is no value associated with that key, ReadKey returns an empty value.
    34  	// An error is only returned for problems accessing the storage.
    35  	ReadValue(ctx context.Context, key string) (value string, err error)
    36  
    37  	// ReadValues reads the values associated with the given keys.
    38  	// If there is no value stored for a given key, ReadValues returns an empty value for that key.
    39  	// An error is only returned for problems accessing the storage.
    40  	ReadValues(ctx context.Context, keys []string) (values []string, err error)
    41  
    42  	// BufferWrites buffers the given writes,
    43  	// to be applied at the end of the transaction.
    44  	// BufferWrites panics if this is a ReadOnly transaction.
    45  	// It returns an error if it detects any other problems.
    46  	// The behavior of multiple writes buffered using the same key
    47  	// is undefined: it may return an error or not.
    48  	BufferWrites(writes []Write) error
    49  }
    50  
    51  // A Write is a single change to be applied at the end of a read-write transaction.
    52  // A Write with an empty value deletes the value associated with the given key.
    53  type Write struct {
    54  	Key   string
    55  	Value string
    56  }
    57  

View as plain text