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.
This commit is contained in:
@ -14,16 +14,27 @@ const blobExtension = ".zip"
|
||||
|
||||
// fileSystemStore реализует интерфейс store.BlobStore с использованием локальной файловой системы.
|
||||
type fileSystemStore struct {
|
||||
baseDir string // Директория для хранения блобов (архивов)
|
||||
baseDir string // Директория для хранения блобов (архивов)
|
||||
activeDir string // Директория для активных операций (создание и восстановление)
|
||||
}
|
||||
|
||||
// NewFileSystemStore создает новое хранилище блобов в указанной директории.
|
||||
func NewFileSystemStore(baseDir string) (store.BlobStore, error) {
|
||||
// Убедимся, что директория существует
|
||||
// Убедимся, что базовая директория существует
|
||||
if err := os.MkdirAll(baseDir, 0755); err != nil {
|
||||
return nil, fmt.Errorf("failed to create base directory %s for filesystem blob store: %w", baseDir, err)
|
||||
}
|
||||
return &fileSystemStore{baseDir: baseDir}, nil
|
||||
|
||||
// Создаем директорию для активных операций внутри базовой директории
|
||||
activeDir := filepath.Join(baseDir, "active")
|
||||
if err := os.MkdirAll(activeDir, 0755); err != nil {
|
||||
return nil, fmt.Errorf("failed to create active directory %s for filesystem blob store: %w", activeDir, err)
|
||||
}
|
||||
|
||||
return &fileSystemStore{
|
||||
baseDir: baseDir,
|
||||
activeDir: activeDir,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// getBlobPath формирует полный путь к файлу блоба.
|
||||
@ -106,3 +117,27 @@ func (fs *fileSystemStore) GetBlobPath(ctx context.Context, snapshotID string) (
|
||||
// Файл существует, возвращаем путь
|
||||
return blobPath, nil
|
||||
}
|
||||
|
||||
// GetActiveDir возвращает путь к директории для активных операций.
|
||||
func (fs *fileSystemStore) GetActiveDir() string {
|
||||
return fs.activeDir
|
||||
}
|
||||
|
||||
// CleanActiveDir очищает директорию для активных операций.
|
||||
// Это полезно перед началом новых операций, чтобы избежать конфликтов.
|
||||
func (fs *fileSystemStore) CleanActiveDir(ctx context.Context) error {
|
||||
// Удаляем все файлы в активной директории, но сохраняем саму директорию
|
||||
entries, err := os.ReadDir(fs.activeDir)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to read active directory: %w", err)
|
||||
}
|
||||
|
||||
for _, entry := range entries {
|
||||
path := filepath.Join(fs.activeDir, entry.Name())
|
||||
if err := os.RemoveAll(path); err != nil {
|
||||
return fmt.Errorf("failed to remove %s from active directory: %w", path, err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user