无法使用groovy脚本在couchbase上创建主索引 [英] Unable to create primary index on couchbase using groovy script

查看:156
本文介绍了无法使用groovy脚本在couchbase上创建主索引的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

$ $ $ $ $ $ $ $ $ $ $ $ @Grab('com.couchbase.client:java-client:2.2。 6')

import java.util.concurrent.CountDownLatch;
导入com.couchbase.client.java.Bucket;
导入com.couchbase.client.java.Cluster;
导入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;
导入com.couchbase.client.java.env.CouchbaseEnvironment;
导入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连接完成

字符串queryString =CREATE PRIMARY INDEX`PrimInd` ON BUCKET_NAME
bucket.query(N1qlQuery.simple(queryString))

log.info创建的主索引

它给我错误如下: -

  java.lang.RuntimeException:此行的java.util.concurrent.TimeoutException: -  

bucket.query(N1qlQuery.simple(queryString))

连接正常完成,同一查询工作于couchbase服务器。所以,我认为我的代码存在问题。



您可以帮我解决这个问题吗?

解决方案

Couchbase Java客户端, query()方法委托给 Blocking 使用JavaRx的API。 source 代码表明:
$ b


如果在 Observable ,它会以
作为 Exception 如果发生超时,嵌套在 RuntimeException 中的 TimeoutException 被抛出 Observable.timeout(long,TimeUnit)行为兼容

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

DefaultCouchbaseEnvironment defaults queryTimeout a href =https://github.com/couchbase/couchbase-java-client/blob/master/src/main/java/com/couchbase/client/java/CouchbaseBucket.java#L574 =nofollow noreferrer >用于N1qlQuery查询)75毫秒。您可以使用环境构建器更改此默认设置:

  def env = DefaultCouchbaseEnvironment.builder()
.connectTimeout(10000 )
.queryTimeout(10000)//这是查询超时
.build()


I am not able to Create primary index on couchbase using groovy script. Below are the lines of code I used:-

@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"

It gives me error as below :-

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

bucket.query(N1qlQuery.simple(queryString))

Connection is being done properly and same query works in couchbase server. So, I think there is problem with my code.

Could you please help me on this?

解决方案

In the Couchbase Java client, the query() method delegates to a Blocking API which uses JavaRx under the covers. The source code for the Blocking API states:

If an error happens inside the Observable, it will be raised as an Exception. If the timeout kicks in, a TimeoutException nested in a RuntimeException is thrown to be fully compatible with the Observable.timeout(long, TimeUnit) behavior.

You're experiencing a TimeoutException nested in a RuntimeException, hence the root cause is that your query is timing out.

DefaultCouchbaseEnvironment defaults to a queryTimeout (the timeout used for N1qlQuery queries) of 75 milli-seconds. You can change this default with the environment builder:

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

这篇关于无法使用groovy脚本在couchbase上创建主索引的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