2016-05-08 36 views
1

在Riak中的服务器端,设置lwwreg寄存器值CRDT Map的语法是什么?我尝试了代码像下面这似乎并不为有效:设置/更新服务器上的映射CRDT中的寄存器字段的语法

%% 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

想通了。正确的语法如下 - 关键必须是riak_dt_lwwreg在这种情况下,字段的类型相伴,而且必须对寄存器的值,指定assign操作 - 因此,语法变为:

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

但在这里你使用_internal_ riak api,而不是通过HTTP或PB暴露的。它可能会改变。小心! –