aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docker/Makefile5
-rw-r--r--docker/compose/test-etcd-filer.yml61
-rw-r--r--weed/filer/etcd/etcd_store.go2
-rw-r--r--weed/filer/etcd/etcd_store_test.go14
-rw-r--r--weed/filer/store_test/test_suite.go68
5 files changed, 148 insertions, 2 deletions
diff --git a/docker/Makefile b/docker/Makefile
index b46dcedf1..a1e82a338 100644
--- a/docker/Makefile
+++ b/docker/Makefile
@@ -67,6 +67,9 @@ s3tests: build s3tests_build
filer_etcd: build
docker stack deploy -c compose/swarm-etcd.yml fs
+test_etcd: build
+ docker-compose -f compose/test-etcd-filer.yml -p seaweedfs up
+
clean:
rm ./weed
@@ -80,4 +83,4 @@ certstrap:
certstrap --depot-path compose/tls sign --CA "SeaweedFS CA" volume01.dev || true
certstrap --depot-path compose/tls sign --CA "SeaweedFS CA" master01.dev || true
certstrap --depot-path compose/tls sign --CA "SeaweedFS CA" filer01.dev || true
- certstrap --depot-path compose/tls sign --CA "SeaweedFS CA" client01.dev || true \ No newline at end of file
+ certstrap --depot-path compose/tls sign --CA "SeaweedFS CA" client01.dev || true
diff --git a/docker/compose/test-etcd-filer.yml b/docker/compose/test-etcd-filer.yml
new file mode 100644
index 000000000..400bd0fae
--- /dev/null
+++ b/docker/compose/test-etcd-filer.yml
@@ -0,0 +1,61 @@
+version: '2'
+
+services:
+ etcd:
+ image: quay.io/coreos/etcd:v3.5.4
+ command: "etcd --advertise-client-urls http://etcd:2379 --listen-client-urls http://0.0.0.0:2379"
+ ports:
+ - 2379:2379
+ master:
+ image: chrislusf/seaweedfs:local
+ ports:
+ - 9333:9333
+ - 19333:19333
+ command: "master -ip=master -volumeSizeLimitMB=1024"
+ volume:
+ image: chrislusf/seaweedfs:local
+ ports:
+ - 8080:8080
+ - 18080:18080
+ command: "volume -mserver=master:9333 -port=8080 -ip=volume -max=0 -preStopSeconds=1"
+ depends_on:
+ - master
+ s3:
+ image: chrislusf/seaweedfs:local
+ ports:
+ - 8888:8888
+ - 18888:18888
+ - 8333:8333
+ command: '-v 9 filer -master="master:9333" -s3 -s3.config=/etc/seaweedfs/s3.json -s3.port=8333'
+ environment:
+ WEED_LEVELDB2_ENABLED: 'false'
+ WEED_ETCD_ENABLED: 'true'
+ WEED_ETCD_SERVERS: "http://etcd:2379"
+ volumes:
+ - ./s3.json:/etc/seaweedfs/s3.json
+ depends_on:
+ - etcd
+ - master
+ - volume
+ registry:
+ image: registry:2
+ environment:
+ REGISTRY_HTTP_ADDR: "0.0.0.0:5001" # seaweedfs s3
+ REGISTRY_LOG_LEVEL: "debug"
+ REGISTRY_STORAGE: "s3"
+ REGISTRY_STORAGE_S3_REGION: "us-east-1"
+ REGISTRY_STORAGE_S3_REGIONENDPOINT: "http://s3:8333"
+ REGISTRY_STORAGE_S3_BUCKET: "registry"
+ REGISTRY_STORAGE_S3_ACCESSKEY: "some_access_key1"
+ REGISTRY_STORAGE_S3_SECRETKEY: "some_secret_key1"
+ REGISTRY_STORAGE_S3_V4AUTH: "true"
+ REGISTRY_STORAGE_S3_SECURE: "false"
+ REGISTRY_STORAGE_S3_SKIPVERIFY: "true"
+ REGISTRY_STORAGE_S3_ROOTDIRECTORY: "/"
+ REGISTRY_STORAGE_DELETE_ENABLED: "true"
+ REGISTRY_STORAGE_REDIRECT_DISABLE: "true"
+ REGISTRY_VALIDATION_DISABLED: "true"
+ ports:
+ - 5001:5001
+ depends_on:
+ - s3
diff --git a/weed/filer/etcd/etcd_store.go b/weed/filer/etcd/etcd_store.go
index 4146a3899..1912bcd6d 100644
--- a/weed/filer/etcd/etcd_store.go
+++ b/weed/filer/etcd/etcd_store.go
@@ -152,7 +152,7 @@ func (store *EtcdStore) ListDirectoryEntries(ctx context.Context, dirPath weed_u
}
resp, err := store.client.Get(ctx, string(lastFileStart),
- clientv3.WithPrefix(), clientv3.WithSort(clientv3.SortByKey, clientv3.SortDescend))
+ clientv3.WithFromKey())
if err != nil {
return lastFileName, fmt.Errorf("list %s : %v", dirPath, err)
}
diff --git a/weed/filer/etcd/etcd_store_test.go b/weed/filer/etcd/etcd_store_test.go
new file mode 100644
index 000000000..86b8e3155
--- /dev/null
+++ b/weed/filer/etcd/etcd_store_test.go
@@ -0,0 +1,14 @@
+package etcd
+
+import (
+ "github.com/chrislusf/seaweedfs/weed/filer/store_test"
+ "testing"
+)
+
+func TestStore(t *testing.T) {
+ if false {
+ store := &EtcdStore{}
+ store.initialize("localhost:2379", "3s")
+ store_test.TestFilerStore(t, store)
+ }
+}
diff --git a/weed/filer/store_test/test_suite.go b/weed/filer/store_test/test_suite.go
new file mode 100644
index 000000000..6b1b60f5e
--- /dev/null
+++ b/weed/filer/store_test/test_suite.go
@@ -0,0 +1,68 @@
+package store_test
+
+import (
+ "context"
+ "github.com/chrislusf/seaweedfs/weed/filer"
+ "github.com/chrislusf/seaweedfs/weed/util"
+ "github.com/stretchr/testify/assert"
+ "os"
+ "testing"
+)
+
+func TestFilerStore(t *testing.T, store filer.FilerStore) {
+ ctx := context.Background()
+
+ store.InsertEntry(ctx, makeEntry(util.FullPath("/"), true))
+ store.InsertEntry(ctx, makeEntry(util.FullPath("/a"), true))
+ store.InsertEntry(ctx, makeEntry(util.FullPath("/a/b"), true))
+ store.InsertEntry(ctx, makeEntry(util.FullPath("/a/b/c"), true))
+ store.InsertEntry(ctx, makeEntry(util.FullPath("/a/b/c/f1"), false))
+ store.InsertEntry(ctx, makeEntry(util.FullPath("/a/b/c/f2"), false))
+ store.InsertEntry(ctx, makeEntry(util.FullPath("/a/b/c/f3"), false))
+ store.InsertEntry(ctx, makeEntry(util.FullPath("/a/b/c/f4"), false))
+ store.InsertEntry(ctx, makeEntry(util.FullPath("/a/b/c/f5"), false))
+
+ {
+ var counter int
+ lastFileName, err := store.ListDirectoryEntries(ctx, util.FullPath("/a/b/c"), "", false, 3, func(entry *filer.Entry) bool {
+ counter++
+ return true
+ })
+ if err != nil {
+ t.Errorf("list directory: %v", err)
+ }
+ if counter != 3 {
+ assert.Equal(t, 3, counter, "directory list counter")
+ }
+ if lastFileName != "f3" {
+ assert.Equal(t, "f3", lastFileName, "directory list last file")
+ }
+ lastFileName, err = store.ListDirectoryEntries(ctx, util.FullPath("/a/b/c"), lastFileName, false, 3, func(entry *filer.Entry) bool {
+ counter++
+ return true
+ })
+ if err != nil {
+ t.Errorf("list directory: %v", err)
+ }
+ if counter != 5 {
+ assert.Equal(t, 5, counter, "directory list counter")
+ }
+ if lastFileName != "f5" {
+ assert.Equal(t, "f5", lastFileName, "directory list last file")
+ }
+ }
+
+}
+
+func makeEntry(fullPath util.FullPath, isDirectory bool) *filer.Entry {
+ var mode os.FileMode
+ if isDirectory {
+ mode = os.ModeDir
+ }
+ return &filer.Entry{
+ FullPath: fullPath,
+ Attr: filer.Attr{
+ Mode: mode,
+ },
+ }
+}