无法使用groovy脚本在couchbase上创建主索引

时间:2018-02-26 10:15:35

标签: java groovy couchbase n1ql

我无法使用groovy脚本在couchbase上创建主索引。以下是我使用的代码行: -

@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服务器中有效。所以,我认为我的代码存在问题。

你能帮帮我吗?

1 个答案:

答案 0 :(得分:2)

在Couchbase Java客户端中,query()方法委托给使用JavaRx的Blocking API。阻止API的source代码声明:

  

如果Observable内发生错误,则会引发错误   作为Exception如果超时启动,则会TimeoutException嵌套在RuntimeException以完全兼容Observable.timeout(long, TimeUnit)行为。

您遇到TimeoutException嵌套RuntimeException,因此根本原因是您的查询超时。

DefaultCouchbaseEnvironment defaults queryTimeout (N1qlQuery查询的超时used)为75毫秒。您可以使用环境构建器更改此默认值:

def env = DefaultCouchbaseEnvironment.builder()
    .connectTimeout(10000)
    .queryTimeout(10000) // This is the query timeout
    .build()