Skip to content

Commit 2deb11f

Browse files
authored
Use a proper coordinator table schema based on whether the group commit feature is enabled or not (#2034)
1 parent c5a00bd commit 2deb11f

File tree

10 files changed

+219
-19
lines changed

10 files changed

+219
-19
lines changed

core/src/integration-test/java/com/scalar/db/storage/cassandra/ConsensusCommitAdminIntegrationTestWithCassandra.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@
22

33
import com.scalar.db.config.DatabaseConfig;
44
import com.scalar.db.transaction.consensuscommit.ConsensusCommitAdminIntegrationTestBase;
5+
import com.scalar.db.transaction.consensuscommit.ConsensusCommitConfig;
6+
import com.scalar.db.transaction.consensuscommit.Coordinator;
57
import java.util.Properties;
68

79
public class ConsensusCommitAdminIntegrationTestWithCassandra
810
extends ConsensusCommitAdminIntegrationTestBase {
911
@Override
1012
protected Properties getProps(String testName) {
11-
return CassandraEnv.getProperties(testName);
13+
return ConsensusCommitCassandraEnv.getProperties(testName);
1214
}
1315

1416
@Override
@@ -17,4 +19,20 @@ protected String getSystemNamespaceName(Properties properties) {
1719
.getSystemNamespaceName()
1820
.orElse(DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME);
1921
}
22+
23+
@Override
24+
protected String getCoordinatorNamespaceName(String testName) {
25+
return new ConsensusCommitConfig(new DatabaseConfig(getProperties(testName)))
26+
.getCoordinatorNamespace()
27+
.orElse(Coordinator.NAMESPACE);
28+
}
29+
30+
@Override
31+
protected boolean isGroupCommitEnabled(String testName) {
32+
return new ConsensusCommitConfig(new DatabaseConfig(getProperties(testName)))
33+
.isCoordinatorGroupCommitEnabled();
34+
}
35+
36+
@Override
37+
protected void extraCheckOnCoordinatorTable() {}
2038
}

core/src/integration-test/java/com/scalar/db/storage/cosmos/ConsensusCommitAdminIntegrationTestWithCosmos.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.scalar.db.config.DatabaseConfig;
44
import com.scalar.db.transaction.consensuscommit.ConsensusCommitAdminIntegrationTestBase;
5+
import com.scalar.db.transaction.consensuscommit.ConsensusCommitConfig;
6+
import com.scalar.db.transaction.consensuscommit.Coordinator;
57
import java.util.Map;
68
import java.util.Properties;
79

@@ -10,12 +12,12 @@ public class ConsensusCommitAdminIntegrationTestWithCosmos
1012

1113
@Override
1214
protected Properties getProps(String testName) {
13-
return CosmosEnv.getProperties(testName);
15+
return ConsensusCommitCosmosEnv.getProperties(testName);
1416
}
1517

1618
@Override
1719
protected Map<String, String> getCreationOptions() {
18-
return CosmosEnv.getCreationOptions();
20+
return ConsensusCommitCosmosEnv.getCreationOptions();
1921
}
2022

2123
@Override
@@ -24,4 +26,17 @@ protected String getSystemNamespaceName(Properties properties) {
2426
.getTableMetadataDatabase()
2527
.orElse(DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME);
2628
}
29+
30+
@Override
31+
protected String getCoordinatorNamespaceName(String testName) {
32+
return new ConsensusCommitConfig(new DatabaseConfig(getProperties(testName)))
33+
.getCoordinatorNamespace()
34+
.orElse(Coordinator.NAMESPACE);
35+
}
36+
37+
@Override
38+
protected boolean isGroupCommitEnabled(String testName) {
39+
return new ConsensusCommitConfig(new DatabaseConfig(getProperties(testName)))
40+
.isCoordinatorGroupCommitEnabled();
41+
}
2742
}

core/src/integration-test/java/com/scalar/db/storage/dynamo/ConsensusCommitAdminIntegrationTestWithDynamo.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.scalar.db.config.DatabaseConfig;
44
import com.scalar.db.transaction.consensuscommit.ConsensusCommitAdminIntegrationTestBase;
5+
import com.scalar.db.transaction.consensuscommit.ConsensusCommitConfig;
6+
import com.scalar.db.transaction.consensuscommit.Coordinator;
57
import java.util.Map;
68
import java.util.Properties;
79
import org.junit.jupiter.api.Disabled;
@@ -12,12 +14,12 @@ public class ConsensusCommitAdminIntegrationTestWithDynamo
1214

