On Aug 10, 2009, at 4:09 PM, Adam Kocoloski wrote:
Hi folks, I committed some code today to enable continuous
replication between CouchDB servers. I could use some help defining
the client API, though. To recap, replication has always been
triggered RPC-style by a request like
Yeehaw!!!
POST /_replicate -d '{"source":"foo", "target":"http://example.com/
bar"}'
this request would block until the replication had completed and
then you'd get a 200 response code and something like
{
"ok": true,
"session_id": uuid(),
"source_last_seq": 1234,
"history":[....]
}
Well, it doesn't make too much sense to do the same with continuous
replication because the response will never arrive. Basically, I
think we need to answer the following questions:
1. How does a user trigger a continuous replication? Simplest
extension of the current API would be
POST /_replicate -d '{"source":"foo", "target":"http://example.com/
bar", "continuous":true}'
2. How does the server respond to that request? Perhaps a "202
Accepted" along with the replication ID?
3. How does a client monitor the progress of a continuous
replication? The replication will show up in _active_tasks, but I'd
like to have a way to get all the history information. If we return
the replication ID the client could GET the _local doc with that ID,
but we probably want a resource that's a bit easier to discover.
Maybe a special HTTP call to get replication info?
4. How can we configure replications that survive a server restart?
I think I'd like to see a replication config database, and a constant
replicator config process that reads the config info at server start
and starts the continuous replications. It monitors the config db for
changes and as new settings are written spawns, restarts or shuts down
replication tasks.
I can't think of a use case where it's okay to have it *not* survive a
restart. Continuous replications aren't something you do temporarily,
I think.
-Damien
Adam