Ошибка с протобаффами riak erlang

Я следую этому руководству http://docs.basho.com/riak/latest/dev/advanced/mapreduce/

После выполнения этого руководства по настройке 5 узлов http://docs.basho.com/riak/latest/quickstart/

start() ->
  {ok, Client} = riakc_pb_socket:start("127.0.0.1", 10018),
  Mine = riakc_obj:new(<<"groceries">>, <<"mine">>,
                     term_to_binary(["eggs", "bacon"])),
  Yours = riakc_obj:new(<<"groceries">>, <<"yours">>,
                      term_to_binary(["bread", "bacon"])),
  riakc_pb_socket:put(Client, Yours, [{w, 1}]),
  riakc_pb_socket:put(Client, Mine, [{w, 1}]).

Я запускаю этот запрос, и он дает эту ошибку

** Reason for termination == 
** {{badrecord,rpbputreq},
[{riak_kv_pb,iolist,2,[{file,"src/riak_kv_pb.erl"},{line,48}]},
 {riak_kv_pb,encode,2,[{file,"src/riak_kv_pb.erl"},{line,40}]},
 {riak_pb_codec,encode,1,[{file,"src/riak_pb_codec.erl"},{line,77}]},
 {riakc_pb_socket,send_request,2,
                  [{file,"src/riakc_pb_socket.erl"},{line,2066}]},
 {riakc_pb_socket,handle_call,3,
                  [{file,"src/riakc_pb_socket.erl"},{line,1252}]},
 {gen_server,handle_msg,5,[{file,"gen_server.erl"},{line,588}]},
 {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,227}]}]}
** Last message in was {req,
                       {rpbputreq,<<"groceries">>,<<"yours">>,undefined,
                           {rpbcontent,
                               <<131,108,0,0,0,2,107,0,5,98,114,101,97,100,
                                 107,0,5,98,97,99,111,110,106>>,
                               undefined,undefined,undefined,undefined,[],
                               undefined,undefined,[],[],undefined},
                           1,undefined,undefined,undefined,undefined,
                           undefined,undefined,undefined,undefined,
                           undefined,undefined,undefined},
                       60000}
 ** When Server state == {state,"127.0.0.1",10018,false,false,#Port<0.3496>,
                           gen_tcp,undefined,
                           {[],[]},
                           1,[],infinity,undefined,undefined,undefined,
                           undefined,100}

Коммит вызывает это

riakc_pb_socket:put(Client, Yours, [{w, 1}]),

Я не подключаюсь к консоли работающего узла. Я запускаю erlang этой командой

erl -sname foo -pa ~/e/riak-erlang-client/ebin -pa /usr/lib/riak/lib/riak_kv-1.4.2-0-g61ac9d8/ebin -pa /usr/lib/riak/lib/riak_core-1.4.2/ebin -pa /usr/lib/riak/lib/riak_pb-1.4.1.1/ebin/

Плохая запись определяется в

/usr/lib/riak/lib/riak_pb-1.4.1.1/include/riak_kv_pb.hrl
-record(rpbputreq, {
bucket = erlang:error({required, bucket}),
key,
vclock,
content = erlang:error({required, content}),
w,
dw,
return_body,
pw,
if_not_modified,
if_none_match,
return_head,
timeout,
asis,
sloppy_quorum,
n_val
}).

person Jimmy Ruska    schedule 02.10.2013    source источник


Ответы (1)


последняя версия riak_pb в riak-erlang-client deps имеет дополнительное поле «тип» в конце

  -record(rpbputreq, {
      bucket = erlang:error({required, bucket}),
      key,
      vclock,
      content = erlang:error({required, content}),
      w,
      dw,
      return_body,
      pw,
      if_not_modified,
      if_none_match,
      return_head,
      timeout,
      asis,
      sloppy_quorum,
      n_val,
      type
     }).
person Jimmy Ruska    schedule 02.10.2013
comment
Эм, так что... проблема в том, что вы тянете ветки разработки. Этого поля не будет ни в одной текущей версии Riak. Это новая функция Riak 2.0 (в разработке), которая еще не выпущена. См.: github.com/basho/riak/issues/362. - person Brian Roach; 03.10.2013