On Aug 12, 2009, at 12:41 AM, Chris Anderson wrote:

I think a view of _local docs would be ideal. I've been wishing for
this or a long time, glad to see we're getting close to it.

I was thinking just a single _local_docs view, but it sounds like you might have grander plans. I assume any view on _local docs will have to a built-in one.

* we could automatically add a field to the config document that identifies the corresponding _local doc ID. We'd have to use something like the new _update handler to validate this field on every update, as a change in authentication information means a change in the corresponding _local doc
ID.

I think trying to keep them in sync is a smell. The replication
manager can perhaps just use a group view of replication history to
list all the potential replication targets.

I don't think it's so bad. We can use the same function that generates the replication ID from the POST body to add a _local_id reserved field to the doc in the _replication DB. It's just like a _rev.

A thought -- what if one-off POSTs to /_replicate automatically saved a config document as well, but with a "continuous":false field? Then it would be easy to view all the replications that ever originated on the server, and
admins could make certain ones continuous just by flipping a bit.

What kind of _local doc artifacts does continuous replication leave in
the current implementation - maybe a _local view can give us
everything we need.


I'm worried about saving source and target values with authentication information in _local docs that are world readable and saved on both servers. It would be nice to see some info on replications triggered from other servers, though, and viewing _local docs allows for that. Anyway, to answer your question ...

CouchDB deterministically generates a replication ID from the server hostname and the source and target values in the body of the POST. It saves a _local document with this ID on both source and target that looks like

{
  "session_id": uuid(),
  "source_last_seq": integer(),
  "history": array()
}

The history is capped at 50 entries, each of which looks like

{
"session_id": uuid(), % for the head of the list this is the same as above "recorded_seq": integer(), % for the head this is the same as source_last_seq
  "start_time": rfc1123_date(),
  "end_time": rfc1123_date(),
  "start_last_seq": integer(),
"end_last_seq": integer(), % might be different from recorded_seq if a server restarted during replication
  "missing_checked": integer(),
  "missing_found": integer(),
  "docs_read": integer(),
  "docs_written": integer(),
  "doc_write_failures": integer()
}

On Aug 12, 2009, at 5:08 AM, Simon Metson wrote:

Why not have a reserved _named database for each configuration section? Depending on what the _config eventually evolves to hold you might find it getting hit frequently - you don't want your replication settings getting screwed up by settings for other components. You also may want replication settings to be "public" but other parts to be top secret, I'd say that's easier to manage at a per database level than not.

I wouldn't completely replace the current .ini configuration files with a database -- I think there's real value in being able to change some settings without the server running.

Given that how about _replication for a name?
Cheers
Simon

I like it.

On Aug 12, 2009, at 10:45 AM, Randall Leeds wrote:

fwiw, I can see it being very useful to be able to replicate a _config
database or a _replication database.

Just thinking about all the implications makes me nervous! I think managing server configurations is probably best left to configuration management tools like Opscode Chef and its ilk. I could be wrong though. If we wanted to support this I think it would be easy enough to do for _replication. Obviously for _config we'd need something like what Simon proposed.

---

I'll push forward on the _replication DB for configuring continuous replications, but I'm still not sure of the best path forward on viewing/managing one-off replications. I'm torn between auto-saving a document into the _replication DB, adding additional info to the _local docs, or doing both (full info in the _replication DB, "public" info in the _local doc). Best,

Adam

Reply via email to