无法使用groovy脚本在couchbase上创建主索引 [英] Unable to create primary index on couchbase using groovy script
问题描述
我无法使用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 anException
. If the timeout kicks in, aTimeoutException
nested in aRuntimeException
is thrown to be fully compatible with theObservable.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屋!