public class DefaultAsyncBucketManager extends Object implements AsyncBucketManager
Default implementation of a AsyncBucketManager
.
Modifier and Type | Field and Description |
---|---|
static String |
INDEX_WATCH_LOG_NAME
the name of the logger dedicated to index watching
|
Modifier and Type | Method and Description |
---|---|
Observable<List<String>> |
buildN1qlDeferredIndexes()
Instruct the query engine to trigger the build of indexes that have been deferred.
|
static DefaultAsyncBucketManager |
create(String bucket,
String password,
ClusterFacade core) |
Observable<Boolean> |
createN1qlIndex(String indexName,
boolean ignoreIfExist,
boolean defer,
Object... fields)
Create a secondary index for the current bucket.
|
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.
|
Observable<Boolean> |
createN1qlPrimaryIndex(boolean ignoreIfExist,
boolean defer)
Create a primary index for the current bucket.
|
Observable<Boolean> |
createN1qlPrimaryIndex(String customName,
boolean ignoreIfExist,
boolean defer)
Create a custom-named primary index for the current bucket.
|
Observable<Boolean> |
dropN1qlIndex(String name,
boolean ignoreIfNotExist)
Drop the given secondary index associated with the current bucket.
|
Observable<Boolean> |
dropN1qlPrimaryIndex(boolean ignoreIfNotExist)
Drop the default primary index () associated with the current bucket.
|
Observable<Boolean> |
dropN1qlPrimaryIndex(String customName,
boolean ignoreIfNotExist)
Drop the given custom-named primary index associated with the current bucket.
|
Observable<Boolean> |
flush()
Flushes the bucket (removes all data).
|
Observable<DesignDocument> |
getDesignDocument(String name)
Loads a published
DesignDocument by its name. |
Observable<DesignDocument> |
getDesignDocument(String name,
boolean development)
Loads a
DesignDocument by its name from either development or production. |
Observable<DesignDocument> |
getDesignDocuments()
Loads all published
DesignDocument s. |
Observable<DesignDocument> |
getDesignDocuments(boolean development)
Loads all
DesignDocument s from development or production. |
Observable<BucketInfo> |
info()
Returns information about the connected bucket.
|
Observable<DesignDocument> |
insertDesignDocument(DesignDocument designDocument)
Inserts a
DesignDocument into production if it does not exist. |
Observable<DesignDocument> |
insertDesignDocument(DesignDocument designDocument,
boolean development)
Inserts a
DesignDocument into development or production if it does not exist. |
Observable<IndexInfo> |
listN1qlIndexes()
List all N1QL GSI indexes that are registered for the current bucket.
|
Observable<DesignDocument> |
publishDesignDocument(String name)
Publishes a
DesignDocument from development into production. |
Observable<DesignDocument> |
publishDesignDocument(String name,
boolean overwrite)
Publishes a
DesignDocument from development into production. |
Observable<Boolean> |
removeDesignDocument(String name)
Removes a
DesignDocument from production by its name. |
Observable<Boolean> |
removeDesignDocument(String name,
boolean development)
Removes a
DesignDocument from production or development by its name. |
Observable<DesignDocument> |
upsertDesignDocument(DesignDocument designDocument)
Upserts (inserts or replaces) a
DesignDocument into production. |
Observable<DesignDocument> |
upsertDesignDocument(DesignDocument designDocument,
boolean development)
Upserts (inserts or replaces) a
DesignDocument into production or development. |
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..
|
public static final String INDEX_WATCH_LOG_NAME
the name of the logger dedicated to index watching
public static DefaultAsyncBucketManager create(String bucket, String password, ClusterFacade core)
public Observable<BucketInfo> info()
AsyncBucketManager
Returns information about the connected bucket.
The Observable
can error under the following conditions:
info
in interface AsyncBucketManager
BucketInfo
.public Observable<Boolean> flush()
AsyncBucketManager
Flushes the bucket (removes all data).
Note that flush needs to be enabled on the bucket, otherwise an exception will be raised.
The Observable
can error under the following conditions:
flush
in interface AsyncBucketManager
Observable
otherwise.public Observable<DesignDocument> getDesignDocuments()
AsyncBucketManager
Loads all published DesignDocument
s.
The Observable
can error under the following conditions:
getDesignDocuments
in interface AsyncBucketManager
DesignDocument
s.public Observable<DesignDocument> getDesignDocuments(boolean development)
AsyncBucketManager
Loads all DesignDocument
s from development or production.
The Observable
can error under the following conditions:
getDesignDocuments
in interface AsyncBucketManager
development
- if the DesignDocument
s should be loaded from development or production.DesignDocument
s.public Observable<DesignDocument> getDesignDocument(String name)
AsyncBucketManager
Loads a published DesignDocument
by its name.
The Observable
can error under the following conditions:
getDesignDocument
in interface AsyncBucketManager
name
- the name of the DesignDocument
.DesignDocument
.public Observable<DesignDocument> getDesignDocument(String name, boolean development)
AsyncBucketManager
Loads a DesignDocument
by its name from either development or production.
The Observable
can error under the following conditions:
getDesignDocument
in interface AsyncBucketManager
name
- the name of the DesignDocument
.development
- if it should be loaded from development or production.DesignDocument
.public Observable<DesignDocument> insertDesignDocument(DesignDocument designDocument)
AsyncBucketManager
Inserts a DesignDocument
into production if it does not exist.
Note that inserting a DesignDocument
is not an atomic operation, but instead internally performs a AsyncBucketManager.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 same DesignDocument
.
The Observable
can error under the following conditions:
DesignDocument
exists.insertDesignDocument
in interface AsyncBucketManager
designDocument
- the DesignDocument
to insert.DesignDocument
on success.public Observable<DesignDocument> insertDesignDocument(DesignDocument designDocument, boolean development)
AsyncBucketManager
Inserts a DesignDocument
into development or production if it does not exist.
Note that inserting a DesignDocument
is not an atomic operation, but instead internally performs a AsyncBucketManager.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 same DesignDocument
.
The Observable
can error under the following conditions:
DesignDocument
exists.insertDesignDocument
in interface AsyncBucketManager
designDocument
- the DesignDocument
to insert.development
- if it should be inserted into development or production (published).DesignDocument
on success.public Observable<DesignDocument> upsertDesignDocument(DesignDocument designDocument)
AsyncBucketManager
Upserts (inserts or replaces) a DesignDocument
into 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. Use AsyncBucketManager.getDesignDocument(String)
to get the old list and add your new view to it before calling this method.
The Observable
can error under the following conditions:
upsertDesignDocument
in interface AsyncBucketManager
designDocument
- the DesignDocument
to upsert.DesignDocument
on success.public Observable<DesignDocument> upsertDesignDocument(DesignDocument designDocument, boolean development)
AsyncBucketManager
Upserts (inserts or replaces) a DesignDocument
into 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. Use AsyncBucketManager.getDesignDocument(String)
to get the old list and add your new view to it before calling this method.
The Observable
can error under the following conditions:
upsertDesignDocument
in interface AsyncBucketManager
designDocument
- the DesignDocument
to upsert.development
- if the DesignDocument
should be upserted into development or production.DesignDocument
on success.public Observable<Boolean> removeDesignDocument(String name)
AsyncBucketManager
Removes a DesignDocument
from production by its name.
removeDesignDocument
in interface AsyncBucketManager
name
- the name of the DesignDocument
.public Observable<Boolean> removeDesignDocument(String name, boolean development)
AsyncBucketManager
Removes a DesignDocument
from production or development by its name.
removeDesignDocument
in interface AsyncBucketManager
name
- the name of the DesignDocument
.development
- if the DesignDocument
should be removed from development or production.public Observable<DesignDocument> publishDesignDocument(String name)
AsyncBucketManager
Publishes a DesignDocument
from development into production.
Note that this method does not override a already existing DesignDocument
(see AsyncBucketManager.publishDesignDocument(String, boolean)
) as an alternative.
The Observable
can error under the following conditions:
DesignDocument
already exists.publishDesignDocument
in interface AsyncBucketManager
name
- the name of the DesignDocument
to publish.DesignDocument
on success.public Observable<DesignDocument> publishDesignDocument(String name, boolean overwrite)
AsyncBucketManager
Publishes a DesignDocument
from development into production.
The Observable
can error under the following conditions:
DesignDocument
already exists and override is set to false.publishDesignDocument
in interface AsyncBucketManager
name
- the name of the DesignDocument
to publish.overwrite
- if an existing DesignDocument
should be overridden.DesignDocument
on success.public Observable<IndexInfo> listN1qlIndexes()
AsyncBucketManager
List 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.
The Observable
can error under the following conditions:
TranscodingException
if the server response couldn’t be parsed.listN1qlIndexes
in interface AsyncBucketManager
Observable
that will get notified of each relevant IndexInfo
(can be empty if no relevant index is defined for this bucket).public Observable<Boolean> createN1qlPrimaryIndex(boolean ignoreIfExist, boolean defer)
AsyncBucketManager
Create 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.
The Observable
can error under the following conditions:
IndexAlreadyExistsException
if the index already exists and ignoreIfExist is set to false.CouchbaseException
if another error occurs during index creation.createN1qlPrimaryIndex
in interface AsyncBucketManager
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 until AsyncBucketManager.buildN1qlDeferredIndexes()
is called (or a direct call to the corresponding query service API).Observable
that 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.public Observable<Boolean> createN1qlPrimaryIndex(String customName, boolean ignoreIfExist, boolean defer)
AsyncBucketManager
Create 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.
The Observable
can error under the following conditions:
IndexAlreadyExistsException
if the index already exists and ignoreIfExist is set to false.CouchbaseException
if another error occurs during index creation.createN1qlPrimaryIndex
in interface AsyncBucketManager
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 until AsyncBucketManager.buildN1qlDeferredIndexes()
is called (or a direct call to the corresponding query service API).Observable
that 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.public Observable<Boolean> createN1qlIndex(String indexName, boolean ignoreIfExist, boolean defer, Object... fields)
AsyncBucketManager
Create 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. See AsyncBucketManager.createN1qlIndex(String, List, Expression, boolean, boolean)
for that.
The Observable
can error under the following conditions:
IndexAlreadyExistsException
if the index already exists and ignoreIfExist is set to false.CouchbaseException
if another error occurs during index creation.createN1qlIndex
in interface AsyncBucketManager
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 until AsyncBucketManager.buildN1qlDeferredIndexes()
is called (or a direct call to the corresponding query service API).fields
- the JSON fields to index, in either Expression
or String
form.Observable
that 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.AsyncBucketManager.createN1qlIndex(String, List, Expression, boolean, boolean)
public Observable<Boolean> createN1qlIndex(String indexName, List<Object> fields, Expression whereClause, boolean ignoreIfExist, boolean defer)
AsyncBucketManager
Create 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.
The Observable
can error under the following conditions:
IndexAlreadyExistsException
if the index already exists and ignoreIfExist is set to false.CouchbaseException
if another error occurs during index creation.createN1qlIndex
in interface AsyncBucketManager
indexName
- the name of the index.fields
- the JSON fields to index, in the form of a List
containing a mix of Expression
or String
.whereClause
- the Expression
to 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 until AsyncBucketManager.buildN1qlDeferredIndexes()
is called (or a direct call to the corresponding query service API).Observable
that 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.public Observable<Boolean> dropN1qlPrimaryIndex(boolean ignoreIfNotExist)
AsyncBucketManager
Drop the default 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.
The Observable
can error under the following conditions:
IndexDoesNotExistException
if the primary index doesn’t exist and ignoreIfNoExist is set to false.CouchbaseException
if another error occurs during index drop.dropN1qlPrimaryIndex
in interface AsyncBucketManager
ignoreIfNotExist
- if true, attempting to drop on a bucket without any primary index won’t cause an exception to be propagated.Observable
that will get notified with a single Boolean.TRUE if the index was effectively dropped.public Observable<Boolean> dropN1qlPrimaryIndex(String customName, boolean ignoreIfNotExist)
AsyncBucketManager
Drop 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.
The Observable
can error under the following conditions:
IndexDoesNotExistException
if the primary index doesn’t exist and ignoreIfNoExist is set to false.CouchbaseException
if another error occurs during index drop.dropN1qlPrimaryIndex
in interface AsyncBucketManager
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.Observable
that will get notified with a single Boolean.TRUE if the index was effectively dropped.public Observable<Boolean> dropN1qlIndex(String name, boolean ignoreIfNotExist)
AsyncBucketManager
Drop 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.
The Observable
can error under the following conditions:
IndexDoesNotExistException
if the secondary index doesn’t exist and ignoreIfNoExist is set to false.CouchbaseException
if another error occurs during index drop.dropN1qlIndex
in interface AsyncBucketManager
ignoreIfNotExist
- if true, attempting to drop on a bucket without the specified index won’t cause an exception to be propagated.Observable
that will get notified with a single Boolean.TRUE if the index was effectively dropped.public Observable<List<String>> buildN1qlDeferredIndexes()
AsyncBucketManager
Instruct 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.
buildN1qlDeferredIndexes
in interface AsyncBucketManager
Observable
that will get notified with a single List of index names, the names of the indexes that have been triggered.to poll for a list of indexes to become online.
public Observable<IndexInfo> watchN1qlIndexes(List<String> watchList, long watchTimeout, TimeUnit watchTimeUnit)
AsyncBucketManager
Watches 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 “” logger to see various stages of the polling.
You can also watch a primary index by using the Index.PRIMARY_NAME
constant.
watchN1qlIndexes
in interface AsyncBucketManager
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.IndexInfo
for 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.Copyright © 2015 Couchbase, Inc.