Слабая репликация Couchbase Lite завершается с ошибкой в ​​примере проекта тестирования End-to-End Couchbase Mobile - PullRequest
6 голосов
/ 11 февраля 2020

Я начинаю работать с Couchbase Mobile. Особенность, которая меня больше всего интересует (на данный момент) - репликация PULL (хранение данных на мобильном устройстве в синхронизации c с базой данных бэкенда)

Я выполнил шаги, описанные в Используя Docker для разработки с Couchbase Mobile и получил сервер Couchbase (enterprise-6.5.0) и шлюз syn c (2.7.0 Предприятие) развернуто локально. Я добавил базу данных beer-sample (содержит ~ 8400 документов) и сейчас пытаюсь скопировать ее в приложение android. Я настроил проект Userprofile Couchbase Mobile Android и указал его на свой локальный шлюз syn c. У меня есть кусок кода для репликации, как показано ниже:

  public static void startPullReplication() {
    Log.i("Pull", "Start pull beer-sample");
    URI url = null;
    try {
      url = new URI(String.format("%s/%s", "ws://10.0.1.7:4984", beerSampleDbName));
    } catch (URISyntaxException e) {
      e.printStackTrace();
    }

    ReplicatorConfiguration config =
        new ReplicatorConfiguration(beerSampleDatabase, new URLEndpoint(url)); // <1>
    config.setReplicatorType(ReplicatorConfiguration.ReplicatorType.PULL); // <2>
    config.setContinuous(true); // <3>
    config.setAuthenticator(new BasicAuthenticator("admin", "password")); // <4>
    //    config.setChannels(Arrays.asList("channel." + "admin")); // <5>

    replicator = new Replicator(config);
    replicatorListenerToken =
        replicator.addChangeListener(
            new ReplicatorChangeListener() {
              @Override
              public void changed(ReplicatorChange change) {
                Log.i("Pull", "Changed pull beer sample : " + change.getStatus());
                if (change
                    .getReplicator()
                    .getStatus()
                    .getActivityLevel()
                    .equals(Replicator.ActivityLevel.IDLE)) {
                  Log.i("Replication Comp Log", "Scheduler Completed");
                }
                if (change
                        .getReplicator()
                        .getStatus()
                        .getActivityLevel()
                        .equals(Replicator.ActivityLevel.STOPPED)
                    || change
                        .getReplicator()
                        .getStatus()
                        .getActivityLevel()
                        .equals(Replicator.ActivityLevel.OFFLINE)) {
                  Log.i("Rep Scheduler  Log", "ReplicationTag Stopped");
                }
              }
            });
    replicator.start();

    Log.i("Pull", "Replication beer-sample started");
  }

и слушаю изменения в БД, как показано ниже:


  private void registerForDatabaseChanges() {
    beerSampleListenerToken =
        beerSampleDatabase.addChangeListener(
            new DatabaseChangeListener() {
              Integer i=0;
              @Override
              public void changed(@NonNull DatabaseChange change) {
                Log.i("DatabaseChangeEvent", String.valueOf(i));
                i++;
                for (String docId : change.getDocumentIDs()) {
                  Document doc = beerSampleDatabase.getDocument(docId);
                  if (doc != null) {
                    Log.i("DatabaseChangeEvent", doc.getId() + ": Document was added/updated");
                  } else {
                    Log.i("DatabaseChangeEvent", docId + "Document was deleted");
                  }
                }
              }
            });
  }

Теперь, когда я запускаю приложение, я получаю следующее logs.

2020-02-11 15:44:46.420 22513-22513/com.cbmob.testapp W/CouchbaseLite/DATABASE: Database.log.getFile().getConfig() is null, meaning file logging is disabled.  Log files required for product support are not being generated.
2020-02-11 15:44:46.615 22513-22545/com.cbmob.testapp D/OpenGLRenderer: HWUI GL Pipeline
2020-02-11 15:44:46.744 22513-22545/com.cbmob.testapp I/zygote: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay retrieved: 0
2020-02-11 15:44:46.744 22513-22545/com.cbmob.testapp I/OpenGLRenderer: Initialized EGL, version 1.4
2020-02-11 15:44:46.744 22513-22545/com.cbmob.testapp D/OpenGLRenderer: Swap behavior 1
2020-02-11 15:44:46.745 22513-22545/com.cbmob.testapp W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
2020-02-11 15:44:46.745 22513-22545/com.cbmob.testapp D/OpenGLRenderer: Swap behavior 0
2020-02-11 15:44:46.752 22513-22545/com.cbmob.testapp D/EGL_emulation: eglCreateContext: 0xa9f30d40: maj 3 min 0 rcv 3
2020-02-11 15:44:46.765 22513-22545/com.cbmob.testapp D/EGL_emulation: eglMakeCurrent: 0xa9f30d40: ver 3 0 (tinfo 0x9f7bf880)
2020-02-11 15:44:46.976 22513-22545/com.cbmob.testapp D/EGL_emulation: eglMakeCurrent: 0xa9f30d40: ver 3 0 (tinfo 0x9f7bf880)



