[ 
https://issues.apache.org/jira/browse/COUCHDB-1259?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Filipe Manana updated COUCHDB-1259:
-----------------------------------

    Attachment: couchdb-1259.patch
                couchdb-1259.patch

The following patch solves the issue by using the same approach as the auth 
cookie handler - using a node uuid which is stored in .ini config.

The new replication ID generation no longer uses the hostname and port pair, 
but instead this uuid. It fallbacks to the current method when searching for 
existing checkpoints however (thanks to Randall's replication ID upgrade 
scheme).

Besides mobile, desktop couch (Ubuntu One) is another example where the port is 
dynamic. I've also seen a desktop running normal CouchDB where the ID for a 
replication was different the first time it was generated from subsequent times 
- I suspect it was an issue with inet:gethostname/0 but unable to prove it.

Personally I don't think using the .ini for a single parameter is that bad 
(unlike things like OAuth tokens for e.g.) like others commented here before - 
an alternative would be to store it in a local document of the replicator 
database for e.g.

I would very much like to see this issue fixed in 1.2.0.
                
> 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
>         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: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to