aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2022-07-21 18:48:51 -0700
committerchrislu <chris.lu@gmail.com>2022-07-21 18:48:51 -0700
commitfc8241fb5e40c82ca0b645c4f5c7ddcea1362336 (patch)
tree8bf7da1360ae93f9cc64f5016879243fe0ad84e1
parentc93f7ffa44b294ceef242700dce3288eb8569ced (diff)
downloadseaweedfs-fc8241fb5e40c82ca0b645c4f5c7ddcea1362336.tar.xz
seaweedfs-fc8241fb5e40c82ca0b645c4f5c7ddcea1362336.zip
leveldb3: add instant dropping bucket
-rw-r--r--weed/filer/leveldb3/leveldb3_store.go16
-rw-r--r--weed/filer/leveldb3/leveldb3_store_bucket.go23
2 files changed, 35 insertions, 4 deletions
diff --git a/weed/filer/leveldb3/leveldb3_store.go b/weed/filer/leveldb3/leveldb3_store.go
index d21515bd4..8da4a9e7f 100644
--- a/weed/filer/leveldb3/leveldb3_store.go
+++ b/weed/filer/leveldb3/leveldb3_store.go
@@ -121,23 +121,31 @@ func (store *LevelDB3Store) findDB(fullpath weed_util.FullPath, isForChildren bo
}
store.dbsLock.RUnlock()
- // upgrade to write lock
+
+ db, err := store.createDB(bucket)
+
+ return db, bucket, shortPath, err
+}
+
+func (store *LevelDB3Store) createDB(bucket string) (*leveldb.DB, error) {
+
store.dbsLock.Lock()
defer store.dbsLock.Unlock()
// double check after getting the write lock
if db, found := store.dbs[bucket]; found {
- return db, bucket, shortPath, nil
+ return db, nil
}
// create db
db, err := store.loadDB(bucket)
if err != nil {
- return nil, bucket, shortPath, err
+ return nil, err
}
+
store.dbs[bucket] = db
- return db, bucket, shortPath, nil
+ return db, nil
}
func (store *LevelDB3Store) closeDB(bucket string) {
diff --git a/weed/filer/leveldb3/leveldb3_store_bucket.go b/weed/filer/leveldb3/leveldb3_store_bucket.go
new file mode 100644
index 000000000..823fe363b
--- /dev/null
+++ b/weed/filer/leveldb3/leveldb3_store_bucket.go
@@ -0,0 +1,23 @@
+package leveldb
+
+import (
+ "github.com/chrislusf/seaweedfs/weed/filer"
+ "os"
+)
+
+var _ filer.BucketAware = (*LevelDB3Store)(nil)
+
+func (store *LevelDB3Store) OnBucketCreation(bucket string) {
+ store.createDB(bucket)
+}
+
+func (store *LevelDB3Store) OnBucketDeletion(bucket string) {
+ store.closeDB(bucket)
+ if bucket != "" { // just to make sure
+ os.RemoveAll(store.dir + "/" + bucket)
+ }
+}
+
+func (store *LevelDB3Store) CanDropWholeBucket() bool {
+ return true
+}