Skip to content

Commit afb36aa

Browse files
authored
feature: persist transactional flag (#389)
1 parent d9a4bcd commit afb36aa

File tree

13 files changed

+87
-28
lines changed

13 files changed

+87
-28
lines changed

cloud/flamingock-cloud/src/main/java/io/flamingock/cloud/audit/HtttpAuditWriter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,12 +97,13 @@ private AuditEntryRequest buildRequest(AuditEntry auditEntry) {
9797
auditEntry.getExecutionMillis(),
9898
auditEntry.getExecutionHostname(),
9999
auditEntry.getMetadata(),
100-
auditEntry.getSystemChange(),
100+
auditEntry.getSystemChange() != null ? auditEntry.getSystemChange() : false,
101101
auditEntry.getErrorTrace(),
102102
auditEntry.getTxType(),
103103
auditEntry.getTargetSystemId(),
104104
auditEntry.getOrder(),
105-
auditEntry.getRecoveryStrategy()
105+
auditEntry.getRecoveryStrategy(),
106+
auditEntry.getTransactionFlag()
106107
);
107108
}
108109

cloud/flamingock-cloud/src/test/java/io/flamingock/cloud/audit/HttpAuditWriterMapperTest.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,13 @@ void shouldIncludeTxTypeInRequest() {
6161
auditEntry.getExecutionMillis(),
6262
auditEntry.getExecutionHostname(),
6363
auditEntry.getMetadata(),
64-
auditEntry.getSystemChange(),
64+
auditEntry.getSystemChange() != null ? auditEntry.getSystemChange() : false,
6565
auditEntry.getErrorTrace(),
6666
auditEntry.getTxType(),
6767
auditEntry.getTargetSystemId(),
6868
auditEntry.getOrder(),
69-
auditEntry.getRecoveryStrategy()
69+
auditEntry.getRecoveryStrategy(),
70+
auditEntry.getTransactionFlag()
7071
);
7172

7273
// Then
@@ -91,12 +92,13 @@ void shouldHandleNullTxType() {
9192
auditEntry.getExecutionMillis(),
9293
auditEntry.getExecutionHostname(),
9394
auditEntry.getMetadata(),
94-
auditEntry.getSystemChange(),
95+
auditEntry.getSystemChange() != null ? auditEntry.getSystemChange() : false,
9596
auditEntry.getErrorTrace(),
9697
auditEntry.getTxType(),
9798
auditEntry.getTargetSystemId(),
9899
auditEntry.getOrder(),
99-
auditEntry.getRecoveryStrategy()
100+
auditEntry.getRecoveryStrategy(),
101+
auditEntry.getTransactionFlag()
100102
);
101103

102104
// Then

