Hi
Thank you Brian. Today we finally find problems
We use index fetch before use mapreduce, like in this example:
{ok,List}=riakc_pb_socket:get_index(Pid, Bucket, Index, Key)
BK=[ {B,K}||[B,K]<-List],
{ok,[{0,Result}]}=riakc_pb_socket:mapred(Pid, BK, [{map, {modfun,
riak_kv_mapreduce, map_object_value} ,undefined, true}]),
[binary_to_term(E)|| E<-Result]
In line 1 function return list of lists (pair Bucket and Key). And after some
time that function start returning simply list of keys. Without announcement,
release notes or ticket or something else. Just one day one man think why not
to rewrite everything related to search. Right before it someone "fixed"
protobuff and we got tons of errors related to binary indexes. What the fuck,
we spend one day to check driver source for possible bugs? I think main
commiter at least should post some notes and not to change function interfaces
without some serious need.
Erlang VM in some case use it pattern matching without runtime error in line 3
and we got our silent bug. All we need was to change line 3 to
BK=[ {Bucket,K} || K<-List],
It works fine now. But this is not ok. Because interface is broke for map
reduce function. We pass it empty list instead of list of {Bucket, Key} and we
get {ok,[]} instead of {ok, [{0,[]}]}.
We fixed it, but I am very angry to people who don't give a fuck about
interface stability and release notes. Many people use it in production, they
pay money for support and a lot of money. They don't want to play in hide and
seek "new features" after each minor commit. If they feel pissed they just pull
out they money and buy something else.
--
Sincerely yours,
Mikhail Kuznetsov
When best practices meet everyday life and lead to perfection...
Oct 15, 2012, в 19:55 , Bryan Fink написал(а):
> On Thu, Oct 11, 2012 at 1:32 AM, Mikhail Kuznetsov
> <[email protected]> wrote:
>> I use riak erlang client for my project, and update riak and client library
>> today from master(client to 1.3.1 and server to 1.2.0). Everything works
>> except fetching multiple entities with map-reduce return empty. Instead of
>> usual result {ok, [...,{<stage_number>,<stage result>},...]} I get {ok,[]}.
>> Rollback with client and everything works ok. But if I use old client with
>> new riak I got a lot of errors in the server logs.
>
> Hi, Mikhail. I'm not surprised by the old-client-with-new-riak errors.
> The definitions of some protocol buffers changed in the 1.2.0 Riak
> release, iirc.
>
> As for the missing results, though, I've been unable to reproduce the
> issue as you reported. Using Riak 1.2.0 and riak-erlang-client 1.3.1:
>
>
> 1> {ok, S} = riakc_pb_socket:start("127.0.0.1", 8087).
> {ok,<0.33.0>}
>
> 2> BK = [{<<"mk">>,<<"1">>},{<<"mk">>,<<"2">>},{<<"mk">>,<<"3">>}].
> [{<<"mk">>,<<"1">>},{<<"mk">>,<<"2">>},{<<"mk">>,<<"3">>}]
>
> 3> [ riakc_pb_socket:put(S, riakc_obj:new(B, K, K)) || {B, K} <- BK ].
> [ok,ok,ok]
>
> 4> {ok, [{0,Result}]} = riakc_pb_socket:mapred(S, BK, [{map, {modfun,
> riak_kv_mapreduce, map_object_value},undefined, true}]).
> {ok,[{0,[<<"1">>,<<"2">>,<<"3">>]}]}
>
> Can you see where my example differs from yours?
>
> -Bryan
_______________________________________________
riak-users mailing list
[email protected]
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com