[ https://issues.apache.org/jira/browse/COUCHDB-1259?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13490596#comment-13490596 ]
Benoit Chesneau commented on COUCHDB-1259: ------------------------------------------ @rnewson part of the patch that make the checkpoint locally constant is fine for me (but not relying on a remote uuid) though i don't think we need a server id for that but that can probably be changed later. Anyway following the discussion (and that will be post 1.3) I think that what we should really do here is handling the following scenario: 1. port, ip changed, port crashed, restared -> a checkpooint is orphelin 2. node come back 3. Instead of restarting the replication , ask what to do and mark the replication task as paused By "ask" I mean having a switchable middle ware that could handle the scenario or just let the application do what it want. Since that is a braking change I guess it could only happen on 2.0 if some want. > Replication ID is not stable if local server has a dynamic port number > ---------------------------------------------------------------------- > > Key: COUCHDB-1259 > URL: https://issues.apache.org/jira/browse/COUCHDB-1259 > Project: CouchDB > Issue Type: Bug > Components: Replication > Affects Versions: 1.1 > Reporter: Jens Alfke > Assignee: Robert Newson > Priority: Blocker > Fix For: 1.3 > > Attachments: couchdb-1259.patch, couchdb-1259.patch > > > I noticed that when Couchbase Mobile running on iOS replicates to/from a > remote server (on iriscouch in this case), the replication has to fetch the > full _changes feed every time it starts. Filipe helped me track down the > problem -- the replication ID is coming out different every time. The reason > for this is that the local port number, which is one of the inputs to the > hash that generates the replication ID, is randomly assigned by the OS. (I.e. > it uses a port number of 0 when opening its listener socket.) This is because > there could be multiple apps using Couchbase Mobile running on the same > device and we can't have their ports colliding. > The underlying problem is that CouchDB is attempting to generate a unique ID > for a particular pair of {source, destination} databases, but it's basing it > on attributes that aren't fundamental to the database and can change, like > the hostname or port number. > One solution, proposed by Filipe and me, is to assign each database (or each > server?) a random UUID when it's created, and use that to generate > replication IDs. > Another solution, proposed by Damien, is to have CouchDB let the client work > out the replication ID on its own, and set it as a property in the > replication document (or the JSON body of a _replicate request.) This is even > more flexible and will handle tricky scenarios like full P2P replication > where there may be no low-level way to uniquely identify the remote database > being synced with. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira