You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
boundary/internal/storage/options.go

118 lines
3.3 KiB

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
package storage
// SyncMode is used to determine how a file is synced when closed.
type SyncMode uint8
const (
// Asynchronous mode will trigger a file to sync to the storage
// bucket on a recurring interval once it has been closed. It will continue
// retrying until the root container is closed.
// Asynchronous is the default sync mode.
Asynchronous SyncMode = iota
// Synchronous mode will cause a file closed call to block until the file
// has been synced to the storage bucket. Any error while syncing the file
// will be returned to the caller of Close.
Synchronous
// NoSync mode will result in Close not syncing the file to the storage
// bucket.
NoSync
// minimumAvailableDiskSpace represents the minimum amount of available disk
// space a worker needs in the path defined by RecordingStoragePath for processing
// sessions with recording enabled.
minimumAvailableDiskSpace
)
// AccessMode is use to determine the access mode a file is opened with.
type AccessMode uint8
const (
// ReadOnly mode will open a file as read only.
// ReadOnly is the default access mode.
ReadOnly AccessMode = iota
// WriteOnly mode will open a file for writing only.
WriteOnly
// ReadWrite mode will open a file for reading and writing.
ReadWrite
)
// GetOpts - iterate the inbound Options and return a struct.
func GetOpts(opt ...Option) Options {
opts := getDefaultOptions()
for _, o := range opt {
o(&opts)
}
return opts
}
func getDefaultOptions() Options {
return Options{
WithCloseSyncMode: Asynchronous,
WithFileAccessMode: ReadOnly,
WithCreateFile: false,
WithBuffer: 0,
WithMinimumAvailableDiskSpace: DefaultMinimumAvailableDiskSpace,
}
}
// Options are storage options.
type Options struct {
WithCloseSyncMode SyncMode
WithFileAccessMode AccessMode
WithCreateFile bool
WithBuffer uint64
WithMinimumAvailableDiskSpace uint64
}
// Option is a storage option.
type Option func(*Options)
// WithCloseSyncMode sets how a file is synced when closed.
func WithCloseSyncMode(m SyncMode) Option {
return func(o *Options) {
o.WithCloseSyncMode = m
}
}
// WithCreateFile indicates a file should be created when opening.
func WithCreateFile() Option {
return func(o *Options) {
o.WithCreateFile = true
}
}
// WithFileAccessMode sets the access mode when a file is opened.
func WithFileAccessMode(m AccessMode) Option {
return func(o *Options) {
o.WithFileAccessMode = m
}
}
// WithBuffer sets the buffer size. If the buffer size is not
// a factorial of 4KiB, the input will be used as a minimum
// buffer threshold used to determine the minimum number of
// empty bytes allowed in the buffer before having the buffer
// expand. In this case, the buffer size will be rounded up
// to the nearest 4KiB factorial.
func WithBuffer(b uint64) Option {
return func(o *Options) {
o.WithBuffer = b
}
}
// WithMinimumAvailableDiskSpace sets the minimum amount of
// available disk space a worker needs in the local path defined for
// processing sessions with recording enabled.
func WithMinimumAvailableDiskSpace(m uint64) Option {
return func(o *Options) {
o.WithMinimumAvailableDiskSpace = m
}
}