2020-02-11 15:44:56.458 22513-22513/com.cbmob.testapp I/Pull: Start pull beer-sample
2020-02-11 15:44:56.480 22513-22576/com.cbmob.testapp W/CouchbaseLite/NETWORK: C4Socket.open() socket -> 2852069288
2020-02-11 15:44:56.480 22513-22576/com.cbmob.testapp W/CouchbaseLite/NETWORK: C4Socket.open() clazz -> com.couchbase.lite.internal.replicator.CBLWebSocket
2020-02-11 15:44:56.482 22513-22513/com.cbmob.testapp I/Pull: Replication beer-sample started
2020-02-11 15:44:56.497 22513-22513/com.cbmob.testapp I/Pull: Changed pull beer sample : Status{activityLevel=CONNECTING, progress=Progress{completed=0, total=0}, error=null}
2020-02-11 15:44:56.519 22513-22576/com.cbmob.testapp D/NetworkSecurityConfig: No Network Security Config specified, using platform default
2020-02-11 15:44:56.528 22513-22576/com.cbmob.testapp E/CouchbaseLite/NETWORK: CBLWebSocket.socket_open()
2020-02-11 15:44:56.582 22513-22576/com.cbmob.testapp W/CouchbaseLite/NETWORK: C4Socket.write() handle -> 2852069288
2020-02-11 15:44:56.586 22513-22576/com.cbmob.testapp W/CouchbaseLite/NETWORK: completedWrite(long) handle -> 2852069288, byteCount -> 68
2020-02-11 15:44:56.591 22513-22513/com.cbmob.testapp I/Pull: Changed pull beer sample : Status{activityLevel=BUSY, progress=Progress{completed=0, total=0}, error=null}
2020-02-11 15:44:56.591 22513-22576/com.cbmob.testapp W/CouchbaseLite/NETWORK: C4Socket.write() handle -> 2852069288
2020-02-11 15:44:56.592 22513-22576/com.cbmob.testapp W/CouchbaseLite/NETWORK: completedWrite(long) handle -> 2852069288, byteCount -> 121
2020-02-11 15:44:56.605 22513-22577/com.cbmob.testapp W/CouchbaseLite/NETWORK: C4Socket.completedReceive() handle -> 2852069288
2020-02-11 15:44:56.608 22513-22577/com.cbmob.testapp I/chatty: uid=10086(com.cbmob.testapp) Thread-9 identical 1 line
2020-02-11 15:44:56.612 22513-22577/com.cbmob.testapp W/CouchbaseLite/NETWORK: C4Socket.completedReceive() handle -> 2852069288
2020-02-11 15:44:56.627 22513-22513/com.cbmob.testapp I/Pull: Changed pull beer sample : Status{activityLevel=IDLE, progress=Progress{completed=0, total=0}, error=null}
2020-02-11 15:44:56.628 22513-22513/com.cbmob.testapp E/Replication Comp Log: Scheduler Completed

Очевидно, что изменения документа в БД не регистрируются. Исходя из этого, я предполагаю, что репликация вообще не происходит. Я не уверен, как go отладить это. Если у кого-нибудь есть указания на то, как это можно отладить, я был бы признателен. При необходимости я могу опубликовать журналы syn c gateway.

Если у кого-нибудь есть ссылки на какие-либо блоги или проекты, в которых объясняется, как собрать все части вместе, просим поделиться этим.

С нетерпением жду ответа от людей.

1 Ответ

0 голосов
/ 20 февраля 2020

После мучительного путешествия, пройдя весь этот процесс и не получив никакой подсказки из журналов отладки эмулятора, я попытался запустить приложение на реальном устройстве, и оно записало в журнал сообщение об ошибке, в котором что-то говорилось с эффектом не разрешено связываться с сетью (я потерял точную запись в журнале). После изучения этой проблемы я узнал, что нацеливаюсь на API 28 и, как задокументировано здесь , для API> = 28, значение по умолчанию для cleartextTrafficPermitted равно false. Установка на true исправила проблему.

Надеюсь, это поможет кому-то сэкономить время.

...