[
https://issues.apache.org/jira/browse/CASSANDRA-11258?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15303125#comment-15303125
]
Paulo Motta commented on CASSANDRA-11258:
-----------------------------------------
bq. Sorry for the delay. I've added the check for the existing lease in case we
get a WTE here.
+1 this case seems to be handled correctly now. The rest of the patch looks
mostly good, apart from these minor nits:
* We can probably make the validity check a bit more robust by failing-fast if
there is a different persisted {{expirationTime}} value:
{noformat}
diff --git a/src/java/org/apache/cassandra/scheduling/CasLeaseFactory.java
b/src/java/org/apache/cassandra/scheduling/CasLeaseFactory.java
index 5629613..2c34238 100644
--- a/src/java/org/apache/cassandra/scheduling/CasLeaseFactory.java
+++ b/src/java/org/apache/cassandra/scheduling/CasLeaseFactory.java
@@ -410,7 +410,12 @@ public class CasLeaseFactory implements LeaseFactory
@Override
public boolean isValid()
{
- return !hasExpired() && holdsLeaseUntil(resource).isPresent();
+ if (hasExpired())
+ return false;
+
+ Optional<Long> holdsLeasseUntil = holdsLeaseUntil(resource);
+ return holdsLeasseUntil.isPresent() &&
holdsLeasseUntil.get().equals(expirationTime);
}
private boolean hasExpired()
{noformat}
* Replace {{logger.error}} with {{logger.warn}} since all of these errors are
recoverable so the user doesn't get scared by it.
* Add a test scenario for the case where the lease is acquirde, renewed with a
shorter TTL, cancelled and re-acquired shortly after to see if the case we
discussed earlier is being correctly addressed.
bq. I've added an example in the javadoc, hopefully that will make it clearer.
I'm a bit unsure about the "This duration is not added to the current
duration." part of the javadoc that I added, it might confuse more than it
contributes, WDYT?
How about renaming {{renew(int duration)}} to {{renew(int newDuration)}} to
make this more explicit? I'm attaching a patch with suggested changes (feel
free to modify or use it partially).
> Repair scheduling - Resource locking API
> ----------------------------------------
>
> Key: CASSANDRA-11258
> URL: https://issues.apache.org/jira/browse/CASSANDRA-11258
> Project: Cassandra
> Issue Type: Sub-task
> Reporter: Marcus Olsson
> Assignee: Marcus Olsson
> Priority: Minor
> Attachments: newDuration.patch
>
>
> Create a resource locking API & implementation that is able to lock a
> resource in a specified data center. It should handle priorities to avoid
> node starvation.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)