Skip to content

Commit 85ff44e

Browse files
If applied, this commit will recovery gateway from race condition when it lost.
1 parent dae539d commit 85ff44e

File tree

4 files changed

+25
-13
lines changed

4 files changed

+25
-13
lines changed

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

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@ public abstract class AbstractProcessSendDeviceState extends AbstractBalancerSta
2121
private Long qtyMaxResendTansaction;
2222
private Device deviceToRemove;
2323
private BalancerState waitingLBDeviceRecivedReplyState;
24+
private final String overloadedGatewaySource;
2425

25-
public AbstractProcessSendDeviceState(Balancer balancer) {
26+
public AbstractProcessSendDeviceState(Balancer balancer, String gatewaySource) {
2627
super(balancer);
28+
this.overloadedGatewaySource = gatewaySource;
2729
this.qtyMaxResendTansaction = this.balancer.qtyMaxTimeResendTransaction();
2830
}
2931

@@ -35,20 +37,30 @@ public void onEnter() {
3537

3638
@Override
3739
protected void handleValidTransaction(Transaction transaction) {
38-
if(transaction == null){
40+
if (transaction == null) {
3941
logger.warning("VIXE");
4042
return;
4143
}
42-
if (!(transaction instanceof TargetedTransaction)){
44+
if (!(transaction instanceof TargetedTransaction)) {
4345
logger.log(Level.WARNING, "Transaction {0} recived but is not a targeted transaction", transaction.getType());
4446
return;
4547
}
46-
String transTarget = ((TargetedTransaction) transaction).getTarget();
47-
if (!this.source.equals(transTarget)){
48+
TargetedTransaction targetedTransaction = ((TargetedTransaction) transaction);
49+
50+
String transSource = targetedTransaction.getSource();
51+
if (!transSource.equals(this.overloadedGatewaySource)) {
4852
return;
4953
}
50-
logger.info("LB_*RESPONSE recebido com target correto. Iniciando envio de LB_*REQUEST.");
5154

55+
if (!targetedTransaction.isSameTarget(this.source)) {
56+
logger.log(Level.INFO, "O gateway {1} escolheu outro alvo ({2}). Retornando ao estado Idle.",
57+
new Object[]{this.overloadedGatewaySource, targetedTransaction.getTarget()});
58+
59+
this.balancer.transitionTo(new IdleState(this.balancer));
60+
return;
61+
}
62+
logger.info("LB_*RESPONSE recebido com target correto. Iniciando envio de LB_*REQUEST.");
63+
5264
Transaction transactionRequest;
5365
String sender = transaction.getSource();
5466
try {
@@ -90,7 +102,7 @@ private void updateQtyResendTransaction() {
90102
}
91103

92104
protected abstract Transaction buildTransaction(String deviceJson, String sender);
93-
105+
94106
protected abstract void handlePostSendTransaction();
95107

96108
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ public void updateInternalStatus(Status transaction) {
206206

207207
startBalanceTransactionSignal = new Status(sourceIdentifier, targetGroup, true, currentDeviceLoad, transaction.getAvgLoad(), false);
208208
this.sendTransaction(startBalanceTransactionSignal);
209-
this.transitionTo(new ProcessSingleLayerSendDeviceState(this));
209+
this.transitionTo(new ProcessSingleLayerSendDeviceState(this, transaction.getSource()));
210210
this.messageSingleLayerSentCounter++;
211211
return;
212212
}
@@ -220,7 +220,7 @@ public void updateInternalStatus(Status transaction) {
220220

221221
startBalanceTransactionSignal = new LBMultiRequest(sourceIdentifier, targetGroup);
222222
this.sendTransaction(startBalanceTransactionSignal);
223-
this.transitionTo(new ProcessMultiLayerSendDeviceState(this));
223+
this.transitionTo(new ProcessMultiLayerSendDeviceState(this, transaction.getSource()));
224224
this.messageMultiLayerSentCounter++;
225225
}
226226

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
public class ProcessMultiLayerSendDeviceState extends AbstractProcessSendDeviceState {
1414
private static final Logger logger = Logger.getLogger(ProcessMultiLayerSendDeviceState.class.getName());
1515

16-
public ProcessMultiLayerSendDeviceState(Balancer balancer) {
17-
super(balancer);
16+
public ProcessMultiLayerSendDeviceState(Balancer balancer, String gatewaySource) {
17+
super(balancer, gatewaySource);
1818
}
1919

2020
@Override

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ public class ProcessSingleLayerSendDeviceState extends AbstractProcessSendDevice
1414

1515
private static final Logger logger = Logger.getLogger(ProcessMultiLayerSendDeviceState.class.getName());
1616

17-
public ProcessSingleLayerSendDeviceState(Balancer balancer) {
18-
super(balancer);
17+
public ProcessSingleLayerSendDeviceState(Balancer balancer, String gatewaySource) {
18+
super(balancer, gatewaySource);
1919
}
2020

2121
@Override

0 commit comments

Comments
 (0)