I'm using get_primary_apl to get my preflist but the problem is how to handle a 
failure of trying to dispatch to a node that is just now going down and hasn't 
had time to notify the caller yet. I don't want to loose the web request 
currently in progress. Maybe I need to get a list of indexes to possibly 
dispatch to and iterate over them, stopping at the first one that doesn't blow 
up.

Sent from my iPhone

On Mar 28, 2012, at 12:00 PM, Sean Cribbs <s...@basho.com> wrote:

> Jon,
> 
> Generally I would use the riak_core_apl module to calculate the preflist for 
> your request. It takes into account node visibility and service availability. 
> Use riak_core_node_watcher:service_up to announce that your app is available 
> after registering with riak_core.
> 
> When doing some "split brain" testing/simulation for gen_leader we would do 
> something like the following on a node we wanted to partition:
> 
> 1> erlang:set_cookie(node(), riak2).
> 2> erlang:disconnect_node('dev3@127.0.0.1'), 
> erlang:disconnect_node('dev4@127.0.0.1').
> Basically, set the cookie so it can't connect to the other nodes, then 
> manually disconnect. That might help you simulate node-outage.
> 
> On Wed, Mar 28, 2012 at 12:49 PM, Jon Brisbin <j...@jbrisbin.com> wrote:
> I'm testing the example code that dispatches a web request from misultin into 
> a riak_core ring of vnodes. It works fantastic when all nodes are up! :)
> 
> Doing "ab -k -c 200 -n 10000 http://localhost:3000/"; yields a none-to-shabby 
> performance (dispatching at random into all available vnodes on two separate 
> riak_core processes):
> 
> Concurrency Level:      200
> Time taken for tests:   1.446 seconds
> Complete requests:      10000
> Failed requests:        0
> Write errors:           0
> Keep-Alive requests:    10000
> Total transferred:      1600480 bytes
> HTML transferred:       120036 bytes
> Requests per second:    6914.04 [#/sec] (mean)
> Time per request:       28.927 [ms] (mean)
> Time per request:       0.145 [ms] (mean, across all concurrent requests)
> Transfer rate:          1080.64 [Kbytes/sec] received
> 
> Connection Times (ms)
>               min  mean[+/-sd] median   max
> Connect:        0    0   1.0      0      12
> Processing:     4   28   9.8     27      78
> Waiting:        4   28   9.8     27      78
> Total:          4   28  10.1     27      83
> 
> Percentage of the requests served within a certain time (ms)
>   50%     27
>   66%     31
>   75%     34
>   80%     36
>   90%     41
>   95%     47
>   98%     53
>   99%     58
>  100%     83 (longest request)
> 
> If I were really zealous, I'd set up haproxy to load balance between these 
> two misultin servers and get double failover.
> 
> I'm trying to catch the situation of going into the console of one of my 
> nodes and hitting "CTL-C" to kill that process. I'm not sure what the best 
> way is to handle this. Check before I dispatch to make sure the node is up? 
> Keep a watch of some other kind that, when it sees that node go down and if 
> it's trying to dispatch to that node, it tries to find another one?
> 
> Essentially, I'm trying to prevent misultin from completely bailing on the 
> request because the sync_spawn_command blows up trying to do a 
> gen_server:call to a non-existent node. I'd like to retry to dispatch to a 
> different node if one happens to have crashed while I'm serving requests (I 
> don't want to loose a request, essentially).
> 
> Thanks!
> 
> Jon Brisbin
> http://about.me/jonbrisbin
> 
> 
> 
> _______________________________________________
> riak-users mailing list
> riak-users@lists.basho.com
> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
> 
> 
> 
> 
> -- 
> Sean Cribbs <s...@basho.com>
> Software Engineer
> Basho Technologies, Inc.
> http://basho.com/
> 
_______________________________________________
riak-users mailing list
riak-users@lists.basho.com
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com

Reply via email to