Package com.couchbase.client.java.bucket
Class DefaultAsyncBucketManager
- java.lang.Object
-
- com.couchbase.client.java.bucket.DefaultAsyncBucketManager
-
- All Implemented Interfaces:
AsyncBucketManager
public class DefaultAsyncBucketManager extends Object implements AsyncBucketManager
Default implementation of aAsyncBucketManager.- Since:
- 2.0
- Author:
- Michael Nitschinger
-
-
Field Summary
Fields Modifier and Type Field Description static StringINDEX_WATCH_LOG_NAMEthe name of the logger dedicated to index watching
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description rx.Observable<List<String>>buildN1qlDeferredIndexes()Instruct the query engine to trigger the build of indexes that have been deferred.static DefaultAsyncBucketManagercreate(String bucket, String password, ClusterFacade core, CouchbaseEnvironment env)static DefaultAsyncBucketManagercreate(String bucket, String username, String password, ClusterFacade core, CouchbaseEnvironment env)rx.Observable<Boolean>createN1qlIndex(String indexName, boolean ignoreIfExist, boolean defer, Object... fields)Create a secondary index for the current bucket.rx.Observable<Boolean>createN1qlIndex(String indexName, List<Object> fields, Expression whereClause, boolean ignoreIfExist, boolean defer)Create a secondary index for the current bucket, with a WHERE clause.rx.Observable<Boolean>createN1qlPrimaryIndex(boolean ignoreIfExist, boolean defer)Create a primary index for the current bucket.rx.Observable<Boolean>createN1qlPrimaryIndex(String customName, boolean ignoreIfExist, boolean defer)Create a custom-named primary index for the current bucket.rx.Observable<Boolean>dropN1qlIndex(String name, boolean ignoreIfNotExist)Drop the given secondary index associated with the current bucket.rx.Observable<Boolean>dropN1qlPrimaryIndex(boolean ignoreIfNotExist)Drop the default primary index (Index.PRIMARY_NAME) associated with the current bucket.rx.Observable<Boolean>dropN1qlPrimaryIndex(String customName, boolean ignoreIfNotExist)Drop the given custom-named primary index associated with the current bucket.rx.Observable<Boolean>flush()Flushes the bucket (removes all data).rx.Observable<DesignDocument>getDesignDocument(String name)Loads a publishedDesignDocumentby its name.rx.Observable<DesignDocument>getDesignDocument(String name, boolean development)Loads aDesignDocumentby its name from either development or production.rx.Observable<DesignDocument>getDesignDocuments()Loads all publishedDesignDocuments.rx.Observable<DesignDocument>getDesignDocuments(boolean development)Loads allDesignDocuments from development or production.rx.Observable<BucketInfo>info()Returns information about the connected bucket.rx.Observable<DesignDocument>insertDesignDocument(DesignDocument designDocument)Inserts aDesignDocumentinto production if it does not exist.rx.Observable<DesignDocument>insertDesignDocument(DesignDocument designDocument, boolean development)Inserts aDesignDocumentinto development or production if it does not exist.rx.Observable<IndexInfo>listN1qlIndexes()List all N1QL GSI indexes that are registered for the current bucket.rx.Observable<DesignDocument>publishDesignDocument(String name)Publishes aDesignDocumentfrom development into production.rx.Observable<DesignDocument>publishDesignDocument(String name, boolean overwrite)Publishes aDesignDocumentfrom development into production.rx.Observable<Boolean>removeDesignDocument(String name)Removes aDesignDocumentfrom production by its name.rx.Observable<Boolean>removeDesignDocument(String name, boolean development)Removes aDesignDocumentfrom production or development by its name.rx.Observable<DesignDocument>upsertDesignDocument(DesignDocument designDocument)Upserts (inserts or replaces) aDesignDocumentinto production.rx.Observable<DesignDocument>upsertDesignDocument(DesignDocument designDocument, boolean development)Upserts (inserts or replaces) aDesignDocumentinto production or development.rx.Observable<IndexInfo>watchN1qlIndexes(List<String> watchList, long watchTimeout, TimeUnit watchTimeUnit)Watches all given indexes (possibly including the primary one), polling the query service until they become "online" or the watchTimeout has expired..
-
-
-
Field Detail
-
INDEX_WATCH_LOG_NAME
public static final String INDEX_WATCH_LOG_NAME
the name of the logger dedicated to index watching- See Also:
- Constant Field Values
-
-
Method Detail
-
create
public static DefaultAsyncBucketManager create(String bucket, String username, String password, ClusterFacade core, CouchbaseEnvironment env)
-
create
public static DefaultAsyncBucketManager create(String bucket, String password, ClusterFacade core, CouchbaseEnvironment env)
-
info
public rx.Observable<BucketInfo> info()
Description copied from interface:AsyncBucketManagerReturns information about the connected bucket. TheObservablecan error under the following conditions: - com.couchbase.client.java.error.TranscodingException: If the server response could not be decoded.- Specified by:
infoin interfaceAsyncBucketManager- Returns:
- bucket information wrapped in a
BucketInfo.
-
flush
public rx.Observable<Boolean> flush()
Description copied from interface:AsyncBucketManagerFlushes the bucket (removes all data). Note that flush needs to be enabled on the bucket, otherwise an exception will be raised. TheObservablecan error under the following conditions: - com.couchbase.client.java.error.FlushDisabledException: If flush is disabled. - com.couchbase.client.core.CouchbaseException: If the server response could not be parsed.- Specified by:
flushin interfaceAsyncBucketManager- Returns:
- true if the bucket was flushed, an failed
Observableotherwise.
-
getDesignDocuments
public rx.Observable<DesignDocument> getDesignDocuments()
Description copied from interface:AsyncBucketManagerLoads all publishedDesignDocuments. TheObservablecan error under the following conditions: - com.couchbase.client.java.error.TranscodingException: If the server response could not be parsed.- Specified by:
getDesignDocumentsin interfaceAsyncBucketManager- Returns:
- zero to N invocations containing published
DesignDocuments.
-
getDesignDocuments
public rx.Observable<DesignDocument> getDesignDocuments(boolean development)
Description copied from interface:AsyncBucketManagerLoads allDesignDocuments from development or production. TheObservablecan error under the following conditions: - com.couchbase.client.java.error.TranscodingException: If the server response could not be parsed.- Specified by:
getDesignDocumentsin interfaceAsyncBucketManager- Parameters:
development- if theDesignDocuments should be loaded from development or production.- Returns:
- zero to N invocations containing published
DesignDocuments.
-
getDesignDocument
public rx.Observable<DesignDocument> getDesignDocument(String name)
Description copied from interface:AsyncBucketManagerLoads a publishedDesignDocumentby its name. TheObservablecan error under the following conditions: - com.couchbase.client.java.error.TranscodingException: If the server response could not be parsed. - com.couchbase.client.java.error.DesignDocumentDoesNotExistException: IfDesignDocumentis not found.- Specified by:
getDesignDocumentin interfaceAsyncBucketManager- Parameters:
name- the name of theDesignDocument.- Returns:
- an observable that resolves into a
DesignDocument.
-
getDesignDocument
public rx.Observable<DesignDocument> getDesignDocument(String name, boolean development)
Description copied from interface:AsyncBucketManagerLoads aDesignDocumentby its name from either development or production. TheObservablecan error under the following conditions: - com.couchbase.client.java.error.TranscodingException: If the server response could not be parsed. - com.couchbase.client.java.error.DesignDocumentDoesNotExistException: IfDesignDocumentis not found.- Specified by:
getDesignDocumentin interfaceAsyncBucketManager- Parameters:
name- the name of theDesignDocument.development- if it should be loaded from development or production.- Returns:
- an observable that resolves into a
DesignDocument.
-
insertDesignDocument
public rx.Observable<DesignDocument> insertDesignDocument(DesignDocument designDocument)
Description copied from interface:AsyncBucketManagerInserts aDesignDocumentinto production if it does not exist. Note that inserting aDesignDocumentis not an atomic operation, but instead internally performs aAsyncBucketManager.getDesignDocument(String)operation first. While expected to be very uncommon, a race condition may happen if two users at the same time perform this operation with the sameDesignDocument. TheObservablecan error under the following conditions: - com.couchbase.client.java.error.TranscodingException: If the server response could not be parsed. - com.couchbase.client.java.error.DesignDocumentAlreadyExistsException: If theDesignDocumentexists.- Specified by:
insertDesignDocumentin interfaceAsyncBucketManager- Parameters:
designDocument- theDesignDocumentto insert.- Returns:
- the inserted
DesignDocumenton success.
-
insertDesignDocument
public rx.Observable<DesignDocument> insertDesignDocument(DesignDocument designDocument, boolean development)
Description copied from interface:AsyncBucketManagerInserts aDesignDocumentinto development or production if it does not exist. Note that inserting aDesignDocumentis not an atomic operation, but instead internally performs aAsyncBucketManager.getDesignDocument(String)operation first. While expected to be very uncommon, a race condition may happen if two users at the same time perform this operation with the sameDesignDocument. TheObservablecan error under the following conditions: - com.couchbase.client.java.error.TranscodingException: If the server response could not be parsed. - com.couchbase.client.java.error.DesignDocumentAlreadyExistsException: If theDesignDocumentexists.- Specified by:
insertDesignDocumentin interfaceAsyncBucketManager- Parameters:
designDocument- theDesignDocumentto insert.development- if it should be inserted into development or production (published).- Returns:
- the inserted
DesignDocumenton success.
-
upsertDesignDocument
public rx.Observable<DesignDocument> upsertDesignDocument(DesignDocument designDocument)
Description copied from interface:AsyncBucketManagerUpserts (inserts or replaces) aDesignDocumentinto production. If you want to add or update view definitions to an existing design document, you need to make sure you have all the views (including old ones) in the DesignDocument. UseAsyncBucketManager.getDesignDocument(String)to get the old list and add your new view to it before calling this method. TheObservablecan error under the following conditions: - com.couchbase.client.java.error.TranscodingException: If the server response could not be parsed.- Specified by:
upsertDesignDocumentin interfaceAsyncBucketManager- Parameters:
designDocument- theDesignDocumentto upsert.- Returns:
- the upserted
DesignDocumenton success.
-
upsertDesignDocument
public rx.Observable<DesignDocument> upsertDesignDocument(DesignDocument designDocument, boolean development)
Description copied from interface:AsyncBucketManagerUpserts (inserts or replaces) aDesignDocumentinto production or development. If you want to add or update view definitions to an existing design document, you need to make sure you have all the views (including old ones) in the DesignDocument. UseAsyncBucketManager.getDesignDocument(String)to get the old list and add your new view to it before calling this method. TheObservablecan error under the following conditions: - com.couchbase.client.java.error.TranscodingException: If the server response could not be parsed.- Specified by:
upsertDesignDocumentin interfaceAsyncBucketManager- Parameters:
designDocument- theDesignDocumentto upsert.development- if theDesignDocumentshould be upserted into development or production.- Returns:
- the upserted
DesignDocumenton success.
-
removeDesignDocument
public rx.Observable<Boolean> removeDesignDocument(String name)
Description copied from interface:AsyncBucketManagerRemoves aDesignDocumentfrom production by its name. TheObservablecan error under the following conditions: - com.couchbase.client.java.error.DesignDocumentDoesNotExistException: IfDesignDocumentis not found.- Specified by:
removeDesignDocumentin interfaceAsyncBucketManager- Parameters:
name- the name of theDesignDocument.- Returns:
- true if succeeded, false otherwise.
-
removeDesignDocument
public rx.Observable<Boolean> removeDesignDocument(String name, boolean development)
Description copied from interface:AsyncBucketManagerRemoves aDesignDocumentfrom production or development by its name. TheObservablecan error under the following conditions: - com.couchbase.client.java.error.DesignDocumentDoesNotExistException: IfDesignDocumentis not found.- Specified by:
removeDesignDocumentin interfaceAsyncBucketManager- Parameters:
name- the name of theDesignDocument.development- if theDesignDocumentshould be removed from development or production.- Returns:
- true if succeeded, false otherwise.
-
publishDesignDocument
public rx.Observable<DesignDocument> publishDesignDocument(String name)
Description copied from interface:AsyncBucketManagerPublishes aDesignDocumentfrom development into production. Note that this method does not override a already existingDesignDocument(seeAsyncBucketManager.publishDesignDocument(String, boolean)) as an alternative. TheObservablecan error under the following conditions: - com.couchbase.client.java.error.DesignDocumentAlreadyExistsException: If theDesignDocumentalready exists. - com.couchbase.client.java.error.TranscodingException: If the server response could not be parsed. - com.couchbase.client.java.error.DesignDocumentDoesNotExistException: IfDesignDocumentis not found in development.- Specified by:
publishDesignDocumentin interfaceAsyncBucketManager- Parameters:
name- the name of theDesignDocumentto publish.- Returns:
- the published
DesignDocumenton success.
-
publishDesignDocument
public rx.Observable<DesignDocument> publishDesignDocument(String name, boolean overwrite)
Description copied from interface:AsyncBucketManagerPublishes aDesignDocumentfrom development into production. TheObservablecan error under the following conditions: - com.couchbase.client.java.error.DesignDocumentAlreadyExistsException: If theDesignDocumentalready exists and override is set to false. - com.couchbase.client.java.error.TranscodingException: If the server response could not be parsed. - com.couchbase.client.java.error.DesignDocumentDoesNotExistException: IfDesignDocumentis not found in development.- Specified by:
publishDesignDocumentin interfaceAsyncBucketManager- Parameters:
name- the name of theDesignDocumentto publish.overwrite- if an existingDesignDocumentshould be overridden.- Returns:
- the published
DesignDocumenton success.
-
listN1qlIndexes
public rx.Observable<IndexInfo> listN1qlIndexes()
Description copied from interface:AsyncBucketManagerList all N1QL GSI indexes that are registered for the current bucket. The index management API only deals with GSI type of indexes, which allows it to uniquely identify indexes by name. TheObservablecan error under the following conditions: -TranscodingExceptionif the server response couldn't be parsed.- Specified by:
listN1qlIndexesin interfaceAsyncBucketManager- Returns:
- an
Observablethat will get notified of each relevantIndexInfo(can be empty if no relevant index is defined for this bucket).
-
createN1qlPrimaryIndex
public rx.Observable<Boolean> createN1qlPrimaryIndex(boolean ignoreIfExist, boolean defer)
Description copied from interface:AsyncBucketManagerCreate a primary index for the current bucket. The index management API only deals with GSI type of indexes, which allows it to uniquely identify indexes by name. TheObservablecan error under the following conditions: -IndexAlreadyExistsExceptionif the index already exists and ignoreIfExist is set to false. -CouchbaseExceptionif another error occurs during index creation.- Specified by:
createN1qlPrimaryIndexin interfaceAsyncBucketManager- Parameters:
ignoreIfExist- if a primary index already exists, an exception will be thrown unless this is set to true.defer- true to defer building of the index untilAsyncBucketManager.buildN1qlDeferredIndexes()is called (or a direct call to the corresponding query service API).- Returns:
- an
Observablethat will get notified with a single Boolean.TRUE if the index was effectively created (even in deferred mode), Boolean.FALSE if the index existed and ignoreIfExist is true.
-
createN1qlPrimaryIndex
public rx.Observable<Boolean> createN1qlPrimaryIndex(String customName, boolean ignoreIfExist, boolean defer)
Description copied from interface:AsyncBucketManagerCreate a custom-named primary index for the current bucket. The index management API only deals with GSI type of indexes, which allows it to uniquely identify indexes by name. TheObservablecan error under the following conditions: -IndexAlreadyExistsExceptionif the index already exists and ignoreIfExist is set to false. -CouchbaseExceptionif another error occurs during index creation.- Specified by:
createN1qlPrimaryIndexin interfaceAsyncBucketManager- Parameters:
customName- the custom name for the primary index.ignoreIfExist- if a primary index already exists, an exception will be thrown unless this is set to true.defer- true to defer building of the index untilAsyncBucketManager.buildN1qlDeferredIndexes()is called (or a direct call to the corresponding query service API).- Returns:
- an
Observablethat will get notified with a single Boolean.TRUE if the index was effectively created (even in deferred mode), Boolean.FALSE if the index existed and ignoreIfExist is true.
-
createN1qlIndex
public rx.Observable<Boolean> createN1qlIndex(String indexName, boolean ignoreIfExist, boolean defer, Object... fields)
Description copied from interface:AsyncBucketManagerCreate a secondary index for the current bucket. The index management API only deals with GSI type of indexes, which allows it to uniquely identify indexes by name. The convenience of providing fields as a vararg of either String or Expression comes with the limitation that a WHERE clause cannot be provided. SeeAsyncBucketManager.createN1qlIndex(String, List, Expression, boolean, boolean)for that. TheObservablecan error under the following conditions: -IndexAlreadyExistsExceptionif the index already exists and ignoreIfExist is set to false. -CouchbaseExceptionif another error occurs during index creation.- Specified by:
createN1qlIndexin interfaceAsyncBucketManager- Parameters:
indexName- the name of the index.ignoreIfExist- if a secondary index already exists with that name, an exception will be thrown unless this is set to true.defer- true to defer building of the index untilAsyncBucketManager.buildN1qlDeferredIndexes()is called (or a direct call to the corresponding query service API).fields- the JSON fields to index, in eitherExpressionorStringform.- Returns:
- an
Observablethat will get notified with a single Boolean.TRUE if the index was effectively created (even in deferred mode), Boolean.FALSE if the index existed and ignoreIfExist is true. - See Also:
AsyncBucketManager.createN1qlIndex(String, List, Expression, boolean, boolean)
-
createN1qlIndex
public rx.Observable<Boolean> createN1qlIndex(String indexName, List<Object> fields, Expression whereClause, boolean ignoreIfExist, boolean defer)
Description copied from interface:AsyncBucketManagerCreate a secondary index for the current bucket, with a WHERE clause. The index management API only deals with GSI type of indexes, which allows it to uniquely identify indexes by name. TheObservablecan error under the following conditions: -IndexAlreadyExistsExceptionif the index already exists and ignoreIfExist is set to false. -CouchbaseExceptionif another error occurs during index creation.- Specified by:
createN1qlIndexin interfaceAsyncBucketManager- Parameters:
indexName- the name of the index.fields- the JSON fields to index, in the form of aListcontaining a mix ofExpressionorString.whereClause- theExpressionto use in the WHERE clause of the index.ignoreIfExist- if a secondary index already exists with that name, an exception will be thrown unless this is set to true.defer- true to defer building of the index untilAsyncBucketManager.buildN1qlDeferredIndexes()is called (or a direct call to the corresponding query service API).- Returns:
- an
Observablethat will get notified with a single Boolean.TRUE if the index was effectively created (even in deferred mode), Boolean.FALSE if the index existed and ignoreIfExist is true.
-
dropN1qlPrimaryIndex
public rx.Observable<Boolean> dropN1qlPrimaryIndex(boolean ignoreIfNotExist)
Description copied from interface:AsyncBucketManagerDrop the default primary index (Index.PRIMARY_NAME) associated with the current bucket. The index management API only deals with GSI type of indexes, which allows it to uniquely identify indexes by name. TheObservablecan error under the following conditions: -IndexDoesNotExistExceptionif the primary index doesn't exist and ignoreIfNoExist is set to false. -CouchbaseExceptionif another error occurs during index drop.- Specified by:
dropN1qlPrimaryIndexin interfaceAsyncBucketManager- Parameters:
ignoreIfNotExist- if true, attempting to drop on a bucket without any primary index won't cause an exception to be propagated.- Returns:
- an
Observablethat will get notified with a single Boolean.TRUE if the index was effectively dropped.
-
dropN1qlPrimaryIndex
public rx.Observable<Boolean> dropN1qlPrimaryIndex(String customName, boolean ignoreIfNotExist)
Description copied from interface:AsyncBucketManagerDrop the given custom-named primary index associated with the current bucket. The index management API only deals with GSI type of indexes, which allows it to uniquely identify indexes by name. TheObservablecan error under the following conditions: -IndexDoesNotExistExceptionif the primary index doesn't exist and ignoreIfNoExist is set to false. -CouchbaseExceptionif another error occurs during index drop.- Specified by:
dropN1qlPrimaryIndexin interfaceAsyncBucketManager- Parameters:
customName- the custom name of the primary index.ignoreIfNotExist- if true, attempting to drop on a bucket without any primary index won't cause an exception to be propagated.- Returns:
- an
Observablethat will get notified with a single Boolean.TRUE if the index was effectively dropped.
-
dropN1qlIndex
public rx.Observable<Boolean> dropN1qlIndex(String name, boolean ignoreIfNotExist)
Description copied from interface:AsyncBucketManagerDrop the given secondary index associated with the current bucket. The index management API only deals with GSI type of indexes, which allows it to uniquely identify indexes by name. TheObservablecan error under the following conditions: -IndexDoesNotExistExceptionif the secondary index doesn't exist and ignoreIfNoExist is set to false. -CouchbaseExceptionif another error occurs during index drop.- Specified by:
dropN1qlIndexin interfaceAsyncBucketManagerignoreIfNotExist- if true, attempting to drop on a bucket without the specified index won't cause an exception to be propagated.- Returns:
- an
Observablethat will get notified with a single Boolean.TRUE if the index was effectively dropped.
-
buildN1qlDeferredIndexes
public rx.Observable<List<String>> buildN1qlDeferredIndexes()
Description copied from interface:AsyncBucketManagerInstruct the query engine to trigger the build of indexes that have been deferred. This only considers GSI indexes, as the index management API only deals with this type of indexes. This process itself is asynchronous, meaning that the call will immediately return despite indexes still being in a "pending" or "building" state. This method will return a List of the names of indexes whose build has been triggered, in a single emission.- Specified by:
buildN1qlDeferredIndexesin interfaceAsyncBucketManager- Returns:
- an
Observablethat will get notified with a single List of index names, the names of the indexes that have been triggered. - See Also:
to poll for a list of indexes to become online.
-
watchN1qlIndexes
public rx.Observable<IndexInfo> watchN1qlIndexes(List<String> watchList, long watchTimeout, TimeUnit watchTimeUnit)
Description copied from interface:AsyncBucketManagerWatches all given indexes (possibly including the primary one), polling the query service until they become "online" or the watchTimeout has expired.. This only considers GSI indexes, as the index management API only deals with this type of indexes. Note: You can activate DEBUG level logs on the "INDEX_WATCH_LOG_NAME" logger to see various stages of the polling. You can also watch a primary index by using theIndex.PRIMARY_NAMEconstant.- Specified by:
watchN1qlIndexesin interfaceAsyncBucketManager- Parameters:
watchList- the names of the SECONDARY indexes to watch (can be empty).watchTimeout- the maximum duration for which to poll for the index to become online.watchTimeUnit- the time unit for the watchTimeout.- Returns:
- a stream of the
IndexInfofor the indexes that went online during the watch period. Can be empty if all indexes where online, no index to watch or no index became online within the watchTimeout timeframe.
-
-