or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

examples

edge-cases.mdreal-world-scenarios.md
index.md
tile.json

configuration.mddocs/reference/

Configuration Options

Configure network, database, and transaction behavior with comprehensive option APIs. Options control tracing, TLS, timeouts, priorities, and many other aspects of FDB client behavior.

Capabilities

Network Options

Configure FDB network before calling startNetwork().

/**
 * Get network options for configuration.
 * Options must be set before network starts.
 * 
 * Returns:
 * NetworkOptions - Network configuration interface
 */
NetworkOptions FDB.options();

Trace Configuration

// Enable trace logging to directory
void NetworkOptions.setTraceEnable(String traceDirectory);

// Set maximum size of single trace file in bytes
void NetworkOptions.setTraceRollSize(long bytes);

// Set maximum total size of all trace files in bytes
void NetworkOptions.setTraceMaxLogsSize(long bytes);

// Set log group attribute for all trace events
void NetworkOptions.setTraceLogGroup(String logGroup);

// Set trace file format (xml or json)
void NetworkOptions.setTraceFormat(String format);

// Set clock source for traces (now or realtime)
void NetworkOptions.setTraceClockSource(String source);

// Set identifier included in trace file names
void NetworkOptions.setTraceFileIdentifier(String identifier);

// Use same base trace file name for all client threads
void NetworkOptions.setTraceShareAmongClientThreads();

// Initialize trace files on network setup
void NetworkOptions.setTraceInitializeOnSetup();

// Set suffix for partially written log files
void NetworkOptions.setTracePartialFileSuffix(String suffix);

Usage example:

FDB fdb = FDB.selectAPIVersion(740);

// Enable tracing
fdb.options().setTraceEnable("/var/log/fdb-traces");
fdb.options().setTraceFormat("json");
fdb.options().setTraceRollSize(10_000_000);  // 10MB per file
fdb.options().setTraceMaxLogsSize(100_000_000);  // 100MB total
fdb.options().setTraceLogGroup("myapp");

// Now start network
Database db = fdb.open();

TLS Configuration

// Set certificate chain from bytes
void NetworkOptions.setTLSCertBytes(byte[] certBytes);

// Set certificate chain from file
void NetworkOptions.setTLSCertPath(String certPath);

// Set private key from bytes
void NetworkOptions.setTLSKeyBytes(byte[] keyBytes);

// Set private key from file
void NetworkOptions.setTLSKeyPath(String keyPath);

// Set CA bundle from bytes
void NetworkOptions.setTLSCaBytes(byte[] caBytes);

// Set CA bundle from file
void NetworkOptions.setTLSCaPath(String caPath);

// Set password for encrypted private key
void NetworkOptions.setTLSPassword(String password);

// Set peer certificate verification criteria
void NetworkOptions.setTLSVerifyPeers(byte[] verificationPattern);

// Prevent non-TLS connections
void NetworkOptions.setTLSDisablePlaintextConnection();

Usage example:

// Configure TLS
fdb.options().setTLSCertPath("/etc/fdb/client.pem");
fdb.options().setTLSKeyPath("/etc/fdb/client-key.pem");
fdb.options().setTLSCaPath("/etc/fdb/ca-bundle.crt");
fdb.options().setTLSVerifyPeers("S.CN=FDB".getBytes());
fdb.options().setTLSDisablePlaintextConnection();

Multi-Version Client

// Disable multi-version client API
void NetworkOptions.setDisableMultiVersionClientApi();

// Add external client library
void NetworkOptions.setExternalClientLibrary(String path);

// Add directory containing client libraries
void NetworkOptions.setExternalClientDirectory(String path);

// Disable local client
void NetworkOptions.setDisableLocalClient();

// Spawn multiple threads per client version
void NetworkOptions.setClientThreadsPerVersion(long threads);

// Enable callbacks on external threads
void NetworkOptions.setCallbacksOnExternalThreads();

// Retain copies of external client libraries
void NetworkOptions.setRetainClientLibraryCopies();

// Ignore failures loading external clients
void NetworkOptions.setIgnoreExternalClientFailures();

// Disable client bypass for GRV caching
void NetworkOptions.setDisableClientBypass();

Other Network Options

// Set internal tuning knob
void NetworkOptions.setKnob(String knobName);

// Disable client statistics logging
void NetworkOptions.setDisableClientStatisticsLogging();

// Enable run loop profiling
void NetworkOptions.setEnableRunLoopProfiling();

// Set client temporary directory
void NetworkOptions.setClientTmpDir(String path);

// Set distributed tracer type
void NetworkOptions.setDistributedClientTracer(String tracerType);

Database Options

Configure database-level behavior.

