Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HW-53073: Allow Thread Interruption for WriteLockManager #1

Open
wants to merge 14 commits into
base: 2.7
Choose a base branch
from
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public class WriteLockManager {

public static final int MAX_WAIT = 600000; //10 mins
private static final int SIXTY_SECONDS = 60; //1 minute
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Constant should be named for their purpose, not their value.
SIXTY_SECONDS should be SECONDS_BEFORE_HONOUR_INTERRUPT
SEVENTY_SECONDS should be SECONDS_IN_BAD_STATE

private static final int SEVENTY_SECONDS = 70; //Once we reached 70s, we can assume we are in a bad state, so allow interruption for everything.
private static final int SEVENTY_SECONDS = 130; //Once we reached 130s, we can assume we are in a bad state, so allow interruption for everything.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

comment isn't accurate. Should be
// Once we reach SECONDS_BEFORE_HONOUR_INTERRUPT we consider the node in bad state for SECONDS_IN_BAD_STATE seconds. During which time, we will honour all interrupts.

//Initialize with 0 when we first find a lock.
//is volatile enough for this case? How do we guarantee Thread-Safe access? Do we want to add more complexity with synchronized
private static volatile LocalDateTime honourInterruptsWithin70secondsOfThisTime = LocalDateTime.now().minusYears(1);
Expand Down Expand Up @@ -124,11 +124,11 @@ public Map acquireLocksForClone(Object objectForClone, ClassDescriptor descripto
+ "{0}, Time elapsed in seconds: {1}, Local Timer: {2}, Static Timer: {3}",
new Object[]{tries, secondsPassedLocally, localTime, honourInterruptsWithin70secondsOfThisTime});
} else {
honourInterruptsWithin70secondsOfThisTime = LocalDateTime.now();
logger.log(Level.SEVERE,
"Local Timer: Reached threshold to interrupt. Attempts: {0}, Time elapsed in seconds: {1}, Local Timer: "
+ "{2}, Static Timer: {3}",
new Object[]{tries, secondsPassed, localTime, honourInterruptsWithin70secondsOfThisTime});
honourInterruptsWithin70secondsOfThisTime = LocalDateTime.now();
throw ConcurrencyException.waitWasInterrupted(ex.getMessage());
}
}
Expand Down