Agate/store/store.go
Alexander Lazarenko b05058b5cd
Add active directory management for snapshot operations
Introduced `GetActiveDir` and `CleanActiveDir` methods in the blob store to manage a dedicated directory for active snapshot operations. This ensures a clean working state before starting new operations and prevents conflicts. Updated related logic in snapshot creation and restoration to utilize the active directory.
2025-05-10 00:57:34 +03:00

82 lines
4.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package store
import (
"context"
"io"
"time"
)
// FileInfo represents metadata and attributes of a file or directory.
type FileInfo struct {
Path string // Path represents the relative or absolute location of the file or directory in the filesystem.
Size int64 // Size represents the size of the file in bytes.
IsDir bool // IsDir indicates whether the FileInfo represents a directory.
SHA256 string // SHA256 represents the SHA-256 checksum of the file for integrity verification.
}
// Snapshot represents a point-in-time capture of file system metadata and hierarchy.
type Snapshot struct {
ID string // ID is the unique identifier of the snapshot.
Name string // Name is the user-defined name of the snapshot.
ParentID string // ParentID is the unique identifier of the parent snapshot, if one exists.
CreationTime time.Time // CreationTime is the timestamp indicating when the snapshot was created.
Files []FileInfo // Files represents a list of file metadata contained in the snapshot.
}
// SnapshotInfo provides basic metadata about a snapshot, including its ID, name, parent snapshot, and creation time.
type SnapshotInfo struct {
ID string // Уникальный идентификатор
Name string // Имя снапшота
ParentID string // ID родительского снапшота
CreationTime time.Time // Время создания
}
// MetadataStore определяет интерфейс для хранения и извлечения метаданных снапшотов.
type MetadataStore interface {
// SaveSnapshotMetadata сохраняет полные метаданные снапшота, включая список файлов.
// Если снапшот с таким ID уже существует, он должен быть перезаписан.
SaveSnapshotMetadata(ctx context.Context, snap Snapshot) error
// GetSnapshotMetadata извлекает полные метаданные снапшота по его ID.
// Возвращает agate.ErrNotFound, если снапшот не найден.
GetSnapshotMetadata(ctx context.Context, snapshotID string) (*Snapshot, error)
// ListSnapshotsMetadata извлекает краткую информацию обо всех снапшотах.
ListSnapshotsMetadata(ctx context.Context) ([]SnapshotInfo, error)
// DeleteSnapshotMetadata удаляет метаданные снапшота по его ID.
// Не должен возвращать ошибку, если снапшот не найден.
DeleteSnapshotMetadata(ctx context.Context, snapshotID string) error
// Close закрывает соединение с хранилищем метаданных.
Close() error
}
// BlobStore определяет интерфейс для хранения и извлечения самих данных снапшотов (архивов).
type BlobStore interface {
// StoreBlob сохраняет данные из reader как блоб для указанного snapshotID.
// Возвращает путь или идентификатор сохраненного блоба и ошибку.
StoreBlob(ctx context.Context, snapshotID string, reader io.Reader) (path string, err error)
// RetrieveBlob возвращает io.ReadCloser для чтения содержимого блоба по snapshotID.
// Вызывающая сторона ОБЯЗАНА закрыть ReadCloser.
// Возвращает snapshot.ErrNotFound, если блоб не найден.
RetrieveBlob(ctx context.Context, snapshotID string) (io.ReadCloser, error)
// DeleteBlob удаляет блоб, связанный с snapshotID.
// Не должен возвращать ошибку, если блоб не найден.
DeleteBlob(ctx context.Context, snapshotID string) error
// GetBlobPath возвращает путь к файлу блоба в файловой системе.
// Это может быть полезно для функций пакета archive, которые работают с путями.
// Возвращает agate.ErrNotFound, если блоб не найден.
GetBlobPath(ctx context.Context, snapshotID string) (string, error)
// GetActiveDir возвращает путь к директории для активных операций (создание и восстановление).
GetActiveDir() string
// CleanActiveDir очищает директорию для активных операций.
// Это полезно перед началом новых операций, чтобы избежать конфликтов.
CleanActiveDir(ctx context.Context) error
}