2011-07-24 9 views
0

UPDATE2 解決策が見つかりました(rvirding)。私は erlang pbクライアントのキーフィルタで問題が発生しました

このよう
Object = riakc_obj:new(list_to_binary(Bucket), 
         list_to_binary(Time), 
         list_to_binary(TimeValue)), 
ok = riakc_pb_socket:put(Db_pid, Object); 

オブジェクトを入れて、私はそれがドキュメントで言及されるべきだと思う。この

Query = [{map,             %query type 
      {modfun, riak_kv_mapreduce, map_object_value},   %function from riak erlang built-in module 
      none, true}], 
    Inputs = {Bucket, [[<<"between">>, <<"0">>, <<"0.05">>]]}, 
    Result = riakc_pb_socket:mapred(Pid, Inputs, Query), 

のような要求をしなければなりません。

BTW!私が書いた場合

Object = riakc_obj:new(<<Bucket>>, 
       <<Time>>, 
       <<TimeValue>>), 

badargについてはエラーが発生しました。これについてはまだ混乱して。(

UPDATE

私はエラーを得なかった。この

Inputs = {Bucket, [[<<"between">>, 0, 1]]} 

を記述する場合、私も「OK」の結果を得たが、それは予想されていない、空であります振る舞い。)

=========================================== ====================

私は完全にこれで私の心を失ったが、私はそれを終わらなければならない。

私はシンプルなアプリを持っている:それは、txtファイル(「タイムスタンプ値」のようなデータ)からデータを抽出し、Riakにそれをプッシュすると、いくつかの範囲クエリを作ります。 問題は、{error、disconnected}というキーフィルタークエリを作成したときです。 私は、このようにRiakにデータをstrore:キー - タイムスタンプ(0.43など)、値 - 値(のような1.14)、バケット - ( "2011-07-24-23-39-45" など)の情報を追加する時間を。 は、ここでリクエストのコードです:

(dca_db.erl)

handle_call({range_query, Bucket, From, To}, _, #state{db_pid = Pid} = State) -> 
    Query = [{map,             %query type 
      {modfun, riak_kv_mapreduce, map_object_value},   %function from riak erlang built-in module 
      none, true}], 
    Inputs = {Bucket, [["between", 0, 1]]}, 
    Result = riakc_pb_socket:mapred(Pid, Inputs, Query), 
    {reply, Result, State}; 

あなたはgithubの中に私のコードを見つけることができます

range_request(Pid) -> 
Bucket = <<"2011-07-24-23-39-45">>, 
Result = gen_server:call(Pid, {range_query, Bucket, 0, 1}), 
error_logger:info_msg("RESULT:~p~n",[Result]). 

(テスト/ dca_db_tests.erl) - https://github.com/DimitryDushkin/distributed_calc_riak_matlab

私は(dca_db.erl中)

Inputs = {Bucket, [["eq", 1]]}, 
0のようなものを使用している場合

私は別のエラー

Compiled src/dca_db.erl 
undefined 
*unexpected termination of test process* 
::{{badmatch,{<<"2011-07-24-23-39-45">>,[["eq",1]]}}, 
    [{dca_db,handle_call,3}, 
    {gen_server,handle_msg,5}, 
    {proc_lib,init_p_do_apply,3}]} 


=ERROR REPORT==== 25-Jul-2011::00:27:24 === 
** Generic server dca_db terminating 
** Last message in was {range_query,<<"2011-07-24-23-39-45">>,0,1} 
** When Server state == {state,<0.105.0>} 
** Reason for termination == 
** {{badmatch,{<<"2011-07-24-23-39-45">>,[["eq",1]]}}, 
    [{dca_db,handle_call,3}, 
    {gen_server,handle_msg,5}, 
    {proc_lib,init_p_do_apply,3}]} 
======================================================= 
    Failed: 0. Skipped: 0. Passed: 1. 
One or more tests were cancelled. 
Cover analysis: /Users/ddushkin/Documents/workspaces/eclipse/distributed_calc_riak_matlab/.eunit/index.html 
ERROR: One or more eunit tests failed. 
make: *** [test_db] Error 1 

を持っていると私は、フィルタを使用しない場合は、すべてが動作します:

Inputs = Bucket, 

ありがとうございました。 Riakにまで

答えて

2

バケットとキーを使用すると、エラーを取得していない理由です、バイナリでなければなりません。バケット/キーが間違っているということは何も見つけられていないということです。データがDBに追加されたときに、どのように作成されましたか?あなたはまったく同じようにしてください!私が働いているアプリでは、彼らは値のためにterm_to_binary(Key)でしたが、それはあなたが選んだ方法で行うことができます。

+0

omg、あなたは完全にリジッドでした! – Dimitry

関連する問題