diff options
| -rw-r--r-- | docker/Makefile | 5 | ||||
| -rw-r--r-- | docker/compose/test-etcd-filer.yml | 61 | ||||
| -rw-r--r-- | weed/filer/etcd/etcd_store.go | 2 | ||||
| -rw-r--r-- | weed/filer/etcd/etcd_store_test.go | 14 | ||||
| -rw-r--r-- | weed/filer/store_test/test_suite.go | 68 |
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, + }, + } +} |
