Erlang [RIAK]CommitHook中的内部API

Erlang [RIAK]CommitHook中的内部API,erlang,riak,Erlang,Riak,我是新来的二郎和里亚克。几个月前,我开始使用riak作为kv商店。现在我想实现一个riak的提交钩子,以便riak可以帮助我进行一些统计。 我阅读了一些文档并编写了一个预钩子脚本,它将获取对象键并将其存储到一个集合中。 如果只有一个客户机写入riak,那么这个钩子工作得很好,但是如果我增加与riak写入的连接,我发现它丢失了集合中的一些元素。看起来crdt_op没有执行合并操作。并且日志文件中没有明显的错误 有人能帮我指出发生了什么或错过了什么吗 我正在使用riak 2.1.3 谢谢大家 以下是

我是新来的二郎和里亚克。几个月前,我开始使用riak作为kv商店。现在我想实现一个riak的提交钩子,以便riak可以帮助我进行一些统计。 我阅读了一些文档并编写了一个预钩子脚本,它将获取对象键并将其存储到一个集合中。 如果只有一个客户机写入riak,那么这个钩子工作得很好,但是如果我增加与riak写入的连接,我发现它丢失了集合中的一些元素。看起来crdt_op没有执行合并操作。并且日志文件中没有明显的错误

有人能帮我指出发生了什么或错过了什么吗

我正在使用riak 2.1.3

谢谢大家

以下是钩子脚本:


您的看跌期权
C:put(NewObj)
与Riak处理CRDT时使用的选项不同

Riak KV使用此功能根据客户端请求更新CRDT:

请注意,它显式地传递了
crdt\u op
retry\u put\u coordinator\u failure
选项

作为
crdt_op
值传递的记录由该函数生成:

make_operation(Mod, Op, Ctx) ->
    #crdt_op{mod=Mod, op=Op, ctx=Ctx}.
您的看跌期权
C:put(NewObj)
与Riak处理CRDT时使用的选项不同

Riak KV使用此功能根据客户端请求更新CRDT:

请注意,它显式地传递了
crdt\u op
retry\u put\u coordinator\u failure
选项

作为
crdt_op
值传递的记录由该函数生成:

make_operation(Mod, Op, Ctx) ->
    #crdt_op{mod=Mod, op=Op, ctx=Ctx}.

谢谢Joe,这个问题是通过按照上面的代码来解决的,非常感谢Hanks Joe,这个问题是通过按照上面的代码来解决的,非常感谢
maybe_update({true, true}, Req, State0) ->
    #dtupdatereq{bucket=B, key=K, type=BType,
                 include_context=InclCtx,
                 context=Ctx} = Req,
    #state{client=C, mod=Mod, op=Op} = State0,
    {Key, ReturnKey} = get_key(K),
    O = riak_kv_crdt:new({BType, B}, Key, Mod),
    Options0 = make_options(Req),
    CrdtOp = make_operation(Mod, Op, Ctx),
    Options = [{crdt_op, CrdtOp},
               {retry_put_coordinator_failure, false}] ++ Options0,
    Resp =  C:put(O, Options),
    State = State0#state{return_key=ReturnKey, return_ctx=InclCtx},
    process_update_response(Resp, State);
make_operation(Mod, Op, Ctx) ->
    #crdt_op{mod=Mod, op=Op, ctx=Ctx}.