Skip to content

Commit

Permalink
get LeaseLock based LeaderElection e2e tests working
Browse files Browse the repository at this point in the history
  • Loading branch information
himanshug committed Dec 30, 2020
1 parent c226e6b commit 2a3438b
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 2 deletions.
Expand Up @@ -34,6 +34,7 @@
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import org.joda.time.format.*;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
Expand Down Expand Up @@ -77,6 +78,27 @@ public LeaderElectorTest(LockType lockType) {
throw new RuntimeException("Couldn't create ApiClient", ex);
}
this.lockType = lockType;

// Lease resource requires special care with DateTime
if (lockType == LockType.Lease) {
// This formatter is used for Lease resource spec's acquire/renewTime
DateTimeFormatter isoWithFractionalMicroSecsFormatter =
DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'");

DateTimeFormatter formatter =
new DateTimeFormatterBuilder()
.append(
isoWithFractionalMicroSecsFormatter.getPrinter(),
new DateTimeParser[] {
isoWithFractionalMicroSecsFormatter.getParser(),
// need this one to parse "creationTimestamp" format e.g. "2020-12-30T09:29:13Z"
// in Lease resource returned from server
ISODateTimeFormat.dateOptionalTimeParser().getParser(),
})
.toFormatter();

apiClient.setDateTimeFormat(formatter);
}
}

@Before
Expand Down
Expand Up @@ -414,6 +414,9 @@ public void close() {
LeaderElectionRecord emptyRecord = new LeaderElectionRecord();
// maintain leaderTransitions count
emptyRecord.setLeaderTransitions(observedRecord.getLeaderTransitions());
// LeaseLock impl requires a non-zero value for leaseDuration
emptyRecord.setLeaseDurationSeconds(
Long.valueOf(config.getLeaseDuration().getSeconds()).intValue());
boolean status = this.config.getLock().update(emptyRecord);

if (!status) {
Expand Down
Expand Up @@ -99,9 +99,9 @@ public boolean update(LeaderElectionRecord record) {
return true;
} catch (ApiException e) {
if (e.getCode() == HttpURLConnection.HTTP_CONFLICT) {
log.debug("received {} when creating lease lock", e.getCode(), e);
log.debug("received {} when updating lease lock", e.getCode(), e);
} else {
log.error("received {} when creating lease lock", e.getCode(), e);
log.error("received {} when updating lease lock", e.getCode(), e);
}
return false;
}
Expand Down

0 comments on commit 2a3438b

Please sign in to comment.