Documentation
¶
Overview ¶
Package datastore provides a unified interface for multiple database backends supporting Git object storage, metadata management, and transactional operations.
Index ¶
- Constants
- Variables
- func BenchmarkStorageOperations(b *testing.B, store DataStore, storeName string)
- func ChaosTestSuite(t *testing.T, createStore func() DataStore)
- func FuzzTestSuite(t *testing.T, store DataStore)
- func ListTypes() []string
- func PerformanceTestSuite(t *testing.T, stores map[string]DataStore)
- func Register(name string, factory Factory)
- func SecurityTestSuite(t *testing.T, store DataStore)
- func ValidateStressTestResults(t *testing.T, metrics *StressTestMetrics, config StressTestConfig)
- type AuditEvent
- type Batch
- type CacheConfig
- type Config
- func (c *Config) GetBoolOption(key string, defaultValue bool) bool
- func (c *Config) GetDurationOption(key string, defaultValue time.Duration) time.Duration
- func (c *Config) GetIntOption(key string, defaultValue int) int
- func (c *Config) GetOption(key string, defaultValue interface{}) interface{}
- func (c *Config) GetStringOption(key string, defaultValue string) string
- func (c *Config) Validate() error
- type DataStore
- type EventFilter
- type Factory
- type IsolationLevel
- type Iterator
- type MetadataStore
- type Metrics
- type MultiStore
- type ObjectStore
- type PerformanceMetrics
- type RefType
- type Reference
- type Registry
- type ReplicationConfig
- type Repository
- type RepositoryFilter
- type ShardingConfig
- type StressTestConfig
- type StressTestMetrics
- type Transaction
- type TxOptions
- type User
- type UserFilter
Constants ¶
const ( TypeMemory = "memory" TypeSQLite = "sqlite" TypeBadger = "badger" TypePostgres = "postgres" TypeMongoDB = "mongodb" TypeRedis = "redis" TypeCustom = "custom" TypeBolt = "bolt" )
DatabaseType constants
Variables ¶
var ( ErrNotFound = errors.New("not found") ErrAlreadyExists = errors.New("already exists") ErrInvalidData = errors.New("invalid data") ErrTransactionFailed = errors.New("transaction failed") ErrNotImplemented = errors.New("not implemented") ErrConnectionFailed = errors.New("connection failed") )
Common errors
Functions ¶
func BenchmarkStorageOperations ¶
BenchmarkStorageOperations provides standardized benchmarks
func ChaosTestSuite ¶
ChaosTestSuite runs chaos engineering tests to verify system resilience
func FuzzTestSuite ¶
FuzzTestSuite runs property-based and fuzzing tests
func PerformanceTestSuite ¶
PerformanceTestSuite runs comprehensive performance and benchmark tests
func SecurityTestSuite ¶
SecurityTestSuite runs comprehensive security tests
func ValidateStressTestResults ¶
func ValidateStressTestResults(t *testing.T, metrics *StressTestMetrics, config StressTestConfig)
ValidateStressTestResults checks if stress test results are acceptable
Types ¶
type AuditEvent ¶
type AuditEvent struct {
ID string `json:"id" db:"id"`
Timestamp time.Time `json:"timestamp" db:"timestamp"`
UserID string `json:"user_id" db:"user_id"`
Username string `json:"username" db:"username"`
Action string `json:"action" db:"action"`
Resource string `json:"resource" db:"resource"`
ResourceID string `json:"resource_id" db:"resource_id"`
Details map[string]interface{} `json:"details" db:"details"`
IPAddress string `json:"ip_address" db:"ip_address"`
UserAgent string `json:"user_agent" db:"user_agent"`
Success bool `json:"success" db:"success"`
ErrorMsg string `json:"error_msg,omitempty" db:"error_msg"`
}
AuditEvent represents an auditable action
type Batch ¶
type Batch interface {
Put(key string, value []byte)
Delete(key string)
Clear()
Size() int
Execute() error
}
Batch represents a batch of operations
type CacheConfig ¶
type CacheConfig struct {
Enabled bool `yaml:"enabled" json:"enabled"`
Type string `yaml:"type" json:"type"` // "memory", "redis"
Size int64 `yaml:"size" json:"size"` // Max cache size in bytes
TTL time.Duration `yaml:"ttl" json:"ttl"`
Eviction string `yaml:"eviction" json:"eviction"` // "lru", "lfu", "fifo"
}
CacheConfig configures caching layer
type Config ¶
type Config struct {
Type string `yaml:"type" json:"type"`
Connection string `yaml:"connection" json:"connection"`
Options map[string]interface{} `yaml:"options" json:"options"`
// Advanced configurations
Cache *CacheConfig `yaml:"cache" json:"cache"`
Sharding *ShardingConfig `yaml:"sharding" json:"sharding"`
Replication *ReplicationConfig `yaml:"replication" json:"replication"`
// Connection pool settings
MaxConnections int `yaml:"max_connections" json:"max_connections"`
MaxIdleConnections int `yaml:"max_idle_connections" json:"max_idle_connections"`
ConnectionTimeout time.Duration `yaml:"connection_timeout" json:"connection_timeout"`
// Performance settings
BatchSize int `yaml:"batch_size" json:"batch_size"`
EnableCompression bool `yaml:"enable_compression" json:"enable_compression"`
EnableEncryption bool `yaml:"enable_encryption" json:"enable_encryption"`
}
Config represents the configuration for a datastore
func DefaultConfig ¶
DefaultConfig returns default configuration for a database type
func (*Config) GetBoolOption ¶
GetBoolOption retrieves a boolean option
func (*Config) GetDurationOption ¶
GetDurationOption retrieves a duration option
func (*Config) GetIntOption ¶
GetIntOption retrieves an integer option
func (*Config) GetStringOption ¶
GetStringOption retrieves a string option
type DataStore ¶
type DataStore interface {
// Lifecycle management
Initialize(config Config) error
Close() error
HealthCheck(ctx context.Context) error
// Get specific stores
ObjectStore() ObjectStore
MetadataStore() MetadataStore
// Transaction support
BeginTx(ctx context.Context, opts *TxOptions) (Transaction, error)
// Metrics and monitoring
GetMetrics() Metrics
// Backend information
Type() string
Info() map[string]interface{}
}
DataStore is the main interface that all database implementations must satisfy. It combines object storage, metadata management, and transaction support.
func CreateFromEnv ¶
CreateFromEnv creates a datastore from environment variables
func CreateFromJSON ¶
CreateFromJSON creates a datastore from JSON configuration
func CreateFromYAML ¶
CreateFromYAML creates a datastore from YAML configuration
type EventFilter ¶
type EventFilter struct {
UserID string
Action string
Resource string
ResourceID string
After *time.Time
Before *time.Time
Success *bool
Limit int
Offset int
OrderBy string
}
EventFilter filters audit event queries
type IsolationLevel ¶
type IsolationLevel int
IsolationLevel defines transaction isolation levels
const ( IsolationDefault IsolationLevel = iota IsolationReadUncommitted IsolationReadCommitted IsolationRepeatableRead IsolationSerializable )
type MetadataStore ¶
type MetadataStore interface {
// Repository management
SaveRepository(repo *Repository) error
GetRepository(id string) (*Repository, error)
ListRepositories(filter RepositoryFilter) ([]*Repository, error)
DeleteRepository(id string) error
UpdateRepository(id string, updates map[string]interface{}) error
// User management
SaveUser(user *User) error
GetUser(id string) (*User, error)
GetUserByUsername(username string) (*User, error)
ListUsers(filter UserFilter) ([]*User, error)
DeleteUser(id string) error
UpdateUser(id string, updates map[string]interface{}) error
// Reference management (branches, tags)
SaveRef(repoID string, ref *Reference) error
GetRef(repoID string, name string) (*Reference, error)
ListRefs(repoID string, refType RefType) ([]*Reference, error)
DeleteRef(repoID string, name string) error
UpdateRef(repoID string, name string, newHash string) error
// Audit logging
LogEvent(event *AuditEvent) error
QueryEvents(filter EventFilter) ([]*AuditEvent, error)
CountEvents(filter EventFilter) (int64, error)
// Configuration
GetConfig(key string) (string, error)
SetConfig(key string, value string) error
GetAllConfig() (map[string]string, error)
DeleteConfig(key string) error
}
MetadataStore handles repository metadata, users, configuration, etc.
type Metrics ¶
type Metrics struct {
// Operation counts
Reads int64 `json:"reads"`
Writes int64 `json:"writes"`
Deletes int64 `json:"deletes"`
// Performance metrics
AvgReadLatency time.Duration `json:"avg_read_latency"`
AvgWriteLatency time.Duration `json:"avg_write_latency"`
// Storage metrics
ObjectCount int64 `json:"object_count"`
StorageSize int64 `json:"storage_size"`
// Connection metrics
ActiveConnections int `json:"active_connections"`
TotalConnections int64 `json:"total_connections"`
// Error metrics
ErrorCount int64 `json:"error_count"`
LastError string `json:"last_error,omitempty"`
// Uptime
StartTime time.Time `json:"start_time"`
Uptime time.Duration `json:"uptime"`
}
Metrics provides performance and usage metrics
type MultiStore ¶
type MultiStore struct {
// contains filtered or unexported fields
}
MultiStore allows using different stores for different data types
func NewMultiStore ¶
func NewMultiStore(objectsConfig, metadataConfig, cacheConfig Config) (*MultiStore, error)
NewMultiStore creates a multi-store configuration
type ObjectStore ¶
type ObjectStore interface {
// Basic operations
GetObject(hash string) ([]byte, error)
PutObject(hash string, data []byte) error
DeleteObject(hash string) error
HasObject(hash string) (bool, error)
// Listing and iteration
ListObjects(prefix string, limit int) ([]string, error)
IterateObjects(prefix string, fn func(hash string, data []byte) error) error
// Batch operations for performance
GetObjects(hashes []string) (map[string][]byte, error)
PutObjects(objects map[string][]byte) error
DeleteObjects(hashes []string) error
// Size and statistics
GetObjectSize(hash string) (int64, error)
CountObjects() (int64, error)
GetStorageSize() (int64, error)
}
ObjectStore handles Git object storage (blobs, trees, commits, tags)
type PerformanceMetrics ¶
type PerformanceMetrics struct {
StoreName string
TotalOperations int64
OperationsPerSecond float64
AverageLatency time.Duration
P95Latency time.Duration
P99Latency time.Duration
MinLatency time.Duration
MaxLatency time.Duration
MemoryUsed int64
ErrorCount int64
Latencies []time.Duration
}
PerformanceMetrics tracks detailed performance statistics
type Reference ¶
type Reference struct {
Name string `json:"name" db:"name"`
Hash string `json:"hash" db:"hash"`
Type RefType `json:"type" db:"type"`
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
UpdatedBy string `json:"updated_by" db:"updated_by"`
}
Reference represents a Git reference (branch or tag)
type Registry ¶
type Registry struct {
// contains filtered or unexported fields
}
Registry manages datastore factories
type ReplicationConfig ¶
type ReplicationConfig struct {
Enabled bool `yaml:"enabled" json:"enabled"`
Mode string `yaml:"mode" json:"mode"` // "master-slave", "multi-master"
Replicas []string `yaml:"replicas" json:"replicas"`
SyncMode string `yaml:"sync_mode" json:"sync_mode"` // "async", "sync", "semi-sync"
FailoverAuto bool `yaml:"failover_auto" json:"failover_auto"`
}
ReplicationConfig configures data replication
type Repository ¶
type Repository struct {
ID string `json:"id" db:"id"`
Name string `json:"name" db:"name"`
Description string `json:"description" db:"description"`
Path string `json:"path" db:"path"`
IsPrivate bool `json:"is_private" db:"is_private"`
CreatedAt time.Time `json:"created_at" db:"created_at"`
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
Metadata map[string]interface{} `json:"metadata" db:"metadata"`
// Statistics
Size int64 `json:"size" db:"size"`
CommitCount int64 `json:"commit_count" db:"commit_count"`
BranchCount int `json:"branch_count" db:"branch_count"`
}
Repository represents a Git repository's metadata
type RepositoryFilter ¶
type RepositoryFilter struct {
IDs []string
Name string
IsPrivate *bool
CreatedAfter *time.Time
CreatedBefore *time.Time
Limit int
Offset int
OrderBy string
}
RepositoryFilter filters repository queries
type ShardingConfig ¶
type ShardingConfig struct {
Enabled bool `yaml:"enabled" json:"enabled"`
ShardCount int `yaml:"shard_count" json:"shard_count"`
ShardKey string `yaml:"shard_key" json:"shard_key"`
ShardServers []string `yaml:"shard_servers" json:"shard_servers"`
}
ShardingConfig configures data sharding
type StressTestConfig ¶
type StressTestConfig struct {
Duration time.Duration
NumWorkers int
OperationsPerSec int
MaxObjectSize int
MinObjectSize int
ReadWriteRatio float64 // 0.0 = all writes, 1.0 = all reads
TransactionPercent float64 // percentage of operations in transactions
}
StressTestConfig defines parameters for stress testing
func DefaultStressConfig ¶
func DefaultStressConfig() StressTestConfig
DefaultStressConfig returns default stress test configuration
type StressTestMetrics ¶
type StressTestMetrics struct {
TotalOperations int64
SuccessfulOps int64
FailedOps int64
ReadOps int64
WriteOps int64
DeleteOps int64
TransactionOps int64
AverageLatency time.Duration
MaxLatency time.Duration
MinLatency time.Duration
MemoryUsagePeak int64
ErrorsByType map[string]int64
ThroughputOpsPerSec float64
}
StressTestMetrics tracks stress test results
func StressTestSuite ¶
func StressTestSuite(t *testing.T, store DataStore, config StressTestConfig) *StressTestMetrics
StressTestSuite runs comprehensive stress tests
type Transaction ¶
type Transaction interface {
// Transaction control
Commit() error
Rollback() error
// Include all ObjectStore operations
ObjectStore
// Include all MetadataStore operations
MetadataStore
}
Transaction represents a database transaction with all operations
type TxOptions ¶
type TxOptions struct {
Isolation IsolationLevel
ReadOnly bool
Timeout time.Duration
}
TxOptions configures transaction behavior
type User ¶
type User struct {
ID string `json:"id" db:"id"`
Username string `json:"username" db:"username"`
Email string `json:"email" db:"email"`
FullName string `json:"full_name" db:"full_name"`
IsActive bool `json:"is_active" db:"is_active"`
IsAdmin bool `json:"is_admin" db:"is_admin"`
CreatedAt time.Time `json:"created_at" db:"created_at"`
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
LastLoginAt *time.Time `json:"last_login_at" db:"last_login_at"`
Metadata map[string]interface{} `json:"metadata" db:"metadata"`
}
User represents a system user
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Package badger implements a BadgerDB-backed datastore for govc.
|
Package badger implements a BadgerDB-backed datastore for govc. |
|
Package memory implements an in-memory datastore for govc.
|
Package memory implements an in-memory datastore for govc. |
|
Package postgres implements a PostgreSQL-backed datastore for govc.
|
Package postgres implements a PostgreSQL-backed datastore for govc. |
|
Package sqlite implements a SQLite-backed datastore for govc.
|
Package sqlite implements a SQLite-backed datastore for govc. |