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.
55 lines
1.3 KiB
55 lines
1.3 KiB
//go:build !(js && wasm) |
|
|
|
package bbolt |
|
|
|
import ( |
|
"context" |
|
"time" |
|
|
|
"next.orly.dev/pkg/database" |
|
) |
|
|
|
func init() { |
|
database.RegisterBboltFactory(newBboltFromConfig) |
|
} |
|
|
|
// newBboltFromConfig creates a BBolt database from DatabaseConfig |
|
func newBboltFromConfig( |
|
ctx context.Context, |
|
cancel context.CancelFunc, |
|
cfg *database.DatabaseConfig, |
|
) (database.Database, error) { |
|
// Convert DatabaseConfig to BboltConfig |
|
bboltCfg := &BboltConfig{ |
|
DataDir: cfg.DataDir, |
|
LogLevel: cfg.LogLevel, |
|
|
|
// Use bbolt-specific settings from DatabaseConfig if present |
|
// These will be added to DatabaseConfig later |
|
BatchMaxEvents: cfg.BboltBatchMaxEvents, |
|
BatchMaxBytes: cfg.BboltBatchMaxBytes, |
|
BatchFlushTimeout: cfg.BboltFlushTimeout, |
|
BloomSizeMB: cfg.BboltBloomSizeMB, |
|
NoSync: cfg.BboltNoSync, |
|
InitialMmapSize: cfg.BboltMmapSize, |
|
} |
|
|
|
// Apply defaults if not set |
|
if bboltCfg.BatchMaxEvents <= 0 { |
|
bboltCfg.BatchMaxEvents = 5000 |
|
} |
|
if bboltCfg.BatchMaxBytes <= 0 { |
|
bboltCfg.BatchMaxBytes = 128 * 1024 * 1024 // 128MB |
|
} |
|
if bboltCfg.BatchFlushTimeout <= 0 { |
|
bboltCfg.BatchFlushTimeout = 30 * time.Second |
|
} |
|
if bboltCfg.BloomSizeMB <= 0 { |
|
bboltCfg.BloomSizeMB = 16 |
|
} |
|
if bboltCfg.InitialMmapSize <= 0 { |
|
bboltCfg.InitialMmapSize = 8 * 1024 * 1024 * 1024 // 8GB |
|
} |
|
|
|
return NewWithConfig(ctx, cancel, bboltCfg) |
|
}
|
|
|