* Remove lock defs file; it was moved to riak_kv_vnode.hrl since all these locks are KV-specific * The optional call to handoff_started/2 allows vnodes one last chance to abort the handoff process. the function is passed the source vnode's partition number and node name (this node) because the callback does not have access to the full vnode state at this time. In addition the worker pid is passed so the vnode may use that information in its decision to cancel the handoff or not (e.g. get a lock on behalf of the process) * Move code that calls handooff_started/2 into separate function and put the call inside the try/catch.
* rebase on latest background manager. * Add an optional callback entry point to the kv vnode: handoff_started/2 * core_vnode will check for the optional function and call if present * returning max_concurrency will cause the handoff to be aborted and retried.
* Remove history API, use unregistered to signal unavailability of bg-mgr, fix set_token_rate bug. * Prune the query API down to a consistent set of commands and adjust tests. * Change query API to use named ETS table directly; is not threaded through the gen_server.
…le is unavailable * Allows callers to try again later
* The goal is to allow riak sub-systems to coordinate use of shared resources, * e.g. protect from concurrent vnode folds on the same partition. * Locks and tokens have a settable maximum concurrency limit. * "Taken" locks and tokens are tracked in an ETS table. * max_concurrency is returned when the set limits are reached. * Processes that take locks are monitored. * Locks are released when the taking processes terminate. * Tokens are refreshed at a specified periodic rate. * Token processes are not monitored because tokens never "release". * A table manager is introduced to add persistence across process crashes, * and to allow proper table transfer to occur without losing the table. * An EQC test exercises the majority of the API. see test/bg_manager_eqc.erl * See the original PR for background manager here: #364
the test does not yet cover crashing and chaning the claimant or waiting for type properties to propogate to other nodes (for that we will probably need/use riak_test). However, it does reproduce #442
* fix some whitespace * only allow valid boolean values for allow_put get option
Some parts of repl require being able to disable a service and block until it's disabled. Provide this API.
…nd more commands.
increasing the fanout reduces the chance of requiring exchange to deliver messages to all alive nodes during a broadcast. This patch decreases the likelyhood by 20 to 30 percent, on average. The chosen fanout is determined by the discrete function `round(log(NumNodes)+1)`, where `log(x)` is the natural log and `NumNodes` is the number of nodes in the cluster. For practical cluster sizes, this curve has a maximum fanout of about six peers, dependning on what is considered the upper limit of practical cluster sizes. addresses #438