/**
 * Get database options for configuration.
 * 
 * Returns:
 * DatabaseOptions - Database configuration interface
 */
DatabaseOptions Database.options();

Cache and Resource Options

// Set size of location cache (default: 100000)
void DatabaseOptions.setLocationCacheSize(long size);

// Set maximum outstanding watches (default: 10000, max: 1000000)
void DatabaseOptions.setMaxWatches(long maxWatches);

Locality Options

// Set machine ID for location-aware load balancing
void DatabaseOptions.setMachineId(String hexId);

// Set datacenter ID for location-aware load balancing
void DatabaseOptions.setDatacenterId(String datacenterId);

Transaction Defaults

// Set default transaction timeout in milliseconds
void DatabaseOptions.setTransactionTimeout(long timeoutMs);

// Set default transaction retry limit
void DatabaseOptions.setTransactionRetryLimit(long retries);

// Set default transaction max retry delay in milliseconds
void DatabaseOptions.setTransactionMaxRetryDelay(long delayMs);

// Set default transaction size limit in bytes
void DatabaseOptions.setTransactionSizeLimit(long bytes);

// Enable causal read risky for all transactions
void DatabaseOptions.setTransactionCausalReadRisky();

// Set default transaction logging max field length
void DatabaseOptions.setTransactionLoggingMaxFieldLength(long length);

// Enable automatic idempotency for all transactions
void DatabaseOptions.setTransactionAutomaticIdempotency();

// Enable bypass unreadable for all transactions
void DatabaseOptions.setTransactionBypassUnreadable();

// Disable used during commit protection for all transactions
void DatabaseOptions.setTransactionUsedDuringCommitProtectionDisable();

// Enable conflicting key reporting for all transactions
void DatabaseOptions.setTransactionReportConflictingKeys();

Snapshot Read-Your-Writes

// Enable snapshot RYW (default)
void DatabaseOptions.setSnapshotRywEnable();

// Disable snapshot RYW
void DatabaseOptions.setSnapshotRywDisable();

Usage example:

Database db = fdb.open();

// Configure database
db.options().setLocationCacheSize(200000);
db.options().setMaxWatches(20000);
db.options().setTransactionTimeout(10000);  // 10 second default
db.options().setTransactionRetryLimit(100);
db.options().setMachineId("machine-001");

Transaction Options

Configure individual transaction behavior.

/**
 * Get transaction options for configuration.
 * 
 * Returns:
 * TransactionOptions - Transaction configuration interface
 */
TransactionOptions Transaction.options();

Causal Consistency

// Allow duplicate commits on fault (risky)
void TransactionOptions.setCausalWriteRisky();

// Read version may not be latest on fault+clock issue
void TransactionOptions.setCausalReadRisky();

// Disable causal read consistency
void TransactionOptions.setCausalReadDisable();

Conflict Ranges

// Next write won't generate write conflict range
void TransactionOptions.setNextWriteNoWriteConflictRange();

// Report which keys are conflicting
void TransactionOptions.setReportConflictingKeys();

Read Behavior

// Disable read-your-writes
void TransactionOptions.setReadYourWritesDisable();

// Enable server-side read cache (default)
void TransactionOptions.setReadServerSideCacheEnable();

// Disable server-side read cache
void TransactionOptions.setReadServerSideCacheDisable();

// Set normal read priority (default)
void TransactionOptions.setReadPriorityNormal();

// Set low read priority
void TransactionOptions.setReadPriorityLow();

// Set high read priority
void TransactionOptions.setReadPriorityHigh();

Priority and Throttling

// System immediate priority (highest)
void TransactionOptions.setPrioritySystemImmediate();

// Batch priority (lowest, throttled)
void TransactionOptions.setPriorityBatch();

// Add throttling tag
void TransactionOptions.setTag(String tag);

// Add auto-throttle tag
void TransactionOptions.setAutoThrottleTag(String tag);

System Access

// Allow access to system keys (0xFF prefix)
void TransactionOptions.setAccessSystemKeys();

// Allow read-only access to system keys
void TransactionOptions.setReadSystemKeys();

// Allow raw key-space access in tenant mode
void TransactionOptions.setRawAccess();

// Lock-aware transaction
void TransactionOptions.setLockAware();

// Read lock-aware transaction
void TransactionOptions.setReadLockAware();

Timeouts and Limits

// Set transaction timeout in milliseconds
void TransactionOptions.setTimeout(long timeoutMs);

// Set retry limit (-1 for unlimited)
void TransactionOptions.setRetryLimit(long limit);

// Set maximum retry delay in milliseconds
void TransactionOptions.setMaxRetryDelay(long delayMs);

// Set transaction size limit in bytes
void TransactionOptions.setSizeLimit(long bytes);

Debugging and Logging

