Skip to content

Commit 37bc323

Browse files
If applied, this commit will fix multilayer validation.
1 parent 091010c commit 37bc323

File tree

5 files changed

+34
-28
lines changed

5 files changed

+34
-28
lines changed

src/main/java/dlt/load/balancer/model/AbstractBalancerState.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,6 @@ protected AbstractBalancerState(Balancer balancer) {
2727
@Override
2828
public abstract void onEnter();
2929

30-
@Override
31-
public boolean isBalancing(){
32-
return true;
33-
}
34-
3530
protected abstract boolean isValidTransaction(Transaction transaction);
3631

3732
protected abstract void handleInvalidTransaction(Transaction trans);
@@ -61,9 +56,7 @@ public final void handle(Transaction transaction) {
6156
return;
6257
}
6358

64-
if (isLoopback
65-
&& (!transaction.is(TransactionType.LB_ENTRY)
66-
|| !transaction.is(TransactionType.LB_MULTI_REQUEST))){
59+
if (isLoopback && !this.canProcessLoopback(transaction)){
6760
return;
6861
}
6962

@@ -84,4 +77,9 @@ public void onTimeout() {
8477

8578
balancer.transitionTo(new IdleState(balancer));
8679
}
80+
81+
@Override
82+
public boolean canProcessLoopback(Transaction transaction) {
83+
return false;
84+
}
8785
}

src/main/java/dlt/load/balancer/model/AbstractProcessSendDeviceState.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,10 @@ protected void handleValidTransaction(Transaction transaction) {
4747
logger.log(Level.INFO, "Device selecionado para envio: {0}", deviceJson);
4848
logger.info("LB_REQUEST enviado com sucesso.");
4949
this.transiteToNextState();
50-
} catch (IOException | NoSuchElementException ex) {
50+
} catch (IOException ex) {
5151
logger.log(Level.SEVERE, null, ex);
52+
} catch (NoSuchElementException ex){
53+
logger.warning("AbstractProcessSendDeviceState - Device list is empty.");
5254
}
5355
this.updateQtyResendTransaction();
5456
}
@@ -77,4 +79,5 @@ private void updateQtyResendTransaction() {
7779
}
7880

7981
protected abstract Transaction buildTransaction(String deviceJson, String sender);
82+
8083
}

src/main/java/dlt/load/balancer/model/Balancer.java

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -169,20 +169,25 @@ public void receiveNewDevice(String deviceJSON) {
169169

170170
public void updateInternalStatus(Status transaction) {
171171
this.internalStatus = transaction;
172-
double currentDeviceCount = transaction.getLastLoad();
173-
Long maxDeviceCount = this.configs.getLoadLimit();
172+
173+
double currentDeviceLoad = transaction.getLastLoad();
174+
double deviceLoadLimit = this.configs.getLoadLimit().doubleValue();
175+
174176
boolean isMultiLayerBalancer = this.isMultiLayerBalancer();
177+
boolean isBalanced = currentDeviceLoad <= deviceLoadLimit;
175178

176-
if (this.state.isBalancing() || currentDeviceCount == maxDeviceCount){
177-
return;
178-
}
179-
180-
if (currentDeviceCount < maxDeviceCount) {
179+
if (isBalanced) {
181180
if (isMultiLayerBalancer) {
182181
this.messageMultiLayerSentCounter = 0;
183-
return;
182+
} else {
183+
this.messageSingleLayerSentCounter = 0;
184184
}
185-
this.messageSingleLayerSentCounter = 0;
185+
return;
186+
}
187+
188+
boolean isCurrentlyIdle = this.state instanceof IdleState;
189+
190+
if (!isCurrentlyIdle) {
186191
return;
187192
}
188193

@@ -197,8 +202,8 @@ public void updateInternalStatus(Status transaction) {
197202

198203
if (this.messageSingleLayerSentCounter < MAX_ATTEMPTS_SEND_START_BALANCE) {
199204
logger.log(Level.INFO, "Solicitação interna de balanceamento de camada unica nº {0} iniciada.", messageSingleLayerSentCounter);
200-
201-
startBalanceTransactionSignal = new Status(sourceIdentifier, targetGroup, true, currentDeviceCount, transaction.getAvgLoad(), false);
205+
206+
startBalanceTransactionSignal = new Status(sourceIdentifier, targetGroup, true, currentDeviceLoad, transaction.getAvgLoad(), false);
202207
this.sendTransaction(startBalanceTransactionSignal);
203208
this.transitionTo(new WaitingLBReplyState(this));
204209
this.messageSingleLayerSentCounter++;

src/main/java/dlt/load/balancer/model/BalancerState.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ public interface BalancerState {
1010

1111
void onEnter();
1212

13-
boolean isBalancing();
14-
1513
void handle(Transaction transaction);
1614

1715
void onTimeout();
16+
17+
boolean canProcessLoopback(Transaction transaction);
1818
}

src/main/java/dlt/load/balancer/model/IdleState.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,6 @@ public void onEnter() {
2424
this.balancer.cancelTimeout();
2525
}
2626

27-
@Override
28-
public boolean isBalancing() {
29-
return false;
30-
}
3127

3228
@Override
3329
protected boolean isValidTransaction(Transaction transaction) {
@@ -42,13 +38,12 @@ protected void handleInvalidTransaction(Transaction trans) {
4238

4339
@Override
4440
public void handleValidTransaction(Transaction transaction) {
45-
4641
if (!this.balancer.canReciveNewDevice()) {
4742
logger.info("This gateway is not avaliable to recive new devices.");
4843
return;
4944
}
5045

51-
boolean isMultiLayer = this.balancer.isMultiLayerBalancer();
46+
boolean isMultiLayer = transaction.isMultiLayerTransaction();
5247

5348
String transactionSender = transaction.getSource();
5449

@@ -59,5 +54,10 @@ public void handleValidTransaction(Transaction transaction) {
5954
this.balancer.sendTransaction(reply);
6055
this.balancer.transitionTo(new WaitingLBRequestState(balancer, isMultiLayer));
6156
}
57+
58+
@Override
59+
public boolean canProcessLoopback(Transaction transaction){
60+
return this.isValidTransaction(transaction);
61+
}
6262

6363
}

0 commit comments

Comments
 (0)