Sync _security objects on interactive request
authorPaul J. Davis <paul.joseph.davis@gmail.com>
Mon, 19 Dec 2011 19:14:11 +0000 (13:14 -0600)
committerPaul J. Davis <paul.joseph.davis@gmail.com>
Sat, 28 Jan 2012 19:43:17 +0000 (13:43 -0600)
commitba252b99c4d80ebede30ed7dcbf32797df162d1e
tree184d59940a0f41150b57834ca21aa8deeacaf5d7
parent49614f1ff046206981ab134fc042eef7d5bde2fd
Sync _security objects on interactive request

We've known for some time that the _security object can occasionally
diverge across a cluster. This ends up leading to intermittent client
errors as they access different _security settings depending on which
node happens to be handling the request.

This patch works by opening the _security object for all copies of all
shards in the cluster and then checks to see if they are the same object
or not. If there is a single version across the cluster then all is
well. If two versions exist, and the minority are an empty object, then
the majority version is set on all shards in the cluster. Otherwise an
error is logged for human intervention.
src/mem3.erl
src/mem3_sync_security.erl [new file with mode: 0644]