Browse Source

Merge branch 'master' of git://github.com/synrc/kvs

Namdak Tonpa 10 years ago
parent
commit
b76816e9d8
3 changed files with 34 additions and 23 deletions
  1. 1 1
      include/user.hrl
  2. 24 13
      src/kvs.erl
  3. 9 9
      src/store/store_fs.erl

+ 1 - 1
include/user.hrl

@@ -10,7 +10,7 @@
         display_name,
         display_name,
         register_date,
         register_date,
         tokens = [],
         tokens = [],
-        avatar,
+        images,
         names,
         names,
         surnames,
         surnames,
         birth,
         birth,

+ 24 - 13
src/kvs.erl

@@ -67,7 +67,7 @@ create(ContainerName, Id, Driver) ->
     ok = kvs:put(Top3, Driver),
     ok = kvs:put(Top3, Driver),
     Id.
     Id.
 
 
-ensure_link(Record, #kvs{mod=Store}=Driver) ->
+ensure_link(Record, #kvs{mod=_Store}=Driver) ->
 
 
     Id    = element(2,Record),
     Id    = element(2,Record),
     Type  = table_type(element(1,Record)),
     Type  = table_type(element(1,Record)),
@@ -123,13 +123,13 @@ ensure_link(Record, #kvs{mod=Store}=Driver) ->
                     {ok, R3}
                     {ok, R3}
             end.
             end.
 
 
-link(Record,#kvs{mod=Store}=Driver) ->
+link(Record,#kvs{mod=_Store}=Driver) ->
     Id = element(#iterator.id, Record),
     Id = element(#iterator.id, Record),
     case kvs:get(element(1,Record), Id, Driver) of
     case kvs:get(element(1,Record), Id, Driver) of
               {ok, Exists} -> ensure_link(Exists, Driver);
               {ok, Exists} -> ensure_link(Exists, Driver);
         {error, not_found} -> {error, not_found} end.
         {error, not_found} -> {error, not_found} end.
 
 
-add(Record, #kvs{mod=Store}=Driver) when is_tuple(Record) ->
+add(Record, #kvs{mod=_Store}=Driver) when is_tuple(Record) ->
     Id = element(#iterator.id, Record),
     Id = element(#iterator.id, Record),
     case kvs:get(element(1,Record), Id, Driver) of
     case kvs:get(element(1,Record), Id, Driver) of
                 {error, _} -> ensure_link(Record, Driver);
                 {error, _} -> ensure_link(Record, Driver);
@@ -170,17 +170,28 @@ do_remove(E,#kvs{mod=Mod}=Driver) ->
     kvs:info(?MODULE,"Delete: ~p", [E]),
     kvs:info(?MODULE,"Delete: ~p", [E]),
     kvs:delete(element(1,E),element(2,E), Driver).
     kvs:delete(element(1,E),element(2,E), Driver).
 
 
-traversal( _,undefined,_,_,Driver) -> [];
-traversal(_,_,0,_,Driver) -> [];
-traversal(RecordType2, Start, Count, Direction, Driver)->
-    RecordType = table_type(RecordType2),
+traversal(Table, Start, Count, Direction, Driver)->
+    fold(fun(A,Acc) -> [A|Acc] end,[],Table,Start,Count,Direction,Driver).
+
+fold(_Fun,Acc,_,undefined,_,_,_Driver) -> Acc;
+fold(_Fun,Acc,_,_,0,_,_Driver) -> Acc;
+fold(Fun,Acc,Table,Start,Count,Direction,Driver) ->
+    RecordType = table_type(Table),
+    case kvs:get(RecordType, Start, Driver) of
+         {ok, R} -> Prev = element(Direction, R),
+                    Count1 = case Count of C when is_integer(C) -> C - 1; _-> Count end,
+                    fold(Fun, Fun(R,Acc), Table, Prev, Count1, Direction, Driver);
+           Error -> kvs:error(?MODULE,"Error: ~p~n",[Error]), [] end.
+
+fold(Fun,Acc,_,undefined,_,_,Driver) -> [];
+fold(Fun,Acc,_,_,0,_,Driver) -> Acc;
+fold(Fun,Acc,Table,Start,Count,Direction,Driver) ->
+    RecordType = table_type(Table),
     case kvs:get(RecordType, Start, Driver) of
     case kvs:get(RecordType, Start, Driver) of
-    {ok, R} ->  Prev = element(Direction, R),
-                Count1 = case Count of C when is_integer(C) -> C - 1; _-> Count end,
-                [R | traversal(RecordType2, Prev, Count1, Direction, Driver)];
-    Error ->
-     io:format("Error: ~p~n",[Error]),
-      [] end.
+         {ok, R} -> Prev = element(Direction, R),
+                    Count1 = case Count of C when is_integer(C) -> C - 1; _-> Count end,
+                    fold(Fun, Fun(R,Acc), RecordType2, Count1, Direction, Driver);
+           Error -> kvs:error(?MODULE,"Error: ~p~n",[Error]), [] end.
 
 
 entries({error,_},_,_,_)      -> [];
 entries({error,_},_,_,_)      -> [];
 entries({ok,Container},N,C,Driver) -> entries(Container,N,C,Driver);
 entries({ok,Container},N,C,Driver) -> entries(Container,N,C,Driver);

+ 9 - 9
src/store/store_fs.erl

@@ -10,8 +10,8 @@ stop()     -> ok.
 destroy()  -> ok.
 destroy()  -> ok.
 version()  -> {version,"KVS FS"}.
 version()  -> {version,"KVS FS"}.
 dir()      -> [ {table,F} || F <- filelib:wildcard("data/*"), filelib:is_dir(F) ].
 dir()      -> [ {table,F} || F <- filelib:wildcard("data/*"), filelib:is_dir(F) ].
-join(Node) -> filelib:ensure_dir("data/"). % should be rsync or smth
-change_storage(Table,Type) -> ok.
+join(_Node) -> filelib:ensure_dir("data/"). % should be rsync or smth
+change_storage(_Table,_Type) -> ok.
 
 
 initialize() ->
 initialize() ->
     kvs:info(?MODULE,"fs init.~n",[]),
     kvs:info(?MODULE,"fs init.~n",[]),
@@ -19,9 +19,9 @@ initialize() ->
     [ kvs:init(store_fs,Module) || Module <- kvs:modules() ],
     [ kvs:init(store_fs,Module) || Module <- kvs:modules() ],
     mnesia:wait_for_tables([ T#table.name || T <- kvs:tables()],infinity).
     mnesia:wait_for_tables([ T#table.name || T <- kvs:tables()],infinity).
 
 
-index(Tab,Key,Value) -> ok.
+index(_Tab,_Key,_Value) -> ok.
 get(TableName, Key) ->
 get(TableName, Key) ->
-    HashKey = encode(base64:encode(crypto:sha(term_to_binary(Key)))),
+    HashKey = encode(base64:encode(crypto:hash(sha, term_to_binary(Key)))),
     Dir = lists:concat(["data/",TableName,"/"]),
     Dir = lists:concat(["data/",TableName,"/"]),
     case file:read_file(lists:concat([Dir,HashKey])) of
     case file:read_file(lists:concat([Dir,HashKey])) of
          {ok,Binary} -> {ok,binary_to_term(Binary,[safe])};
          {ok,Binary} -> {ok,binary_to_term(Binary,[safe])};
@@ -30,22 +30,22 @@ get(TableName, Key) ->
 put(Records) when is_list(Records) -> lists:map(fun(Record) -> put(Record) end, Records);
 put(Records) when is_list(Records) -> lists:map(fun(Record) -> put(Record) end, Records);
 put(Record) ->
 put(Record) ->
     TableName = element(1,Record),
     TableName = element(1,Record),
-    HashKey = encode(base64:encode(crypto:sha(term_to_binary(element(2,Record))))),
+    HashKey = encode(base64:encode(crypto:hash(sha, term_to_binary(element(2,Record))))),
     BinaryValue = term_to_binary(Record),
     BinaryValue = term_to_binary(Record),
     Dir = lists:concat(["data/",TableName,"/"]),
     Dir = lists:concat(["data/",TableName,"/"]),
     filelib:ensure_dir(Dir),
     filelib:ensure_dir(Dir),
     File = lists:concat([Dir,HashKey]),
     File = lists:concat([Dir,HashKey]),
     file:write_file(File,BinaryValue,[write,raw,binary,sync]).
     file:write_file(File,BinaryValue,[write,raw,binary,sync]).
 
 
-delete(Tab, Key) -> ok.
+delete(_Tab, _Key) -> ok.
 count(RecordName) -> length(filelib:fold_files(lists:concat(["data/",RecordName]), "",true, fun(A,Acc)-> [A|Acc] end, [])).
 count(RecordName) -> length(filelib:fold_files(lists:concat(["data/",RecordName]), "",true, fun(A,Acc)-> [A|Acc] end, [])).
 all(R) -> lists:flatten([ begin case file:read_file(File) of
 all(R) -> lists:flatten([ begin case file:read_file(File) of
                         {ok,Binary} -> binary_to_term(Binary,[safe]);
                         {ok,Binary} -> binary_to_term(Binary,[safe]);
-                        {error,Reason} -> [] end end || File <-
+                        {error,_Reason} -> [] end end || File <-
       filelib:fold_files(lists:concat(["data/",R]), "",true, fun(A,Acc)-> [A|Acc] end, []) ]).
       filelib:fold_files(lists:concat(["data/",R]), "",true, fun(A,Acc)-> [A|Acc] end, []) ]).
 next_id(RecordName, Incr) -> store_mnesia:next_id(RecordName, Incr).
 next_id(RecordName, Incr) -> store_mnesia:next_id(RecordName, Incr).
-create_table(Name,Options) -> filelib:ensure_dir(lists:concat(["data/",Name,"/"])).
-add_table_index(Record, Field) -> ok.
+create_table(Name,_Options) -> filelib:ensure_dir(lists:concat(["data/",Name,"/"])).
+add_table_index(_Record, _Field) -> ok.
 
 
 % URL ENCODE
 % URL ENCODE