core/flamingock-core-commons/src/main/java/io/flamingock/internal/common/cloud/audit/AuditEntryRequest.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ public enum Status {
6767

6868
protected Boolean systemChange;//TODO not in server
6969

70+
private final Boolean transactionFlag;
71+
7072
public AuditEntryRequest(String stageId,
7173
String taskId,
7274
String author,
@@ -83,7 +85,8 @@ public AuditEntryRequest(String stageId,
8385
AuditTxType txType,
8486
String targetSystemId,
8587
String order,
86-
RecoveryStrategy recoveryStrategy) {
88+
RecoveryStrategy recoveryStrategy,
89+
Boolean transactionFlag) {
8790
this.stageId = stageId;
8891
this.taskId = taskId;
8992
this.author = author;
@@ -100,6 +103,7 @@ public AuditEntryRequest(String stageId,
100103
this.targetSystemId = targetSystemId;
101104
this.order = order;
102105
this.recoveryStrategy = recoveryStrategy;
106+
this.transactionFlag = transactionFlag;
103107

104108
this.systemChange = systemChange;
105109
}
@@ -172,6 +176,10 @@ public RecoveryStrategy getRecoveryStrategy() {
172176
return recoveryStrategy;
173177
}
174178

179+
public Boolean getTransactionFlag() {
180+
return transactionFlag;
181+
}
182+
175183

176184
}
177185

core/flamingock-core-commons/src/main/java/io/flamingock/internal/common/core/audit/AuditEntry.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public class AuditEntry implements Comparable<AuditEntry> {
4141
private final String targetSystemId;
4242
private final String order;
4343
private final RecoveryStrategy recoveryStrategy;
44+
private final Boolean transactionFlag;
4445

4546
public AuditEntry(String executionId,
4647
String stageId,
@@ -59,7 +60,8 @@ public AuditEntry(String executionId,
5960
AuditTxType txType,
6061
String targetSystemId,
6162
String order,
62-
RecoveryStrategy recoveryStrategy) {
63+
RecoveryStrategy recoveryStrategy,
64+
Boolean transactionFlag) {
6365
this.executionId = executionId;
6466
this.stageId = stageId;
6567
this.taskId = taskId;
@@ -78,6 +80,7 @@ public AuditEntry(String executionId,
7880
this.order = order;
7981
this.systemChange = systemChange;
8082
this.recoveryStrategy = recoveryStrategy != null ? recoveryStrategy : RecoveryStrategy.MANUAL_INTERVENTION;
83+
this.transactionFlag = transactionFlag;
8184
}
8285

8386
/**
@@ -100,8 +103,8 @@ public AuditEntry(String executionId,
100103
boolean systemChange,
101104
String errorTrace,
102105
AuditTxType txType) {
103-
this(executionId, stageId, taskId, author, timestamp, state, type, className, methodName,
104-
executionMillis, executionHostname, metadata, systemChange, errorTrace, txType, null, null, RecoveryStrategy.MANUAL_INTERVENTION);
106+
this(executionId, stageId, taskId, author, timestamp, state, type, className, methodName,
107+
executionMillis, executionHostname, metadata, systemChange, errorTrace, txType, null, null, RecoveryStrategy.MANUAL_INTERVENTION, null);
105108
}
106109

107110
/**
@@ -123,8 +126,8 @@ public AuditEntry(String executionId,
123126
Object metadata,
124127
boolean systemChange,
125128
String errorTrace) {
126-
this(executionId, stageId, taskId, author, timestamp, state, type, className, methodName,
127-
executionMillis, executionHostname, metadata, systemChange, errorTrace, null, null, null, RecoveryStrategy.MANUAL_INTERVENTION);
129+
this(executionId, stageId, taskId, author, timestamp, state, type, className, methodName,
130+
executionMillis, executionHostname, metadata, systemChange, errorTrace, null, null, null, RecoveryStrategy.MANUAL_INTERVENTION, null);
128131
}
129132

130133
public static AuditEntry getMostRelevant(AuditEntry currentEntry, AuditEntry newEntry) {
@@ -210,6 +213,10 @@ public RecoveryStrategy getRecoveryStrategy() {
210213
return recoveryStrategy;
211214
}
212215

216+
public Boolean getTransactionFlag() {
217+
return transactionFlag;
218+
}
219+
213220

214221
private boolean shouldBeReplacedBy(AuditEntry newEntry) {
215222
if(this.getState().equals(newEntry.getState())) {
@@ -242,7 +249,8 @@ public AuditEntry copyWithNewIdAndStageId(String id, String stageId) {
242249
getTxType(),
243250
getTargetSystemId(),
244251
getOrder(),
245-
getRecoveryStrategy()
252+
getRecoveryStrategy(),
253+
getTransactionFlag()
246254
);
247255
}
248256

core/flamingock-core/src/main/java/io/flamingock/internal/core/builder/ops/OpsClient.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,8 @@ public FixResult fixAuditIssue(String changeId, Resolution resolution) {
101101
currentEntry.getTxType(),
102102
currentEntry.getTargetSystemId(),
103103
currentEntry.getOrder(),
104-
currentEntry.getRecoveryStrategy()
104+
currentEntry.getRecoveryStrategy(),
105+
currentEntry.getTransactionFlag()
105106
);
106107
auditPersistence.writeEntry(fixedAuditEntry);
107108
return FixResult.APPLIED;

core/flamingock-core/src/main/java/io/flamingock/internal/core/store/audit/domain/AuditContextBundle.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,8 @@ public AuditEntry toAuditEntry() {
108108
getAuditTxType(),
109109
getTargetSystemId(),
110110
loadedTask.getOrder().orElseThrow(() -> new IllegalStateException("Order is required but not present")),
111-
loadedTask.getRecovery().getStrategy()
111+
loadedTask.getRecovery().getStrategy(),
112+
loadedTask.isTransactional()
112113
);
113114
}
114115

core/importer/flamingock-importer-dynamodb-tests/src/test/java/io/flamingock/importer/dynamodb/dynamodb/DynamoDBAuditEntryEntity.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public class DynamoDBAuditEntryEntity implements Comparable<DynamoDBAuditEntryEn
4848
private String targetSystemId;
4949
private String order;
5050
private String recoveryStrategy;
51+
private Boolean transactionFlag;
5152

5253
public static DynamoDBAuditEntryEntity fromAuditEntry(AuditEntry auditEntry) {
5354
return new DynamoDBAuditEntryEntity(auditEntry);
@@ -73,6 +74,7 @@ public DynamoDBAuditEntryEntity(AuditEntry auditEntry) {
7374
this.order = auditEntry.getOrder();
7475
this.systemChange = auditEntry.getSystemChange();
7576
this.recoveryStrategy = auditEntry.getRecoveryStrategy().name();
77+
this.transactionFlag = auditEntry.getTransactionFlag();
7678
}
7779

7880
public DynamoDBAuditEntryEntity() {}
@@ -253,6 +255,15 @@ public void setRecoveryStrategy(String recoveryStrategy) {
253255
this.recoveryStrategy = recoveryStrategy;
254256
}
255257

258+
@DynamoDbAttribute(AuditEntryFieldConstants.KEY_TRANSACTION_FLAG)
259+
public Boolean getTransactionFlag() {
260+
return transactionFlag;
261+
}
262+
263+
public void setTransactionFlag(Boolean transactionFlag) {
264+
this.transactionFlag = transactionFlag;
265+
}
266+
256267
@Override
257268
public int compareTo(DynamoDBAuditEntryEntity other) {
258269
if (other == null) {
@@ -290,7 +301,8 @@ public AuditEntry toAuditEntry() {
290301
txType,
291302
targetSystemId,
292303
order,
293-
recoveryStrategy != null ? RecoveryStrategy.valueOf(recoveryStrategy) : RecoveryStrategy.MANUAL_INTERVENTION
304+
recoveryStrategy != null ? RecoveryStrategy.valueOf(recoveryStrategy) : RecoveryStrategy.MANUAL_INTERVENTION,
305+
transactionFlag
294306
);
295307
}
296308
}

utils/couchbase-util/src/main/java/io/flamingock/internal/common/couchbase/CouchbaseAuditMapper.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_METADATA;
3434
import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_ORDER;
3535
import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_RECOVERY_STRATEGY;
36+
import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_TRANSACTION_FLAG;
3637
import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_TX_TYPE;
3738
import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_STATE;
3839
import static io.flamingock.internal.util.constants.AuditEntryFieldConstants.KEY_SYSTEM_CHANGE;
@@ -62,6 +63,7 @@ public JsonObject toDocument(AuditEntry auditEntry) {
6263
CouchbaseUtils.addFieldToDocument(document, KEY_TARGET_SYSTEM_ID, auditEntry.getTargetSystemId());
6364
CouchbaseUtils.addFieldToDocument(document, KEY_ORDER, auditEntry.getOrder());
6465
CouchbaseUtils.addFieldToDocument(document, KEY_RECOVERY_STRATEGY, auditEntry.getRecoveryStrategy().name());
66+
CouchbaseUtils.addFieldToDocument(document, KEY_TRANSACTION_FLAG, auditEntry.getTransactionFlag());
6567
return document;
6668
}
6769

@@ -96,7 +98,8 @@ public AuditEntry fromDocument(JsonObject jsonObject) {
9698
jsonObject.getString(KEY_ORDER),
9799
jsonObject.getString(KEY_RECOVERY_STRATEGY) != null
98100
? RecoveryStrategy.valueOf(jsonObject.getString(KEY_RECOVERY_STRATEGY))
99-
: RecoveryStrategy.MANUAL_INTERVENTION
101+
: RecoveryStrategy.MANUAL_INTERVENTION,
102+
jsonObject.getBoolean(KEY_TRANSACTION_FLAG)
100103
);
101104
}
102105
}

utils/dynamodb-util/src/main/java/io/flamingock/internal/util/dynamodb/entities/AuditEntryEntity.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public class AuditEntryEntity implements Comparable<AuditEntryEntity> {
5050
private String targetSystemId;
5151
private String order;
5252
private String recoveryStrategy;
53+
private Boolean transactionFlag;
5354

5455
public static AuditEntryEntity fromAuditEntry(AuditEntry auditEntry) {
5556
return new AuditEntryEntity(auditEntry);
@@ -75,6 +76,7 @@ public AuditEntryEntity(AuditEntry auditEntry) {
7576
this.order = auditEntry.getOrder();
7677
this.recoveryStrategy = auditEntry.getRecoveryStrategy().name();
7778
this.systemChange = auditEntry.getSystemChange();
79+
this.transactionFlag = auditEntry.getTransactionFlag();
7880
}
7981

8082
public AuditEntryEntity() {
@@ -256,6 +258,15 @@ public void setRecoveryStrategy(String recoveryStrategy) {
256258
this.recoveryStrategy = recoveryStrategy;
257259
}
258260

261+
@DynamoDbAttribute(AuditEntryFieldConstants.KEY_TRANSACTION_FLAG)
262+
public Boolean getTransactionFlag() {
263+
return transactionFlag;
264+
}
265+
266+
public void setTransactionFlag(Boolean transactionFlag) {
267+
this.transactionFlag = transactionFlag;
268+
}
269+
259270
@Override
260271
public int compareTo(AuditEntryEntity other) {
261272
if (other == null) {
@@ -299,7 +310,8 @@ public AuditEntry toAuditEntry() {
299310
txType,
300311
targetSystemId,
301312
order,
302-
recoveryStrategy != null ? RecoveryStrategy.valueOf(recoveryStrategy) : RecoveryStrategy.MANUAL_INTERVENTION
313+
recoveryStrategy != null ? RecoveryStrategy.valueOf(recoveryStrategy) : RecoveryStrategy.MANUAL_INTERVENTION,
314+
transactionFlag
303315
);
304316
}
305317
}

utils/general-util/src/main/java/io/flamingock/internal/util/constants/AuditEntryFieldConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,5 @@ public class AuditEntryFieldConstants {
3434
public static final String KEY_TARGET_SYSTEM_ID = "targetSystemId";
3535
public static final String KEY_ORDER = "order";
3636
public static final String KEY_RECOVERY_STRATEGY = "recoveryStrategy";
37+
public static final String KEY_TRANSACTION_FLAG = "transactionFlag";
3738
}

0 commit comments

Comments
 (0)