Class OnlineIndexer.Builder
- java.lang.Object
-
- com.apple.foundationdb.record.provider.foundationdb.OnlineIndexer.Builder
-
- Enclosing class:
- OnlineIndexer
@API(UNSTABLE) public static class OnlineIndexer.Builder extends Object
Builder forOnlineIndexer
.OnlineIndexer.newBuilder().setRecordStoreBuilder(recordStoreBuilder).setIndex(index).build()
OnlineIndexer.newBuilder().setDatabase(fdb).setMetaData(metaData).setSubspace(subspace).setIndex(index).build()
-
-
Field Summary
Fields Modifier and Type Field Description protected Function<OnlineIndexer.Config,OnlineIndexer.Config>
configLoader
protected Index
index
protected int
limit
protected int
maxRetries
protected int
maxWriteLimitBytes
protected int
recordsPerSecond
protected FDBRecordStore.Builder
recordStoreBuilder
protected Collection<RecordType>
recordTypes
protected FDBDatabaseRunner
runner
protected boolean
syntheticIndex
-
Constructor Summary
Constructors Modifier Constructor Description protected
Builder()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description OnlineIndexer
build()
Build anOnlineIndexer
.Function<OnlineIndexer.Config,OnlineIndexer.Config>
getConfigLoader()
Get the function used by the online indexer to load the config parameters on fly.int
getIncreaseLimitAfter()
Get the number of successful range builds before re-increasing the number of records to process in a single transaction.Index
getIndex()
Get the index to be built.long
getInitialDelayMillis()
Get the initial delay between transaction retry attempts.int
getLimit()
Get the maximum number of records to process in one transaction.int
getMaxAttempts()
Get the maximum number of transaction retry attempts.long
getMaxDelayMillis()
Get the maximum delay between transaction retry attempts.int
getMaxRetries()
Get the maximum number of times to retry a single range rebuild.int
getMaxWriteLimitBytes()
Get the approximate maximum transaction write size.Map<String,String>
getMdcContext()
Get the logging context used inOnlineIndexer.buildIndex(boolean)
.FDBTransactionPriority
getPriority()
Get the priority of transactions used for this index build.long
getProgressLogIntervalMillis()
Get the minimum time between successful progress logs when building across transactions.int
getRecordsPerSecond()
Get the maximum number of records to process in a single second.FDBRecordStore.Builder
getRecordStoreBuilder()
Get the record store builder that will be used to open record store instances for indexing.Collection<RecordType>
getRecordTypes()
Get the explicit set of record types to be indexed.FDBDatabaseRunner
getRunner()
Get the runner that will be used to call into the database.FDBStoreTimer
getTimer()
Get the timer used inOnlineIndexer.buildIndex(boolean)
.FDBDatabase.WeakReadSemantics
getWeakReadSemantics()
Get the acceptable staleness bounds for transactions used by this build.OnlineIndexer.Builder
setConfigLoader(Function<OnlineIndexer.Config,OnlineIndexer.Config> configLoader)
Set the function used by the online indexer to load the mutable configuration parameters on fly.OnlineIndexer.Builder
setDatabase(FDBDatabase database)
Set the database in which to run the indexing.OnlineIndexer.Builder
setFormatVersion(int formatVersion)
Set the store format version to use while building the index.OnlineIndexer.Builder
setIncreaseLimitAfter(int increaseLimitAfter)
Set the number of successful range builds before re-increasing the number of records to process in a single transaction.OnlineIndexer.Builder
setIndex(Index index)
Set the index to be built.OnlineIndexer.Builder
setIndex(String indexName)
Set the index to be built.OnlineIndexer.Builder
setIndexFromIndex(OnlineIndexer.IndexFromIndexPolicy indexFromIndex)
Add anOnlineIndexer.IndexFromIndexPolicy
policy.OnlineIndexer.Builder
setIndexMaintenanceFilter(IndexMaintenanceFilter indexMaintenanceFilter)
Set theIndexMaintenanceFilter
to use while building the index.OnlineIndexer.Builder
setIndexStatePrecondition(OnlineIndexer.IndexStatePrecondition indexStatePrecondition)
Set how shouldOnlineIndexer.buildIndexAsync()
(or its variations) build the index based on its state.OnlineIndexer.Builder
setInitialDelayMillis(long initialDelayMillis)
Set the initial delay between transaction retry attempts.OnlineIndexer.Builder
setLeaseLengthMillis(long leaseLengthMillis)
Set the lease length in milliseconds if the synchronized session is used.OnlineIndexer.Builder
setLimit(int limit)
Set the maximum number of records to process in one transaction.OnlineIndexer.Builder
setMaxAttempts(int maxAttempts)
Set the maximum number of transaction retry attempts.OnlineIndexer.Builder
setMaxDelayMillis(long maxDelayMillis)
Set the maximum delay between transaction retry attempts.OnlineIndexer.Builder
setMaxRetries(int maxRetries)
Set the maximum number of times to retry a single range rebuild.OnlineIndexer.Builder
setMaxWriteLimitBytes(int max)
Set the approximate maximum transaction write size.OnlineIndexer.Builder
setMdcContext(Map<String,String> mdcContext)
Set the logging context used inOnlineIndexer.buildIndex(boolean)
.OnlineIndexer.Builder
setMetaData(RecordMetaDataProvider metaDataProvider)
Set the meta-data to use when indexing.OnlineIndexer.Builder
setPriority(FDBTransactionPriority priority)
Set the priority of transactions used for this index build.OnlineIndexer.Builder
setProgressLogIntervalMillis(long millis)
Set the minimum time between successful progress logs when building across transactions.OnlineIndexer.Builder
setRecordsPerSecond(int recordsPerSecond)
Set the maximum number of records to process in a single second.OnlineIndexer.Builder
setRecordStore(FDBRecordStore recordStore)
Set the record store that will be used as a template to open record store instances for indexing.OnlineIndexer.Builder
setRecordStoreBuilder(FDBRecordStore.Builder recordStoreBuilder)
Set the record store builder that will be used to open record store instances for indexing.OnlineIndexer.Builder
setRecordTypes(Collection<RecordType> recordTypes)
Set the explicit set of record types to be indexed.OnlineIndexer.Builder
setRunner(FDBDatabaseRunner runner)
Set the runner that will be used to call into the database.OnlineIndexer.Builder
setSerializer(RecordSerializer<Message> serializer)
Set theRecordSerializer
to use while building the index.OnlineIndexer.Builder
setSubspace(Subspace subspace)
Set the subspace of the record store in which to build the index.OnlineIndexer.Builder
setSubspaceProvider(SubspaceProvider subspaceProvider)
Set the subspace of the record store in which to build the index.OnlineIndexer.Builder
setTimer(FDBStoreTimer timer)
Set the timer used inOnlineIndexer.buildIndex(boolean)
.OnlineIndexer.Builder
setTrackProgress(boolean trackProgress)
Set whether or not to track the index build progress by updating the number of records successfully scanned and processed.OnlineIndexer.Builder
setUseSynchronizedSession(boolean useSynchronizedSession)
Set whether or not to use a synchronized session when usingOnlineIndexer.buildIndexAsync()
(or its variations) to build the index across multiple transactions.OnlineIndexer.Builder
setWeakReadSemantics(FDBDatabase.WeakReadSemantics weakReadSemantics)
Set the acceptable staleness bounds for transactions used by this build.protected void
validate()
-
-
-
Field Detail
-
runner
@Nullable protected FDBDatabaseRunner runner
-
recordStoreBuilder
@Nullable protected FDBRecordStore.Builder recordStoreBuilder
-
recordTypes
@Nullable protected Collection<RecordType> recordTypes
-
configLoader
@Nonnull protected Function<OnlineIndexer.Config,OnlineIndexer.Config> configLoader
-
limit
protected int limit
-
maxWriteLimitBytes
protected int maxWriteLimitBytes
-
maxRetries
protected int maxRetries
-
recordsPerSecond
protected int recordsPerSecond
-
syntheticIndex
protected boolean syntheticIndex
-
-
Method Detail
-
getRunner
@Nullable public FDBDatabaseRunner getRunner()
Get the runner that will be used to call into the database.- Returns:
- the runner that connects to the target database
-
setRunner
public OnlineIndexer.Builder setRunner(@Nullable FDBDatabaseRunner runner)
Set the runner that will be used to call into the database. Normally the runner is gotten fromsetDatabase(com.apple.foundationdb.record.provider.foundationdb.FDBDatabase)
orsetRecordStore(com.apple.foundationdb.record.provider.foundationdb.FDBRecordStore)
orsetRecordStoreBuilder(com.apple.foundationdb.record.provider.foundationdb.FDBRecordStore.Builder)
.- Parameters:
runner
- the runner that connects to the target database- Returns:
- this builder
-
setDatabase
public OnlineIndexer.Builder setDatabase(@Nonnull FDBDatabase database)
Set the database in which to run the indexing. Normally the database is gotten fromsetRecordStore(com.apple.foundationdb.record.provider.foundationdb.FDBRecordStore)
orsetRecordStoreBuilder(com.apple.foundationdb.record.provider.foundationdb.FDBRecordStore.Builder)
.- Parameters:
database
- the target database- Returns:
- this builder
-
getRecordStoreBuilder
@Nullable public FDBRecordStore.Builder getRecordStoreBuilder()
Get the record store builder that will be used to open record store instances for indexing.- Returns:
- the record store builder
-
setRecordStoreBuilder
public OnlineIndexer.Builder setRecordStoreBuilder(@Nonnull FDBRecordStore.Builder recordStoreBuilder)
Set the record store builder that will be used to open record store instances for indexing.- Parameters:
recordStoreBuilder
- the record store builder- Returns:
- this builder
- See Also:
setRecordStore(com.apple.foundationdb.record.provider.foundationdb.FDBRecordStore)
-
setRecordStore
public OnlineIndexer.Builder setRecordStore(@Nonnull FDBRecordStore recordStore)
Set the record store that will be used as a template to open record store instances for indexing.- Parameters:
recordStore
- the target record store- Returns:
- this builder
-
getIndex
@Nullable public Index getIndex()
Get the index to be built.- Returns:
- the index to be built
-
setIndex
@Nonnull public OnlineIndexer.Builder setIndex(@Nullable Index index)
Set the index to be built.- Parameters:
index
- the index to be built- Returns:
- this builder
-
setIndex
@Nonnull public OnlineIndexer.Builder setIndex(@Nonnull String indexName)
Set the index to be built.- Parameters:
indexName
- the index to be built- Returns:
- this builder
-
getRecordTypes
@Nullable public Collection<RecordType> getRecordTypes()
Get the explicit set of record types to be indexed. Normally, all record types associated with the chosen index will be indexed.- Returns:
- the record types to be indexed
-
setRecordTypes
@Nonnull public OnlineIndexer.Builder setRecordTypes(@Nullable Collection<RecordType> recordTypes)
Set the explicit set of record types to be indexed. Normally, record types are inferred fromsetIndex(com.apple.foundationdb.record.metadata.Index)
.- Parameters:
recordTypes
- the record types to be indexed ornull
to infer from the index- Returns:
- this builder
-
getConfigLoader
@Nullable public Function<OnlineIndexer.Config,OnlineIndexer.Config> getConfigLoader()
Get the function used by the online indexer to load the config parameters on fly.- Returns:
- the function
-
setConfigLoader
@Nonnull public OnlineIndexer.Builder setConfigLoader(@Nonnull Function<OnlineIndexer.Config,OnlineIndexer.Config> configLoader)
Set the function used by the online indexer to load the mutable configuration parameters on fly.The loader is given the current configuration as input at the beginning of each transaction and should produce the configuration to use in the next transaction.
- Parameters:
configLoader
- the function- Returns:
- this builder
-
getLimit
public int getLimit()
Get the maximum number of records to process in one transaction.- Returns:
- the maximum number of records to process in one transaction
-
setLimit
@Nonnull public OnlineIndexer.Builder setLimit(int limit)
Set the maximum number of records to process in one transaction. The default limit isOnlineIndexer.DEFAULT_LIMIT
= 100. NotesetConfigLoader(Function)
is the recommended way of loading online index builder's parameters and the values set by this method will be overwritten if the supplier is set.- Parameters:
limit
- the maximum number of records to process in one transaction- Returns:
- this builder
-
getMaxWriteLimitBytes
public int getMaxWriteLimitBytes()
Get the approximate maximum transaction write size. Note that the actual write size might be up to one record bigger than this value - transactions started as part of the index build will be committed after they exceed this size, and a new transaction will be started.- Returns:
- the max write size
-
setMaxWriteLimitBytes
@Nonnull public OnlineIndexer.Builder setMaxWriteLimitBytes(int max)
Set the approximate maximum transaction write size. Note that the actual size might be up to one record bigger than this value - transactions started as part of the index build will be committed after they exceed this size, and a new transaction will be started. he default limit isOnlineIndexer.DEFAULT_WRITE_LIMIT_BYTES
= 900000.- Parameters:
max
- the desired max write size- Returns:
- this builder
-
getMaxRetries
public int getMaxRetries()
Get the maximum number of times to retry a single range rebuild. This retry is on top of the retries caused bygetMaxAttempts()
, and it will also retry for other error codes, such astransaction_too_large
.- Returns:
- the maximum number of times to retry a single range rebuild
-
setMaxRetries
@Nonnull public OnlineIndexer.Builder setMaxRetries(int maxRetries)
Set the maximum number of times to retry a single range rebuild. This retry is on top of the retries caused bygetMaxAttempts()
, it and will also retry for other error codes, such astransaction_too_large
. The default number of retries isOnlineIndexer.DEFAULT_MAX_RETRIES
= 100. NotesetConfigLoader(Function)
is the recommended way of loading online index builder's parameters and the values set by this method will be overwritten if the supplier is set.- Parameters:
maxRetries
- the maximum number of times to retry a single range rebuild- Returns:
- this builder
-
getRecordsPerSecond
public int getRecordsPerSecond()
Get the maximum number of records to process in a single second.- Returns:
- the maximum number of records to process in a single second
-
setRecordsPerSecond
@Nonnull public OnlineIndexer.Builder setRecordsPerSecond(int recordsPerSecond)
Set the maximum number of records to process in a single second. The default number of retries isOnlineIndexer.DEFAULT_RECORDS_PER_SECOND
= 10000. NotesetConfigLoader(Function)
is the recommended way of loading online index builder's parameters and the values set by this method will be overwritten if the supplier is set.- Parameters:
recordsPerSecond
- the maximum number of records to process in a single second.- Returns:
- this builder
-
getTimer
@Nullable public FDBStoreTimer getTimer()
Get the timer used inOnlineIndexer.buildIndex(boolean)
.- Returns:
- the timer or
null
if none is set
-
setTimer
@Nonnull public OnlineIndexer.Builder setTimer(@Nullable FDBStoreTimer timer)
Set the timer used inOnlineIndexer.buildIndex(boolean)
.- Parameters:
timer
- timer to use- Returns:
- this builder
-
getMdcContext
@Nullable public Map<String,String> getMdcContext()
Get the logging context used inOnlineIndexer.buildIndex(boolean)
.- Returns:
- the logging context of
null
if none is set
-
setMdcContext
@Nonnull public OnlineIndexer.Builder setMdcContext(@Nullable Map<String,String> mdcContext)
Set the logging context used inOnlineIndexer.buildIndex(boolean)
.- Parameters:
mdcContext
- the logging context to set while running- Returns:
- this builder
- See Also:
FDBDatabase.openContext(Map,FDBStoreTimer)
-
getWeakReadSemantics
@Nullable public FDBDatabase.WeakReadSemantics getWeakReadSemantics()
Get the acceptable staleness bounds for transactions used by this build. By default, this is set tonull
, which indicates that the transaction should not used any cached version at all.- Returns:
- the acceptable staleness bounds for transactions used by this build
- See Also:
FDBRecordContext.getWeakReadSemantics()
-
setWeakReadSemantics
@Nonnull public OnlineIndexer.Builder setWeakReadSemantics(@Nullable FDBDatabase.WeakReadSemantics weakReadSemantics)
Set the acceptable staleness bounds for transactions used by this build. For index builds, essentially all operations will read and write data in the same transaction, so it is safe to set this value to use potentially stale read versions, though that can potentially result in more transaction conflicts. For performance reasons, it is generally advised that this only be provided an acceptable staleness bound that might use a cached commit if the database tracks the latest commit version in addition to the read version. This is to ensure that the online indexer see its own commits, and it should not be required for correctness, but the online indexer may perform additional work if this is not set.- Parameters:
weakReadSemantics
- the acceptable staleness bounds for transactions used by this build- Returns:
- this builder
- See Also:
FDBRecordContext.getWeakReadSemantics()
,FDBDatabase.setTrackLastSeenVersion(boolean)
-
getPriority
@Nonnull public FDBTransactionPriority getPriority()
Get the priority of transactions used for this index build. By default, this will beFDBTransactionPriority.BATCH
.- Returns:
- the priority of transactions used for this index build
- See Also:
FDBRecordContext.getPriority()
-
setPriority
@Nonnull public OnlineIndexer.Builder setPriority(@Nonnull FDBTransactionPriority priority)
Set the priority of transactions used for this index build. In general, index builds should run using theBATCH
priority level as their work is generally discretionary and not time sensitive. However, in certain circumstances, it may be necessary to run at the higherDEFAULT
priority level. For example, if a missing index is causing some queries to perform additional, unnecessary work that is overwhelming the database, it may be necessary to build the index atDEFAULT
priority in order to lessen the load induced by those queries on the cluster.- Parameters:
priority
- the priority of transactions used for this index build- Returns:
- this builder
- See Also:
FDBRecordContext.getPriority()
-
getMaxAttempts
public int getMaxAttempts()
Get the maximum number of transaction retry attempts. This is the number of times that it will retry a given transaction that throwsRecordCoreRetriableTransactionException
.- Returns:
- the maximum number of attempts
- See Also:
FDBDatabaseRunner.getMaxAttempts()
-
setMaxAttempts
public OnlineIndexer.Builder setMaxAttempts(int maxAttempts)
Set the maximum number of transaction retry attempts. This is the number of times that it will retry a given transaction that throwsRecordCoreRetriableTransactionException
.- Parameters:
maxAttempts
- the maximum number of attempts- Returns:
- this builder
- See Also:
FDBDatabaseRunner.setMaxAttempts(int)
-
setIncreaseLimitAfter
public OnlineIndexer.Builder setIncreaseLimitAfter(int increaseLimitAfter)
Set the number of successful range builds before re-increasing the number of records to process in a single transaction. The number of records to process in a single transaction will never go abovelimit
. By default this isOnlineIndexer.DO_NOT_RE_INCREASE_LIMIT
, which means it will not re-increase after successes.Note
setConfigLoader(Function)
is the recommended way of loading online index builder's parameters and the values set by this method will be overwritten if the supplier is set.- Parameters:
increaseLimitAfter
- the number of successful range builds before increasing the number of records processed in a single transaction- Returns:
- this builder
-
setIndexFromIndex
public OnlineIndexer.Builder setIndexFromIndex(@Nonnull OnlineIndexer.IndexFromIndexPolicy indexFromIndex)
Add anOnlineIndexer.IndexFromIndexPolicy
policy. If set, this policy will be used to build the target index by only scanning records of a source index, avoiding a full record scan.- Parameters:
indexFromIndex
- seeOnlineIndexer.IndexFromIndexPolicy
- Returns:
- this Builder
-
getIncreaseLimitAfter
public int getIncreaseLimitAfter()
Get the number of successful range builds before re-increasing the number of records to process in a single transaction. By default this isOnlineIndexer.DO_NOT_RE_INCREASE_LIMIT
, which means it will not re-increase after successes.- Returns:
- the number of successful range builds before increasing the number of records processed in a single transaction
- See Also:
limit
-
getMaxDelayMillis
public long getMaxDelayMillis()
Get the maximum delay between transaction retry attempts.- Returns:
- the maximum delay
- See Also:
FDBDatabaseRunner.getMaxDelayMillis()
-
setMaxDelayMillis
public OnlineIndexer.Builder setMaxDelayMillis(long maxDelayMillis)
Set the maximum delay between transaction retry attempts.- Parameters:
maxDelayMillis
- the maximum delay- Returns:
- this builder
- See Also:
FDBDatabaseRunner.setMaxDelayMillis(long)
-
getInitialDelayMillis
public long getInitialDelayMillis()
Get the initial delay between transaction retry attempts.- Returns:
- the initial delay
- See Also:
FDBDatabaseRunner.getInitialDelayMillis()
-
setInitialDelayMillis
public OnlineIndexer.Builder setInitialDelayMillis(long initialDelayMillis)
Set the initial delay between transaction retry attempts.- Parameters:
initialDelayMillis
- the initial delay- Returns:
- this builder
- See Also:
FDBDatabaseRunner.setInitialDelayMillis(long)
-
getProgressLogIntervalMillis
public long getProgressLogIntervalMillis()
Get the minimum time between successful progress logs when building across transactions. Negative will not log at all, 0 will log after every commit.- Returns:
- the minimum time between successful progress logs in milliseconds
- See Also:
for more information on the format of the log
-
setProgressLogIntervalMillis
public OnlineIndexer.Builder setProgressLogIntervalMillis(long millis)
Set the minimum time between successful progress logs when building across transactions. Negative will not log at all, 0 will log after every commit. This log will contain the following information:- startTuple - the first primaryKey scanned as part of this range
- endTuple - the desired primaryKey that is the end of this range
- realEnd - the tuple that was successfully scanned to (always before endTuple)
- recordsScanned - the number of records successfully scanned and processed
This is the count of records scanned as part of successful transactions used by the multi-transaction methods (e.g.
OnlineIndexer.buildIndexAsync()
orOnlineIndexer.buildRange(Key.Evaluated, Key.Evaluated)
). The transactional methods (i.e., the methods that take a store) do not count towards this value. Since only successful transactions are included, transactions that getcommit_unknown_result
will not get counted towards this value, so this may be short by the number of records scanned in those transactions if they actually succeeded. In contrast, the timer count:FDBStoreTimer.Counts.ONLINE_INDEX_BUILDER_RECORDS_SCANNED
, includes all records scanned, regardless of whether the associated transaction was successful or not.
Note
setConfigLoader(Function)
is the recommended way of loading online index builder's parameters and the values set by this method will be overwritten if the supplier is set.- Parameters:
millis
- the number of milliseconds to wait between successful logs- Returns:
- this builder
-
setTrackProgress
public OnlineIndexer.Builder setTrackProgress(boolean trackProgress)
Set whether or not to track the index build progress by updating the number of records successfully scanned and processed. The progress is persisted inOnlineIndexer.indexBuildScannedRecordsSubspace(FDBRecordStoreBase, Index)
which can be accessed byIndexBuildState.loadIndexBuildStateAsync(FDBRecordStoreBase, Index)
.This setting does not affect the setting at
setProgressLogIntervalMillis(long)
.- Parameters:
trackProgress
- track progress if true, otherwise false- Returns:
- this builder
-
setIndexMaintenanceFilter
public OnlineIndexer.Builder setIndexMaintenanceFilter(@Nonnull IndexMaintenanceFilter indexMaintenanceFilter)
Set theIndexMaintenanceFilter
to use while building the index. Normally this is set bysetRecordStore(com.apple.foundationdb.record.provider.foundationdb.FDBRecordStore)
orsetRecordStoreBuilder(com.apple.foundationdb.record.provider.foundationdb.FDBRecordStore.Builder)
.- Parameters:
indexMaintenanceFilter
- the index filter to use- Returns:
- this builder
-
setSerializer
public OnlineIndexer.Builder setSerializer(@Nonnull RecordSerializer<Message> serializer)
Set theRecordSerializer
to use while building the index. Normally this is set bysetRecordStore(com.apple.foundationdb.record.provider.foundationdb.FDBRecordStore)
orsetRecordStoreBuilder(com.apple.foundationdb.record.provider.foundationdb.FDBRecordStore.Builder)
.- Parameters:
serializer
- the serializer to use- Returns:
- this builder
-
setFormatVersion
public OnlineIndexer.Builder setFormatVersion(int formatVersion)
Set the store format version to use while building the index. Normally this is set bysetRecordStore(com.apple.foundationdb.record.provider.foundationdb.FDBRecordStore)
orsetRecordStoreBuilder(com.apple.foundationdb.record.provider.foundationdb.FDBRecordStore.Builder)
.- Parameters:
formatVersion
- the format version to use- Returns:
- this builder
-
setMetaData
public OnlineIndexer.Builder setMetaData(@Nonnull RecordMetaDataProvider metaDataProvider)
Set the meta-data to use when indexing.- Parameters:
metaDataProvider
- meta-data to use- Returns:
- this builder
-
setSubspaceProvider
public OnlineIndexer.Builder setSubspaceProvider(@Nonnull SubspaceProvider subspaceProvider)
Set the subspace of the record store in which to build the index.- Parameters:
subspaceProvider
- subspace to use- Returns:
- this builder
-
setSubspace
public OnlineIndexer.Builder setSubspace(@Nonnull Subspace subspace)
Set the subspace of the record store in which to build the index.- Parameters:
subspace
- subspace to use- Returns:
- this builder
-
setIndexStatePrecondition
public OnlineIndexer.Builder setIndexStatePrecondition(@Nonnull OnlineIndexer.IndexStatePrecondition indexStatePrecondition)
Set how shouldOnlineIndexer.buildIndexAsync()
(or its variations) build the index based on its state. Normally this should beOnlineIndexer.IndexStatePrecondition.BUILD_IF_DISABLED_CONTINUE_BUILD_IF_WRITE_ONLY
if the index is not corrupted.One may consider setting it to
OnlineIndexer.IndexStatePrecondition.ERROR_IF_DISABLED_CONTINUE_IF_WRITE_ONLY
andsetUseSynchronizedSession(boolean)
tofalse
, which makes the indexer follow the same behavior as before version 2.8.90.0. But it is not recommended.- Parameters:
indexStatePrecondition
- build option to use- Returns:
- this builder
- See Also:
OnlineIndexer.IndexStatePrecondition
-
setUseSynchronizedSession
public OnlineIndexer.Builder setUseSynchronizedSession(boolean useSynchronizedSession)
Set whether or not to use a synchronized session when usingOnlineIndexer.buildIndexAsync()
(or its variations) to build the index across multiple transactions. Synchronized sessions help build index in a resource efficient way. Normally this should betrue
.One may consider setting it to
false
andsetUseSynchronizedSession(boolean)
toOnlineIndexer.IndexStatePrecondition.ERROR_IF_DISABLED_CONTINUE_IF_WRITE_ONLY
, which makes the indexer follow the same behavior as before version 2.8.90.0. But it is not recommended.- Parameters:
useSynchronizedSession
- use synchronize session if true, otherwise false- Returns:
- this builder
- See Also:
SynchronizedSessionRunner
-
setLeaseLengthMillis
public OnlineIndexer.Builder setLeaseLengthMillis(long leaseLengthMillis)
Set the lease length in milliseconds if the synchronized session is used. By default this isOnlineIndexer.DEFAULT_LEASE_LENGTH_MILLIS
.- Parameters:
leaseLengthMillis
- length between last access and lease's end time in milliseconds- Returns:
- this builder
- See Also:
setUseSynchronizedSession(boolean)
,SynchronizedSession
-
build
public OnlineIndexer build()
Build anOnlineIndexer
.- Returns:
- a new online indexer
-
validate
protected void validate()
-
-