在服务器上的Map CRDT中设置/更新寄存器字段的语法

时间:2016-05-08 16:10:24

标签: erlang riak crdt

在Riak服务器端的lwwreg中设置CRDT Map寄存器值的语法是什么?我尝试了下面的代码似乎无效:

%% Obj is a map object to which we want to add/set a register "uname" with value
%% "ahmed"
riak_kv_crdt:update(Obj,<<"testing">>,{crdt_op,riak_dt_map,
{update,[{assign,<<"uname">>,<<"ahmed">>}]},undefined})

我收到有关操作无效的错误 - 我查看了riak_dt_map.erl的源代码,但仍无法找出正确的语法:

> riak_kv_crdt:update(Obj,<<"testing">>,{crdt_op,riak_dt_map,{update,
  [{assign,<<"uname">>,<<"ahmed">>}]},undefined}).

** exception error: no function clause matching 
                    riak_dt_map:apply_ops([{assign,<<"uname">>,<<"ahmed">>}],
                                          {<<"testing">>,1},
                                          {[{<<"testing">>,1}],
                    .....

会理解正确语法的指示。

1 个答案:

答案 0 :(得分:1)

想出来。正确的语法如下 - 密钥必须伴随字段的类型,在这种情况下为riak_dt_lwwreg,并且必须为寄存器值指定assign操作 - 因此,语法变为:

riak_kv_crdt:update(Obj,<<"testing">>,{crdt_op,riak_dt_map,{update,
[{update,{<<"uname">>,riak_dt_lwwreg},{assign,<<"ahmed">>}}]},undefined})