Невозможно создать первичный индекс на диване с помощью скрипта groovy

Я не могу создать первичный индекс на диване с помощью скрипта groovy. Ниже приведены строки кода, которые я использовал: -

@Grab('com.couchbase.client:java-client:2.2.6')

import java.util.concurrent.CountDownLatch;
import com.couchbase.client.java.Bucket;
import com.couchbase.client.java.Cluster;
import com.couchbase.client.java.CouchbaseCluster;
import com.couchbase.client.java.document.JsonDocument;
import com.couchbase.client.java.document.json.JsonObject;
import com.couchbase.client.java.CouchbaseCluster
import com.couchbase.client.java.query.N1qlQuery;
import com.couchbase.client.java.query.N1qlQueryResult;
import com.couchbase.client.java.query.N1qlQueryRow;
import com.couchbase.client.java.query.SimpleN1qlQuery;
import com.couchbase.client.java.env.CouchbaseEnvironment;
import com.couchbase.client.java.env.DefaultCouchbaseEnvironment;

CouchbaseEnvironment env = DefaultCouchbaseEnvironment.builder().connectTimeout(10000).build();
def cluster = CouchbaseCluster.create(env, IPADDRESS);
def bucket = cluster.openBucket(BUCKET_NAME, BUCKET_PASSWORD);
log.info "Connection done"

String queryString = "CREATE PRIMARY INDEX `PrimInd` ON BUCKET_NAME"
bucket.query(N1qlQuery.simple(queryString))

log.info "Primary index created"

Это дает мне ошибку, как показано ниже: -

java.lang.RuntimeException: java.util.concurrent.TimeoutException at this line:-

bucket.query(N1qlQuery.simple(queryString))

Соединение выполняется правильно, и тот же запрос работает на сервере Couchbase. Итак, я думаю, что есть проблема с моим кодом.

Не могли бы вы помочь мне в этом?


person avidCoder    schedule 26.02.2018    source источник
comment
Разве "CREATE PRIMARY INDEX `PrimInd` ON `BUCKET_NAME`" не должно быть "CREATE PRIMARY INDEX `PrimInd` ON `$BUCKET_NAME`"?   -  person tim_yates    schedule 26.02.2018
comment
Хорошо, вы имеете в виду, что если BUCKET_NAME является демо, то я должен использовать этот запрос? - СОЗДАТЬ ОСНОВНОЙ ИНДЕКС PrimInd НА $demo   -  person avidCoder    schedule 26.02.2018
comment
Нет. Вы используете переменную BUCKET_NAME дальше по сценарию, затем литерал BUCKET_NAME в запросе   -  person tim_yates    schedule 26.02.2018
comment
Хорошо, если имя моей корзины Demo.. Как написать запрос?   -  person avidCoder    schedule 26.02.2018
comment
@Simon Baslé - Не могли бы вы помочь мне с этим?   -  person avidCoder    schedule 26.02.2018


Ответы (1)


В Java-клиенте Couchbase метод query() делегирует Blocking API, который скрыто использует JavaRx. исходный код для Blocking API:

Если внутри Observable произойдет ошибка, она будет поднята как Exception. Если истекает время ожидания, создается TimeoutException, вложенное в RuntimeException, чтобы быть полностью совместимым с поведением Observable.timeout(long, TimeUnit).

Вы столкнулись с TimeoutException, вложенным в RuntimeException, следовательно, основная причина заключается в том, что время ожидания вашего запроса истекло.

DefaultCouchbaseEnvironment по умолчанию равно queryTimeout (время ожидания используется для запросов N1qlQuery) 75 миллисекунд. Вы можете изменить это значение по умолчанию с помощью построителя среды:

def env = DefaultCouchbaseEnvironment.builder()
    .connectTimeout(10000)
    .queryTimeout(10000) // This is the query timeout
    .build()
person Emmanuel Rosa    schedule 26.02.2018
comment
Я попробую с приведенным выше кодом и дам вам знать. Спасибо за ответ. - person avidCoder; 26.02.2018