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

fix issue 1968 and correct visitor pattern code #1990

Closed
wants to merge 8 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion circuit-breaker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ public class DefaultCircuitBreaker implements CircuitBreaker {
int failureCount;
private final int failureThreshold;
private State state;
private final long futureTime = 1000 * 1000 * 1000 * 1000;
private final long futureTime = 1000 * 1000 * 1000 * 1000L; //use L to prevent overflow

/**
* Constructor to create an instance of Circuit Breaker.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public class DefaultCircuitBreaker implements CircuitBreaker {
int failureCount;
private final int failureThreshold;
private State state;
private final long futureTime = 1000 * 1000 * 1000 * 1000;
private final long futureTime = 1000 * 1000 * 1000 * 1000L; // use L to prevent overflow

/**
* Constructor to create an instance of Circuit Breaker.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,14 @@ public DelayedRemoteService() {
*/
@Override
public String call() throws RemoteServiceException {
var currentTime = System.nanoTime();
long currentTime = System.nanoTime();
//Since currentTime and serverStartTime are both in nanoseconds, we convert it to
//seconds by diving by 10e9 and ensure floating point division by multiplying it
//with 1.0 first. We then check if it is greater or less than specified delay and then
//send the reply
if ((currentTime - serverStartTime) * 1.0 / (1000 * 1000 * 1000) < delay) {
//Can use Thread.sleep() here to block and simulate a hung server
if ((currentTime - serverStartTime) * 1.0 / (1000 * 1000 * 1000L) < delay) {
//Can use Thread.sleep() here to block and simulate a hung server,
// specify by L to prevent overflow.
throw new RemoteServiceException("Delayed service is down");
}
return "Delayed service is working";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,12 +64,12 @@ public void setupCircuitBreakers() {
//Set the circuit Breaker parameters
delayedServiceCircuitBreaker = new DefaultCircuitBreaker(delayedService, 3000,
FAILURE_THRESHOLD,
RETRY_PERIOD * 1000 * 1000 * 1000);
RETRY_PERIOD * 1000 * 1000 * 1000L); //specify by L to prevent overflow.

var quickService = new QuickRemoteService();
//Set the circuit Breaker parameters
quickServiceCircuitBreaker = new DefaultCircuitBreaker(quickService, 3000, FAILURE_THRESHOLD,
RETRY_PERIOD * 1000 * 1000 * 1000);
RETRY_PERIOD * 1000 * 1000 * 1000L); //specify by L to prevent overflow.

monitoringService = new MonitoringService(delayedServiceCircuitBreaker,
quickServiceCircuitBreaker);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,9 @@ void testEvaluateState() {
assertEquals(circuitBreaker.getState(), "HALF_OPEN");
//Since failureCount>failureThreshold, and lastFailureTime is much lesser current time,
//state should be open
circuitBreaker.lastFailureTime = System.nanoTime() - 1000 * 1000 * 1000 * 1000;
circuitBreaker.lastFailureTime = System.nanoTime() - 1000 * 1000 * 1000 * 1000L; // specify by L to prevent overflow.
circuitBreaker.evaluateState();
assertEquals(circuitBreaker.getState(), "OPEN");
assertEquals(circuitBreaker.getState(), "HALF_OPEN");
//Now set it back again to closed to test idempotency
circuitBreaker.failureCount = 0;
circuitBreaker.evaluateState();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ void testDefaultConstructor() throws RemoteServiceException {
*/
@Test
public void testParameterizedConstructor() throws RemoteServiceException {
var obj = new DelayedRemoteService(System.nanoTime()-2000*1000*1000,1);
var obj = new DelayedRemoteService(System.nanoTime()-2000 * 1000 * 1000L,1); //specify by L to prevent overflow.
assertEquals("Delayed service is working",obj.call());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ void testLocalResponse() {

@Test
void testDelayedRemoteResponseSuccess() {
var delayedService = new DelayedRemoteService(System.nanoTime()-2*1000*1000*1000, 2);
var delayedService = new DelayedRemoteService(System.nanoTime()-2 * 1000 * 1000 * 1000L, 2); //specify by L to prevent overflow.
var delayedServiceCircuitBreaker = new DefaultCircuitBreaker(delayedService, 3000,
1,
2 * 1000 * 1000 * 1000);
Expand All @@ -58,7 +58,7 @@ void testDelayedRemoteResponseFailure() {
var delayedService = new DelayedRemoteService(System.nanoTime(), 2);
var delayedServiceCircuitBreaker = new DefaultCircuitBreaker(delayedService, 3000,
1,
2 * 1000 * 1000 * 1000);
2 * 1000 * 1000 * 1000L); //specify by L to prevent overflow.
var monitoringService = new MonitoringService(delayedServiceCircuitBreaker,null);
//Set time as current time as initially server fails
var response = monitoringService.delayedServiceResponse();
Expand All @@ -70,7 +70,7 @@ void testQuickRemoteServiceResponse() {
var delayedService = new QuickRemoteService();
var delayedServiceCircuitBreaker = new DefaultCircuitBreaker(delayedService, 3000,
1,
2 * 1000 * 1000 * 1000);
2 * 1000 * 1000 * 1000L); // specify by L to prevent overflow.
var monitoringService = new MonitoringService(delayedServiceCircuitBreaker,null);
//Set time as current time as initially server fails
var response = monitoringService.delayedServiceResponse();
Expand Down
5 changes: 4 additions & 1 deletion visitor/src/main/java/com/iluwatar/visitor/Commander.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,12 @@ public Commander(Unit... children) {
super(children);
}

/**
* Accept a Visitor.
*/
@Override
public void accept(UnitVisitor visitor) {
visitor.visitCommander(this);
visitor.visit(this);
super.accept(visitor);
}

Expand Down
15 changes: 12 additions & 3 deletions visitor/src/main/java/com/iluwatar/visitor/CommanderVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,18 +31,27 @@
@Slf4j
public class CommanderVisitor implements UnitVisitor {

/**
* Soldier Visitor method.
*/
@Override
public void visitSoldier(Soldier soldier) {
public void visit(Soldier soldier) {
// Do nothing
}

/**
* Sergeant Visitor method.
*/
@Override
public void visitSergeant(Sergeant sergeant) {
public void visit(Sergeant sergeant) {
// Do nothing
}

/**
* Commander Visitor method.
*/
@Override
public void visitCommander(Commander commander) {
public void visit(Commander commander) {
LOGGER.info("Good to see you {}", commander);
}
}
5 changes: 4 additions & 1 deletion visitor/src/main/java/com/iluwatar/visitor/Sergeant.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,12 @@ public Sergeant(Unit... children) {
super(children);
}

/**
* Accept a visitor.
*/
@Override
public void accept(UnitVisitor visitor) {
visitor.visitSergeant(this);
visitor.visit(this);
super.accept(visitor);
}

Expand Down
15 changes: 12 additions & 3 deletions visitor/src/main/java/com/iluwatar/visitor/SergeantVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,18 +31,27 @@
@Slf4j
public class SergeantVisitor implements UnitVisitor {

/**
* Soldier Visitor method.
*/
@Override
public void visitSoldier(Soldier soldier) {
public void visit(Soldier soldier) {
// Do nothing
}

/**
* Sergeant Visitor method.
*/
@Override
public void visitSergeant(Sergeant sergeant) {
public void visit(Sergeant sergeant) {
LOGGER.info("Hello {}", sergeant);
}

/**
* Commander Visitor method.
*/
@Override
public void visitCommander(Commander commander) {
public void visit(Commander commander) {
// Do nothing
}
}
5 changes: 4 additions & 1 deletion visitor/src/main/java/com/iluwatar/visitor/Soldier.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,12 @@ public Soldier(Unit... children) {
super(children);
}

/**
* Accept a visitor.
*/
@Override
public void accept(UnitVisitor visitor) {
visitor.visitSoldier(this);
visitor.visit(this);
super.accept(visitor);
}

Expand Down
15 changes: 12 additions & 3 deletions visitor/src/main/java/com/iluwatar/visitor/SoldierVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,18 +31,27 @@
@Slf4j
public class SoldierVisitor implements UnitVisitor {

/**
* Soldier visitor method.
*/
@Override
public void visitSoldier(Soldier soldier) {
public void visit(Soldier soldier) {
LOGGER.info("Greetings {}", soldier);
}

/**
* Sergeant visitor method.
*/
@Override
public void visitSergeant(Sergeant sergeant) {
public void visit(Sergeant sergeant) {
// Do nothing
}

/**
* Commander visitor method.
*/
@Override
public void visitCommander(Commander commander) {
public void visit(Commander commander) {
// Do nothing
}
}
15 changes: 12 additions & 3 deletions visitor/src/main/java/com/iluwatar/visitor/UnitVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,19 @@
*/
public interface UnitVisitor {

void visitSoldier(Soldier soldier);
/**
* Soldier visit method.
*/
void visit(Soldier soldier);

void visitSergeant(Sergeant sergeant);
/**
* Sergeant visit method.
*/
void visit(Sergeant sergeant);

void visitCommander(Commander commander);
/**
* Commander visit method.
*/
void visit(Commander commander);

}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public CommanderTest() {

@Override
void verifyVisit(Commander unit, UnitVisitor mockedVisitor) {
verify(mockedVisitor).visitCommander(eq(unit));
verify(mockedVisitor).visit(eq(unit));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public SergeantTest() {

@Override
void verifyVisit(Sergeant unit, UnitVisitor mockedVisitor) {
verify(mockedVisitor).visitSergeant(eq(unit));
verify(mockedVisitor).visit(eq(unit));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public SoldierTest() {

@Override
void verifyVisit(Soldier unit, UnitVisitor mockedVisitor) {
verify(mockedVisitor).visitSoldier(eq(unit));
verify(mockedVisitor).visit(eq(unit));
}

}
6 changes: 3 additions & 3 deletions visitor/src/test/java/com/iluwatar/visitor/VisitorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ public VisitorTest(

@Test
void testVisitCommander() {
this.visitor.visitCommander(new Commander());
this.visitor.visit(new Commander());
if (this.commanderResponse.isPresent()) {
assertEquals(this.commanderResponse.get(), appender.getLastMessage());
assertEquals(1, appender.getLogSize());
Expand All @@ -106,7 +106,7 @@ void testVisitCommander() {

@Test
void testVisitSergeant() {
this.visitor.visitSergeant(new Sergeant());
this.visitor.visit(new Sergeant());
if (this.sergeantResponse.isPresent()) {
assertEquals(this.sergeantResponse.get(), appender.getLastMessage());
assertEquals(1, appender.getLogSize());
Expand All @@ -115,7 +115,7 @@ void testVisitSergeant() {

@Test
void testVisitSoldier() {
this.visitor.visitSoldier(new Soldier());
this.visitor.visit(new Soldier());
if (this.soldierResponse.isPresent()) {
assertEquals(this.soldierResponse.get(), appender.getLastMessage());
assertEquals(1, appender.getLogSize());
Expand Down