Documentation
¶
Index ¶
- Variables
- func CreateLog(ctx context.Context, config *Config) error
- func ReusedConnContext(ctx context.Context, c net.Conn) context.Context
- type Backend
- type Config
- type DynamoDBBackend
- func (b *DynamoDBBackend) Create(ctx context.Context, logID [sha256.Size]byte, new []byte) error
- func (b *DynamoDBBackend) Fetch(ctx context.Context, logID [sha256.Size]byte) (LockedCheckpoint, error)
- func (b *DynamoDBBackend) Metrics() []prometheus.Collector
- func (b *DynamoDBBackend) Replace(ctx context.Context, old LockedCheckpoint, new []byte) (LockedCheckpoint, error)
- type ETagBackend
- func (b *ETagBackend) Create(ctx context.Context, logID [sha256.Size]byte, new []byte) error
- func (b *ETagBackend) Fetch(ctx context.Context, logID [sha256.Size]byte) (LockedCheckpoint, error)
- func (b *ETagBackend) Metrics() []prometheus.Collector
- func (b *ETagBackend) Replace(ctx context.Context, old LockedCheckpoint, new []byte) (LockedCheckpoint, error)
- type LockBackend
- type LockedCheckpoint
- type Log
- type PendingLogEntry
- type S3Backend
- type SQLiteBackend
- func (b *SQLiteBackend) Create(ctx context.Context, logID [sha256.Size]byte, new []byte) error
- func (b *SQLiteBackend) Fetch(ctx context.Context, logID [sha256.Size]byte) (LockedCheckpoint, error)
- func (b *SQLiteBackend) Metrics() []prometheus.Collector
- func (b *SQLiteBackend) Replace(ctx context.Context, old LockedCheckpoint, new []byte) (LockedCheckpoint, error)
- type UploadOptions
Constants ¶
This section is empty.
Variables ¶
var ErrLogExists = errors.New("checkpoint already exist, refusing to initialize log")
Functions ¶
Types ¶
type Backend ¶
type Backend interface { // Upload is expected to retry transient errors, and only return an error // for unrecoverable errors. When Upload returns, the object must be fully // persisted. Upload can be called concurrently. opts may be nil. Upload(ctx context.Context, key string, data []byte, opts *UploadOptions) error // Fetch can be called concurrently. It's expected to decompress any data // uploaded with UploadOptions.Compress true. Fetch(ctx context.Context, key string) ([]byte, error) // Metrics returns the metrics to register for this log. The metrics should // not be shared by any other logs. Metrics() []prometheus.Collector }
Backend is a strongly consistent object storage.
It is dedicated to a single log instance.
type Config ¶
type Config struct { Name string Key *ecdsa.PrivateKey WitnessKey ed25519.PrivateKey PoolSize int Cache string Backend Backend Lock LockBackend Log *slog.Logger Roots *x509util.PEMCertPool NotAfterStart time.Time NotAfterLimit time.Time }
type DynamoDBBackend ¶
type DynamoDBBackend struct {
// contains filtered or unexported fields
}
func NewDynamoDBBackend ¶
func (*DynamoDBBackend) Fetch ¶
func (b *DynamoDBBackend) Fetch(ctx context.Context, logID [sha256.Size]byte) (LockedCheckpoint, error)
func (*DynamoDBBackend) Metrics ¶
func (b *DynamoDBBackend) Metrics() []prometheus.Collector
func (*DynamoDBBackend) Replace ¶
func (b *DynamoDBBackend) Replace(ctx context.Context, old LockedCheckpoint, new []byte) (LockedCheckpoint, error)
type ETagBackend ¶ added in v0.3.0
type ETagBackend struct {
// contains filtered or unexported fields
}
func NewETagBackend ¶ added in v0.3.0
func (*ETagBackend) Fetch ¶ added in v0.3.0
func (b *ETagBackend) Fetch(ctx context.Context, logID [sha256.Size]byte) (LockedCheckpoint, error)
func (*ETagBackend) Metrics ¶ added in v0.3.0
func (b *ETagBackend) Metrics() []prometheus.Collector
func (*ETagBackend) Replace ¶ added in v0.3.0
func (b *ETagBackend) Replace(ctx context.Context, old LockedCheckpoint, new []byte) (LockedCheckpoint, error)
type LockBackend ¶
type LockBackend interface { // Fetch obtains the current checkpoint for a given log, as well as the data // necessary to perform a compare-and-swap operation. Fetch(ctx context.Context, logID [sha256.Size]byte) (LockedCheckpoint, error) // Replace uploads a new checkpoint, atomically checking that the old // checkpoint is the provided one, and returning the new one. Replace is // expected to retry transient errors, and only return an error for // unrecoverable errors (such as a conflict). Replace(ctx context.Context, old LockedCheckpoint, new []byte) (LockedCheckpoint, error) // Create uploads a new checkpoint, atomically checking that none exist for // the log yet. Create(ctx context.Context, logID [sha256.Size]byte, new []byte) error }
A LockBackend is a database that supports compare-and-swap operations.
It is shared across multiple Log instances, and is used only to store the latest checkpoint before making it publicly available.
All its methods must be usable concurrently.
type LockedCheckpoint ¶
type LockedCheckpoint interface {
Bytes() []byte
}
A LockedCheckpoint is a checkpoint, along with the backend-specific information necessary to perform a compare-and-swap operation.
type Log ¶
type Log struct {
// contains filtered or unexported fields
}
func (*Log) CloseCache ¶
func (*Log) Metrics ¶
func (l *Log) Metrics() []prometheus.Collector
type PendingLogEntry ¶ added in v0.3.0
type PendingLogEntry struct { Certificate []byte IsPrecert bool IssuerKeyHash [32]byte Issuers [][]byte PreCertificate []byte }
PendingLogEntry is a subset of sunlight.LogEntry that was not yet sequenced, so doesn't have an index or timestamp.
type S3Backend ¶
type S3Backend struct {
// contains filtered or unexported fields
}
func NewS3Backend ¶
func (*S3Backend) Metrics ¶
func (s *S3Backend) Metrics() []prometheus.Collector
type SQLiteBackend ¶ added in v0.3.0
type SQLiteBackend struct {
// contains filtered or unexported fields
}
func NewSQLiteBackend ¶ added in v0.3.0
func (*SQLiteBackend) Fetch ¶ added in v0.3.0
func (b *SQLiteBackend) Fetch(ctx context.Context, logID [sha256.Size]byte) (LockedCheckpoint, error)
func (*SQLiteBackend) Metrics ¶ added in v0.3.0
func (b *SQLiteBackend) Metrics() []prometheus.Collector
func (*SQLiteBackend) Replace ¶ added in v0.3.0
func (b *SQLiteBackend) Replace(ctx context.Context, old LockedCheckpoint, new []byte) (LockedCheckpoint, error)
type UploadOptions ¶ added in v0.2.1
type UploadOptions struct { // ContentType is the MIME type of the data. If empty, defaults to // "application/octet-stream". ContentType string // Compress is true if the data is compressible and should be compressed // before uploading if possible. Compress bool // Immutable is true if the data is never updated after being uploaded. Immutable bool }
UploadOptions are used as part of the Backend.Upload method, and are marshaled to JSON and stored in the staging bundles.