diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/db.erl | 19 | ||||
-rw-r--r-- | src/frontend.erl | 12 | ||||
-rw-r--r-- | src/storage.erl | 2 |
3 files changed, 27 insertions, 6 deletions
@@ -7,7 +7,7 @@ %% API. -export([start_link/0, stop/0]). -export([create_size_table/0]). --export([add/2, add_entryhash/2, set_treesize/1, size/0]). +-export([add_entry_sync/2, add_entry_nosync/2, sync_entry_db/0, add_entryhash/2, set_treesize/1, size/0]). -export([add_index_nosync_noreverse/2]). -export([verifiedsize/0, set_verifiedsize/1]). -export([sendsth_verified/0, set_sendsth_verified/2]). @@ -75,14 +75,27 @@ stop() -> %%%%%%%%%%%%%%%%%%%% %% Public API. --spec add(binary(), binary()) -> ok. -add(LeafHash, Data) -> +-spec add_entry_sync(binary(), binary()) -> ok. +add_entry_sync(LeafHash, Data) -> lager:debug("add leafhash ~s", [mochihex:to_hex(LeafHash)]), ok = perm:addvalue(entry_db, LeafHash, Data), perm:commit(entry_db), lager:debug("leafhash ~s added", [mochihex:to_hex(LeafHash)]), ok. +-spec add_entry_nosync(binary(), binary()) -> ok. +add_entry_nosync(LeafHash, Data) -> + lager:debug("add leafhash ~s", [mochihex:to_hex(LeafHash)]), + ok = perm:addvalue(entry_db, LeafHash, Data), + lager:debug("leafhash ~s added", [mochihex:to_hex(LeafHash)]), + ok. + +sync_entry_db() -> + lager:debug("committing entry db"), + perm:commit(entry_db), + lager:debug("committed entry db"), + ok. + -spec add_entryhash(binary(), binary()) -> ok | differ. add_entryhash(LeafHash, EntryHash) -> perm:addvalue(entryhash_db, EntryHash, LeafHash). diff --git a/src/frontend.erl b/src/frontend.erl index 3dd178f..3b7c15b 100644 --- a/src/frontend.erl +++ b/src/frontend.erl @@ -15,7 +15,7 @@ request(post, "plop/v1/frontend/sendentry", Input) -> LogEntry = base64:decode(proplists:get_value(<<"entry">>, PropList)), TreeLeafHash = base64:decode(proplists:get_value(<<"treeleafhash">>, PropList)), - ok = db:add(TreeLeafHash, LogEntry), + ok = db:add_entry_sync(TreeLeafHash, LogEntry), success({[{result, <<"ok">>}]}) end; @@ -83,11 +83,19 @@ request(post, "plop/v1/merge/sendentry", Input) -> case (catch mochijson2:decode(Input)) of {error, E} -> html("sendentry: bad input:", E); + Entries when is_list(Entries) -> + lists:map(fun ({struct, PropList}) -> + LogEntry = base64:decode(proplists:get_value(<<"entry">>, PropList)), + TreeLeafHash = base64:decode(proplists:get_value(<<"treeleafhash">>, PropList)), + ok = db:add_entry_nosync(TreeLeafHash, LogEntry) + end, Entries), + ok = db:sync_entry_db(), + success({[{result, <<"ok">>}]}); {struct, PropList} -> LogEntry = base64:decode(proplists:get_value(<<"entry">>, PropList)), TreeLeafHash = base64:decode(proplists:get_value(<<"treeleafhash">>, PropList)), - ok = db:add(TreeLeafHash, LogEntry), + ok = db:add_entry_sync(TreeLeafHash, LogEntry), success({[{result, <<"ok">>}]}) end; diff --git a/src/storage.erl b/src/storage.erl index a663c39..6c38adf 100644 --- a/src/storage.erl +++ b/src/storage.erl @@ -15,7 +15,7 @@ request(post, "plop/v1/storage/sendentry", Input) -> LogEntry = base64:decode(proplists:get_value(<<"entry">>, PropList)), TreeLeafHash = base64:decode(proplists:get_value(<<"treeleafhash">>, PropList)), - ok = db:add(TreeLeafHash, LogEntry), + ok = db:add_entry_sync(TreeLeafHash, LogEntry), ok = storagedb:add(TreeLeafHash), success({[{result, <<"ok">>}]}) end; |