Class ClusterNodeInfo
- java.lang.Object
-
- org.apache.jackrabbit.oak.plugins.document.ClusterNodeInfo
-
public class ClusterNodeInfo extends java.lang.ObjectInformation about a cluster node.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classClusterNodeInfo.ClusterNodeStatestatic classClusterNodeInfo.RecoverLockState
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringBROADCAST_IDThe broadcast id.static java.lang.StringBROADCAST_LISTENERThe broadcast listener (host:port).static booleanDEFAULT_LEASE_CHECK_DISABLEDstatic intDEFAULT_LEASE_DURATION_MILLISstatic intDEFAULT_LEASE_FAILURE_MARGIN_MILLISOAK-3398 : default failure margin 20sec before actual lease timeout (note that OAK-3399 / MAX_RETRY_SLEEPS_BEFORE_LEASE_FAILURE eats off another few seconds from this margin, by default 5sec, so the actual default failure-margin is down to 15sec - and that is high-noon!)static intDEFAULT_LEASE_UPDATE_INTERVAL_MILLISOAK-3398 : default update interval 10secstatic java.lang.StringINVISIBLEKey for invisible flagstatic java.lang.StringLAST_WRITTEN_ROOT_REV_KEYThe key for the root-revision of the last background write (of unsaved modifications) - that is: the last root-revision written by the instance in case of a clear shutdown or via recovery of another instance in case of a crashstatic java.lang.StringLEASE_END_KEYThe end of the lease.static java.lang.StringREV_RECOVERY_BYFlag indicating which cluster node is running the recovery.static java.lang.StringREV_RECOVERY_LOCKFlag to indicate whether the _lastRev recovery is in progress.static java.lang.StringSTART_TIME_KEYThe start time.static java.lang.StringSTATEThe state of the cluster.protected static java.lang.StringWORKING_DIRThe current working directory.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voiddispose()intgetId()static ClusterNodeInfogetInstance(DocumentStore store, org.apache.jackrabbit.oak.plugins.document.RecoveryHandler recoveryHandler, java.lang.String machineId, java.lang.String instanceId, int configuredClusterId)Get or create a cluster node info instance for the store.static ClusterNodeInfogetInstance(DocumentStore store, org.apache.jackrabbit.oak.plugins.document.RecoveryHandler recoveryHandler, java.lang.String machineId, java.lang.String instanceId, int configuredClusterId, boolean invisible)Get or create a cluster node info instance for the store.longgetLeaseEndTime()longgetLeaseTime()static ClusterNodeInfogetReadOnlyInstance(DocumentStore store)Create a cluster node info instance to be utilized for read only access to underlying store.protected booleanisLeaseExpired(long time)Returnstrueif the lease for this cluster node info should be considered expired given the currenttime.voidperformLeaseCheck()Checks if the lease for this cluster node is still valid, otherwise throws aDocumentStoreException.booleanrenewLease()Renew the cluster id lease.voidsetInfo(java.util.Map<java.lang.String,java.lang.String> info)Update the cluster node info.voidsetLeaseFailureHandler(LeaseFailureHandler leaseFailureHandler)java.lang.StringtoString()
-
-
-
Field Detail
-
LEASE_END_KEY
public static final java.lang.String LEASE_END_KEY
The end of the lease.- See Also:
- Constant Field Values
-
START_TIME_KEY
public static final java.lang.String START_TIME_KEY
The start time.- See Also:
- Constant Field Values
-
LAST_WRITTEN_ROOT_REV_KEY
public static final java.lang.String LAST_WRITTEN_ROOT_REV_KEY
The key for the root-revision of the last background write (of unsaved modifications) - that is: the last root-revision written by the instance in case of a clear shutdown or via recovery of another instance in case of a crash- See Also:
- Constant Field Values
-
STATE
public static final java.lang.String STATE
The state of the cluster. On proper shutdown the state should be cleared.
-
BROADCAST_ID
public static final java.lang.String BROADCAST_ID
The broadcast id. If the broadcasting cache is used, a new id is set after startup.- See Also:
- Constant Field Values
-
BROADCAST_LISTENER
public static final java.lang.String BROADCAST_LISTENER
The broadcast listener (host:port). If the broadcasting cache is used, this is set after startup.- See Also:
- Constant Field Values
-
REV_RECOVERY_LOCK
public static final java.lang.String REV_RECOVERY_LOCK
Flag to indicate whether the _lastRev recovery is in progress.
-
REV_RECOVERY_BY
public static final java.lang.String REV_RECOVERY_BY
Flag indicating which cluster node is running the recovery.- See Also:
- Constant Field Values
-
INVISIBLE
public static final java.lang.String INVISIBLE
Key for invisible flag- See Also:
- Constant Field Values
-
WORKING_DIR
protected static java.lang.String WORKING_DIR
The current working directory. Note: marked protected non-final for testing purpose only.
-
DEFAULT_LEASE_DURATION_MILLIS
public static final int DEFAULT_LEASE_DURATION_MILLIS
-
DEFAULT_LEASE_UPDATE_INTERVAL_MILLIS
public static final int DEFAULT_LEASE_UPDATE_INTERVAL_MILLIS
OAK-3398 : default update interval 10sec- See Also:
- Constant Field Values
-
DEFAULT_LEASE_FAILURE_MARGIN_MILLIS
public static final int DEFAULT_LEASE_FAILURE_MARGIN_MILLIS
OAK-3398 : default failure margin 20sec before actual lease timeout (note that OAK-3399 / MAX_RETRY_SLEEPS_BEFORE_LEASE_FAILURE eats off another few seconds from this margin, by default 5sec, so the actual default failure-margin is down to 15sec - and that is high-noon!)- See Also:
- Constant Field Values
-
DEFAULT_LEASE_CHECK_DISABLED
public static final boolean DEFAULT_LEASE_CHECK_DISABLED
-
-
Method Detail
-
getId
public int getId()
-
getReadOnlyInstance
public static ClusterNodeInfo getReadOnlyInstance(DocumentStore store)
Create a cluster node info instance to be utilized for read only access to underlying store.- Parameters:
store- the document store.- Returns:
- the cluster node info
-
getInstance
public static ClusterNodeInfo getInstance(DocumentStore store, org.apache.jackrabbit.oak.plugins.document.RecoveryHandler recoveryHandler, java.lang.String machineId, java.lang.String instanceId, int configuredClusterId)
Get or create a cluster node info instance for the store.- Parameters:
store- the document store (for the lease)recoveryHandler- the recovery handler to call for a clusterId with an expired lease.machineId- the machine id (null for MAC address)instanceId- the instance id (null for current working directory)configuredClusterId- the configured cluster id (or 0 for dynamic assignment)- Returns:
- the cluster node info
-
getInstance
public static ClusterNodeInfo getInstance(DocumentStore store, org.apache.jackrabbit.oak.plugins.document.RecoveryHandler recoveryHandler, java.lang.String machineId, java.lang.String instanceId, int configuredClusterId, boolean invisible)
Get or create a cluster node info instance for the store.- Parameters:
store- the document store (for the lease)recoveryHandler- the recovery handler to call for a clusterId with an expired lease.machineId- the machine id (null for MAC address)instanceId- the instance id (null for current working directory)configuredClusterId- the configured cluster id (or 0 for dynamic assignment)- Returns:
- the cluster node info
-
performLeaseCheck
public void performLeaseCheck() throws DocumentStoreExceptionChecks if the lease for this cluster node is still valid, otherwise throws aDocumentStoreException. Depending on theLeaseCheckModethis method will not throw the exception immediately when the lease expires. If the mode is set toLeaseCheckMode.LENIENT, then this method will give the lease update thread a last chance of 5 seconds to renew it. This allows the DocumentNodeStore to recover from an expired lease caused by a system put to sleep or a JVM in debug mode.- Throws:
DocumentStoreException- if the lease expired.
-
isLeaseExpired
protected boolean isLeaseExpired(long time)
Returnstrueif the lease for this cluster node info should be considered expired given the currenttime. This method takesleaseFailureMargininto account and will returntrueeven before the passedtimeis beyond theleaseEndTime.- Parameters:
time- the current time to check against the lease end.- Returns:
trueif the lease is considered expired,falseotherwise.
-
renewLease
public boolean renewLease() throws DocumentStoreExceptionRenew the cluster id lease. This method needs to be called once in a while, to ensure the same cluster id is not re-used by a different instance. The lease is only renewed after 'leaseUpdateInterval' millis since last lease update - default being every 10 sec (this used to be 30sec).This method will not fail immediately with a DocumentStoreException if the lease expired. It will still try to renew the lease and only fail if
performLeaseCheck()decided the lease expired or another cluster node initiated recover for this node.- Returns:
trueif the lease was renewed;falseotherwise.- Throws:
DocumentStoreException- if the operation failed or the lease expired.
-
setInfo
public void setInfo(java.util.Map<java.lang.String,java.lang.String> info)
Update the cluster node info.- Parameters:
info- the map of changes
-
getLeaseTime
public long getLeaseTime()
-
getLeaseEndTime
public long getLeaseEndTime()
-
setLeaseFailureHandler
public void setLeaseFailureHandler(LeaseFailureHandler leaseFailureHandler)
-
dispose
public void dispose()
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
-