Hello out there,
I’m having trouble wrapping my head arround an error I’m encountering, while trying to filter a repilcation using specific channels.
For my ionic/cordova application I want to connect to a Sync Gateway but limit the replication to specific channels. The public channel ("!") and one specific user channel (“user_user_1”) to be precise.
I think I have set up the replication as described in this post: How to sync a specific channel with ionic2, couchbase lite 2.0 and sync gateway 1.5
So what I do, is opening a XMLHttpRequest, which looks like this
Sending database request to
|http://0b67b067-01d1-4056-833c-459167626dd4:9af95e01-c7f9-462a-bb3e-d4cd300ab79e@localhost:5984/_replicate?|
with data
|{
"source": "http://client13:4984/db",
"target": "db",
"continuous": true,
"filter": "sync_gateway/bychannel",
"channels": "user_user_1"
}|
The local server acknowledges this with
Established sync. Response |{"session_id":"repl002","ok":true}|
And the summary of active tasks includes the replication:
{
"completed_change_count": 0,
"source": "http://client13:4984/db",
"task": "repl001",
"status": "Processed 0 / 0 changes",
"progress": 0,
"continuous": true,
"target": "db",
"change_count": 0,
"type": "Replication"
}
However the replications fails due to an error 400
ChangeTracker{http://client13:4984/db, OneShot, @b7f03fd}: Change tracker got error 400
while the logs of the sync gateway show the following error:
2018-04-09T12:30:12.212Z HTTP: #1241: POST /db/_changes?feed=normal&heartbeat=30000&style=all_docs&filter=sync_gateway%2Fbychannel
2018-04-09T12:30:12.213Z Changes+: Changes POST request. URL: /db/_changes?feed=normal&heartbeat=30000&style=all_docs&filter=sync_gateway%2Fbychannel, feed: normal, options: {Since:0 Limit:0 Conflicts:true IncludeDocs:false Wait:false Continuous:false Terminator:<nil> HeartbeatMs:30000 TimeoutMs:300000 ActiveOnly:false}, filter: sync_gateway/bychannel, bychannel: [], docIds: []
2018-04-09T12:30:12.213Z HTTP: #1241: --> 400 Missing 'channels' filter parameter (0.6 ms)
This indicates that the local couchbase lite instance on the mobile does not include the channels parameter in the POST request to the sync gateway although it is specified in the initial request issued by may application.
The manual request using curl deliverst the expected result:
curl -X POST "http://localhost:4984/db/_changes" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"limit\": 0, \"style\": \"all_docs\", \"active_only\": false, \"include_docs\": false, \"filter\": \"sync_gateway/bychannel\", \"channels\": \"user_user_1\", \"feed\": \"normal\", \"since\": 0, \"heartbeat\": 30000, \"timeout\": 30000}"
Can anyone of you help me to determine the mistake I made? It seems as if the couchbase lite instance just ignores my specified channels
Thank you very much in advance!