diff options
Diffstat (limited to 'src/couch_peruser/README.md')
-rw-r--r-- | src/couch_peruser/README.md | 34 |
1 files changed, 0 insertions, 34 deletions
diff --git a/src/couch_peruser/README.md b/src/couch_peruser/README.md deleted file mode 100644 index 64a05188c..000000000 --- a/src/couch_peruser/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# couch_peruser [![Build Status](https://travis-ci.org/apache/couchdb-peruser.svg?branch=master)](https://travis-ci.org/apache/couchdb-peruser) - -couch_peruser is a CouchDB application that ensures that a private per-user -database exists for each document in _users. These databases are -writable only by the corresponding user. Databases are in the form: - - userdb-{hex encoded username} - -For example, the user `bob` will have a database named `userdb-626f62`. - -The reason for hex encoding is that CouchDB usernames have no restrictions, -but CouchDB databases have restrictions. Hex encoding the UTF-8 -representation of the username is a transformation that's easy to -correctly implement in just about any language, especially JavaScript -and Erlang. Other encodings would be possible, but would require -additional client and server-side code to support that encoding. This -is the simplest scheme that is obviously correct. - -## Implementation Notes - -The module itself is a `gen_server` and it implements the `mem3_cluster` -behaviour. - -In a CouchDB cluster, the module runs on each node in the cluster. On startup, -it launches a changes listener for each shard of the `authentication_db` -(`_users`). - -In a cluster, when a change notification comes in (after a user doc has been -created/updated/deleted), each node independently calculates if it should -handle the notification based on the current list of active nodes in the -cluster. This ensures that we avoid trying to update the internal `_dbs` -concurrently and causing conflicts. It also ensures that at least one node -does handle a notification. The mechanism that handles this does survive -cluster reconfigurations transparently. |