Sean,

I'll fork and submit a pull request sometime soon.  Will things continue
to be configured with binaries, or will it switch to atoms at some point?

Also, Is there a way to configure specific buckets in the config, or to
specify default bucket properties for a particular bucket type in the config?
I see there is default_bucket_props, and you can have bucket specific
properties, but what I would want is some way to have a custom bucket type
which would require the hash function be different.  This doesn't seem like
bucket specific config (ie, config passed to start/2), but instead feels like
per bucket type default config.  I think I can work around it by specifyng
it at the same time I specify the custom backend.  Like

curl -X PUT -H "content-type: application/json" -d 
'{"props":{"backend":"my_backend"},"chash_keyfun":{"mod":"my_backend","fun":"my_hash"}}'
 http://127.0.0.1:8098/riak/mybucket

but this feels risky, as it would be easy for someone to miss.

I'd prefer being able to set that in default bucket props for a particular
backend.  That seems cleaner, and less error-prone.

Anyway, if it doesn't work in this way, any reason it couldn't?

-Anthony

On Mon, Jan 24, 2011 at 08:57:26AM -0500, Sean Cribbs wrote:
> Anthony,
> 
> Thanks for noticing that documentation error. If you would, please file an 
> issue on the wiki's issue tracker: https://github.com/basho/riak_wiki/issues 
> and we'll get it corrected.  If you're feeling enterprising, you can also 
> fork, fix and send a pull-request for the page.
> 
> Sean Cribbs <s...@basho.com>
> Developer Advocate
> Basho Technologies, Inc.
> http://basho.com/
> 
> On Jan 24, 2011, at 2:43 AM, Anthony Molinaro wrote:
> 
> > Hi Sean,
> > 
> >   Thanks, that seems to work.  Should the wiki be changed?  Currently
> > this page
> > 
> > http://wiki.basho.com/Configuration-Files.html
> > 
> > has
> > 
> > multi_backend: list of backends to provide
> > Format of each backend specification is {BackendName, BackendModule,
> > BackendConfig}, where BackendName is any atom, BackendModule is the name of
> > the Erlang module implementing the backend (the same values you would
> > provide as "storage_backend" settings), and BackendConfig is
> > a parameter that will be passed to the "start/2" function of the backend
> > module.
> > 
> > and it sounds like BackendName has to be a binary.
> > 
> > Also, it has
> > 
> > Specify the backend to use for a bucket with
> > riak_client:set_bucket(BucketName,[{backend, BackendName}] in Erlang 
> > 
> > but I'm a little unclear how you would invoke this call, do you attach
> > with riak attach, then run the command there?  Because when I try that
> > I get
> > 
> > ** exception error: undefined function riak_client:set_bucket/2
> > 
> > Seems there might be a riak_client:set_bucket/3, so that documentation may
> > be out of date as well.
> > 
> > Thanks,
> > 
> > -Anthony
> > 
> > On Sun, Jan 23, 2011 at 02:50:32PM -0500, Sean Cribbs wrote:
> >> Anthony,
> >> 
> >> This is something I discovered a while back - define your backend names as 
> >> binaries and you'll be able to set them properly from the REST interface. 
> >> Example:
> >> 
> >> {storage_backend, riak_kv_multi_backend},
> >> {multi_backend_default, <<"bitcask">>},
> >> {multi_backend,
> >>    [ {<<"bitcask">>, riak_kv_bitcask_backend,
> >>        [{data_root, "/var/lib/riak/bitcask"}]},
> >>      {<<"dets">>, riak_kv_dets_backend,
> >>        [{riak_kv_dets_backend_root, "/var/lib/riak/dets"}]},
> >>      {<<"ets">>, riak_kv_ets_backend, []},
> >>      {<<"fs">>, riak_kv_fs_backend,
> >>        [{riak_kv_fs_backend_root, "/var/lib/riak/fs"}]},
> >>      {<<"cache">>, riak_kv_cache_backend,
> >>        [ {riak_kv_cache_backend_memory, 100},
> >>          {riak_kv_cache_backend_ttl, 600},
> >>          {riak_kv_cache_backend_max_ttl, 3600}
> >>        ]},
> >>      {<<"my_backend">>, my_backend, []}
> >>    ]},
> >> 
> >> Then you can set it like so
> >> 
> >> curl -X PUT -H "content-type: application/json" -d 
> >> '{"props":{"backend":"my_backend"}}' http://127.0.0.1:8098/riak/mybucket
> >> 
> >> Also note that only allow_mult and n_val are supported bucket properties 
> >> from the PB interface (something we'll be fixing soon).
> >> 
> >> Sean Cribbs <s...@basho.com>
> >> Developer Advocate
> >> Basho Technologies, Inc.
> >> http://basho.com/
> >> 
> >> On Jan 23, 2011, at 12:37 PM, Anthony Molinaro wrote:
> >> 
> >>> 
> >>> Hi,
> >>> 
> >>> So I wanted to play around with creating a custom backend, and using
> >>> the multi backend, but I am having problems getting anything to work.
> >>> 
> >>> Here's what I tried so far
> >>> 
> >>> in app.config
> >>> 
> >>> {storage_backend, riak_kv_multi_backend},
> >>> {multi_backend_default, bitcask},
> >>> {multi_backend,
> >>>    [ {bitcask, riak_kv_bitcask_backend,
> >>>        [{data_root, "/var/lib/riak/bitcask"}]},
> >>>      {dets, riak_kv_dets_backend,
> >>>        [{riak_kv_dets_backend_root, "/var/lib/riak/dets"}]},
> >>>      {ets, riak_kv_ets_backend, []},
> >>>      {fs, riak_kv_fs_backend,
> >>>        [{riak_kv_fs_backend_root, "/var/lib/riak/fs"}]},
> >>>      {cache, riak_kv_cache_backend,
> >>>        [ {riak_kv_cache_backend_memory, 100},
> >>>          {riak_kv_cache_backend_ttl, 600},
> >>>          {riak_kv_cache_backend_max_ttl, 3600}
> >>>        ]},
> >>>      {my_backend, my_backend, []}
> >>>    ]},
> >>> 
> >>> Then I restart, open a shell and do the following
> >>> 
> >>> 1> {ok, Pid} = riakc_pb_socket:start_link("127.0.0.1", 8087).
> >>> {ok,<0.68.0>}
> >>> 2> riakc_pb_socket:set_bucket(Pid, <<"b">>, [{backend, my_backend}]).
> >>> ok
> >>> 3> riakc_pb_socket:get_bucket(Pid,<<"b">>).
> >>> {ok,[{n_val,3},{allow_mult,false}]}
> >>> 
> >>> So I didn't see my backend there, thus tried the REST API
> >>> 
> >>>> curl 'http://127.0.0.1:8098/riak/b' ; echo 
> >>> {"props":{"name":"b","n_val":3,"allow_mult":false,"last_write_wins":false,"precommit":[],"postcommit":[],"chash_keyfun":{"mod":"riak_core_util","fun":"chash_std_keyfun"},"linkfun":{"mod":"riak_kv_wm_link_walker","fun":"mapreduce_linkfun"},"old_vclock":86400,"young_vclock":20,"big_vclock":50,"small_vclock":10,"r":"quorum","w":"quorum","dw":"quorum","rw":"quorum"}}
> >>> 
> >>> It's not there either.  So I try to set it with REST
> >>> 
> >>>> curl -X PUT -H "Content-Type: application/json" -d 
> >>>> '{"props":{"backend":"my_backend"}}' http://127.0.0.1:8098/riak/b
> >>> 
> >>> Which works, in that now I have
> >>> 
> >>>> curl 'http://127.0.0.1:8098/riak/b' ; 
> >>>> echo{"props":{"backend":"my_backend","name":"b","n_val":3,"allow_mult":false,"last_write_wins":false,"precommit":[],"postcommit":[],"chash_keyfun":{"mod":"riak_core_util","fun":"chash_std_keyfun"},"linkfun":{"mod":"riak_kv_wm_link_walker","fun":"mapreduce_linkfun"},"old_vclock":86400,"young_vclock":20,"big_vclock":50,"small_vclock":10,"r":"quorum","w":"quorum","dw":"quorum","rw":"quorum"}}
> >>> 
> >>> However, in the shell I still get
> >>> 
> >>> 4> riakc_pb_socket:get_bucket(Pid,<<"b">>).
> >>> {ok,[{n_val,3},{allow_mult,false}]}
> >>> 
> >>> Also, if I attempt to put something I get
> >>> 
> >>> 5>  riakc_pb_socket:put(Pid, riakc_obj:new (<<"b">>, <<"c">>, <<"d">>)).
> >>> 
> >>> =ERROR REPORT==== 19-Jan-2011::02:21:04 ===
> >>> ** Generic server <0.68.0> terminating 
> >>> ** Last message in was {req_timeout,#Ref<0.0.0.186>}
> >>> ** When Server state == {state,"127.0.0.1",8087,false,false,undefined,
> >>>                              undefined,
> >>>                              {[],[]},
> >>>                              1,[],infinity,100}
> >>> ** Reason for termination == 
> >>> ** disconnected
> >>> ** exception exit: disconnected
> >>> 
> >>> =CRASH REPORT==== 19-Jan-2011::02:21:04 ===
> >>> crasher:
> >>>   initial call: riakc_pb_socket:init/1
> >>>   pid: <0.68.0>
> >>>   registered_name: []
> >>>   exception exit: disconnected
> >>>     in function  gen_server:terminate/6
> >>>   ancestors: [<0.65.0>]
> >>>   messages: [{tcp,#Port<0.816>,
> >>>                      [0|<<10,7,116,105,109,101,111,117,116,16,1>>]}]
> >>>   links: [<0.65.0>]
> >>>   dictionary: []
> >>>   trap_exit: false
> >>>   status: running
> >>>   heap_size: 987
> >>>   stack_size: 24
> >>>   reductions: 1541
> >>> neighbours:
> >>>   neighbour: [{pid,<0.65.0>},
> >>>                 {registered_name,[]},
> >>>                 {initial_call,{erlang,apply,2}},
> >>>                 {current_function,{gen,do_call,4}},
> >>>                 {ancestors,[]},
> >>>                 {messages,[{#Ref<0.0.0.185>,{error,timeout}}]},
> >>>                 {links,[<0.25.0>,<0.68.0>]},
> >>>                 {dictionary,[]},
> >>>                 {trap_exit,false},
> >>>                 {status,runnable},
> >>>                 {heap_size,1597},
> >>>                 {stack_size,38},
> >>>                 {reductions,17388}]
> >>> 
> >>> And the attached sasl log which has many errors.  So I'm trying to figure 
> >>> out
> >>> whether the problem is configuration, or a bug or what, and wondering if 
> >>> any
> >>> one else has gotten a custom backend, or multi backend to work?
> >>> 
> >>> I'm using 0.14 on Centos 5, using the basho RPM.
> >>> 
> >>> Thanks,
> >>> 
> >>> -Anthony
> >>> 
> >>> -- 
> >>> ------------------------------------------------------------------------
> >>> Anthony Molinaro                           <antho...@alumni.caltech.edu>
> >>> <sasl-error.log>_______________________________________________
> >>> riak-users mailing list
> >>> riak-users@lists.basho.com
> >>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
> >> 
> > 
> > -- 
> > ------------------------------------------------------------------------
> > Anthony Molinaro                           <antho...@alumni.caltech.edu>
> 

-- 
------------------------------------------------------------------------
Anthony Molinaro                           <antho...@alumni.caltech.edu>

_______________________________________________
riak-users mailing list
riak-users@lists.basho.com
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com

Reply via email to