From 64b9d362cfc6b011c4e0da28c01de5beeb2105b3 Mon Sep 17 00:00:00 2001 From: Abhishek Pandey Date: Tue, 22 Aug 2023 17:01:25 +0530 Subject: [PATCH] Add poc for local fs repos --- src/internal/kopia/conn.go | 6 ++++++ src/internal/kopia/s3.go | 19 +++++++++++++++++++ src/pkg/storage/storage.go | 1 + 3 files changed, 26 insertions(+) diff --git a/src/internal/kopia/conn.go b/src/internal/kopia/conn.go index 1703b466d..e60201d22 100644 --- a/src/internal/kopia/conn.go +++ b/src/internal/kopia/conn.go @@ -96,6 +96,8 @@ func (w *conn) Initialize( opts repository.Options, retentionOpts repository.Retention, ) error { + w.storage.Provider = storage.ProviderFS + bst, err := blobStoreByProvider(ctx, opts, w.storage) if err != nil { return clues.Wrap(err, "initializing storage") @@ -154,6 +156,8 @@ func (w *conn) Initialize( } func (w *conn) Connect(ctx context.Context, opts repository.Options) error { + w.storage.Provider = storage.ProviderFS + bst, err := blobStoreByProvider(ctx, opts, w.storage) if err != nil { return clues.Wrap(err, "initializing storage") @@ -225,6 +229,8 @@ func blobStoreByProvider( switch s.Provider { case storage.ProviderS3: return s3BlobStorage(ctx, opts, s) + case storage.ProviderFS: + return localFSBlobStorage(ctx, opts, s) default: return nil, clues.New("storage provider details are required").WithClues(ctx) } diff --git a/src/internal/kopia/s3.go b/src/internal/kopia/s3.go index adad4330e..d62811941 100644 --- a/src/internal/kopia/s3.go +++ b/src/internal/kopia/s3.go @@ -2,9 +2,11 @@ package kopia import ( "context" + "os" "github.com/alcionai/clues" "github.com/kopia/kopia/repo/blob" + "github.com/kopia/kopia/repo/blob/filesystem" "github.com/kopia/kopia/repo/blob/s3" "github.com/alcionai/corso/src/pkg/control/repository" @@ -54,3 +56,20 @@ func s3BlobStorage( return store, nil } + +func localFSBlobStorage( + ctx context.Context, + repoOpts repository.Options, + s storage.Storage, +) (blob.Storage, error) { + opts := filesystem.Options{ + Path: os.Getenv("filesystem_path"), + } + + store, err := filesystem.New(ctx, &opts, false) + if err != nil { + return nil, clues.Stack(err).WithClues(ctx) + } + + return store, nil +} diff --git a/src/pkg/storage/storage.go b/src/pkg/storage/storage.go index e197f4081..94c371eb3 100644 --- a/src/pkg/storage/storage.go +++ b/src/pkg/storage/storage.go @@ -14,6 +14,7 @@ type storageProvider int const ( ProviderUnknown storageProvider = 0 // Unknown Provider ProviderS3 storageProvider = 1 // S3 + ProviderFS storageProvider = 2 // local or network attached file system ) // storage parsing errors