Package com.apple.foundationdb
Interface Tenant
-
- All Superinterfaces:
java.lang.AutoCloseable
,ReadTransactionContext
,TransactionContext
public interface Tenant extends java.lang.AutoCloseable, TransactionContext
A tenant represents a named key-space within a database that can be interacted with transactionally.
The simplest correct programs using tenants will make use of the methods defined in theTransactionContext
interface. When used on aTenant
these methods will callTransaction#commit()
after user code has been executed. These methods will not return successfully untilcommit()
has returned successfully.
Note:Tenant
objects must beclosed
when no longer in use in order to free any associated resources.
-
-
Method Summary
All Methods Instance Methods Abstract Methods Default Methods Modifier and Type Method Description default java.util.concurrent.CompletableFuture<java.lang.Boolean>
blobbifyRange(byte[] beginKey, byte[] endKey)
RunsblobbifyRange(byte[] beginKey, byte[] endKey)
on the default executor.java.util.concurrent.CompletableFuture<java.lang.Boolean>
blobbifyRange(byte[] beginKey, byte[] endKey, java.util.concurrent.Executor e)
Sets a range to be blobbified in this tenant.void
close()
Close theTenant
object and release any associated resources.default Transaction
createTransaction()
Creates aTransaction
that operates on thisTenant
.
Note: Java transactions automatically set theTransactionOptions.setUsedDuringCommitProtectionDisable()
option.Transaction
createTransaction(java.util.concurrent.Executor e)
Creates aTransaction
that operates on thisTenant
with the givenExecutor
for asynchronous callbacks.Transaction
createTransaction(java.util.concurrent.Executor e, EventKeeper eventKeeper)
Creates aTransaction
that operates on thisTenant
with the givenExecutor
for asynchronous callbacks.byte[]
getName()
Returns the name of thisTenant
.default java.util.concurrent.CompletableFuture<KeyRangeArrayResult>
listBlobbifiedRanges(byte[] beginKey, byte[] endKey, int rangeLimit)
RunslistBlobbifiedRanges(byte[] beginKey, byte[] endKey, int rangeLimit)
on the default executor.java.util.concurrent.CompletableFuture<KeyRangeArrayResult>
listBlobbifiedRanges(byte[] beginKey, byte[] endKey, int rangeLimit, java.util.concurrent.Executor e)
Lists blobbified ranges in this tenant.default java.util.concurrent.CompletableFuture<byte[]>
purgeBlobGranules(byte[] beginKey, byte[] endKey, boolean force)
RunspurgeBlobGranules(byte[] beginKey, byte[] endKey, boolean force)
on the default executor.default java.util.concurrent.CompletableFuture<byte[]>
purgeBlobGranules(byte[] beginKey, byte[] endKey, long purgeVersion, boolean force)
RunspurgeBlobGranules(byte[] beginKey, byte[] endKey, long purgeVersion, boolean force)
on the default executor.java.util.concurrent.CompletableFuture<byte[]>
purgeBlobGranules(byte[] beginKey, byte[] endKey, long purgeVersion, boolean force, java.util.concurrent.Executor e)
Queues a purge of blob granules for specified key range of this tenant, at the specified version.default <T> T
read(java.util.function.Function<? super ReadTransaction,T> retryable)
Runs a read-only transactional function against thisTenant
with retry logic.<T> T
read(java.util.function.Function<? super ReadTransaction,T> retryable, java.util.concurrent.Executor e)
Runs a read-only transactional function against thisTenant
with retry logic.default <T> java.util.concurrent.CompletableFuture<T>
readAsync(java.util.function.Function<? super ReadTransaction,? extends java.util.concurrent.CompletableFuture<T>> retryable)
Runs a read-only transactional function against thisTenant
with retry logic.<T> java.util.concurrent.CompletableFuture<T>
readAsync(java.util.function.Function<? super ReadTransaction,? extends java.util.concurrent.CompletableFuture<T>> retryable, java.util.concurrent.Executor e)
Runs a read-only transactional function against thisTenant
with retry logic.default <T> T
run(java.util.function.Function<? super Transaction,T> retryable)
Runs a transactional function against thisTenant
with retry logic.<T> T
run(java.util.function.Function<? super Transaction,T> retryable, java.util.concurrent.Executor e)
Runs a transactional function against thisTenant
with retry logic.default <T> java.util.concurrent.CompletableFuture<T>
runAsync(java.util.function.Function<? super Transaction,? extends java.util.concurrent.CompletableFuture<T>> retryable)
Runs a transactional function against thisTenant
with retry logic.<T> java.util.concurrent.CompletableFuture<T>
runAsync(java.util.function.Function<? super Transaction,? extends java.util.concurrent.CompletableFuture<T>> retryable, java.util.concurrent.Executor e)
Runs a transactional function against thisTenant
with retry logic.default java.util.concurrent.CompletableFuture<java.lang.Boolean>
unblobbifyRange(byte[] beginKey, byte[] endKey)
RunsunblobbifyRange(byte[] beginKey, byte[] endKey)
on the default executor.java.util.concurrent.CompletableFuture<java.lang.Boolean>
unblobbifyRange(byte[] beginKey, byte[] endKey, java.util.concurrent.Executor e)
Unsets a blobbified range in this tenant.default java.util.concurrent.CompletableFuture<java.lang.Long>
verifyBlobRange(byte[] beginKey, byte[] endKey)
RunsverifyBlobRange(byte[] beginKey, byte[] endKey)
on the default executor.default java.util.concurrent.CompletableFuture<java.lang.Long>
verifyBlobRange(byte[] beginKey, byte[] endKey, long version)
RunsverifyBlobRange(byte[] beginKey, byte[] endKey, long version)
on the default executor.java.util.concurrent.CompletableFuture<java.lang.Long>
verifyBlobRange(byte[] beginKey, byte[] endKey, long version, java.util.concurrent.Executor e)
Checks if a blob range is blobbified in this tenant.default java.util.concurrent.CompletableFuture<java.lang.Void>
waitPurgeGranulesComplete(byte[] purgeKey)
RunswaitPurgeGranulesComplete(byte[] purgeKey)
on the default executor.java.util.concurrent.CompletableFuture<java.lang.Void>
waitPurgeGranulesComplete(byte[] purgeKey, java.util.concurrent.Executor e)
Wait for a previous call to purgeBlobGranules to complete.-
Methods inherited from interface com.apple.foundationdb.ReadTransactionContext
getExecutor
-
-
-
-
Method Detail
-
createTransaction
default Transaction createTransaction()
Creates aTransaction
that operates on thisTenant
.
Note: Java transactions automatically set theTransactionOptions.setUsedDuringCommitProtectionDisable()
option. This is because the Java bindings disallow use ofTransaction
objects afterTransaction.onError(java.lang.Throwable)
is called.- Returns:
- a newly created
Transaction
that reads from and writes to thisTenant
.
-
createTransaction
Transaction createTransaction(java.util.concurrent.Executor e)
Creates aTransaction
that operates on thisTenant
with the givenExecutor
for asynchronous callbacks.- Parameters:
e
- theExecutor
to use when executing asynchronous callbacks.- Returns:
- a newly created
Transaction
that reads from and writes to thisTenant
.
-
createTransaction
Transaction createTransaction(java.util.concurrent.Executor e, EventKeeper eventKeeper)
Creates aTransaction
that operates on thisTenant
with the givenExecutor
for asynchronous callbacks.- Parameters:
e
- theExecutor
to use when executing asynchronous callbacks.eventKeeper
- theEventKeeper
to use when tracking instrumented calls for the transaction.- Returns:
- a newly created
Transaction
that reads from and writes to thisTenant
.
-
getName
byte[] getName()
Returns the name of thisTenant
.- Returns:
- the name of this
Tenant
as a byte string.
-
read
default <T> T read(java.util.function.Function<? super ReadTransaction,T> retryable)
Runs a read-only transactional function against thisTenant
with retry logic.apply(ReadTransaction)
will be called on the suppliedFunction
until a non-retryable FDBException (or anyThrowable
other than anFDBException
) is thrown. This call is blocking -- this method will not return until theFunction
has been called and completed without error.- Specified by:
read
in interfaceReadTransactionContext
- Type Parameters:
T
- the return type ofretryable
- Parameters:
retryable
- the block of logic to execute in aTransaction
against this tenant- Returns:
- the result of the last run of
retryable
-
read
<T> T read(java.util.function.Function<? super ReadTransaction,T> retryable, java.util.concurrent.Executor e)
Runs a read-only transactional function against thisTenant
with retry logic. Use this formulation ofread(Function)
if one wants to set a customExecutor
for the transaction when run.- Type Parameters:
T
- the return type ofretryable
- Parameters:
retryable
- the block of logic to execute in aTransaction
against this tenante
- theExecutor
to use for asynchronous callbacks- Returns:
- the result of the last run of
retryable
- See Also:
read(Function)
-
readAsync
default <T> java.util.concurrent.CompletableFuture<T> readAsync(java.util.function.Function<? super ReadTransaction,? extends java.util.concurrent.CompletableFuture<T>> retryable)
Runs a read-only transactional function against thisTenant
with retry logic.apply(ReadTransaction)
will be called on the suppliedFunction
until a non-retryable FDBException (or anyThrowable
other than anFDBException
) is thrown. This call is non-blocking -- this method will return immediately and with aCompletableFuture
that will be set when theFunction
has been called and completed without error.
Any errors encountered executingretryable
, or received from the database, will be set on the returnedCompletableFuture
.- Specified by:
readAsync
in interfaceReadTransactionContext
- Type Parameters:
T
- the return type ofretryable
- Parameters:
retryable
- the block of logic to execute in aReadTransaction
against this tenant- Returns:
- a
CompletableFuture
that will be set to the value returned by the last call toretryable
-
readAsync
<T> java.util.concurrent.CompletableFuture<T> readAsync(java.util.function.Function<? super ReadTransaction,? extends java.util.concurrent.CompletableFuture<T>> retryable, java.util.concurrent.Executor e)
Runs a read-only transactional function against thisTenant
with retry logic. Use this version ofreadAsync(Function)
if one wants to set a customExecutor
for the transaction when run.- Type Parameters:
T
- the return type ofretryable
- Parameters:
retryable
- the block of logic to execute in aReadTransaction
against this tenante
- theExecutor
to use for asynchronous callbacks- Returns:
- a
CompletableFuture
that will be set to the value returned by the last call toretryable
- See Also:
readAsync(Function)
-
run
default <T> T run(java.util.function.Function<? super Transaction,T> retryable)
Runs a transactional function against thisTenant
with retry logic.apply(Transaction)
will be called on the suppliedFunction
until a non-retryable FDBException (or anyThrowable
other than anFDBException
) is thrown orcommit()
, when called afterapply()
, returns success. This call is blocking -- this method will not return untilcommit()
has been called and returned success.
As with other client/server databases, in some failure scenarios a client may be unable to determine whether a transaction succeeded. In these cases, your transaction may be executed twice. For more information about how to reason about these situations see the FounationDB Developer Guide- Specified by:
run
in interfaceTransactionContext
- Type Parameters:
T
- the return type ofretryable
- Parameters:
retryable
- the block of logic to execute in aTransaction
against this tenant- Returns:
- the result of the last run of
retryable
-
run
<T> T run(java.util.function.Function<? super Transaction,T> retryable, java.util.concurrent.Executor e)
Runs a transactional function against thisTenant
with retry logic. Use this formulation ofrun(Function)
if one would like to set a customExecutor
for the transaction when run.- Type Parameters:
T
- the return type ofretryable
- Parameters:
retryable
- the block of logic to execute in aTransaction
against this tenante
- theExecutor
to use for asynchronous callbacks- Returns:
- the result of the last run of
retryable
-
runAsync
default <T> java.util.concurrent.CompletableFuture<T> runAsync(java.util.function.Function<? super Transaction,? extends java.util.concurrent.CompletableFuture<T>> retryable)
Runs a transactional function against thisTenant
with retry logic.apply(Transaction)
will be called on the suppliedFunction
until a non-retryable FDBException (or anyThrowable
other than anFDBException
) is thrown orcommit()
, when called afterapply()
, returns success. This call is non-blocking -- this method will return immediately and with aCompletableFuture
that will be set whencommit()
has been called and returned success.
As with other client/server databases, in some failure scenarios a client may be unable to determine whether a transaction succeeded. In these cases, your transaction may be executed twice. For more information about how to reason about these situations see the FounationDB Developer Guide
Any errors encountered executingretryable
, or received from the database, will be set on the returnedCompletableFuture
.- Specified by:
runAsync
in interfaceTransactionContext
- Type Parameters:
T
- the return type ofretryable
- Parameters:
retryable
- the block of logic to execute in aTransaction
against this tenant- Returns:
- a
CompletableFuture
that will be set to the value returned by the last call toretryable
-
runAsync
<T> java.util.concurrent.CompletableFuture<T> runAsync(java.util.function.Function<? super Transaction,? extends java.util.concurrent.CompletableFuture<T>> retryable, java.util.concurrent.Executor e)
Runs a transactional function against thisTenant
with retry logic. Use this formulation of the non-blockingrunAsync(Function)
if one wants to set a customExecutor
for the transaction when run.- Type Parameters:
T
- the return type ofretryable
- Parameters:
retryable
- the block of logic to execute in aTransaction
against this tenante
- theExecutor
to use for asynchronous callbacks- Returns:
- a
CompletableFuture
that will be set to the value returned by the last call toretryable
- See Also:
run(Function)
-
purgeBlobGranules
default java.util.concurrent.CompletableFuture<byte[]> purgeBlobGranules(byte[] beginKey, byte[] endKey, boolean force)
RunspurgeBlobGranules(byte[] beginKey, byte[] endKey, boolean force)
on the default executor.- Parameters:
beginKey
- start of the key rangeendKey
- end of the key rangeforce
- if true delete all data, if not keep data >= purgeVersion- Returns:
- the key to watch for purge complete
-
purgeBlobGranules
default java.util.concurrent.CompletableFuture<byte[]> purgeBlobGranules(byte[] beginKey, byte[] endKey, long purgeVersion, boolean force)
RunspurgeBlobGranules(byte[] beginKey, byte[] endKey, long purgeVersion, boolean force)
on the default executor.- Parameters:
beginKey
- start of the key rangeendKey
- end of the key rangepurgeVersion
- version to purge atforce
- if true delete all data, if not keep data >= purgeVersion- Returns:
- the key to watch for purge complete
-
purgeBlobGranules
java.util.concurrent.CompletableFuture<byte[]> purgeBlobGranules(byte[] beginKey, byte[] endKey, long purgeVersion, boolean force, java.util.concurrent.Executor e)
Queues a purge of blob granules for specified key range of this tenant, at the specified version.- Parameters:
beginKey
- start of the key rangeendKey
- end of the key rangepurgeVersion
- version to purge atforce
- if true delete all data, if not keep data >= purgeVersione
- theExecutor
to use for asynchronous callbacks- Returns:
- the key to watch for purge complete
-
waitPurgeGranulesComplete
default java.util.concurrent.CompletableFuture<java.lang.Void> waitPurgeGranulesComplete(byte[] purgeKey)
RunswaitPurgeGranulesComplete(byte[] purgeKey)
on the default executor.- Parameters:
purgeKey
- key to watch- Returns:
- -- undocumented
-
waitPurgeGranulesComplete
java.util.concurrent.CompletableFuture<java.lang.Void> waitPurgeGranulesComplete(byte[] purgeKey, java.util.concurrent.Executor e)
Wait for a previous call to purgeBlobGranules to complete.- Parameters:
purgeKey
- key to watche
- theExecutor
to use for asynchronous callbacks- Returns:
- -- undocumented
-
blobbifyRange
default java.util.concurrent.CompletableFuture<java.lang.Boolean> blobbifyRange(byte[] beginKey, byte[] endKey)
RunsblobbifyRange(byte[] beginKey, byte[] endKey)
on the default executor.- Parameters:
beginKey
- start of the key rangeendKey
- end of the key range- Returns:
- if the recording of the range was successful
-
blobbifyRange
java.util.concurrent.CompletableFuture<java.lang.Boolean> blobbifyRange(byte[] beginKey, byte[] endKey, java.util.concurrent.Executor e)
Sets a range to be blobbified in this tenant. Must be a completely unblobbified range.- Parameters:
beginKey
- start of the key rangeendKey
- end of the key rangee
- theExecutor
to use for asynchronous callbacks- Returns:
- if the recording of the range was successful
-
unblobbifyRange
default java.util.concurrent.CompletableFuture<java.lang.Boolean> unblobbifyRange(byte[] beginKey, byte[] endKey)
RunsunblobbifyRange(byte[] beginKey, byte[] endKey)
on the default executor.- Parameters:
beginKey
- start of the key rangeendKey
- end of the key range- Returns:
- if the recording of the range was successful
-
unblobbifyRange
java.util.concurrent.CompletableFuture<java.lang.Boolean> unblobbifyRange(byte[] beginKey, byte[] endKey, java.util.concurrent.Executor e)
Unsets a blobbified range in this tenant. The range must be aligned to known blob ranges.- Parameters:
beginKey
- start of the key rangeendKey
- end of the key rangee
- theExecutor
to use for asynchronous callbacks- Returns:
- if the recording of the range was successful
-
listBlobbifiedRanges
default java.util.concurrent.CompletableFuture<KeyRangeArrayResult> listBlobbifiedRanges(byte[] beginKey, byte[] endKey, int rangeLimit)
RunslistBlobbifiedRanges(byte[] beginKey, byte[] endKey, int rangeLimit)
on the default executor.- Parameters:
beginKey
- start of the key rangeendKey
- end of the key rangerangeLimit
- batch size- Returns:
- a future with the list of blobbified ranges: [lastLessThan(beginKey), firstGreaterThanOrEqual(endKey)]
-
listBlobbifiedRanges
java.util.concurrent.CompletableFuture<KeyRangeArrayResult> listBlobbifiedRanges(byte[] beginKey, byte[] endKey, int rangeLimit, java.util.concurrent.Executor e)
Lists blobbified ranges in this tenant. There may be more if result.size() == rangeLimit.- Parameters:
beginKey
- start of the key rangeendKey
- end of the key rangerangeLimit
- batch sizee
- theExecutor
to use for asynchronous callbacks- Returns:
- a future with the list of blobbified ranges: [lastLessThan(beginKey), firstGreaterThanOrEqual(endKey)]
-
verifyBlobRange
default java.util.concurrent.CompletableFuture<java.lang.Long> verifyBlobRange(byte[] beginKey, byte[] endKey)
RunsverifyBlobRange(byte[] beginKey, byte[] endKey)
on the default executor.- Parameters:
beginKey
- start of the key rangeendKey
- end of the key range- Returns:
- a future with the version of the last blob granule.
-
verifyBlobRange
default java.util.concurrent.CompletableFuture<java.lang.Long> verifyBlobRange(byte[] beginKey, byte[] endKey, long version)
RunsverifyBlobRange(byte[] beginKey, byte[] endKey, long version)
on the default executor.- Parameters:
beginKey
- start of the key rangeendKey
- end of the key rangeversion
- version to read at- Returns:
- a future with the version of the last blob granule.
-
verifyBlobRange
java.util.concurrent.CompletableFuture<java.lang.Long> verifyBlobRange(byte[] beginKey, byte[] endKey, long version, java.util.concurrent.Executor e)
Checks if a blob range is blobbified in this tenant.- Parameters:
beginKey
- start of the key rangeendKey
- end of the key rangeversion
- version to read ate
- the executor- Returns:
- a future with the version of the last blob granule.
-
close
void close()
Close theTenant
object and release any associated resources. This must be called at least once after theTenant
object is no longer in use. This can be called multiple times, but care should be taken that it is not in use in another thread at the time of the call.- Specified by:
close
in interfacejava.lang.AutoCloseable
-
-