diff --git a/core/src/integration-test/java/com/scalar/db/storage/cassandra/CassandraEnv.java b/core/src/integration-test/java/com/scalar/db/storage/cassandra/CassandraEnv.java index 0870008452..bec6079b0a 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/cassandra/CassandraEnv.java +++ b/core/src/integration-test/java/com/scalar/db/storage/cassandra/CassandraEnv.java @@ -37,6 +37,9 @@ public static Properties getProperties(String testName) { DatabaseConfig.SYSTEM_NAMESPACE_NAME, DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME + "_" + testName); + // Metadata cache expiration time + properties.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1"); + return properties; } diff --git a/core/src/integration-test/java/com/scalar/db/storage/cosmos/CosmosEnv.java b/core/src/integration-test/java/com/scalar/db/storage/cosmos/CosmosEnv.java index 7fa1908ba1..9e3f1a540c 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/cosmos/CosmosEnv.java +++ b/core/src/integration-test/java/com/scalar/db/storage/cosmos/CosmosEnv.java @@ -32,6 +32,9 @@ public static Properties getProperties(String testName) { DatabaseConfig.SYSTEM_NAMESPACE_NAME, DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME + "_" + testName); + // Metadata cache expiration time + properties.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1"); + return properties; } diff --git a/core/src/integration-test/java/com/scalar/db/storage/dynamo/DynamoEnv.java b/core/src/integration-test/java/com/scalar/db/storage/dynamo/DynamoEnv.java index 1b1979e71e..e490689ee4 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/dynamo/DynamoEnv.java +++ b/core/src/integration-test/java/com/scalar/db/storage/dynamo/DynamoEnv.java @@ -52,6 +52,9 @@ public static Properties getProperties(String testName) { DatabaseConfig.SYSTEM_NAMESPACE_NAME, DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME + "_" + testName); + // Metadata cache expiration time + properties.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1"); + return properties; } diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/ConsensusCommitAdminIntegrationTestWithJdbcDatabase.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/ConsensusCommitAdminIntegrationTestWithJdbcDatabase.java index e1599f0d6d..0f72aef95c 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/ConsensusCommitAdminIntegrationTestWithJdbcDatabase.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/ConsensusCommitAdminIntegrationTestWithJdbcDatabase.java @@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.catchThrowable; +import com.google.common.util.concurrent.Uninterruptibles; import com.scalar.db.api.DistributedTransactionManager; import com.scalar.db.api.Insert; import com.scalar.db.api.InsertBuilder; @@ -28,6 +29,7 @@ import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.DisabledIf; import org.junit.jupiter.api.condition.EnabledIf; @@ -329,8 +331,8 @@ public void alterColumnType_WideningConversion_ShouldAlterColumnTypesCorrectly() @Test @EnabledIf("isOracle") public void alterColumnType_Oracle_WideningConversion_ShouldAlterColumnTypesCorrectly() - throws ExecutionException, IOException, TransactionException { - try { + throws ExecutionException, TransactionException { + try (DistributedTransactionManager manager = transactionFactory.getTransactionManager()) { // Arrange Map options = getCreationOptions(); TableMetadata.Builder currentTableMetadataBuilder = @@ -346,23 +348,24 @@ public void alterColumnType_Oracle_WideningConversion_ShouldAlterColumnTypesCorr int expectedColumn3Value = 1; float expectedColumn4Value = 4.0f; - try (DistributedTransactionManager manager = transactionFactory.getTransactionManager()) { - InsertBuilder.Buildable insert = - Insert.newBuilder() - .namespace(namespace1) - .table(TABLE4) - .partitionKey(Key.ofInt("c1", 1)) - .clusteringKey(Key.ofInt("c2", 2)) - .intValue("c3", expectedColumn3Value) - .floatValue("c4", expectedColumn4Value); - transactionalInsert(manager, insert.build()); - } + InsertBuilder.Buildable insert = + Insert.newBuilder() + .namespace(namespace1) + .table(TABLE4) + .partitionKey(Key.ofInt("c1", 1)) + .clusteringKey(Key.ofInt("c2", 2)) + .intValue("c3", expectedColumn3Value) + .floatValue("c4", expectedColumn4Value); + transactionalInsert(manager, insert.build()); // Act admin.alterColumnType(namespace1, TABLE4, "c3", DataType.BIGINT); Throwable exception = catchThrowable(() -> admin.alterColumnType(namespace1, TABLE4, "c4", DataType.DOUBLE)); + // Wait for cache expiry + Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); + // Assert assertThat(exception).isInstanceOf(UnsupportedOperationException.class); TableMetadata.Builder expectedTableMetadataBuilder = @@ -376,18 +379,16 @@ public void alterColumnType_Oracle_WideningConversion_ShouldAlterColumnTypesCorr TableMetadata expectedTableMetadata = expectedTableMetadataBuilder.build(); assertThat(admin.getTableMetadata(namespace1, TABLE4)).isEqualTo(expectedTableMetadata); - try (DistributedTransactionManager manager = transactionFactory.getTransactionManager()) { - Scan scan = - Scan.newBuilder() - .namespace(namespace1) - .table(TABLE4) - .partitionKey(Key.ofInt("c1", 1)) - .build(); - List results = transactionalScan(manager, scan); - assertThat(results).hasSize(1); - Result result = results.get(0); - assertThat(result.getBigInt("c3")).isEqualTo(expectedColumn3Value); - } + Scan scan = + Scan.newBuilder() + .namespace(namespace1) + .table(TABLE4) + .partitionKey(Key.ofInt("c1", 1)) + .build(); + List results = transactionalScan(manager, scan); + assertThat(results).hasSize(1); + Result result = results.get(0); + assertThat(result.getBigInt("c3")).isEqualTo(expectedColumn3Value); } finally { admin.dropTable(namespace1, TABLE4, true); } diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminIntegrationTest.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminIntegrationTest.java index 4e6e2a8b17..7bddc4a058 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminIntegrationTest.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminIntegrationTest.java @@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.catchThrowable; +import com.google.common.util.concurrent.Uninterruptibles; import com.scalar.db.api.DistributedStorage; import com.scalar.db.api.DistributedStorageAdminIntegrationTestBase; import com.scalar.db.api.Put; @@ -28,6 +29,7 @@ import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.DisabledIf; import org.junit.jupiter.api.condition.EnabledIf; @@ -398,7 +400,7 @@ public void alterColumnType_WideningConversion_ShouldAlterColumnTypesCorrectly() @EnabledIf("isOracle") public void alterColumnType_Oracle_WideningConversion_ShouldAlterColumnTypesCorrectly() throws ExecutionException, IOException { - try { + try (DistributedStorage storage = storageFactory.getStorage()) { // Arrange Map options = getCreationOptions(); TableMetadata.Builder currentTableMetadataBuilder = @@ -414,17 +416,15 @@ public void alterColumnType_Oracle_WideningConversion_ShouldAlterColumnTypesCorr int expectedColumn3Value = 1; float expectedColumn4Value = 4.0f; - try (DistributedStorage storage = storageFactory.getStorage()) { - PutBuilder.Buildable put = - Put.newBuilder() - .namespace(getNamespace1()) - .table(getTable4()) - .partitionKey(Key.ofInt(getColumnName1(), 1)) - .clusteringKey(Key.ofInt(getColumnName2(), 2)) - .intValue(getColumnName3(), expectedColumn3Value) - .floatValue(getColumnName4(), expectedColumn4Value); - storage.put(put.build()); - } + PutBuilder.Buildable put = + Put.newBuilder() + .namespace(getNamespace1()) + .table(getTable4()) + .partitionKey(Key.ofInt(getColumnName1(), 1)) + .clusteringKey(Key.ofInt(getColumnName2(), 2)) + .intValue(getColumnName3(), expectedColumn3Value) + .floatValue(getColumnName4(), expectedColumn4Value); + storage.put(put.build()); // Act admin.alterColumnType(getNamespace1(), getTable4(), getColumnName3(), DataType.BIGINT); @@ -434,6 +434,9 @@ public void alterColumnType_Oracle_WideningConversion_ShouldAlterColumnTypesCorr admin.alterColumnType( getNamespace1(), getTable4(), getColumnName4(), DataType.DOUBLE)); + // Wait for cache expiry + Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); + // Assert assertThat(exception).isInstanceOf(UnsupportedOperationException.class); TableMetadata.Builder expectedTableMetadataBuilder = @@ -448,19 +451,17 @@ public void alterColumnType_Oracle_WideningConversion_ShouldAlterColumnTypesCorr assertThat(admin.getTableMetadata(getNamespace1(), getTable4())) .isEqualTo(expectedTableMetadata); - try (DistributedStorage storage = storageFactory.getStorage()) { - Scan scan = - Scan.newBuilder() - .namespace(getNamespace1()) - .table(getTable4()) - .partitionKey(Key.ofInt(getColumnName1(), 1)) - .build(); - try (Scanner scanner = storage.scan(scan)) { - List results = scanner.all(); - assertThat(results).hasSize(1); - Result result = results.get(0); - assertThat(result.getBigInt(getColumnName3())).isEqualTo(expectedColumn3Value); - } + Scan scan = + Scan.newBuilder() + .namespace(getNamespace1()) + .table(getTable4()) + .partitionKey(Key.ofInt(getColumnName1(), 1)) + .build(); + try (Scanner scanner = storage.scan(scan)) { + List results = scanner.all(); + assertThat(results).hasSize(1); + Result result = results.get(0); + assertThat(result.getBigInt(getColumnName3())).isEqualTo(expectedColumn3Value); } } finally { admin.dropTable(getNamespace1(), getTable4(), true); diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcEnv.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcEnv.java index c88398250b..361f3f9941 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcEnv.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcEnv.java @@ -37,6 +37,9 @@ public static Properties getProperties(String testName) { DatabaseConfig.SYSTEM_NAMESPACE_NAME, DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME + "_" + testName); + // Metadata cache expiration time + properties.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1"); + return properties; } diff --git a/core/src/integration-test/java/com/scalar/db/storage/jdbc/SingleCrudOperationTransactionAdminIntegrationTestWithJdbcDatabase.java b/core/src/integration-test/java/com/scalar/db/storage/jdbc/SingleCrudOperationTransactionAdminIntegrationTestWithJdbcDatabase.java index e6a541aadf..f5669f0953 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/jdbc/SingleCrudOperationTransactionAdminIntegrationTestWithJdbcDatabase.java +++ b/core/src/integration-test/java/com/scalar/db/storage/jdbc/SingleCrudOperationTransactionAdminIntegrationTestWithJdbcDatabase.java @@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.catchThrowable; +import com.google.common.util.concurrent.Uninterruptibles; import com.scalar.db.api.DistributedTransactionManager; import com.scalar.db.api.Insert; import com.scalar.db.api.InsertBuilder; @@ -28,6 +29,7 @@ import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.DisabledIf; import org.junit.jupiter.api.condition.EnabledIf; @@ -329,8 +331,8 @@ public void alterColumnType_WideningConversion_ShouldAlterColumnTypesCorrectly() @Test @EnabledIf("isOracle") public void alterColumnType_Oracle_WideningConversion_ShouldAlterColumnTypesCorrectly() - throws ExecutionException, IOException, TransactionException { - try { + throws ExecutionException, TransactionException { + try (DistributedTransactionManager manager = transactionFactory.getTransactionManager()) { // Arrange Map options = getCreationOptions(); TableMetadata.Builder currentTableMetadataBuilder = @@ -346,23 +348,24 @@ public void alterColumnType_Oracle_WideningConversion_ShouldAlterColumnTypesCorr int expectedColumn3Value = 1; float expectedColumn4Value = 4.0f; - try (DistributedTransactionManager manager = transactionFactory.getTransactionManager()) { - InsertBuilder.Buildable insert = - Insert.newBuilder() - .namespace(namespace1) - .table(TABLE4) - .partitionKey(Key.ofInt("c1", 1)) - .clusteringKey(Key.ofInt("c2", 2)) - .intValue("c3", expectedColumn3Value) - .floatValue("c4", expectedColumn4Value); - transactionalInsert(manager, insert.build()); - } + InsertBuilder.Buildable insert = + Insert.newBuilder() + .namespace(namespace1) + .table(TABLE4) + .partitionKey(Key.ofInt("c1", 1)) + .clusteringKey(Key.ofInt("c2", 2)) + .intValue("c3", expectedColumn3Value) + .floatValue("c4", expectedColumn4Value); + transactionalInsert(manager, insert.build()); // Act admin.alterColumnType(namespace1, TABLE4, "c3", DataType.BIGINT); Throwable exception = catchThrowable(() -> admin.alterColumnType(namespace1, TABLE4, "c4", DataType.DOUBLE)); + // Wait for cache expiry + Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); + // Assert assertThat(exception).isInstanceOf(UnsupportedOperationException.class); TableMetadata.Builder expectedTableMetadataBuilder = @@ -376,18 +379,16 @@ public void alterColumnType_Oracle_WideningConversion_ShouldAlterColumnTypesCorr TableMetadata expectedTableMetadata = expectedTableMetadataBuilder.build(); assertThat(admin.getTableMetadata(namespace1, TABLE4)).isEqualTo(expectedTableMetadata); - try (DistributedTransactionManager manager = transactionFactory.getTransactionManager()) { - Scan scan = - Scan.newBuilder() - .namespace(namespace1) - .table(TABLE4) - .partitionKey(Key.ofInt("c1", 1)) - .build(); - List results = transactionalScan(manager, scan); - assertThat(results).hasSize(1); - Result result = results.get(0); - assertThat(result.getBigInt("c3")).isEqualTo(expectedColumn3Value); - } + Scan scan = + Scan.newBuilder() + .namespace(namespace1) + .table(TABLE4) + .partitionKey(Key.ofInt("c1", 1)) + .build(); + List results = transactionalScan(manager, scan); + assertThat(results).hasSize(1); + Result result = results.get(0); + assertThat(result.getBigInt("c3")).isEqualTo(expectedColumn3Value); } finally { admin.dropTable(namespace1, TABLE4, true); } diff --git a/core/src/integration-test/java/com/scalar/db/storage/multistorage/ConsensusCommitNullMetadataIntegrationTestWithMultiStorage.java b/core/src/integration-test/java/com/scalar/db/storage/multistorage/ConsensusCommitNullMetadataIntegrationTestWithMultiStorage.java index ab58f990d4..b87dc08ebf 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/multistorage/ConsensusCommitNullMetadataIntegrationTestWithMultiStorage.java +++ b/core/src/integration-test/java/com/scalar/db/storage/multistorage/ConsensusCommitNullMetadataIntegrationTestWithMultiStorage.java @@ -57,6 +57,9 @@ protected Properties getProperties(String testName) { DatabaseConfig.SYSTEM_NAMESPACE_NAME, DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME + "_" + testName); + // Metadata cache expiration time + properties.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1"); + return ConsensusCommitTestUtils.loadConsensusCommitProperties(properties); } diff --git a/core/src/integration-test/java/com/scalar/db/storage/multistorage/ConsensusCommitSpecificIntegrationTestWithMultiStorage.java b/core/src/integration-test/java/com/scalar/db/storage/multistorage/ConsensusCommitSpecificIntegrationTestWithMultiStorage.java index 75c1b74901..d24beee9e6 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/multistorage/ConsensusCommitSpecificIntegrationTestWithMultiStorage.java +++ b/core/src/integration-test/java/com/scalar/db/storage/multistorage/ConsensusCommitSpecificIntegrationTestWithMultiStorage.java @@ -57,6 +57,9 @@ protected Properties getProperties(String testName) { DatabaseConfig.SYSTEM_NAMESPACE_NAME, DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME + "_" + testName); + // Metadata cache expiration time + properties.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1"); + return ConsensusCommitTestUtils.loadConsensusCommitProperties(properties); } diff --git a/core/src/integration-test/java/com/scalar/db/storage/multistorage/MultiStorageAdminIntegrationTest.java b/core/src/integration-test/java/com/scalar/db/storage/multistorage/MultiStorageAdminIntegrationTest.java index 4d5041628a..1d9a13e786 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/multistorage/MultiStorageAdminIntegrationTest.java +++ b/core/src/integration-test/java/com/scalar/db/storage/multistorage/MultiStorageAdminIntegrationTest.java @@ -143,6 +143,9 @@ private void initMultiStorageAdmin() { DatabaseConfig.SYSTEM_NAMESPACE_NAME, DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME + "_" + TEST_NAME); + // Metadata cache expiration time + properties.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1"); + DatabaseConfig databaseConfig = new DatabaseConfig(properties); multiStorageAdmin = new MultiStorageAdmin(databaseConfig); diff --git a/core/src/integration-test/java/com/scalar/db/storage/multistorage/MultiStorageEnv.java b/core/src/integration-test/java/com/scalar/db/storage/multistorage/MultiStorageEnv.java index 0108b06d8d..db39158c23 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/multistorage/MultiStorageEnv.java +++ b/core/src/integration-test/java/com/scalar/db/storage/multistorage/MultiStorageEnv.java @@ -48,6 +48,9 @@ public static Properties getPropertiesForCassandra(@SuppressWarnings("unused") S DatabaseConfig.SYSTEM_NAMESPACE_NAME, DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME + "_" + testName); + // Metadata cache expiration time + properties.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1"); + return properties; } @@ -70,6 +73,9 @@ public static Properties getPropertiesForJdbc(String testName) { DatabaseConfig.SYSTEM_NAMESPACE_NAME, DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME + "_" + testName); + // Metadata cache expiration time + properties.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1"); + return properties; } } diff --git a/core/src/integration-test/java/com/scalar/db/storage/multistorage/MultiStorageIntegrationTest.java b/core/src/integration-test/java/com/scalar/db/storage/multistorage/MultiStorageIntegrationTest.java index a6a1eb9cb8..b82971fb3c 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/multistorage/MultiStorageIntegrationTest.java +++ b/core/src/integration-test/java/com/scalar/db/storage/multistorage/MultiStorageIntegrationTest.java @@ -142,6 +142,9 @@ private void initMultiStorage() { DatabaseConfig.SYSTEM_NAMESPACE_NAME, DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME + "_" + TEST_NAME); + // Metadata cache expiration time + properties.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1"); + multiStorage = new MultiStorage(new DatabaseConfig(properties)); } diff --git a/core/src/integration-test/java/com/scalar/db/storage/multistorage/MultiStorageMutationAtomicityUnitIntegrationTest.java b/core/src/integration-test/java/com/scalar/db/storage/multistorage/MultiStorageMutationAtomicityUnitIntegrationTest.java index d97b9fbe47..321080d983 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/multistorage/MultiStorageMutationAtomicityUnitIntegrationTest.java +++ b/core/src/integration-test/java/com/scalar/db/storage/multistorage/MultiStorageMutationAtomicityUnitIntegrationTest.java @@ -54,6 +54,9 @@ public Properties getProperties(String testName) { DatabaseConfig.SYSTEM_NAMESPACE_NAME, DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME + "_" + testName); + // Metadata cache expiration time + properties.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1"); + return properties; } diff --git a/core/src/integration-test/java/com/scalar/db/storage/multistorage/MultiStorageSchemaLoaderIntegrationTest.java b/core/src/integration-test/java/com/scalar/db/storage/multistorage/MultiStorageSchemaLoaderIntegrationTest.java index 8c12950bef..6622debabd 100644 --- a/core/src/integration-test/java/com/scalar/db/storage/multistorage/MultiStorageSchemaLoaderIntegrationTest.java +++ b/core/src/integration-test/java/com/scalar/db/storage/multistorage/MultiStorageSchemaLoaderIntegrationTest.java @@ -61,6 +61,9 @@ protected Properties getProperties(String testName) { // Add testName as a coordinator schema suffix ConsensusCommitTestUtils.addSuffixToCoordinatorNamespace(properties, testName); + // Metadata cache expiration time + properties.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1"); + return properties; } diff --git a/core/src/integration-test/java/com/scalar/db/transaction/jdbc/JdbcTransactionAdminIntegrationTest.java b/core/src/integration-test/java/com/scalar/db/transaction/jdbc/JdbcTransactionAdminIntegrationTest.java index df3af3d8f9..22f40693b0 100644 --- a/core/src/integration-test/java/com/scalar/db/transaction/jdbc/JdbcTransactionAdminIntegrationTest.java +++ b/core/src/integration-test/java/com/scalar/db/transaction/jdbc/JdbcTransactionAdminIntegrationTest.java @@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.catchThrowable; +import com.google.common.util.concurrent.Uninterruptibles; import com.scalar.db.api.DistributedTransaction; import com.scalar.db.api.DistributedTransactionAdminIntegrationTestBase; import com.scalar.db.api.DistributedTransactionManager; @@ -34,6 +35,7 @@ import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.DisabledIf; @@ -401,8 +403,8 @@ public void alterColumnType_WideningConversion_ShouldAlterColumnTypesCorrectly() @Test @EnabledIf("isOracle") public void alterColumnType_Oracle_WideningConversion_ShouldAlterColumnTypesCorrectly() - throws ExecutionException, IOException, TransactionException { - try { + throws ExecutionException, TransactionException { + try (DistributedTransactionManager manager = transactionFactory.getTransactionManager()) { // Arrange Map options = getCreationOptions(); TableMetadata.Builder currentTableMetadataBuilder = @@ -418,23 +420,24 @@ public void alterColumnType_Oracle_WideningConversion_ShouldAlterColumnTypesCorr int expectedColumn3Value = 1; float expectedColumn4Value = 4.0f; - try (DistributedTransactionManager manager = transactionFactory.getTransactionManager()) { - InsertBuilder.Buildable insert = - Insert.newBuilder() - .namespace(namespace1) - .table(TABLE4) - .partitionKey(Key.ofInt("c1", 1)) - .clusteringKey(Key.ofInt("c2", 2)) - .intValue("c3", expectedColumn3Value) - .floatValue("c4", expectedColumn4Value); - transactionalInsert(manager, insert.build()); - } + InsertBuilder.Buildable insert = + Insert.newBuilder() + .namespace(namespace1) + .table(TABLE4) + .partitionKey(Key.ofInt("c1", 1)) + .clusteringKey(Key.ofInt("c2", 2)) + .intValue("c3", expectedColumn3Value) + .floatValue("c4", expectedColumn4Value); + transactionalInsert(manager, insert.build()); // Act admin.alterColumnType(namespace1, TABLE4, "c3", DataType.BIGINT); Throwable exception = catchThrowable(() -> admin.alterColumnType(namespace1, TABLE4, "c4", DataType.DOUBLE)); + // Wait for cache expiry + Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); + // Assert assertThat(exception).isInstanceOf(UnsupportedOperationException.class); TableMetadata.Builder expectedTableMetadataBuilder = @@ -448,18 +451,16 @@ public void alterColumnType_Oracle_WideningConversion_ShouldAlterColumnTypesCorr TableMetadata expectedTableMetadata = expectedTableMetadataBuilder.build(); assertThat(admin.getTableMetadata(namespace1, TABLE4)).isEqualTo(expectedTableMetadata); - try (DistributedTransactionManager manager = transactionFactory.getTransactionManager()) { - Scan scan = - Scan.newBuilder() - .namespace(namespace1) - .table(TABLE4) - .partitionKey(Key.ofInt("c1", 1)) - .build(); - List results = transactionalScan(manager, scan); - assertThat(results).hasSize(1); - Result result = results.get(0); - assertThat(result.getBigInt("c3")).isEqualTo(expectedColumn3Value); - } + Scan scan = + Scan.newBuilder() + .namespace(namespace1) + .table(TABLE4) + .partitionKey(Key.ofInt("c1", 1)) + .build(); + List results = transactionalScan(manager, scan); + assertThat(results).hasSize(1); + Result result = results.get(0); + assertThat(result.getBigInt("c3")).isEqualTo(expectedColumn3Value); } finally { admin.dropTable(namespace1, TABLE4, true); } diff --git a/core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineSqlite.java b/core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineSqlite.java index df6d895417..cdeb2ce414 100644 --- a/core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineSqlite.java +++ b/core/src/main/java/com/scalar/db/storage/jdbc/RdbEngineSqlite.java @@ -360,8 +360,7 @@ public RdbEngineTimeTypeStrategy getTimeTypeStrategy( @Override public void throwIfAlterColumnTypeNotSupported(DataType from, DataType to) { throw new UnsupportedOperationException( - CoreError.JDBC_SQLITE_ALTER_COLUMN_TYPE_NOT_SUPPORTED.buildMessage( - from.toString(), to.toString())); + CoreError.JDBC_SQLITE_ALTER_COLUMN_TYPE_NOT_SUPPORTED.buildMessage()); } @Override diff --git a/integration-test/src/main/java/com/scalar/db/api/DistributedStorageAdminIntegrationTestBase.java b/integration-test/src/main/java/com/scalar/db/api/DistributedStorageAdminIntegrationTestBase.java index bb55e887e8..15c74f548a 100644 --- a/integration-test/src/main/java/com/scalar/db/api/DistributedStorageAdminIntegrationTestBase.java +++ b/integration-test/src/main/java/com/scalar/db/api/DistributedStorageAdminIntegrationTestBase.java @@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import com.google.common.util.concurrent.Uninterruptibles; import com.scalar.db.config.DatabaseConfig; import com.scalar.db.exception.storage.ExecutionException; import com.scalar.db.io.DataType; @@ -26,6 +27,7 @@ import java.util.Map; import java.util.Properties; import java.util.Set; +import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -1205,7 +1207,7 @@ public void renameTable_ForExistingTable_ShouldRenameTableCorrectly() throws Exe @Test public void alterColumnType_WideningConversion_ShouldAlterColumnTypesCorrectly() throws ExecutionException, IOException { - try { + try (DistributedStorage storage = storageFactory.getStorage()) { // Arrange Map options = getCreationOptions(); TableMetadata.Builder currentTableMetadataBuilder = @@ -1218,7 +1220,6 @@ public void alterColumnType_WideningConversion_ShouldAlterColumnTypesCorrectly() .addClusteringKey(getColumnName2(), Scan.Ordering.Order.ASC); TableMetadata currentTableMetadata = currentTableMetadataBuilder.build(); admin.createTable(namespace1, getTable4(), currentTableMetadata, options); - DistributedStorage storage = storageFactory.getStorage(); int expectedColumn3Value = 1; float expectedColumn4Value = 4.0f; @@ -1231,12 +1232,14 @@ public void alterColumnType_WideningConversion_ShouldAlterColumnTypesCorrectly() .intValue(getColumnName3(), expectedColumn3Value) .floatValue(getColumnName4(), expectedColumn4Value); storage.put(put.build()); - storage.close(); // Act admin.alterColumnType(namespace1, getTable4(), getColumnName3(), DataType.BIGINT); admin.alterColumnType(namespace1, getTable4(), getColumnName4(), DataType.DOUBLE); + // Wait for cache expiry + Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); + // Assert TableMetadata.Builder expectedTableMetadataBuilder = TableMetadata.newBuilder() @@ -1248,7 +1251,6 @@ public void alterColumnType_WideningConversion_ShouldAlterColumnTypesCorrectly() .addClusteringKey(getColumnName2(), Scan.Ordering.Order.ASC); TableMetadata expectedTableMetadata = expectedTableMetadataBuilder.build(); assertThat(admin.getTableMetadata(namespace1, getTable4())).isEqualTo(expectedTableMetadata); - storage = storageFactory.getStorage(); Scan scan = Scan.newBuilder() .namespace(namespace1) @@ -1262,7 +1264,6 @@ public void alterColumnType_WideningConversion_ShouldAlterColumnTypesCorrectly() assertThat(result.getBigInt(getColumnName3())).isEqualTo(expectedColumn3Value); assertThat(result.getDouble(getColumnName4())).isEqualTo(expectedColumn4Value); } - storage.close(); } finally { admin.dropTable(namespace1, getTable4(), true); } diff --git a/integration-test/src/main/java/com/scalar/db/api/DistributedTransactionAdminIntegrationTestBase.java b/integration-test/src/main/java/com/scalar/db/api/DistributedTransactionAdminIntegrationTestBase.java index e6423ad6fa..14e3e9caa3 100644 --- a/integration-test/src/main/java/com/scalar/db/api/DistributedTransactionAdminIntegrationTestBase.java +++ b/integration-test/src/main/java/com/scalar/db/api/DistributedTransactionAdminIntegrationTestBase.java @@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import com.google.common.util.concurrent.Uninterruptibles; import com.scalar.db.config.DatabaseConfig; import com.scalar.db.exception.storage.ExecutionException; import com.scalar.db.exception.transaction.TransactionException; @@ -27,6 +28,7 @@ import java.util.Map; import java.util.Properties; import java.util.Set; +import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -1268,7 +1270,8 @@ public void renameColumn_ForIndexKeyColumn_ShouldRenameColumnAndIndexCorrectly() @Test public void alterColumnType_WideningConversion_ShouldAlterColumnTypesCorrectly() throws ExecutionException, IOException, TransactionException { - try { + try (DistributedTransactionManager transactionManager = + transactionFactory.getTransactionManager()) { // Arrange Map options = getCreationOptions(); TableMetadata.Builder currentTableMetadataBuilder = @@ -1281,7 +1284,6 @@ public void alterColumnType_WideningConversion_ShouldAlterColumnTypesCorrectly() .addClusteringKey("c2", Scan.Ordering.Order.ASC); TableMetadata currentTableMetadata = currentTableMetadataBuilder.build(); admin.createTable(namespace1, TABLE4, currentTableMetadata, options); - DistributedTransactionManager transactionManager = transactionFactory.getTransactionManager(); int expectedColumn3Value = 1; float expectedColumn4Value = 4.0f; @@ -1294,12 +1296,14 @@ public void alterColumnType_WideningConversion_ShouldAlterColumnTypesCorrectly() .intValue("c3", expectedColumn3Value) .floatValue("c4", expectedColumn4Value); transactionalInsert(transactionManager, insert.build()); - transactionManager.close(); // Act admin.alterColumnType(namespace1, TABLE4, "c3", DataType.BIGINT); admin.alterColumnType(namespace1, TABLE4, "c4", DataType.DOUBLE); + // Wait for cache expiry + Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); + // Assert TableMetadata.Builder expectedTableMetadataBuilder = TableMetadata.newBuilder() @@ -1317,13 +1321,11 @@ public void alterColumnType_WideningConversion_ShouldAlterColumnTypesCorrectly() .table(TABLE4) .partitionKey(Key.ofInt("c1", 1)) .build(); - transactionManager = transactionFactory.getTransactionManager(); List results = transactionalScan(transactionManager, scan); assertThat(results).hasSize(1); Result result = results.get(0); assertThat(result.getBigInt("c3")).isEqualTo(expectedColumn3Value); assertThat(result.getDouble("c4")).isEqualTo(expectedColumn4Value); - transactionManager.close(); } finally { admin.dropTable(namespace1, TABLE4, true); }