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 2f55b91ec2..f3f164dee1 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 @@ -31,6 +31,10 @@ public static Properties getProperties(@SuppressWarnings("unused") String testNa props.setProperty(DatabaseConfig.CROSS_PARTITION_SCAN, "true"); props.setProperty(DatabaseConfig.CROSS_PARTITION_SCAN_FILTERING, "true"); props.setProperty(DatabaseConfig.CROSS_PARTITION_SCAN_ORDERING, "false"); + + // Metadata cache expiration time + props.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1"); + return props; } 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 fe819039f3..c4b1cd995c 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) { CosmosConfig.TABLE_METADATA_DATABASE, DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME + "_" + testName); + // Metadata cache expiration time + props.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1"); + return props; } 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 d7df4fb67f..2602e22761 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) { DynamoConfig.TABLE_METADATA_NAMESPACE, 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 6f578019be..c645dfd73f 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; @@ -29,6 +30,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; @@ -415,8 +417,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 = @@ -432,23 +434,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 = @@ -462,18 +465,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 378b760829..b496ed82d8 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; @@ -27,6 +28,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; @@ -468,7 +470,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 = @@ -484,17 +486,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); @@ -504,6 +504,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 = @@ -518,19 +521,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 27fc6d2edf..b734dac506 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) { JdbcConfig.TABLE_METADATA_SCHEMA, DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME + "_" + testName); + // Metadata cache expiration time + props.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1"); + return props; } 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 133d42aeee..a995a22f9b 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; @@ -27,6 +28,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; @@ -399,8 +401,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 = @@ -416,23 +418,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 = @@ -446,18 +449,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 f5a2f2eddf..a334f4f4ed 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 @@ -49,6 +49,9 @@ protected Properties getProperties(String testName) { // The default storage is cassandra props.setProperty(MultiStorageConfig.DEFAULT_STORAGE, "cassandra"); + // Metadata cache expiration time + props.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1"); + return ConsensusCommitTestUtils.loadConsensusCommitProperties(props); } } 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 8c99644080..1b6bb31b0a 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 @@ -49,6 +49,9 @@ protected Properties getProperties(String testName) { // The default storage is cassandra props.setProperty(MultiStorageConfig.DEFAULT_STORAGE, "cassandra"); + // Metadata cache expiration time + props.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1"); + return ConsensusCommitTestUtils.loadConsensusCommitProperties(props); } } 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 bdfb3d0c93..1a2109d537 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 @@ -136,6 +136,9 @@ private void initMultiStorageAdmin() { // The default storage is cassandra props.setProperty(MultiStorageConfig.DEFAULT_STORAGE, "cassandra"); + // Metadata cache expiration time + props.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1"); + multiStorageAdmin = new MultiStorageAdmin(new DatabaseConfig(props)); } 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 5bcdc9eed0..5bb8ea4e27 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 @@ -43,6 +43,10 @@ public static Properties getPropertiesForCassandra(@SuppressWarnings("unused") S properties.setProperty(DatabaseConfig.CROSS_PARTITION_SCAN, "true"); properties.setProperty(DatabaseConfig.CROSS_PARTITION_SCAN_FILTERING, "false"); properties.setProperty(DatabaseConfig.CROSS_PARTITION_SCAN_ORDERING, "false"); + + // Metadata cache expiration time + properties.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1"); + return properties; } @@ -65,6 +69,9 @@ public static Properties getPropertiesForJdbc(String testName) { JdbcConfig.TABLE_METADATA_SCHEMA, 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 2e14f98470..95326c3d7a 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 @@ -131,6 +131,9 @@ private void initMultiStorage() { // The default storage is cassandra props.setProperty(MultiStorageConfig.DEFAULT_STORAGE, "cassandra"); + // Metadata cache expiration time + props.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1"); + multiStorage = new MultiStorage(new DatabaseConfig(props)); } 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 527a8258eb..a071b1de7f 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 @@ -49,6 +49,9 @@ public Properties getProperties(String testName) { // The default storage is jdbc properties.setProperty(MultiStorageConfig.DEFAULT_STORAGE, "jdbc"); + // 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 5b5e31463e..9d2791d47c 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 @@ -47,6 +47,9 @@ protected Properties getProperties(String testName) { // The default storage is cassandra props.setProperty(MultiStorageConfig.DEFAULT_STORAGE, "cassandra"); + // Metadata cache expiration time + props.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1"); + return props; } 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 3e9a9a5119..c3f81ff9ee 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; @@ -33,6 +34,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; @@ -467,8 +469,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 = @@ -484,23 +486,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 = @@ -514,18 +517,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/integration-test/src/main/java/com/scalar/db/api/DistributedStorageAdminIntegrationTestBase.java b/integration-test/src/main/java/com/scalar/db/api/DistributedStorageAdminIntegrationTestBase.java index a3ff0090bc..c72c31a14c 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.exception.storage.ExecutionException; import com.scalar.db.io.DataType; import com.scalar.db.io.Key; @@ -24,6 +25,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; @@ -1193,7 +1195,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 = @@ -1206,7 +1208,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; @@ -1219,12 +1220,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() @@ -1236,7 +1239,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) @@ -1250,7 +1252,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 dbeb224f5c..6f28f3fe85 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.exception.storage.ExecutionException; import com.scalar.db.exception.transaction.TransactionException; import com.scalar.db.io.DataType; @@ -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; @@ -1289,7 +1291,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 = @@ -1302,7 +1305,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; @@ -1315,12 +1317,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() @@ -1338,13 +1342,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); }