1315
@Override
1416
protected Properties getProps(String testName) {
15-
return DynamoEnv.getProperties(testName);
17+
return ConsensusCommitDynamoEnv.getProperties(testName);
1618
}
1719

1820
@Override
1921
protected Map<String, String> getCreationOptions() {
20-
return DynamoEnv.getCreationOptions();
22+
return ConsensusCommitDynamoEnv.getCreationOptions();
2123
}
2224

2325
@Override
@@ -32,6 +34,19 @@ protected String getSystemNamespaceName(Properties properties) {
3234
.orElse(DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME);
3335
}
3436

37+
@Override
38+
protected String getCoordinatorNamespaceName(String testName) {
39+
return new ConsensusCommitConfig(new DatabaseConfig(getProperties(testName)))
40+
.getCoordinatorNamespace()
41+
.orElse(Coordinator.NAMESPACE);
42+
}
43+
44+
@Override
45+
protected boolean isGroupCommitEnabled(String testName) {
46+
return new ConsensusCommitConfig(new DatabaseConfig(getProperties(testName)))
47+
.isCoordinatorGroupCommitEnabled();
48+
}
49+
3550
// Since DynamoDB doesn't have the namespace concept, some behaviors around the namespace are
3651
// different from the other adapters. So disable several tests that check such behaviors
3752

core/src/integration-test/java/com/scalar/db/storage/jdbc/ConsensusCommitAdminIntegrationTestWithJdbcDatabase.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.scalar.db.config.DatabaseConfig;
44
import com.scalar.db.exception.storage.ExecutionException;
55
import com.scalar.db.transaction.consensuscommit.ConsensusCommitAdminIntegrationTestBase;
6+
import com.scalar.db.transaction.consensuscommit.ConsensusCommitConfig;
7+
import com.scalar.db.transaction.consensuscommit.Coordinator;
68
import java.util.Properties;
79
import org.junit.jupiter.api.Test;
810
import org.junit.jupiter.api.condition.DisabledIf;
@@ -12,7 +14,7 @@ public class ConsensusCommitAdminIntegrationTestWithJdbcDatabase
1214

1315
@Override
1416
protected Properties getProps(String testName) {
15-
return JdbcEnv.getProperties(testName);
17+
return ConsensusCommitJdbcEnv.getProperties(testName);
1618
}
1719

1820
@Override
@@ -22,6 +24,19 @@ protected String getSystemNamespaceName(Properties properties) {
2224
.orElse(DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME);
2325
}
2426

27+
@Override
28+
protected String getCoordinatorNamespaceName(String testName) {
29+
return new ConsensusCommitConfig(new DatabaseConfig(getProperties(testName)))
30+
.getCoordinatorNamespace()
31+
.orElse(Coordinator.NAMESPACE);
32+
}
33+
34+
@Override
35+
protected boolean isGroupCommitEnabled(String testName) {
36+
return new ConsensusCommitConfig(new DatabaseConfig(getProperties(testName)))
37+
.isCoordinatorGroupCommitEnabled();
38+
}
39+
2540
// Since SQLite doesn't have persistent namespaces, some behaviors around the namespace are
2641
// different from the other adapters. So disable several tests that check such behaviors.
2742

