2016-05-08 5 views
1

Что такое синтаксис для установки lwwreg значений регистра в CRDT Map на стороне сервера в Riak? Я попробовал код, как показано ниже, который, кажется, не быть действительным:Синтаксис для установки/обновления полей регистра в 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. Это может измениться. Быть осторожен! –