Skip to content

Commit a93e918

Browse files
committed
Support transaction metadata decoupling in Consensus Commit
1 parent c34c508 commit a93e918

File tree

43 files changed

+3096
-259
lines changed

Some content is hidden

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

43 files changed

+3096
-259
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
@@ -45,12 +45,12 @@ public void afterAll() {
4545

4646
@Override
4747
protected List<TestData> createExistingDatabaseWithAllDataTypes() throws SQLException {
48-
return testUtils.createExistingDatabaseWithAllDataTypes(getNamespace());
48+
return testUtils.createExistingDatabaseWithAllDataTypes(namespace);
4949
}
5050

5151
@Override
5252
protected void dropNonImportableTable(String table) throws SQLException {
53-
testUtils.dropTable(getNamespace(), table);
53+
testUtils.dropTable(namespace, table);
5454
}
5555

5656
@SuppressWarnings("unused")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
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
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+
try {
52+
if (testUtils != null) {
53+
testUtils.close();
54+
}
55+
} catch (Exception e) {
56+
logger.warn("Failed to close test utils", e);
57+
}
58+
}
59+
60+
@Override
61+
protected List<TestData> createExistingDatabaseWithAllDataTypes() throws SQLException {
62+
return testUtils.createExistingDatabaseWithAllDataTypes(namespace);
63+
}
64+
65+
@Override
66+
protected void dropNonImportableTable(String table) throws SQLException {
67+
testUtils.dropTable(namespace, table);
68+
}
69+
70+
@SuppressWarnings("unused")
71+
private boolean isSqlite() {
72+
return JdbcEnv.isSqlite();
73+
}
74+
75+
@Test
76+
@Override
77+
@DisabledIf("isSqlite")
78+
public void importTable_ShouldWorkProperly() throws Exception {
79+
super.importTable_ShouldWorkProperly();
80+
}
81+
82+
@Test
83+
@Override
84+
@EnabledIf("isSqlite")
85+
public void importTable_ForUnsupportedDatabase_ShouldThrowUnsupportedOperationException()
86+
throws ExecutionException {
87+
super.importTable_ForUnsupportedDatabase_ShouldThrowUnsupportedOperationException();
88+
}
89+
}
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
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
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
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
@@ -11,7 +11,6 @@
1111
import java.util.Properties;
1212
import java.util.concurrent.TimeUnit;
1313
import org.junit.jupiter.api.AfterAll;
14-
import org.junit.jupiter.api.Test;
1514
import org.junit.jupiter.api.condition.DisabledIf;
1615
import org.slf4j.Logger;
1716
import org.slf4j.LoggerFactory;
@@ -179,19 +178,6 @@ protected void dropNonImportableTable(String namespace, String table) throws Exc
179178
testUtils.dropTable(namespace, table);
180179
}
181180

182-
@Test
183-
@Override
184-
public void importTables_ImportableTablesGiven_ShouldImportProperly() throws Exception {
185-
super.importTables_ImportableTablesGiven_ShouldImportProperly();
186-
}
187-
188-
@Test
189-
@Override
190-
public void importTables_ImportableTablesAndNonRelatedSameNameTableGiven_ShouldImportProperly()
191-
throws Exception {
192-
super.importTables_ImportableTablesAndNonRelatedSameNameTableGiven_ShouldImportProperly();
193-
}
194-
195181
@AfterAll
196182
@Override
197183
public void afterAll() {

0 commit comments

Comments
 (0)