Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[forwardport stable/8.3] Allow decision requirements in column family 49 #16420

Merged
merged 3 commits into from Feb 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -12,8 +12,10 @@
import io.camunda.zeebe.db.ZeebeDb;
import io.camunda.zeebe.db.impl.DbBytes;
import io.camunda.zeebe.db.impl.DbCompositeKey;
import io.camunda.zeebe.db.impl.DbInt;
import io.camunda.zeebe.db.impl.DbLong;
import io.camunda.zeebe.db.impl.DbNil;
import io.camunda.zeebe.db.impl.DbString;
import io.camunda.zeebe.db.impl.ZeebeDbConstants;
import io.camunda.zeebe.engine.state.migration.DbMigratorImpl;
import io.camunda.zeebe.protocol.ZbColumnFamilies;
Expand Down Expand Up @@ -49,6 +51,8 @@ public class ColumnFamily49Corrector {
private final DbLong processDefinitionKey;
private final DbLong elementInstanceKey;

private final DbCompositeKey<DbString, DbInt> decisionRequirementsIdAndVersion;

public ColumnFamily49Corrector(
final ZeebeDb<ZbColumnFamilies> zeebeDb, final TransactionContext transactionContext) {
recoverColumnFamily =
Expand All @@ -65,6 +69,11 @@ public ColumnFamily49Corrector(
transactionContext,
processInstanceKeyByProcessDefinitionKey,
DbNil.INSTANCE);

final var dbDecisionRequirementsId = new DbString();
final var dbDecisionRequirementsVersion = new DbInt();
decisionRequirementsIdAndVersion =
new DbCompositeKey<>(dbDecisionRequirementsId, dbDecisionRequirementsVersion);
}

public void correctColumnFamilyPrefix() {
Expand All @@ -84,8 +93,7 @@ public void correctColumnFamilyPrefix() {
try {
// so it appears the key fits the expected length, let's try to read it to ensure it
// is a decision requirement id and version
processInstanceKeyByProcessDefinitionKey.wrap(
key.getDirectBuffer(), 0, key.getLength());
decisionRequirementsIdAndVersion.wrap(key.getDirectBuffer(), 0, key.getLength());
} catch (final Exception e) {
LOG.trace(
"Found invalid key [{}] (unable to read key) in column family [{}] {}",
Expand Down
Expand Up @@ -262,7 +262,7 @@ void shouldMovePiKeyByProcDefKeyToCorrectColumnFamily() {
@Test
void shouldIgnoreProcessInstanceKeyByDefinitionKeyEntries() {
// given
decisionRequirementsId.wrapString("decisionRequirements");
decisionRequirementsId.wrapString("drg");
decisionRequirementsVersion.wrapInt(1);
decisionRequirementsKey.wrapLong(543);
correctDecisionRequirementsKeyColumnFamily.insert(
Expand All @@ -273,7 +273,7 @@ void shouldIgnoreProcessInstanceKeyByDefinitionKeyEntries() {
wrongPiKeyByProcDefKeyColumnFamily.insert(
processInstanceKeyByProcessDefinitionKey, DbNil.INSTANCE);

decisionRequirementsId.wrapString("decisionRequirements2");
decisionRequirementsId.wrapString("drg2");
decisionRequirementsVersion.wrapInt(2);
decisionRequirementsKey.wrapLong(987);
correctDecisionRequirementsKeyColumnFamily.insert(
Expand All @@ -295,6 +295,22 @@ void shouldIgnoreProcessInstanceKeyByDefinitionKeyEntries() {
Assertions.assertThat(
correctPiKeyByProcDefKeyColumnFamily.exists(processInstanceKeyByProcessDefinitionKey))
.isTrue();

decisionRequirementsId.wrapString("drg");
decisionRequirementsVersion.wrapInt(1);
Assertions.assertThat(
correctDecisionRequirementsKeyColumnFamily.get(decisionRequirementsIdAndVersion))
.isNotNull()
.extracting(DbLong::getValue)
.isEqualTo(543L);

decisionRequirementsId.wrapString("drg2");
decisionRequirementsVersion.wrapInt(2);
Assertions.assertThat(
correctDecisionRequirementsKeyColumnFamily.get(decisionRequirementsIdAndVersion))
.isNotNull()
.extracting(DbLong::getValue)
.isEqualTo(987L);
}
}

Expand Down