Skip to content

Commit a430dca

Browse files
committed
wip
1 parent dc50673 commit a430dca

File tree

5 files changed

+411
-30
lines changed

5 files changed

+411
-30
lines changed

data-migrator/core/src/main/java/io/camunda/migration/data/config/InterceptorConfiguration.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import io.camunda.migration.data.impl.interceptor.PrimitiveVariableTransformer;
2424
import io.camunda.migration.data.impl.interceptor.SpinJsonVariableTransformer;
2525
import io.camunda.migration.data.impl.interceptor.SpinXmlVariableTransformer;
26+
import io.camunda.migration.data.impl.interceptor.history.entity.AuditLogTransformer;
2627
import io.camunda.migration.data.impl.interceptor.history.entity.DecisionDefinitionTransformer;
2728
import io.camunda.migration.data.impl.interceptor.history.entity.DecisionInstanceTransformer;
2829
import io.camunda.migration.data.impl.interceptor.history.entity.DecisionRequirementsDefinitionTransformer;
@@ -367,4 +368,9 @@ public UserTaskTransformer userTaskTransformer() {
367368
public VariableTransformer variableTransformer() {
368369
return new VariableTransformer();
369370
}
371+
372+
@Bean
373+
public AuditLogTransformer auditLogTransformer() {
374+
return new AuditLogTransformer();
375+
}
370376
}

data-migrator/core/src/main/java/io/camunda/migration/data/impl/history/AuditLogMigrator.java

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,28 @@
88
package io.camunda.migration.data.impl.history;
99

1010
import static io.camunda.migration.data.MigratorMode.RETRY_SKIPPED;
11-
import static io.camunda.migration.data.impl.logging.HistoryMigratorLogs.SKIP_REASON_BELONGS_TO_SKIPPED_TASK;
1211
import static io.camunda.migration.data.constants.MigratorConstants.C7_HISTORY_PARTITION_ID;
12+
import static io.camunda.migration.data.impl.logging.HistoryMigratorLogs.SKIP_REASON_BELONGS_TO_SKIPPED_TASK;
1313
import static io.camunda.migration.data.impl.logging.HistoryMigratorLogs.SKIP_REASON_MISSING_PROCESS_DEFINITION;
1414
import static io.camunda.migration.data.impl.logging.HistoryMigratorLogs.SKIP_REASON_MISSING_PROCESS_INSTANCE;
1515
import static io.camunda.migration.data.impl.logging.HistoryMigratorLogs.SKIP_REASON_MISSING_ROOT_PROCESS_INSTANCE;
1616
import static io.camunda.migration.data.impl.persistence.IdKeyMapper.TYPE.HISTORY_AUDIT_LOG;
1717
import static io.camunda.migration.data.impl.persistence.IdKeyMapper.TYPE.HISTORY_PROCESS_DEFINITION;
1818
import static io.camunda.migration.data.impl.persistence.IdKeyMapper.TYPE.HISTORY_PROCESS_INSTANCE;
1919
import static io.camunda.migration.data.impl.persistence.IdKeyMapper.TYPE.HISTORY_USER_TASK;
20+
import static io.camunda.migration.data.impl.util.ConverterUtil.convertDate;
2021
import static io.camunda.migration.data.impl.util.ConverterUtil.getNextKey;
2122

2223
import io.camunda.db.rdbms.write.domain.AuditLogDbModel;
2324
import io.camunda.migration.data.exception.EntityInterceptorException;
2425
import io.camunda.migration.data.impl.logging.HistoryMigratorLogs;
2526
import io.camunda.migration.data.interceptor.property.EntityConversionContext;
2627
import io.camunda.search.entities.ProcessInstanceEntity;
28+
import java.time.OffsetDateTime;
29+
import java.time.Period;
30+
import java.util.Date;
2731
import org.camunda.bpm.engine.history.UserOperationLogEntry;
32+
import org.camunda.bpm.engine.impl.util.ClockUtil;
2833
import org.springframework.stereotype.Service;
2934