// Set transaction identifier for tracing
void TransactionOptions.setDebugTransactionIdentifier(String identifier);

// Enable transaction logging
void TransactionOptions.setLogTransaction();

// Set max field length for logged keys/values
void TransactionOptions.setTransactionLoggingMaxFieldLength(long length);

// Enable debug retry logging
void TransactionOptions.setDebugRetryLogging(String transactionName);

// Enable server request tracing
void TransactionOptions.setServerRequestTracing();

// Include port numbers in addresses (deprecated - enabled by default since API 630)
@Deprecated void TransactionOptions.setIncludePortInAddress();

Snapshot Behavior

// Enable snapshot read-your-writes (default)
void TransactionOptions.setSnapshotRywEnable();

// Disable snapshot read-your-writes
void TransactionOptions.setSnapshotRywDisable();

Advanced Options

// Bypass unreadable versionstamp sections
void TransactionOptions.setBypassUnreadable();

// Use cached GRV from database context
void TransactionOptions.setUseGrvCache();

// Disable used-during-commit protection
void TransactionOptions.setUsedDuringCommitProtectionDisable();

// Enable special key space relaxed mode
void TransactionOptions.setSpecialKeySpaceRelaxed();

// Enable writes to special key space
void TransactionOptions.setSpecialKeySpaceEnableWrites();

// Set idempotency ID
void TransactionOptions.setIdempotencyId(String id);

// Enable automatic idempotency
void TransactionOptions.setAutomaticIdempotency();

// Set authorization token
void TransactionOptions.setAuthorizationToken(String token);

// Enable expensive clear cost estimation
void TransactionOptions.setExpensiveClearCostEstimationEnable();

// Bypass storage quota enforcement
void TransactionOptions.setBypassStorageQuota();

// Set span parent for tracing
void TransactionOptions.setSpanParent(byte[] spanContext);

Usage examples:

// Configure transaction for low-priority batch work
db.run(tr -> {
    tr.options().setPriorityBatch();
    tr.options().setTimeout(60000);  // 60 seconds
    tr.options().setTag("batch_import");
    
    // Perform batch operations
    return null;
});

// High-priority transaction with system key access
db.run(tr -> {
    tr.options().setPrioritySystemImmediate();
    tr.options().setAccessSystemKeys();
    
    // System operations
    return null;
});

// Debugging transaction
db.run(tr -> {
    tr.options().setDebugTransactionIdentifier("my-transaction-123");
    tr.options().setLogTransaction();
    tr.options().setServerRequestTracing();
    
    // Operations to debug
    return null;
});

// Performance-optimized read
db.read(tr -> {
    tr.options().setReadPriorityHigh();
    tr.options().setReadServerSideCacheDisable();
    
    // One-time read operations
    return null;
});

Types

class NetworkOptions {
    // All methods documented above
    void setOption(int code, byte[] value);
}

class DatabaseOptions {
    // All methods documented above
    void setOption(int code, byte[] value);
}

class TransactionOptions {
    // All methods documented above
    void setOption(int code, byte[] value);
}

Important Notes

Option Timing

  • Network options must be set before startNetwork()
  • Database options can be set anytime after database creation
  • Transaction options must be set before the operation they affect
  • Some transaction options persist across onError() (timeout, retry_limit, max_retry_delay)

Priority Guidelines

  • SYSTEM_IMMEDIATE: Use sparingly, only for critical operations
  • Normal: Default priority for most operations
  • BATCH: For background work that can be throttled

Throttling Tags

  • Maximum 5 tags per transaction
  • Tags must not exceed 16 characters
  • Use for applying manual or automatic throttling

Read Your Writes

  • Enabled by default for better ergonomics
  • Disable for potential performance improvement
  • Cannot be changed after first read/write operation

System Keys

  • Keys starting with 0xFF are system keys
  • Requires setAccessSystemKeys() or setReadSystemKeys()
  • Use with caution - can affect cluster operation

Timeouts

  • Default transaction timeout: 5 seconds
  • Default can be changed with database option
  • Set to 0 to disable timeout
  • Persistent across onError() in API version 610+

Retry Limits

  • Default varies by error type
  • Set to -1 for unlimited retries
  • Persistent across onError() in API version 610+

Transaction Size

  • Default limit: 10MB
  • Minimum: 32 bytes
  • Maximum: 10,000,000 bytes
  • Includes keys, values, and conflict ranges

Trace Logging

  • Requires directory with write permissions
  • Can generate significant I/O
  • Roll size and max size prevent unbounded growth
  • JSON format preferred for parsing

TLS Configuration

  • Must be configured before database connection
  • Password must be set before key
  • Verification pattern uses S. and I. prefixes
  • Client and server must use compatible TLS