I am trying to test couchbase lite, sync gateway and server by performing a simple pull replication from the server to my couchbase lite java native code using the below code.
package com.example;
import com.couchbase.lite.Database;
import com.couchbase.lite.Document;
import com.couchbase.lite.Manager;
import com.couchbase.lite.replicator.Replication;
import com.couchbase.lite.replicator.Replication.ReplicationStatus;
import com.couchbase.lite.JavaContext;
import com.couchbase.lite.util.Log;
import java.net.MalformedURLException;
import java.net.URL;
public class TestSyncGateway {
public static String TAG = "TestSyncGateway";
//constants
public static final String DATABASE_NAME = "ships";
//couch internals
protected static Manager manager;
private static Database database;
private static Replication pull;
public static void main(String[] args) {
try {
startCBLite();
} catch (Exception e) {
e.printStackTrace();
}
startReplications();
System.out.println("Status: " +pull.getStatus());
while(pull.getStatus() == ReplicationStatus.REPLICATION_ACTIVE) {
//System.out.println("REPLICATING!");
}
System.out.println("Document count: " +database.getDocumentCount());
System.out.println("Status: " +pull.getStatus());
}
private static void startCBLite() throws Exception {
Manager.enableLogging(TAG, Log.VERBOSE);
Manager.enableLogging(Log.TAG, Log.VERBOSE);
Manager.enableLogging(Log.TAG_SYNC_ASYNC_TASK, Log.VERBOSE);
Manager.enableLogging(Log.TAG_SYNC, Log.VERBOSE);
Manager.enableLogging(Log.TAG_QUERY, Log.VERBOSE);
Manager.enableLogging(Log.TAG_VIEW, Log.VERBOSE);
Manager.enableLogging(Log.TAG_DATABASE, Log.VERBOSE);
manager = new Manager(new JavaContext("data"), Manager.DEFAULT_OPTIONS);
database = manager.getDatabase(DATABASE_NAME);
}
private static URL createSyncURL(boolean isEncrypted){
URL syncURL = null;
String host = "http://localhost";
String port = "4984";
String dbName = "ships";
try {
syncURL = new URL(host + ":" + port + "/" + dbName);
} catch (MalformedURLException me) {
me.printStackTrace();
}
return syncURL;
}
private static void startReplications() {
pull = database.createPullReplication(createSyncURL(false));
pull.setContinuous(true);
pull.start();
}
}
I have configured and started my sync gateway as per below
{
"interface":":4984",
"adminInterface":":4985",
"log":["CRUD+", "REST+", "Changes+", "Attach+"],
"databases":{
"ships":{
"server":"http://localhost:8091",
"bucket":"ships",
"sync":`function(doc) {channel(doc.channels);}`,
"users": {
"GUEST": {
"disabled": false,
"admin_channels": ["*"]
}
}
}
}
}
I have 12 documents in the ships data bucket on the server but after running the above code I get something like
Status: REPLICATION_ACTIVE
REPLICATING!
REPLICATING!
REPLICATING!
REPLICATING!
REPLICATING!
...
Documents: 0
Status: REPLICATION_IDLE
I’m not sure why the pull isn’t working? I can see the following in the sync_gateway console.
2015-08-24T15:11:29.355+01:00 HTTP: #021: GET /ships/_local/47f26f56faf66ebac05
64c00b7b99032be77ad5d
2015-08-24T15:11:29.356+01:00 HTTP: #021: --> 404 missing (1.0 ms)
2015-08-24T15:11:29.433+01:00 HTTP: #022: POST /ships/_changes
2015-08-24T15:11:29.433+01:00 Changes: MultiChangesFeed({*}, {Since:0 Limit:0 Co
nflicts:true IncludeDocs:false Wait:false Continuous:false Terminator:0xc08211ac
00 HeartbeatMs:300000 TimeoutMs:0}) ...
2015-08-24T15:11:29.434+01:00 Changes+: MultiChangesFeed: channels expand to cha
nnels.TimedSet{"*":0x1, "!":0x1} ...
2015-08-24T15:11:29.434+01:00 Changes+: MultiChangesFeed sending &{Seq:1 ID:_use
r/GUEST Deleted:false Removed:{} Doc:map[] Changes:[] Err:<nil> branched:false}
2015-08-24T15:11:29.435+01:00 Changes: MultiChangesFeed done
2015-08-24T15:11:29.517+01:00 HTTP: #023: POST /ships/_changes
2015-08-24T15:11:29.517+01:00 Changes: MultiChangesFeed({*}, {Since:1 Limit:50 C
onflicts:true IncludeDocs:false Wait:true Continuous:false Terminator:0xc08211b3
20 HeartbeatMs:300000 TimeoutMs:0}) ...
2015-08-24T15:11:29.518+01:00 Changes+: MultiChangesFeed: channels expand to cha
nnels.TimedSet{"!":0x1, "*":0x1} ...
2015-08-24T15:11:29.518+01:00 Changes+: MultiChangesFeed waiting...
2015-08-24T15:11:29.519+01:00 Changes+: Waiting for "ships"'s count to pass 0
I can also see the following output by the couchbase log utility
WARNING: Sync: com.couchbase.lite.replicator.PullerInternal@759e008: Received in
valid doc ID from _changes: {seq=1, id=_user/GUEST, changes=[]}
Any ideas why it doesn’t appear to be replicating?