2012/8/6 Benoit Chesneau : > On Mon, Aug 6, 2012 at 11:35 AM, Michael Bykov wrote: >> 2012/8/6 Benoit Chesneau : >>> did you replicate the _replicator db as an admin ? >> >> Hi Benoit, >> >> Yes. >> >> M. >> > > I mean in the replicator document which auth are you giving? Can you > paste your replicator doc here? > > - benoît Here it is - function(newDoc, oldDoc, userCtx) { function reportError(error_msg) { log('Error writing document `' + newDoc._id + '\' to the replicator database: ' + error_msg); throw({forbidden: error_msg}); } function validateEndpoint(endpoint, fieldName) { if ((typeof endpoint !== 'string') && ((typeof endpoint !== 'object') || (endpoint === null))) { reportError('The `' + fieldName + '\' property must exist' + ' and be either a string or an object.'); } if (typeof endpoint === 'object') { if ((typeof endpoint.url !== 'string') || !endpoint.url) { reportError('The url property must exist in the `' + fieldName + '\' field and must be a non-empty string.'); } if ((typeof endpoint.auth !== 'undefined') && ((typeof endpoint.auth !== 'object') || endpoint.auth === null)) { reportError('`' + fieldName + '.auth\' must be a non-null object.'); } if ((typeof endpoint.headers !== 'undefined') && ((typeof endpoint.headers !== 'object') || endpoint.headers === null)) { reportError('`' + fieldName + '.headers\' must be a non-null object.'); } } } var isReplicator = (userCtx.roles.indexOf('_replicator') >= 0); var isAdmin = (userCtx.roles.indexOf('_admin') >= 0); if (oldDoc && !newDoc._deleted && !isReplicator && (oldDoc._replication_state === 'triggered')) { reportError('Only the replicator can edit replication documents ' + 'that are in the triggered state.'); } if (!newDoc._deleted) { validateEndpoint(newDoc.source, 'source'); validateEndpoint(newDoc.target, 'target'); if ((typeof newDoc.create_target !== 'undefined') && (typeof newDoc.create_target !== 'boolean')) { reportError('The `create_target\' field must be a boolean.'); } if ((typeof newDoc.continuous !== 'undefined') && (typeof newDoc.continuous !== 'boolean')) { reportError('The `continuous\' field must be a boolean.'); } if ((typeof newDoc.doc_ids !== 'undefined') && !isArray(newDoc.doc_ids)) { reportError('The `doc_ids\' field must be an array of strings.'); } if ((typeof newDoc.filter !== 'undefined') && ((typeof newDoc.filter !== 'string') || !newDoc.filter)) { reportError('The `filter\' field must be a non-empty string.'); } if ((typeof newDoc.query_params !== 'undefined') && ((typeof newDoc.query_params !== 'object') || newDoc.query_params === null)) { reportError('The `query_params\' field must be an object.'); } if (newDoc.user_ctx) { var user_ctx = newDoc.user_ctx; if ((typeof user_ctx !== 'object') || (user_ctx === null)) { reportError('The `user_ctx\' property must be a ' + 'non-null object.'); } if (!(user_ctx.name === null || (typeof user_ctx.name === 'undefined') || ((typeof user_ctx.name === 'string') && user_ctx.name.length > 0))) { reportError('The `user_ctx.name\' property must be a ' + 'non-empty string or null.'); } if (!isAdmin && (user_ctx.name !== userCtx.name)) { reportError('The given `user_ctx.name\' is not valid'); } if (user_ctx.roles && !isArray(user_ctx.roles)) { reportError('The `user_ctx.roles\' property must be ' + 'an array of strings.'); } if (!isAdmin && user_ctx.roles) { for (var i = 0; i < user_ctx.roles.length; i++) { var role = user_ctx.roles[i]; if (typeof role !== 'string' || role.length === 0) { reportError('Roles must be non-empty strings.'); } if (userCtx.roles.indexOf(role) === -1) { reportError('Invalid role (`' + role + '\') in the `user_ctx\''); } } } } else { if (!isAdmin) { reportError('The `user_ctx\' property is missing (it is ' + 'optional for admins only).'); } } } else { if (!isAdmin) { if (!oldDoc.user_ctx || (oldDoc.user_ctx.name !== userCtx.name)) { reportError('Replication documents can only be deleted by ' + 'admins or by the users who created them.'); } } } } >> >> >>> >>> On Mon, Aug 6, 2012 at 1:46 AM, Michael Bykov wrote: >>>> 2012/8/5 Dave Cottlehuber : >>>>> On 5 August 2012 19:47, Michael Bykov wrote: >>>>>> Hi, >>>>>> >>>>>> I by chance replicate "_replicator" to a destination database. More >>>>>> exactly, I click "replicate" button, but nothing happens. >>>>>> >>>>>> But now, when I replicate my local db, it wrote in a log on each document: >>>>>> >>>>>> [error] [<0.28457.5>] Replicator: couldn't write document >>>>>> `4fc8269be10198e2bfa2a137fe1a9333`, revision >>>>>> `1-4a8baba0dd74f92ec0da91e8fff84774`, to target database >>>>>> `http://admin:*****@localhost:5986/diglossa/`. Error: `forbidden`, >>>>>> reason: `The `source' property must exist and be either a string or an >>>>>> object.` >>>>>> >>>>>> And in Futon: >>>>>> >>>>>> {"session_id":"d7c097b8d822f707725b1b79b5bc3bc8","start_time":"Sun, 05 >>>>>> Aug 2012 17:34:34 GMT","end_time":"Sun, 05 Aug 2012 17:34:42 >>>>>> GMT","start_last_seq":262336,"end_last_seq":262672,"recorded_seq":262672,"missing_checked":280,"missing_found":280,"docs_read":280,"docs_written":0,"doc_write_failures":280} >>>>>> >>>>>> I compact and cleanup both databases, it did not help. >>>>>> >>>>>> Please, suggest, what can be done? >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> М. >>>>>> >>>>>> http://diglossa.ru >>>>>> xmpp://m.bykov@jabber.ru >>>>> >>>>> Hi Michael, >>>>> >>>>> The thing stopping writing your docs is a validation function (clue >>>>> "`The `source' property must exist and be either a string or an >>>>> object" is not in the couch source tree). I'm guessing a little but I >>>>> think your _replicator db at one end now has "normal" design docs in >>>>> it. >>>>> >>>>> What I'd do now is: >>>>> >>>>> 1. rename the _replicator.couch db file at the problem end to something else. >>>>> 2. restart couchdb (get a new, clean _replicator) >>>>> 3. if you need to, log into futon as admin and delete all ddocs in the >>>>> renamed, foobared _replicator and rename it back. You'll likely only >>>>> need this if you have continuous replications, or ones that should be >>>>> present on a restart of couchdb. >>>>> 4. any more cleanup as reqd by your application. >>>>> >>>>> I think that's enough to get you started. >>>>> >>>>> A+ >>>>> Dave >>>> >>>> >>>> Hi Dave, thank you! >>>> >>>> yes, _replicator.couch files had different sizes, 4.1 kb on local end >>>> and 8.2 on remote. >>>> >>>> I removed both _replicator.couch and restart both couchdb. but alas, >>>> it did not help. >>>> >>>> in logs on my side (each document) >>>> >>>> [error] [<0.3848.0>] Replicator: couldn't write document xxx to target database >>>> >>>> but on remote side >>>> >>>> [info] [<0.253.0>] OS Process #Port<0.3042> Log :: Error writing >>>> document `1a1f377aaa9a5f0125b2344c20087eb7' to the replicator >>>> database: The `source' property must exist and be either a string or >>>> an object. >>>> >>>> Why it write 'replicator database'? >>>> >>>> By the way, remote end had a lot of strange for this place files and >>>> directories, for example .bashrc, .ssh, .bash_logout. .emacs.d/ >>>> >>>> I have deleted all of them, and restart it again. Now it has the same >>>> files as my local end. >>>> >>>> Permissions are correct, as far as I can see. >>>> >>>> I have deleted my new docs from local db, replication goes ok, in Futon >>>> >>>> "missing_checked":280,"missing_found":280,"docs_read":280,"docs_written":280,"doc_write_failures":0} >>>> >>>> and then I have created this docs again and had again >>>> >>>> "missing_checked":280,"missing_found":280,"docs_read":280,"docs_written":0,"doc_write_failures":280} >>>> >>>> >>>> >>>> -- >>>> М. >>>> >>>> http://diglossa.ru >>>> xmpp://m.bykov@jabber.ru >> >> >> >> -- >> М. >> >> http://diglossa.ru >> xmpp://m.bykov@jabber.ru -- М. http://diglossa.ru xmpp://m.bykov@jabber.ru