Skip to content

Commit f340f1c

Browse files
committed
Add IT for repairCoordinatorTables Coordinator schema upgrade
Verifies that calling repairCoordinatorTables with scalar.db.consensus_commit.coordinator.group_commit.enabled toggled from false to true against an existing pre-group-commit Coordinator table issues ALTER TABLE ADD COLUMN to add the child_ids column.
1 parent af66079 commit f340f1c

1 file changed

Lines changed: 50 additions & 0 deletions

File tree

integration-test/src/main/java/com/scalar/db/transaction/consensuscommit/ConsensusCommitAdminRepairTableIntegrationTestBase.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
package com.scalar.db.transaction.consensuscommit;
22

3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import com.scalar.db.api.DistributedTransactionAdmin;
36
import com.scalar.db.api.DistributedTransactionAdminRepairTableIntegrationTestBase;
7+
import com.scalar.db.api.TableMetadata;
8+
import com.scalar.db.config.DatabaseConfig;
9+
import com.scalar.db.service.TransactionFactory;
410
import java.util.Properties;
11+
import org.junit.jupiter.api.Test;
512

613
public abstract class ConsensusCommitAdminRepairTableIntegrationTestBase
714
extends DistributedTransactionAdminRepairTableIntegrationTestBase {
@@ -18,4 +25,47 @@ protected final Properties getProperties(String testName) {
1825
}
1926

2027
protected abstract Properties getProps(String testName);
28+
29+
@Test
30+
public void
31+
repairCoordinatorTables_WithExistingCoordinatorMissingChildIdsColumn_ShouldAddChildIdsColumn()
32+
throws Exception {
33+
// Arrange: drop the Coordinator created in setUp and recreate it via a separate admin
34+
// instance that has group commit explicitly disabled, so the Coordinator table has no
35+
// CHILD_IDS column.
36+
admin.dropCoordinatorTables();
37+
38+
Properties propertiesWithGroupCommitDisabled = new Properties();
39+
propertiesWithGroupCommitDisabled.putAll(getProperties(TEST_NAME));
40+
propertiesWithGroupCommitDisabled.setProperty(
41+
ConsensusCommitConfig.COORDINATOR_GROUP_COMMIT_ENABLED, "false");
42+
try (DistributedTransactionAdmin adminWithGroupCommitDisabled =
43+
TransactionFactory.create(propertiesWithGroupCommitDisabled).getTransactionAdmin()) {
44+
waitForDifferentSessionDdl();
45+
adminWithGroupCommitDisabled.createCoordinatorTables(getCreationOptions());
46+
}
47+
48+
// Act: repair with group commit enabled. The existing Coordinator has no CHILD_IDS column,
49+
// so this should add the column via ALTER TABLE ADD COLUMN.
50+
Properties propertiesWithGroupCommitEnabled = new Properties();
51+
propertiesWithGroupCommitEnabled.putAll(getProperties(TEST_NAME));
52+
propertiesWithGroupCommitEnabled.setProperty(
53+
ConsensusCommitConfig.COORDINATOR_GROUP_COMMIT_ENABLED, "true");
54+
try (DistributedTransactionAdmin adminWithGroupCommitEnabled =
55+
TransactionFactory.create(propertiesWithGroupCommitEnabled).getTransactionAdmin()) {
56+
waitForDifferentSessionDdl();
57+
adminWithGroupCommitEnabled.repairCoordinatorTables(getCreationOptions());
58+
59+
// Assert: the column now exists in the post-repair Coordinator metadata.
60+
waitForDifferentSessionDdl();
61+
String coordinatorNamespace =
62+
new ConsensusCommitConfig(new DatabaseConfig(propertiesWithGroupCommitEnabled))
63+
.getCoordinatorNamespace()
64+
.orElse(Coordinator.NAMESPACE);
65+
TableMetadata metadata =
66+
adminWithGroupCommitEnabled.getTableMetadata(coordinatorNamespace, Coordinator.TABLE);
67+
assertThat(metadata).isNotNull();
68+
assertThat(metadata.getColumnNames()).contains(Attribute.CHILD_IDS);
69+
}
70+
}
2171
}

0 commit comments

Comments
 (0)