Skip to content

Commit

Permalink
do spotless:apply to fix formatting errors
Browse files Browse the repository at this point in the history
  • Loading branch information
himanshug committed Dec 26, 2020
1 parent 8079d67 commit 9276dc2
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 58 deletions.
Expand Up @@ -281,14 +281,16 @@ private boolean tryAcquireOrRenew() {
|| oldLeaderElectionRecord.getAcquireTime() == null
|| oldLeaderElectionRecord.getRenewTime() == null
|| oldLeaderElectionRecord.getHolderIdentity() == null) {
// We found the lock resource with an empty LeaderElectionRecord, try to get leadership by updating it
// We found the lock resource with an empty LeaderElectionRecord, try to get leadership by
// updating it
if (log.isDebugEnabled()) {
log.debug("Update lock to get lease");
}

if (oldLeaderElectionRecord != null) {
// maintain the leaderTransitions
leaderElectionRecord.setLeaderTransitions(oldLeaderElectionRecord.getLeaderTransitions() + 1);
leaderElectionRecord.setLeaderTransitions(
oldLeaderElectionRecord.getLeaderTransitions() + 1);
}

return updateLock(lock, leaderElectionRecord);
Expand Down Expand Up @@ -382,19 +384,23 @@ public void close() {

// First ensure that all executors have stopped
try {
boolean isTerminated = scheduledWorkers.awaitTermination(config.getRetryPeriod().getSeconds(), TimeUnit.SECONDS);
boolean isTerminated =
scheduledWorkers.awaitTermination(
config.getRetryPeriod().getSeconds(), TimeUnit.SECONDS);
if (!isTerminated) {
log.warn("scheduledWorkers executor termination didn't finish.");
return;
}

isTerminated = leaseWorkers.awaitTermination(config.getRetryPeriod().getSeconds(), TimeUnit.SECONDS);
isTerminated =
leaseWorkers.awaitTermination(config.getRetryPeriod().getSeconds(), TimeUnit.SECONDS);
if (!isTerminated) {
log.warn("leaseWorkers executor termination didn't finish.");
return;
}

isTerminated = hookWorkers.awaitTermination(config.getRetryPeriod().getSeconds(), TimeUnit.SECONDS);
isTerminated =
hookWorkers.awaitTermination(config.getRetryPeriod().getSeconds(), TimeUnit.SECONDS);
if (!isTerminated) {
log.warn("hookWorkers executor termination didn't finish.");
return;
Expand Down
Expand Up @@ -17,7 +17,6 @@
import static org.mockito.Mockito.*;

import io.kubernetes.client.openapi.ApiException;

import java.net.HttpURLConnection;
import java.time.Duration;
import java.util.ArrayList;
Expand Down Expand Up @@ -418,7 +417,7 @@ public LeaderElectionRecord get() throws ApiException {
lock.lock();
try {
if (leaderRecord == null) {
throw new ApiException("Record Not Found", HttpURLConnection.HTTP_NOT_FOUND, null, null);
throw new ApiException("Record Not Found", HttpURLConnection.HTTP_NOT_FOUND, null, null);
}
return leaderRecord;
} finally {
Expand Down
Expand Up @@ -10,41 +10,37 @@
See the License for the specific language governing permissions and
limitations under the License.
*/

package io.kubernetes.client.extended.leaderelection;

import org.junit.Test;

import java.time.Duration;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import org.junit.Test;

/**
* Leader Election tests using "simulated" locks created by {@link LockSmith}
*/
public class LeaderElectorTest
{
/** Leader Election tests using "simulated" locks created by {@link LockSmith} */
public class LeaderElectorTest {
/**
* Tests that when a leader candidate is stopped gracefully, second candidate immediately becomes
* leader.
*/
@Test(timeout = 20000L)
public void testLeaderGracefulShutdown() throws Exception
{
public void testLeaderGracefulShutdown() throws Exception {
LockSmith lockSmith = new LockSmith();

CountDownLatch startBeingLeader1 = new CountDownLatch(1);
CountDownLatch stopBeingLeader1 = new CountDownLatch(1);

LeaderElector leaderElector1 = makeAndRunLeaderElectorAsync(lockSmith, "candidate1", startBeingLeader1, stopBeingLeader1);
LeaderElector leaderElector1 =
makeAndRunLeaderElectorAsync(lockSmith, "candidate1", startBeingLeader1, stopBeingLeader1);

// wait for candidate1 to become leader
startBeingLeader1.await();

CountDownLatch startBeingLeader2 = new CountDownLatch(1);
CountDownLatch stopBeingLeader2 = new CountDownLatch(1);

LeaderElector leaderElector2 = makeAndRunLeaderElectorAsync(lockSmith, "candidate2", startBeingLeader2, stopBeingLeader2);
LeaderElector leaderElector2 =
makeAndRunLeaderElectorAsync(lockSmith, "candidate2", startBeingLeader2, stopBeingLeader2);

leaderElector1.close();

Expand All @@ -57,23 +53,25 @@ public void testLeaderGracefulShutdown() throws Exception
leaderElector2.close();
}

private LeaderElector makeAndRunLeaderElectorAsync(LockSmith lockSmith, String lockIdentity, CountDownLatch startBeingLeader, CountDownLatch stopBeingLeader)
{
private LeaderElector makeAndRunLeaderElectorAsync(
LockSmith lockSmith,
String lockIdentity,
CountDownLatch startBeingLeader,
CountDownLatch stopBeingLeader) {
LeaderElectionConfig leaderElectionConfig =
new LeaderElectionConfig(
lockSmith.makeLock(lockIdentity),
Duration.ofMillis(TimeUnit.MINUTES.toMillis(1)),
Duration.ofMillis(TimeUnit.SECONDS.toMillis(51)),
Duration.ofMillis(TimeUnit.SECONDS.toMillis(3))
);
Duration.ofMillis(TimeUnit.SECONDS.toMillis(3)));
LeaderElector leaderElector = new LeaderElector(leaderElectionConfig);

Thread thread = new Thread(
() -> leaderElector.run(
() -> startBeingLeader.countDown(), () -> stopBeingLeader.countDown()
),
String.format("%s-leader-elector-main", lockIdentity)
);
Thread thread =
new Thread(
() ->
leaderElector.run(
() -> startBeingLeader.countDown(), () -> stopBeingLeader.countDown()),
String.format("%s-leader-elector-main", lockIdentity));
thread.setDaemon(true);
thread.start();

Expand Down
Expand Up @@ -10,38 +10,29 @@
See the License for the specific language governing permissions and
limitations under the License.
*/

package io.kubernetes.client.extended.leaderelection;

import io.kubernetes.client.openapi.ApiException;

import java.net.HttpURLConnection;
import java.util.concurrent.atomic.AtomicReference;

/**
* Makes simulated {@link Lock} objects that behave as if they were backed by real API server.
*/
public class LockSmith
{
/** Makes simulated {@link Lock} objects that behave as if they were backed by real API server. */
public class LockSmith {
private AtomicReference<Resource> lockResourceRef = new AtomicReference<>();

public Lock makeLock(String identity)
{
public Lock makeLock(String identity) {
return new SimulatedLock(identity);
}

private class SimulatedLock implements Lock
{
private class SimulatedLock implements Lock {
private final String identity;

public SimulatedLock(String identity)
{
public SimulatedLock(String identity) {
this.identity = identity;
}

@Override
public LeaderElectionRecord get() throws ApiException
{
public LeaderElectionRecord get() throws ApiException {
if (lockResourceRef.get() == null) {
throw new ApiException("Record Not Found", HttpURLConnection.HTTP_NOT_FOUND, null, null);
}
Expand All @@ -50,14 +41,12 @@ public LeaderElectionRecord get() throws ApiException
}

@Override
public boolean create(LeaderElectionRecord record)
{
public boolean create(LeaderElectionRecord record) {
return lockResourceRef.compareAndSet(null, new Resource(record));
}

@Override
public boolean update(LeaderElectionRecord record)
{
public boolean update(LeaderElectionRecord record) {
Resource res = lockResourceRef.get();
if (res == null) {
return false;
Expand All @@ -68,31 +57,26 @@ public boolean update(LeaderElectionRecord record)
}

@Override
public String identity()
{
public String identity() {
return identity;
}

@Override
public String describe()
{
public String describe() {
return "simulated/lock";
}
}

private static class Resource
{
private static class Resource {
final int version;
final LeaderElectionRecord record;

public Resource(LeaderElectionRecord record)
{
public Resource(LeaderElectionRecord record) {
this.version = 0;
this.record = record;
}

public Resource(int version, LeaderElectionRecord record)
{
public Resource(int version, LeaderElectionRecord record) {
this.version = version;
this.record = record;
}
Expand Down

0 comments on commit 9276dc2

Please sign in to comment.