core/src/main/java/com/scalar/db/transaction/consensuscommit/ConsensusCommitAdmin.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
@ThreadSafe
2828
public class ConsensusCommitAdmin implements DistributedTransactionAdmin {
2929

30+
private final ConsensusCommitConfig config;
3031
private final DistributedStorageAdmin admin;
3132
private final String coordinatorNamespace;
3233
private final boolean isIncludeMetadataEnabled;
@@ -35,7 +36,7 @@ public class ConsensusCommitAdmin implements DistributedTransactionAdmin {
3536
@Inject
3637
public ConsensusCommitAdmin(DistributedStorageAdmin admin, DatabaseConfig databaseConfig) {
3738
this.admin = admin;
38-
ConsensusCommitConfig config = new ConsensusCommitConfig(databaseConfig);
39+
config = new ConsensusCommitConfig(databaseConfig);
3940
coordinatorNamespace = config.getCoordinatorNamespace().orElse(Coordinator.NAMESPACE);
4041
isIncludeMetadataEnabled = config.isIncludeMetadataEnabled();
4142
}
@@ -44,7 +45,7 @@ public ConsensusCommitAdmin(DatabaseConfig databaseConfig) {
4445
StorageFactory storageFactory = StorageFactory.create(databaseConfig.getProperties());
4546
admin = storageFactory.getStorageAdmin();
4647

47-
ConsensusCommitConfig config = new ConsensusCommitConfig(databaseConfig);
48+
config = new ConsensusCommitConfig(databaseConfig);
4849
coordinatorNamespace = config.getCoordinatorNamespace().orElse(Coordinator.NAMESPACE);
4950
isIncludeMetadataEnabled = config.isIncludeMetadataEnabled();
5051
}
@@ -54,6 +55,7 @@ public ConsensusCommitAdmin(DatabaseConfig databaseConfig) {
5455
DistributedStorageAdmin admin,
5556
ConsensusCommitConfig config,
5657
boolean isIncludeMetadataEnabled) {
58+
this.config = config;
5759
this.admin = admin;
5860
coordinatorNamespace = config.getCoordinatorNamespace().orElse(Coordinator.NAMESPACE);
5961
this.isIncludeMetadataEnabled = isIncludeMetadataEnabled;
@@ -67,7 +69,8 @@ public void createCoordinatorTables(Map<String, String> options) throws Executio
6769
}
6870

6971
admin.createNamespace(coordinatorNamespace, options);
70-
admin.createTable(coordinatorNamespace, Coordinator.TABLE, Coordinator.TABLE_METADATA, options);
72+
admin.createTable(
73+
coordinatorNamespace, Coordinator.TABLE, getCoordinatorTableMetadata(), options);
7174
}
7275

7376
@Override
@@ -207,7 +210,8 @@ public void repairTable(
207210

208211
@Override
209212
public void repairCoordinatorTables(Map<String, String> options) throws ExecutionException {
210-
admin.repairTable(coordinatorNamespace, Coordinator.TABLE, Coordinator.TABLE_METADATA, options);
213+
admin.repairTable(
214+
coordinatorNamespace, Coordinator.TABLE, getCoordinatorTableMetadata(), options);
211215
}
212216

213217
@Override
@@ -276,4 +280,12 @@ private void checkNamespace(String namespace) {
276280
CoreError.CONSENSUS_COMMIT_COORDINATOR_NAMESPACE_SPECIFIED.buildMessage(namespace));
277281
}
278282
}
283+
284+
private TableMetadata getCoordinatorTableMetadata() {
285+
if (config.isCoordinatorGroupCommitEnabled()) {
286+
return Coordinator.TABLE_METADATA_WITH_GROUP_COMMIT_ENABLED;
287+
} else {
288+
return Coordinator.TABLE_METADATA_WITH_GROUP_COMMIT_DISABLED;
289+
}
290+
}
279291
}

