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>
Fri, 30 Dec 2011 19:18:25 +0000 (13:18 -0600)
commit612e69b6aa6b5c5e9dffbda1a6fc78b1088943e3
tree13d86853ce124a3d64db6f3b375c6612863d0bb6
parent24137bb723119886407d51e68174e22dad17e57f
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]