SunRiseGG 3 years ago
parent
commit
21af66ffab
5 changed files with 14 additions and 7 deletions
  1. 1 0
      config/config.exs
  2. 1 1
      mix.exs
  3. 1 0
      src/kvs.erl
  4. 5 2
      src/stores/kvs_mnesia.erl
  5. 6 4
      src/stores/kvs_rocks.erl

+ 1 - 0
config/config.exs

@@ -4,4 +4,5 @@ config :kvs,
   dba: :kvs_rocks,
   dba_st: :kvs_st,
   dba_seq: :kvs_rocks,
+  seq_pad: [],
   schema: [:kvs, :kvs_stream]

+ 1 - 1
mix.exs

@@ -4,7 +4,7 @@ defmodule KVS.Mixfile do
   def project do
     [
       app: :kvs,
-      version: "9.4.4",
+      version: "9.4.5",
       description: "KVS Abstract Chain Database",
       package: package(),
       deps: deps()

+ 1 - 0
src/kvs.erl

@@ -97,6 +97,7 @@ dir() -> dir(#kvs{mod = dba()}).
 feed(Key) ->
     feed(Key, #kvs{mod = dba(), st = kvs_stream(), db = db()}).
 
+seq([], DX)    -> seq([], DX, #kvs{mod = kvs_rocks});
 seq(Table, DX) -> seq(Table, DX, #kvs{mod = seq_dba()}).
 
 remove(Rec, Feed) ->

+ 5 - 2
src/stores/kvs_mnesia.erl

@@ -8,6 +8,7 @@
 -export([info/1,exec/1,dump/1]).
 
 db()       -> "".
+seq_pad()  -> application:get_env(kvs, seq_pad, []).
 start()    -> mnesia:start().
 stop()     -> mnesia:stop().
 destroy()  -> [mnesia:delete_table(T)||{_,T}<-kvs:dir()], mnesia:delete_schema([node()]), ok.
@@ -46,8 +47,10 @@ delete(Tab, Key, _) ->
         _ -> ok end.
 count(RecordName) -> mnesia:table_info(RecordName, size).
 all(R, _) -> lists:flatten(many(fun() -> L= mnesia:all_keys(R), [ mnesia:read({R, G}) || G <- L ] end)).
-seq([],[]) -> seq(system, 1);
-seq(RecordName, Incr) -> mnesia:dirty_update_counter({id_seq, RecordName}, Incr).
+seq(RecordName, []) -> seq(RecordName, 1);
+seq(RecordName, Incr) ->
+  Val = mnesia:dirty_update_counter({id_seq, RecordName}, Incr),
+  case 20 - length(Val) > 0 and lists:member(RecordName, seq_pad()) of true -> string:copies("0", 20 - length(Val)); _ -> "" end ++ Val.
 
 many(Fun) -> case mnesia:activity(context(),Fun) of {atomic, [R]} -> R; {aborted, Error} -> {error, Error}; X -> X end.
 void(Fun) -> case mnesia:activity(context(),Fun) of {atomic, ok} -> ok; {aborted, Error} -> {error, Error}; X -> X end.

+ 6 - 4
src/stores/kvs_rocks.erl

@@ -152,7 +152,9 @@ add_table_index(_, _) -> ok.
 dump() -> ok.
 
 seq(_,_) ->
-  case os:type() of
-    {win32,nt} -> {Mega,Sec,Micro} = erlang:timestamp(), (Mega*1000000+Sec)*1000000+Micro;
-    _ -> element(2,hd(lists:reverse(erlang:system_info(os_system_time_source))))
-  end.
+  Val =
+    case os:type() of
+      {win32,nt} -> {Mega,Sec,Micro} = erlang:timestamp(), integer_to_list((Mega*1000000+Sec)*1000000+Micro);
+      _ -> integer_to_list(element(2,hd(lists:reverse(erlang:system_info(os_system_time_source)))))
+    end,
+  case 20 - length(Val) > 0 of true -> string:copies("0", 20 - length(Val)); _ -> "" end ++ Val.