core/src/main/java/com/scalar/db/transaction/consensuscommit/Coordinator.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,14 @@
3737
public class Coordinator {
3838
public static final String NAMESPACE = "coordinator";
3939
public static final String TABLE = "state";
40-
public static final TableMetadata TABLE_METADATA =
40+
public static final TableMetadata TABLE_METADATA_WITH_GROUP_COMMIT_DISABLED =
41+
TableMetadata.newBuilder()
42+
.addColumn(Attribute.ID, DataType.TEXT)
43+
.addColumn(Attribute.STATE, DataType.INT)
44+
.addColumn(Attribute.CREATED_AT, DataType.BIGINT)
45+
.addPartitionKey(Attribute.ID)
46+
.build();
47+
public static final TableMetadata TABLE_METADATA_WITH_GROUP_COMMIT_ENABLED =
4148
TableMetadata.newBuilder()
4249
.addColumn(Attribute.ID, DataType.TEXT)
4350
.addColumn(Attribute.CHILD_IDS, DataType.TEXT)

core/src/test/java/com/scalar/db/transaction/consensuscommit/ConsensusCommitAdminTestBase.java

Lines changed: 78 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public abstract class ConsensusCommitAdminTestBase {
4747
public void setUp() throws Exception {
4848
MockitoAnnotations.openMocks(this).close();
4949
when(config.getCoordinatorNamespace()).thenReturn(getCoordinatorNamespaceConfig());
50+
when(config.isCoordinatorGroupCommitEnabled()).thenReturn(false);
5051
admin = new ConsensusCommitAdmin(distributedStorageAdmin, config, false);
5152
coordinatorNamespaceName = getCoordinatorNamespaceConfig().orElse(Coordinator.NAMESPACE);
5253
}
@@ -68,7 +69,29 @@ public void createCoordinatorTables_shouldCreateCoordinatorTableProperly()
6869
.createTable(
6970
coordinatorNamespaceName,
7071
Coordinator.TABLE,
71-
Coordinator.TABLE_METADATA,
72+
Coordinator.TABLE_METADATA_WITH_GROUP_COMMIT_DISABLED,
73+
Collections.emptyMap());
74+
}
75+
76+
@Test
77+
public void createCoordinatorTables_WithGroupCommitEnabled_shouldCreateCoordinatorTableProperly()
78+
throws ExecutionException {
79+
// Arrange
80+
when(config.isCoordinatorGroupCommitEnabled()).thenReturn(true);
81+
ConsensusCommitAdmin adminWithGroupCommit =
82+
new ConsensusCommitAdmin(distributedStorageAdmin, config, false);
83+
84+
// Act
85+
adminWithGroupCommit.createCoordinatorTables();
86+
87+
// Assert
88+
verify(distributedStorageAdmin)
89+
.createNamespace(coordinatorNamespaceName, Collections.emptyMap());
90+
verify(distributedStorageAdmin)
91+
.createTable(
92+
coordinatorNamespaceName,
93+
Coordinator.TABLE,
94+
Coordinator.TABLE_METADATA_WITH_GROUP_COMMIT_ENABLED,
7295
Collections.emptyMap());
7396
}
7497

@@ -98,7 +121,34 @@ public void createCoordinatorTables_WithOptions_shouldCreateCoordinatorTableProp
98121
verify(distributedStorageAdmin).createNamespace(coordinatorNamespaceName, options);
99122
verify(distributedStorageAdmin)
100123
.createTable(
101-
coordinatorNamespaceName, Coordinator.TABLE, Coordinator.TABLE_METADATA, options);
124+
coordinatorNamespaceName,
125+
Coordinator.TABLE,
126+
Coordinator.TABLE_METADATA_WITH_GROUP_COMMIT_DISABLED,
127+
options);
128+
}
129+
130+
@Test
131+
public void
132+
createCoordinatorTables_WithOptionsWithGroupCommitEnabled_shouldCreateCoordinatorTableProperly()
133+
throws ExecutionException {
134+
// Arrange
135+
when(config.isCoordinatorGroupCommitEnabled()).thenReturn(true);
136+
ConsensusCommitAdmin adminWithGroupCommit =
137+
new ConsensusCommitAdmin(distributedStorageAdmin, config, false);
138+
139+
Map<String, String> options = ImmutableMap.of("name", "value");
140+
141+
// Act
142+
adminWithGroupCommit.createCoordinatorTables(options);
143+
144+
// Assert
145+
verify(distributedStorageAdmin).createNamespace(coordinatorNamespaceName, options);
146+
verify(distributedStorageAdmin)
147+
.createTable(
148+
coordinatorNamespaceName,
149+
Coordinator.TABLE,
150+
Coordinator.TABLE_METADATA_WITH_GROUP_COMMIT_ENABLED,
151+
options);
102152
}
103153

104154
@Test
@@ -570,7 +620,32 @@ public void repairCoordinatorTables_ShouldCallJdbcAdminProperly() throws Executi
570620
// Assert
571621
verify(distributedStorageAdmin)
572622
.repairTable(
573-
coordinatorNamespaceName, Coordinator.TABLE, Coordinator.TABLE_METADATA, options);
623+
coordinatorNamespaceName,
624+
Coordinator.TABLE,
625+
Coordinator.TABLE_METADATA_WITH_GROUP_COMMIT_DISABLED,
626+
options);
627+
}
628+
629+
@Test
630+
public void repairCoordinatorTables_WithGroupCommitEnabled_ShouldCallJdbcAdminProperly()
631+
throws ExecutionException {
632+
// Arrange
633+
when(config.isCoordinatorGroupCommitEnabled()).thenReturn(true);
634+
ConsensusCommitAdmin adminWithGroupCommit =
635+
new ConsensusCommitAdmin(distributedStorageAdmin, config, false);
636+
637+
Map<String, String> options = ImmutableMap.of("foo", "bar");
638+
639+
// Act
640+
adminWithGroupCommit.repairCoordinatorTables(options);
641+
642+
// Assert
643+
verify(distributedStorageAdmin)
644+
.repairTable(
645+
coordinatorNamespaceName,
646+
Coordinator.TABLE,
647+
Coordinator.TABLE_METADATA_WITH_GROUP_COMMIT_ENABLED,
648+
options);
574649
}
575650

576651
@Test

0 commit comments

Comments
 (0)