Skip to content

Commit 954126e

Browse files
committed
Support transaction metadata decoupling in Consensus Commit (#3207)
1 parent a0fed4f commit 954126e

File tree

44 files changed

+2936
-277
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+2936
-277
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@ public void afterAll() {
3737

3838
@Override
3939
protected List<TestData> createExistingDatabaseWithAllDataTypes() throws SQLException {
40-
return testUtils.createExistingDatabaseWithAllDataTypes(getNamespace());
40+
return testUtils.createExistingDatabaseWithAllDataTypes(namespace);
4141
}
4242

4343
@Override
4444
protected void dropNonImportableTable(String table) throws SQLException {
45-
testUtils.dropTable(getNamespace(), table);
45+
testUtils.dropTable(namespace, table);
4646
}
4747

4848
@SuppressWarnings("unused")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package com.scalar.db.storage.jdbc;
2+
3+
import com.scalar.db.api.DistributedStorageAdminImportTableIntegrationTestBase.TestData;
4+
import com.scalar.db.config.DatabaseConfig;
5+
import com.scalar.db.exception.storage.ExecutionException;
6+
import com.scalar.db.transaction.consensuscommit.ConsensusCommitAdminImportTableWithMetadataDecouplingIntegrationTestBase;
7+
import java.sql.SQLException;
8+
import java.util.List;
9+
import java.util.Properties;
10+
import org.junit.jupiter.api.Test;
11+
import org.junit.jupiter.api.condition.DisabledIf;
12+
import org.junit.jupiter.api.condition.EnabledIf;
13+
import org.slf4j.Logger;
14+
import org.slf4j.LoggerFactory;
15+
16+
@DisabledIf("com.scalar.db.storage.jdbc.JdbcEnv#isOracle")
17+
public class ConsensusCommitAdminImportTableWithMetadataDecouplingIntegrationTestWithJdbcDatabase
18+
extends ConsensusCommitAdminImportTableWithMetadataDecouplingIntegrationTestBase {
19+
private static final Logger logger =
20+
LoggerFactory.getLogger(
21+
ConsensusCommitAdminImportTableWithMetadataDecouplingIntegrationTestWithJdbcDatabase
22+
.class);
23+
24+
private JdbcAdminImportTestUtils testUtils;
25+
26+
@Override
27+
protected Properties getProps(String testName) {
28+
Properties properties = JdbcEnv.getProperties(testName);
29+
30+
// Set the isolation level for consistency reads for virtual tables
31+
RdbEngineStrategy rdbEngine =
32+
RdbEngineFactory.create(new JdbcConfig(new DatabaseConfig(properties)));
33+
properties.setProperty(
34+
JdbcConfig.ISOLATION_LEVEL,
35+
JdbcTestUtils.getIsolationLevel(
36+
rdbEngine.getMinimumIsolationLevelForConsistentVirtualTableRead())
37+
.name());
38+
39+
testUtils = new JdbcAdminImportTestUtils(properties);
40+
return properties;
41+
}
42+
43+
@Override
44+
public void afterAll() {
45+
try {
46+
super.afterAll();
47+
} catch (Exception e) {
48+
logger.warn("Failed to call super.afterAll", e);
49+
}
50+
}
51+
52+
@Override
53+
protected List<TestData> createExistingDatabaseWithAllDataTypes() throws SQLException {
54+
return testUtils.createExistingDatabaseWithAllDataTypes(namespace);
55+
}
56+
57+
@Override
58+
protected void dropNonImportableTable(String table) throws SQLException {
59+
testUtils.dropTable(namespace, table);
60+
}
61+
62+
@SuppressWarnings("unused")
63+
private boolean isSqlite() {
64+
return JdbcEnv.isSqlite();
65+
}
66+
67+
@Test
68+
@Override
69+
@DisabledIf("isSqlite")
70+
public void importTable_ShouldWorkProperly() throws Exception {
71+
super.importTable_ShouldWorkProperly();
72+
}
73+
74+
@Test
75+
@Override
76+
@EnabledIf("isSqlite")
77+
public void importTable_ForUnsupportedDatabase_ShouldThrowUnsupportedOperationException()
78+
throws ExecutionException {
79+
super.importTable_ForUnsupportedDatabase_ShouldThrowUnsupportedOperationException();
80+
}
81+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.scalar.db.storage.jdbc;
2+
3+
import com.scalar.db.config.DatabaseConfig;
4+
import com.scalar.db.transaction.consensuscommit.ConsensusCommitImportTableIntegrationTestBase;
5+
import com.scalar.db.util.AdminTestUtils;
6+
import java.util.Properties;
7+
import org.junit.jupiter.api.condition.DisabledIf;
8+
9+
@DisabledIf("isSqliteOrOracle")
10+
public class ConsensusCommitImportTableIntegrationTestWithJdbcDatabase
11+
extends ConsensusCommitImportTableIntegrationTestBase {
12+
13+
@Override
14+
protected Properties getProperties(String testName) {
15+
Properties properties = ConsensusCommitJdbcEnv.getProperties(testName);
16+
17+
// Set the isolation level for consistency reads for virtual tables
18+
RdbEngineStrategy rdbEngine =
19+
RdbEngineFactory.create(new JdbcConfig(new DatabaseConfig(properties)));
20+
properties.setProperty(
21+
JdbcConfig.ISOLATION_LEVEL,
22+
JdbcTestUtils.getIsolationLevel(
23+
rdbEngine.getMinimumIsolationLevelForConsistentVirtualTableRead())
24+
.name());
25+
26+
return properties;
27+
}
28+
29+
@Override
30+
protected AdminTestUtils getAdminTestUtils(String testName) {
31+
return new JdbcAdminTestUtils(getProperties(testName));
32+
}
33+
34+
@SuppressWarnings("unused")
35+
private static boolean isSqliteOrOracle() {
36+
return JdbcEnv.isSqlite() || JdbcEnv.isOracle();
37+
}
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.scalar.db.storage.jdbc;
2+
3+
import com.scalar.db.config.DatabaseConfig;
4+
import com.scalar.db.transaction.consensuscommit.ConsensusCommitImportTableWithMetadataDecouplingIntegrationTestBase;
5+
import com.scalar.db.util.AdminTestUtils;
6+
import java.util.Properties;
7+
import org.junit.jupiter.api.condition.DisabledIf;
8+
9+
@DisabledIf("isSqliteOrOracle")
10+
public class ConsensusCommitImportTableWithMetadataDecouplingIntegrationTestWithJdbcDatabase
11+
extends ConsensusCommitImportTableWithMetadataDecouplingIntegrationTestBase {
12+
13+
@Override
14+
protected Properties getProperties(String testName) {
15+
Properties properties = ConsensusCommitJdbcEnv.getProperties(testName);
16+
17+
// Set the isolation level for consistency reads for virtual tables
18+
RdbEngineStrategy rdbEngine =
19+
RdbEngineFactory.create(new JdbcConfig(new DatabaseConfig(properties)));
20+
properties.setProperty(
21+
JdbcConfig.ISOLATION_LEVEL,
22+
JdbcTestUtils.getIsolationLevel(
23+
rdbEngine.getMinimumIsolationLevelForConsistentVirtualTableRead())
24+
.name());
25+
26+
return properties;
27+
}
28+
29+
@Override
30+
protected AdminTestUtils getAdminTestUtils(String testName) {
31+
return new JdbcAdminTestUtils(getProperties(testName));
32+
}
33+
34+
@SuppressWarnings("unused")
35+
private static boolean isSqliteOrOracle() {
36+
return JdbcEnv.isSqlite() || JdbcEnv.isOracle();
37+
}
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.scalar.db.storage.jdbc;
2+
3+
import com.scalar.db.config.DatabaseConfig;
4+
import com.scalar.db.transaction.consensuscommit.ConsensusCommitSpecificWithMetadataDecouplingIntegrationTestBase;
5+
import java.util.Properties;
6+
import org.junit.jupiter.api.condition.DisabledIf;
7+
8+
@DisabledIf("com.scalar.db.storage.jdbc.JdbcEnv#isOracle")
9+
public class ConsensusCommitSpecificWithMetadataDecouplingIntegrationTestWithJdbcDatabase
10+
extends ConsensusCommitSpecificWithMetadataDecouplingIntegrationTestBase {
11+
12+
@Override
13+
protected Properties getProperties(String testName) {
14+
Properties properties = ConsensusCommitJdbcEnv.getProperties(testName);
15+
16+
// Set the isolation level for consistency reads for virtual tables
17+
RdbEngineStrategy rdbEngine =
18+
RdbEngineFactory.create(new JdbcConfig(new DatabaseConfig(properties)));
19+
properties.setProperty(
20+
JdbcConfig.ISOLATION_LEVEL,
21+
JdbcTestUtils.getIsolationLevel(
22+
rdbEngine.getMinimumIsolationLevelForConsistentVirtualTableRead())
23+
.name());
24+
25+
return properties;
26+
}
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.scalar.db.storage.jdbc;
2+
3+
import com.scalar.db.config.DatabaseConfig;
4+
import com.scalar.db.transaction.consensuscommit.ConsensusCommitWithMetadataDecouplingIntegrationTestBase;
5+
import java.util.Properties;
6+
import org.junit.jupiter.api.condition.DisabledIf;
7+
8+
@DisabledIf("com.scalar.db.storage.jdbc.JdbcEnv#isOracle")
9+
public class ConsensusCommitWithMetadataDecouplingIntegrationTestWithJdbcDatabase
10+
extends ConsensusCommitWithMetadataDecouplingIntegrationTestBase {
11+
12+
@Override
13+
protected Properties getProps(String testName) {
14+
Properties properties = ConsensusCommitJdbcEnv.getProperties(testName);
15+
16+
// Set the isolation level for consistency reads for virtual tables
17+
RdbEngineStrategy rdbEngine =
18+
RdbEngineFactory.create(new JdbcConfig(new DatabaseConfig(properties)));
19+
properties.setProperty(
20+
JdbcConfig.ISOLATION_LEVEL,
21+
JdbcTestUtils.getIsolationLevel(
22+
rdbEngine.getMinimumIsolationLevelForConsistentVirtualTableRead())
23+
.name());
24+
25+
return properties;
26+
}
27+
}

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

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import java.util.Properties;
1313
import java.util.concurrent.TimeUnit;
1414
import org.junit.jupiter.api.AfterAll;
15-
import org.junit.jupiter.api.Test;
1615
import org.junit.jupiter.api.condition.DisabledIf;
1716
import org.slf4j.Logger;
1817
import org.slf4j.LoggerFactory;
@@ -190,19 +189,6 @@ protected void dropNonImportableTable(String namespace, String table) throws Exc
190189
testUtils.dropTable(namespace, table);
191190
}
192191

193-
@Test
194-
@Override
195-
public void importTables_ImportableTablesGiven_ShouldImportProperly() throws Exception {
196-
super.importTables_ImportableTablesGiven_ShouldImportProperly();
197-
}
198-
199-
@Test
200-
@Override
201-
public void importTables_ImportableTablesAndNonRelatedSameNameTableGiven_ShouldImportProperly()
202-
throws Exception {
203-
super.importTables_ImportableTablesAndNonRelatedSameNameTableGiven_ShouldImportProperly();
204-
}
205-
206192
@AfterAll
207193
@Override
208194
public void afterAll() {

0 commit comments

Comments
 (0)