riak-js key_filters string_to_int код состояния 500
Я не мог заставить key_filter работать с преобразованием string_to_int всегда получать код состояния 500.
Моя структура объекта выглядит следующим образом:
{ "style": "double", "capacity": 6 }
Моя функция карты:
var client = require('riak-js')
.getClient({host: "localhost", port: "10018"}),
bucket = 'rooms';
client.mapreduce
.add({
bucket: bucket,
key_filters: [["string_to_int"], ["and", [["greater_than", 1000]], [["less_than", 3000]]]]
})
.map('Riak.mapValuesJson')
.run(function(err, data){
if (err) {
console.log(JSON.stringify(err));
} else {
console.log(JSON.stringify(data));
}
});
Отклик:
{ "message": "[object Object]", "statusCode": 500 }
PS
- Риак 1.4.7
- Erlang R15B01
- nodejs v0.10.25
- riak-js 0.10.2
ОБНОВЛЕНИЕ здесь мой запрос на ключи и ответ:
curl http://mydomain.com:10018/riak/rooms?keys=true
{"props": {"name": "rooms", "allow_mult": false, "basic_quorum": false, "big_vclock": 50, "chash_keyfun": {"mod": "riak_core_util", "fun": " chash_std_keyfun "}," с.в. ":" кворум", "last_write_wins": ложные "linkfun":{"мода":"riak_kv_wm_link_walker","весело":"mapreduce_linkfun"},"n_val":3,"notfound_ok": правда,"old_vclock":86400,"postcommit":[],"Pr":0,"precommit":[],"PW": 0, "г": "кворум", "RW": "кворум","small_vclock":50,"ш": "кворум","young_vclock":20},"ключи":["6774","2205","6515","3812","2164","8677","3637","8701","2868","7249","3118","9781","4217","8432","4250","7551","7672","8736","7933"...
ОБНОВЛЕНИЕ 2 я сделал запрос с curl:
curl -v -X POST -H "Content-Type: application / json" http://mydomain.com:10018/mapred -d '{"input": {"bucket":"rooms","key_filters":[["string_to_int"],["and",[["great_than",1000]],[["less_than",3000]]]]}, "query":[{"map":{"language":" Javascript","имя":"Riak.mapValuesJson"}}]}"
и получил результат:
{ "phase":"listkeys", "error":"function_clause",
"input":"{cover,[{1392993748081016843912887106182707253109560705024, 1392993748081016843912887106182707253109560705024]}],
{<<\"rooms\">>,[{riak_kv_mapred_filters,string_to_int,[]},{riak_kv_mapred_filters,logical_and,[[[<<\"greater_than\">>,1000]],[[<<\"less_than\">>,3000]]]}]}}",
"type":"error","stack":"[{riak_kv_pipe_listkeys,keysend,[error,{worker_crash,{badarg,[{erlang,list_to_integer,
[\"5Ll5Gl3L61JX2mxYUvht6OMca4d\"],[]},{riak_kv_mapred_filters,'-string_to_int/1-fun-0-',1,
[{file,\"src/riak_kv_mapred_filters.erl\"},
{line,84}]},
{lists,foldl,3,[{file,\"lists.erl\"},{line,1197}]},
{riak_kv_coverage_filter,'-compose/2-fun-1-',2,[{file,\"src/riak_kv_coverage_filter.erl\"},{line,137}]},
{riak_kv_vnode,'-fold_fun/3-fun-3-',5,[{file,\"src/riak_kv_vnode.erl\"},{line,1342}]},
{bitcask_nifs,keydir_fold_cont,4,...},...]},...},...],...},...]"
}
1 ответ
Мне удалось воспроизвести ошибку, которую вы получили в результате запроса curl, поместив в корзину ключ, который не удалось успешно преобразовать в целое число с помощью "string_to_int" в фильтре ключей. Я бы порекомендовал перечислить все ключи в этом сегменте и убедиться, что они все числовые.