Skip to content

Commit

Permalink
Merge pull request #493 from FraunhoferISST/fix/trigger_dataconflict
Browse files Browse the repository at this point in the history
fix: potential information loss
  • Loading branch information
tom-rm-meyer-ISST authored Jul 12, 2024
2 parents a6cff52 + 70adb81 commit f501a73
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,14 @@

import java.io.Serializable;
import java.util.Date;
import java.util.Objects;

@Entity
@IdClass(ErpAdapterTriggerDataset.Key.class)
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
public class ErpAdapterTriggerDataset {

@Id
Expand Down Expand Up @@ -67,6 +67,20 @@ public String toString() {
'}';
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof ErpAdapterTriggerDataset dataset)) return false;
return Objects.equals(partnerBpnl, dataset.partnerBpnl) && Objects.equals(ownMaterialNumber,
dataset.ownMaterialNumber) && assetType == dataset.assetType &&
Objects.equals(directionCharacteristic, dataset.directionCharacteristic);
}

@Override
public int hashCode() {
return Objects.hash(partnerBpnl, ownMaterialNumber, assetType, directionCharacteristic);
}

@Getter
@Setter
@AllArgsConstructor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,22 @@ public class ErpAdapterTriggerService {

private final Runnable daemon = () -> {
log.info("Daemon thread started");
ArrayList<ErpAdapterTriggerDataset> updatedData = new ArrayList<>();
while (true) {
lock.lock();
try {
// keep the most recent information in case of conflict
for (ErpAdapterTriggerDataset dataset : datasets) {
for (ErpAdapterTriggerDataset updatedDataset : updatedData) {
if (dataset.equals(updatedDataset)) {
dataset.setLastPartnerRequest(
Math.max(dataset.getLastPartnerRequest(), updatedDataset.getLastPartnerRequest()));
dataset.setNextErpRequestScheduled(
Math.max(dataset.getNextErpRequestScheduled(), updatedDataset.getNextErpRequestScheduled()));
}
}
}
updatedData.clear();
repository.saveAll(datasets);
datasets.clear();
} finally {
Expand Down Expand Up @@ -103,6 +116,7 @@ public class ErpAdapterTriggerService {
// schedule next request
dataset.setNextErpRequestScheduled(now + erpAdapterConfiguration.getRefreshInterval());
dataset = repository.save(dataset);
updatedData.add(dataset);
log.info("Scheduled next erp adapter request: {}", dataset);
}
}
Expand Down

0 comments on commit f501a73

Please sign in to comment.