Generic KVS feed-server
Feed server for KVS abstract database middleware.
Implements database queries in the form of atomic operations or in other words, provides transaction for KVS-feeds logic.
log :: {Mod,Fun}– Custom loggingfunction/3, default:{wf,info}feed_timeout :: non_neg_integer()– Pool worker timeout, in ms, default:600000(10 min)feed_timeout_action :: hibernate | stop– Action for inactive pool workers, default: hibernate
append(Record)– AddRecordto database.delete(Record)– RemoveRecordfrom database.update(Record,Fun)– UpdateRecordwithFun/1which takesRecord2(at the time of execution) and should return{ok,Record3}(modified) if surgery is to be performed, or anything else to cancel.relink(Record)– BringRecordto top inRecordfeed.purge(Record,Fun)– RemoveRecordand related feeds withFun/0which should return a list of feeds, example:kvs_feeds:purge(E,fun() -> [{feed,attachments,fun kvs_feed:delete/1}] end),feed_idto be deleted will be generated as{attachment,element(2,E)}forfeedcontainer table.eval(Record,Fun)– Eval customFun/1which takesRecord2(at the time of execution), like asupdate/2.
R=#post{},
{ok,R2}=kvs_feeds:append(R),
Link = 1000,
FunUpdate=fun(#post{links=Links}=P) -> {ok,P#post{links=lists:usort([Link | Links])}} end,
{ok,R3}=kvs_feeds:update(R2,FunUpdate),
ok=kvs_feeds:delete(R3),
kvs_feeds:purge(R3,fun() -> [{feed,attachment,fun kvs_feeds:delete/1}] end),