diff --git a/weed/filer/foundationdb/foundationdb_store.go b/weed/filer/foundationdb/foundationdb_store.go index d55cc192b..87a469a58 100644 --- a/weed/filer/foundationdb/foundationdb_store.go +++ b/weed/filer/foundationdb/foundationdb_store.go @@ -11,7 +11,6 @@ import ( "github.com/apple/foundationdb/bindings/go/src/fdb" "github.com/apple/foundationdb/bindings/go/src/fdb/directory" - "github.com/apple/foundationdb/bindings/go/src/fdb/subspace" "github.com/apple/foundationdb/bindings/go/src/fdb/tuple" "github.com/seaweedfs/seaweedfs/weed/filer" @@ -238,7 +237,8 @@ func (store *FoundationDBStore) FindEntry(ctx context.Context, fullpath util.Ful if tx, exists := store.getTransactionFromContext(ctx); exists { data, err = tx.Get(key).Get() } else { - result, err := store.database.ReadTransact(func(rtr fdb.ReadTransaction) (interface{}, error) { + var result interface{} + result, err = store.database.ReadTransact(func(rtr fdb.ReadTransaction) (interface{}, error) { return rtr.Get(key).Get() }) if err == nil { @@ -331,14 +331,22 @@ func (store *FoundationDBStore) ListDirectoryPrefixedEntries(ctx context.Context } var kvs []fdb.KeyValue + var rangeErr error // Check if there's a transaction in context if tx, exists := store.getTransactionFromContext(ctx); exists { kr := fdb.KeyRange{Begin: fdb.Key(startKey), End: prefixEndFallback(directoryPrefix)} - kvs = tx.GetRange(kr, fdb.RangeOptions{Limit: int(limit)}).GetSliceOrPanic() + kvs, rangeErr = tx.GetRange(kr, fdb.RangeOptions{Limit: int(limit)}).GetSliceWithError() + if rangeErr != nil { + return "", fmt.Errorf("scanning %s: %v", dirPath, rangeErr) + } } else { result, err := store.database.ReadTransact(func(rtr fdb.ReadTransaction) (interface{}, error) { kr := fdb.KeyRange{Begin: fdb.Key(startKey), End: prefixEndFallback(directoryPrefix)} - return rtr.GetRange(kr, fdb.RangeOptions{Limit: int(limit)}).GetSliceOrPanic(), nil + kvSlice, err := rtr.GetRange(kr, fdb.RangeOptions{Limit: int(limit)}).GetSliceWithError() + if err != nil { + return nil, err + } + return kvSlice, nil }) if err != nil { return "", fmt.Errorf("scanning %s: %v", dirPath, err) @@ -402,7 +410,8 @@ func (store *FoundationDBStore) KvGet(ctx context.Context, key []byte) ([]byte, if tx, exists := store.getTransactionFromContext(ctx); exists { data, err = tx.Get(fdbKey).Get() } else { - result, err := store.database.ReadTransact(func(rtr fdb.ReadTransaction) (interface{}, error) { + var result interface{} + result, err = store.database.ReadTransact(func(rtr fdb.ReadTransaction) (interface{}, error) { return rtr.Get(fdbKey).Get() }) if err == nil {