3035
/**
@@ -82,6 +87,8 @@ public void migrateOne(UserOperationLogEntry c7AuditLog) {
8287
EntityConversionContext<?, ?> context = createEntityConversionContext(
8388
c7AuditLog, UserOperationLogEntry.class, auditLogDbModelBuilder);
8489

90+
setHistoryCleanupDate(c7AuditLog, auditLogDbModelBuilder);
91+
8592
validateDependenciesAndInsert(c7AuditLog, context, c7AuditLogId);
8693
} catch (EntityInterceptorException e) {
8794
handleInterceptorException(c7AuditLogId, HISTORY_AUDIT_LOG, c7AuditLog.getTimestamp(), e);
@@ -200,4 +207,34 @@ protected AuditLogDbModel convertAuditLog(EntityConversionContext<?, ?> context)
200207
AuditLogDbModel.Builder builder = (AuditLogDbModel.Builder) entityConversionContext.getC8DbModelBuilder();
201208
return builder.build();
202209
}
210+
211+
protected OffsetDateTime calculateHistoryCleanupDate(OffsetDateTime endTime, Date c7RemovalTime) {
212+
if (c7RemovalTime != null) {
213+
return convertDate(c7RemovalTime);
214+
}
215+
216+
Period ttl = getAutoCancelTtl();
217+
if (ttl == null || ttl.isZero()) {
218+
return null;
219+
}
220+
return endTime.plus(ttl);
221+
}
222+
223+
protected OffsetDateTime calculateEndDate(Date c7EndDate) {
224+
if (c7EndDate == null) {
225+
return convertDate(ClockUtil.now());
226+
}
227+
return convertDate(c7EndDate);
228+
}
229+
230+
protected void setHistoryCleanupDate(UserOperationLogEntry c7AuditLog,
231+
AuditLogDbModel.Builder auditLogDbModelBuilder) {
232+
Date c7EndTime = c7AuditLog.getTimestamp();
233+
var c8EndTime = calculateEndDate(c7EndTime);
234+
var c8HistoryCleanupDate = calculateHistoryCleanupDate(c8EndTime, c7AuditLog.getRemovalTime());
235+
236+
auditLogDbModelBuilder
237+
.historyCleanupDate(c8HistoryCleanupDate)
238+
.timestamp(c8EndTime);
239+
}
203240
}

data-migrator/core/src/main/java/io/camunda/migration/data/impl/interceptor/history/entity/AuditLogTransformer.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
package io.camunda.migration.data.impl.interceptor.history.entity;
99

1010
import static io.camunda.migration.data.constants.MigratorConstants.C7_HISTORY_PARTITION_ID;
11+
import static io.camunda.migration.data.constants.MigratorConstants.C8_DEFAULT_TENANT;
1112
import static io.camunda.migration.data.impl.util.ConverterUtil.convertDate;
13+
import static io.camunda.migration.data.impl.util.ConverterUtil.getTenantId;
1214
import static io.camunda.migration.data.impl.util.ConverterUtil.prefixDefinitionId;
1315

1416
import io.camunda.db.rdbms.write.domain.AuditLogDbModel;
@@ -20,6 +22,7 @@
2022
import java.util.Set;
2123
import org.camunda.bpm.engine.EntityTypes;
2224
import org.camunda.bpm.engine.history.UserOperationLogEntry;
25+
import org.jspecify.annotations.NonNull;
2326
import org.springframework.core.annotation.Order;
2427
import org.springframework.stereotype.Component;
2528

@@ -49,22 +52,31 @@ public void execute(EntityConversionContext<?, ?> context) {
4952
throw new EntityInterceptorException("C8 AuditLogDbModel.Builder is null in context");
5053
}
5154
convertOperationType(userOperationLog, builder);
55+
String tenantId = getTenantId(userOperationLog.getTenantId());
5256
builder
5357
.entityType(convertEntityType(userOperationLog))
5458
.partitionId(C7_HISTORY_PARTITION_ID) // test
55-
.timestamp(convertDate(userOperationLog.getTimestamp()))// test
59+
.result(AuditLogEntity.AuditLogOperationResult.SUCCESS)
5660
.actorId(userOperationLog.getUserId()) // test
5761
.actorType(AuditLogEntity.AuditLogActorType.USER) // test
5862
.processDefinitionId(prefixDefinitionId(userOperationLog.getProcessDefinitionKey()))// test
5963
.annotation(userOperationLog.getAnnotation()) // test
60-
.tenantId(userOperationLog.getTenantId()) // test
61-
.tenantScope(AuditLogEntity.AuditLogTenantScope.TENANT) // test
62-
.category(convertCategory(userOperationLog.getCategory()))
63-
.historyCleanupDate(convertDate(userOperationLog.getRemovalTime()));
64-
// Note: auditLogKey, processInstanceKey, rootProcessInstanceKey, processDefinitionKey, userTaskKey are set externally in AuditLogMigrator
65-
64+
.tenantId(tenantId) // test
65+
.tenantScope(getAuditLogTenantScope(tenantId)) // test
66+
.category(convertCategory(userOperationLog.getCategory()));
67+
// Note: auditLogKey, processInstanceKey, rootProcessInstanceKey, processDefinitionKey, userTaskKey, historyCleanupDate are set
68+
// externally in AuditLogMigrator
6669

70+
}
6771

72+
protected static AuditLogEntity.@NonNull AuditLogTenantScope getAuditLogTenantScope(String tenantId) {
73+
AuditLogEntity.AuditLogTenantScope tenantScope;
74+
if ( tenantId.equals(C8_DEFAULT_TENANT)) {
75+
tenantScope = AuditLogEntity.AuditLogTenantScope.GLOBAL;
76+
} else {
77+
tenantScope = AuditLogEntity.AuditLogTenantScope.TENANT;
78+
}
79+
return tenantScope;
6880
}
6981

7082
protected AuditLogEntity.AuditLogOperationCategory convertCategory(String category) {

0 commit comments

Comments
 (0)