Agate/stores/stores.go
Alexander Lazarenko 7e9cea9227
Add initial implementation of Agate snapshot library
Introduces core functionality for the Agate library, including snapshot creation, restoration, listing, and deletion. Adds examples for basic usage, gRPC proto definitions, and build/configuration files such as `go.mod` and `Makefile`. The implementation establishes the framework for store integration and placeholder server functionality.
2025-04-24 02:44:16 +03:00

42 lines
1.3 KiB
Go

package stores
import (
"fmt"
"path/filepath"
"unprism.ru/KRBL/agate/store"
"unprism.ru/KRBL/agate/store/filesystem"
"unprism.ru/KRBL/agate/store/sqlite"
)
// NewDefaultMetadataStore creates a new SQLite-based metadata store.
func NewDefaultMetadataStore(metadataDir string) (store.MetadataStore, error) {
dbPath := filepath.Join(metadataDir, "snapshots.db")
return sqlite.NewSQLiteStore(dbPath)
}
// NewDefaultBlobStore creates a new filesystem-based blob store.
func NewDefaultBlobStore(blobsDir string) (store.BlobStore, error) {
return filesystem.NewFileSystemStore(blobsDir)
}
// InitDefaultStores initializes both metadata and blob stores with default implementations.
// Returns the initialized stores or an error if initialization fails.
func InitDefaultStores(baseDir string) (store.MetadataStore, store.BlobStore, error) {
metadataDir := filepath.Join(baseDir, "metadata")
blobsDir := filepath.Join(baseDir, "blobs")
metadataStore, err := NewDefaultMetadataStore(metadataDir)
if err != nil {
return nil, nil, fmt.Errorf("failed to initialize metadata store: %w", err)
}
blobStore, err := NewDefaultBlobStore(blobsDir)
if err != nil {
// Clean up if blob store initialization fails
metadataStore.Close()
return nil, nil, fmt.Errorf("failed to initialize blob store: %w", err)
}
return metadataStore, blobStore, nil
}