Browse Source

handle iterator failure on first stage

dxt 4 years ago
parent
commit
a05defe03a
2 changed files with 5 additions and 4 deletions
  1. 4 3
      src/stores/kvs_rocks.erl
  2. 1 1
      src/stores/kvs_st.erl

+ 4 - 3
src/stores/kvs_rocks.erl

@@ -29,8 +29,8 @@ fmt(K) -> Key = tb(K),
   {S,E} = case binary:matches(Key, [<<"/">>], []) of
   {S,E} = case binary:matches(Key, [<<"/">>], []) of
     [{0,1}]         -> {1, End-1};
     [{0,1}]         -> {1, End-1};
     [{0,1},{1,1}]   -> {2, End-2};
     [{0,1},{1,1}]   -> {2, End-2};
-    [{0,1},{1,1}|T] -> {2, End-2};
-    [{0,1}|T]       -> {1, End-1};
+    [{0,1},{1,1}|_] -> {2, End-2};
+    [{0,1}|_]       -> {1, End-1};
     _               -> {0, End}
     _               -> {0, End}
   end,
   end,
   binary:part(Key,{S,E}).
   binary:part(Key,{S,E}).
@@ -79,7 +79,8 @@ o(Key, % key
   catch case lists:foldl(State_Machine, {ref(), []}, Compiled_Operations) of
   catch case lists:foldl(State_Machine, {ref(), []}, Compiled_Operations) of
     {{ok,K,Bin},_,A}  -> {ok, fd(K),  bt(Bin), [bt(A1) || A1 <- A]};
     {{ok,K,Bin},_,A}  -> {ok, fd(K),  bt(Bin), [bt(A1) || A1 <- A]};
     {{ok,K,Bin},_}    -> {ok, fd(K),  bt(Bin), []};
     {{ok,K,Bin},_}    -> {ok, fd(K),  bt(Bin), []};
-    {{error,_},_,Acc} -> {ok, fd(SK), bt(shd(Acc)), [bt(A1) || A1 <- Acc]}
+    {{error,_},_,Acc} -> {ok, fd(SK), bt(shd(Acc)), [bt(A1) || A1 <- Acc]};
+    {{error,_},_}     -> {ok, fd(SK), [], []}
   end.
   end.
 
 
 initialize() -> [ kvs:initialize(kvs_rocks,Module) || Module <- kvs:modules() ].
 initialize() -> [ kvs:initialize(kvs_rocks,Module) || Module <- kvs:modules() ].

+ 1 - 1
src/stores/kvs_st.erl

@@ -19,7 +19,7 @@ f2(Feed) -> X = tb(Feed),
 
 
 read_it(C,{ok,_,[],H}) -> C#reader{cache=[], args=lists:reverse(H)};
 read_it(C,{ok,_,[],H}) -> C#reader{cache=[], args=lists:reverse(H)};
 read_it(C,{ok,F,V,H})  -> C#reader{cache={e(1,V),id(V),F}, args=lists:reverse(H)};
 read_it(C,{ok,F,V,H})  -> C#reader{cache={e(1,V),id(V),F}, args=lists:reverse(H)};
-read_it(C,_) -> C.
+read_it(C,_) -> C#reader{args=[]}.
 
 
 top(#reader{feed=Feed}=C) -> #writer{count=Cn} = writer(f2(Feed)), read_it(C#reader{count=Cn},seek_it(Feed)).
 top(#reader{feed=Feed}=C) -> #writer{count=Cn} = writer(f2(Feed)), read_it(C#reader{count=Cn},seek_it(Feed)).
 bot(#reader{feed=Feed}=C) -> #writer{cache=Ch, count=Cn} = writer(f2(Feed)), C#reader{cache=Ch, count=Cn}.
 bot(#reader{feed=Feed}=C) -> #writer{cache=Ch, count=Cn} = writer(f2(Feed)), C#reader{cache=Ch, count=Cn}.