This is an automated email from the ASF dual-hosted git repository.
jshao pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/main by this push:
new 27ca87535 [#3968] improvement(core): Disable KV entity store and
optimize CI (#3975)
27ca87535 is described below
commit 27ca87535e30535df2dc8f4108570671cd9e80bd
Author: Qi Yu <[email protected]>
AuthorDate: Mon Jul 8 19:49:18 2024 +0800
[#3968] improvement(core): Disable KV entity store and optimize CI (#3975)
### What changes were proposed in this pull request?
- Disabling support for the KV entity store and adjusting the tests
accordingly.
- Change CI about backend option `jdbcBackend`
### Why are the changes needed?
We are going to deprecate kv entity store
Fix: #3968
### Why are the changes needed?
N/A
### How was this patch tested?
Existing test.
---
.github/workflows/backend-integration-test.yml | 2 +-
build.gradle.kts | 5 +-
catalogs/catalog-hadoop/build.gradle.kts | 10 +
.../hadoop/TestHadoopCatalogOperations.java | 81 ++++++--
catalogs/catalog-kafka/build.gradle.kts | 10 +
.../catalog/kafka/TestKafkaCatalogOperations.java | 69 ++++++-
.../lakehouse/paimon/TestGravitinoPaimonTable.java | 11 ++
.../lakehouse/paimon/TestPaimonCatalog.java | 13 +-
.../catalog/lakehouse/paimon/TestPaimonSchema.java | 13 ++
.../gravitino/filesystem/hadoop/TestGvfsBase.java | 8 +
.../java/com/datastrato/gravitino/Configs.java | 2 +-
.../datastrato/gravitino/EntityStoreFactory.java | 9 +-
.../gravitino/storage/TestEntityStorage.java | 35 +---
.../storage/kv/TestEntityKeyEncoding.java | 2 +
.../gravitino/storage/kv/TestKvEntityStorage.java | 1 +
.../storage/kv/TestKvGarbageCollector.java | 2 +
.../storage/kv/TestKvNameMappingService.java | 2 +
.../gravitino/storage/kv/TestRocksDBKvBackend.java | 2 +
.../gravitino/storage/kv/TestStorageVersion.java | 2 +
.../storage/kv/TestTransactionIdGenerator.java | 1 +
.../storage/kv/TestTransactionalKvBackend.java | 1 +
.../storage/relational/TestJDBCBackend.java | 9 +-
.../storage/relational/session/TestSqlSession.java | 8 +-
core/src/test/resources/h2/schema-h2.sql | 218 ---------------------
docs/gravitino-server-config.md | 2 +-
gradle/libs.versions.toml | 1 +
.../integration/test/util/AbstractIT.java | 2 +-
.../relational/service/FilesetMetaServiceIT.java | 4 +-
28 files changed, 242 insertions(+), 283 deletions(-)
diff --git a/.github/workflows/backend-integration-test.yml
b/.github/workflows/backend-integration-test.yml
index da534f467..437acbd02 100644
--- a/.github/workflows/backend-integration-test.yml
+++ b/.github/workflows/backend-integration-test.yml
@@ -61,7 +61,7 @@ jobs:
architecture: [linux/amd64]
java-version: [ 8, 11, 17 ]
test-mode: [ embedded, deploy ]
- backend: [ jdbcBackend, kvBackend]
+ backend: [ mysql, h2]
env:
PLATFORM: ${{ matrix.architecture }}
steps:
diff --git a/build.gradle.kts b/build.gradle.kts
index ec5898921..a29b0405d 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -178,9 +178,8 @@ allprojects {
// Change poll image pause time from 30s to 60s
param.environment("TESTCONTAINERS_PULL_PAUSE_TIMEOUT", "60")
- if (project.hasProperty("jdbcBackend")) {
- param.environment("jdbcBackend", "true")
- }
+ val jdbcDatabase = project.properties["jdbcBackend"] as? String ?: "h2"
+ param.environment("jdbcBackend", jdbcDatabase)
val testMode = project.properties["testMode"] as? String ?: "embedded"
param.systemProperty("gravitino.log.path", project.buildDir.path +
"/${project.name}-integration-test.log")
diff --git a/catalogs/catalog-hadoop/build.gradle.kts
b/catalogs/catalog-hadoop/build.gradle.kts
index ccdf7c996..0dfa23154 100644
--- a/catalogs/catalog-hadoop/build.gradle.kts
+++ b/catalogs/catalog-hadoop/build.gradle.kts
@@ -53,6 +53,7 @@ dependencies {
testImplementation(libs.bundles.log4j)
testImplementation(libs.mockito.core)
+ testImplementation(libs.mockito.inline)
testImplementation(libs.mysql.driver)
testImplementation(libs.junit.jupiter.api)
testImplementation(libs.junit.jupiter.params)
@@ -101,6 +102,15 @@ tasks {
}
tasks.test {
+ doFirst {
+ val testMode = project.properties["testMode"] as? String ?: "embedded"
+ if (testMode == "deploy") {
+ environment("GRAVITINO_HOME", project.rootDir.path +
"/distribution/package")
+ } else if (testMode == "embedded") {
+ environment("GRAVITINO_HOME", project.rootDir.path)
+ }
+ }
+
val skipUTs = project.hasProperty("skipTests")
if (skipUTs) {
// Only run integration tests
diff --git
a/catalogs/catalog-hadoop/src/test/java/com/datastrato/gravitino/catalog/hadoop/TestHadoopCatalogOperations.java
b/catalogs/catalog-hadoop/src/test/java/com/datastrato/gravitino/catalog/hadoop/TestHadoopCatalogOperations.java
index 6fa41cd95..7023ad96e 100644
---
a/catalogs/catalog-hadoop/src/test/java/com/datastrato/gravitino/catalog/hadoop/TestHadoopCatalogOperations.java
+++
b/catalogs/catalog-hadoop/src/test/java/com/datastrato/gravitino/catalog/hadoop/TestHadoopCatalogOperations.java
@@ -18,20 +18,27 @@
*/
package com.datastrato.gravitino.catalog.hadoop;
-import static com.datastrato.gravitino.Configs.DEFAULT_ENTITY_KV_STORE;
-import static com.datastrato.gravitino.Configs.ENTITY_KV_ROCKSDB_BACKEND_PATH;
-import static com.datastrato.gravitino.Configs.ENTITY_KV_STORE;
+import static com.datastrato.gravitino.Configs.DEFAULT_ENTITY_RELATIONAL_STORE;
+import static
com.datastrato.gravitino.Configs.ENTITY_RELATIONAL_JDBC_BACKEND_DRIVER;
+import static
com.datastrato.gravitino.Configs.ENTITY_RELATIONAL_JDBC_BACKEND_PASSWORD;
+import static
com.datastrato.gravitino.Configs.ENTITY_RELATIONAL_JDBC_BACKEND_PATH;
+import static
com.datastrato.gravitino.Configs.ENTITY_RELATIONAL_JDBC_BACKEND_URL;
+import static
com.datastrato.gravitino.Configs.ENTITY_RELATIONAL_JDBC_BACKEND_USER;
+import static com.datastrato.gravitino.Configs.ENTITY_RELATIONAL_STORE;
+import static com.datastrato.gravitino.Configs.ENTITY_SERDE;
import static com.datastrato.gravitino.Configs.ENTITY_STORE;
+import static com.datastrato.gravitino.Configs.RELATIONAL_ENTITY_STORE;
import static com.datastrato.gravitino.Configs.STORE_DELETE_AFTER_TIME;
import static com.datastrato.gravitino.Configs.STORE_TRANSACTION_MAX_SKEW_TIME;
+import static com.datastrato.gravitino.Configs.VERSION_RETENTION_COUNT;
import static
com.datastrato.gravitino.catalog.hadoop.HadoopCatalog.CATALOG_PROPERTIES_META;
import static
com.datastrato.gravitino.catalog.hadoop.HadoopCatalog.FILESET_PROPERTIES_META;
import static
com.datastrato.gravitino.catalog.hadoop.HadoopCatalog.SCHEMA_PROPERTIES_META;
import static
com.datastrato.gravitino.connector.BaseCatalog.CATALOG_BYPASS_PREFIX;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.when;
import com.datastrato.gravitino.Config;
-import com.datastrato.gravitino.Configs;
-import com.datastrato.gravitino.EntitySerDeFactory;
import com.datastrato.gravitino.EntityStore;
import com.datastrato.gravitino.EntityStoreFactory;
import com.datastrato.gravitino.NameIdentifier;
@@ -49,9 +56,12 @@ import com.datastrato.gravitino.file.Fileset;
import com.datastrato.gravitino.file.FilesetChange;
import com.datastrato.gravitino.storage.IdGenerator;
import com.datastrato.gravitino.storage.RandomIdGenerator;
+import com.datastrato.gravitino.storage.relational.service.CatalogMetaService;
+import com.datastrato.gravitino.storage.relational.service.MetalakeMetaService;
import com.datastrato.gravitino.utils.NameIdentifierUtil;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
+import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Arrays;
@@ -71,13 +81,15 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
+import org.mockito.MockedStatic;
import org.mockito.Mockito;
public class TestHadoopCatalogOperations {
- private static final String ROCKS_DB_STORE_PATH =
+ private static final String STORE_PATH =
"/tmp/gravitino_test_entityStore_" +
UUID.randomUUID().toString().replace("-", "");
+ private static final String H2_file = STORE_PATH + ".mv.db";
private static final String UNFORMALIZED_TEST_ROOT_PATH =
"/tmp/gravitino_test_catalog_" +
UUID.randomUUID().toString().replace("-", "");
@@ -118,28 +130,65 @@ public class TestHadoopCatalogOperations {
@BeforeAll
public static void setUp() {
Config config = Mockito.mock(Config.class);
- Mockito.when(config.get(ENTITY_STORE)).thenReturn("kv");
-
Mockito.when(config.get(ENTITY_KV_STORE)).thenReturn(DEFAULT_ENTITY_KV_STORE);
- Mockito.when(config.get(Configs.ENTITY_SERDE)).thenReturn("proto");
-
Mockito.when(config.get(ENTITY_KV_ROCKSDB_BACKEND_PATH)).thenReturn(ROCKS_DB_STORE_PATH);
-
- Assertions.assertEquals(ROCKS_DB_STORE_PATH,
config.get(ENTITY_KV_ROCKSDB_BACKEND_PATH));
-
Mockito.when(config.get(STORE_TRANSACTION_MAX_SKEW_TIME)).thenReturn(1000L);
- Mockito.when(config.get(STORE_DELETE_AFTER_TIME)).thenReturn(20 * 60 *
1000L);
+ when(config.get(ENTITY_STORE)).thenReturn(RELATIONAL_ENTITY_STORE);
+
when(config.get(ENTITY_RELATIONAL_STORE)).thenReturn(DEFAULT_ENTITY_RELATIONAL_STORE);
+
when(config.get(ENTITY_RELATIONAL_JDBC_BACKEND_PATH)).thenReturn(STORE_PATH);
+
+ // The following properties are used to create the JDBC connection; they
are just for test, in
+ // the real world,
+ // they will be set automatically by the configuration file if you set
ENTITY_RELATIONAL_STORE
+ // as EMBEDDED_ENTITY_RELATIONAL_STORE.
+ when(config.get(ENTITY_RELATIONAL_JDBC_BACKEND_URL))
+ .thenReturn(String.format("jdbc:h2:%s;DB_CLOSE_DELAY=-1;MODE=MYSQL",
STORE_PATH));
+
when(config.get(ENTITY_RELATIONAL_JDBC_BACKEND_USER)).thenReturn("gravitino");
+
when(config.get(ENTITY_RELATIONAL_JDBC_BACKEND_PASSWORD)).thenReturn("gravitino");
+
when(config.get(ENTITY_RELATIONAL_JDBC_BACKEND_DRIVER)).thenReturn("org.h2.Driver");
+
+ File f = FileUtils.getFile(STORE_PATH);
+ f.deleteOnExit();
+
+ when(config.get(VERSION_RETENTION_COUNT)).thenReturn(1L);
+ when(config.get(STORE_TRANSACTION_MAX_SKEW_TIME)).thenReturn(1000L);
+ when(config.get(STORE_DELETE_AFTER_TIME)).thenReturn(20 * 60 * 1000L);
+ when(config.get(ENTITY_SERDE)).thenReturn("proto");
store = EntityStoreFactory.createEntityStore(config);
store.initialize(config);
- store.setSerDe(EntitySerDeFactory.createEntitySerDe(config));
idGenerator = new RandomIdGenerator();
+
+ // Mock
+ MetalakeMetaService metalakeMetaService =
MetalakeMetaService.getInstance();
+ MetalakeMetaService spyMetaservice = Mockito.spy(metalakeMetaService);
+ doReturn(1L).when(spyMetaservice).getMetalakeIdByName(Mockito.anyString());
+
+ CatalogMetaService catalogMetaService = CatalogMetaService.getInstance();
+ CatalogMetaService spyCatalogMetaService = Mockito.spy(catalogMetaService);
+ doReturn(1L)
+ .when(spyCatalogMetaService)
+ .getCatalogIdByMetalakeIdAndName(Mockito.anyLong(),
Mockito.anyString());
+
+ MockedStatic<MetalakeMetaService> metalakeMetaServiceMockedStatic =
+ Mockito.mockStatic(MetalakeMetaService.class);
+ MockedStatic<CatalogMetaService> catalogMetaServiceMockedStatic =
+ Mockito.mockStatic(CatalogMetaService.class);
+
+ metalakeMetaServiceMockedStatic
+ .when(MetalakeMetaService::getInstance)
+ .thenReturn(spyMetaservice);
+ catalogMetaServiceMockedStatic
+ .when(CatalogMetaService::getInstance)
+ .thenReturn(spyCatalogMetaService);
}
@AfterAll
public static void tearDown() throws IOException {
store.close();
- FileUtils.deleteDirectory(FileUtils.getFile(ROCKS_DB_STORE_PATH));
new Path(TEST_ROOT_PATH)
.getFileSystem(new Configuration())
.delete(new Path(TEST_ROOT_PATH), true);
+
+ File f = FileUtils.getFile(H2_file);
+ f.delete();
}
@Test
diff --git a/catalogs/catalog-kafka/build.gradle.kts
b/catalogs/catalog-kafka/build.gradle.kts
index 790383433..8ce72eeba 100644
--- a/catalogs/catalog-kafka/build.gradle.kts
+++ b/catalogs/catalog-kafka/build.gradle.kts
@@ -43,6 +43,7 @@ dependencies {
testImplementation(libs.junit.jupiter.api)
testImplementation(libs.kafka)
testImplementation(libs.mockito.core)
+ testImplementation(libs.mockito.inline)
testImplementation(libs.mysql.driver)
testImplementation(libs.testcontainers)
testImplementation(libs.testcontainers.mysql)
@@ -83,6 +84,15 @@
tasks.getByName("generateMetadataFileForMavenJavaPublication") {
}
tasks.test {
+ doFirst {
+ val testMode = project.properties["testMode"] as? String ?: "embedded"
+ if (testMode == "deploy") {
+ environment("GRAVITINO_HOME", project.rootDir.path +
"/distribution/package")
+ } else if (testMode == "embedded") {
+ environment("GRAVITINO_HOME", project.rootDir.path)
+ }
+ }
+
val skipUTs = project.hasProperty("skipTests")
if (skipUTs) {
// Only run integration tests
diff --git
a/catalogs/catalog-kafka/src/test/java/com/datastrato/gravitino/catalog/kafka/TestKafkaCatalogOperations.java
b/catalogs/catalog-kafka/src/test/java/com/datastrato/gravitino/catalog/kafka/TestKafkaCatalogOperations.java
index 2d29b2f68..93cee22d2 100644
---
a/catalogs/catalog-kafka/src/test/java/com/datastrato/gravitino/catalog/kafka/TestKafkaCatalogOperations.java
+++
b/catalogs/catalog-kafka/src/test/java/com/datastrato/gravitino/catalog/kafka/TestKafkaCatalogOperations.java
@@ -20,11 +20,21 @@ package com.datastrato.gravitino.catalog.kafka;
import static com.datastrato.gravitino.Catalog.Type.MESSAGING;
import static com.datastrato.gravitino.Configs.DEFAULT_ENTITY_KV_STORE;
+import static com.datastrato.gravitino.Configs.DEFAULT_ENTITY_RELATIONAL_STORE;
import static com.datastrato.gravitino.Configs.ENTITY_KV_ROCKSDB_BACKEND_PATH;
import static com.datastrato.gravitino.Configs.ENTITY_KV_STORE;
+import static
com.datastrato.gravitino.Configs.ENTITY_RELATIONAL_JDBC_BACKEND_DRIVER;
+import static
com.datastrato.gravitino.Configs.ENTITY_RELATIONAL_JDBC_BACKEND_PASSWORD;
+import static
com.datastrato.gravitino.Configs.ENTITY_RELATIONAL_JDBC_BACKEND_PATH;
+import static
com.datastrato.gravitino.Configs.ENTITY_RELATIONAL_JDBC_BACKEND_URL;
+import static
com.datastrato.gravitino.Configs.ENTITY_RELATIONAL_JDBC_BACKEND_USER;
+import static com.datastrato.gravitino.Configs.ENTITY_RELATIONAL_STORE;
+import static com.datastrato.gravitino.Configs.ENTITY_SERDE;
import static com.datastrato.gravitino.Configs.ENTITY_STORE;
+import static com.datastrato.gravitino.Configs.RELATIONAL_ENTITY_STORE;
import static com.datastrato.gravitino.Configs.STORE_DELETE_AFTER_TIME;
import static com.datastrato.gravitino.Configs.STORE_TRANSACTION_MAX_SKEW_TIME;
+import static com.datastrato.gravitino.Configs.VERSION_RETENTION_COUNT;
import static com.datastrato.gravitino.StringIdentifier.ID_KEY;
import static
com.datastrato.gravitino.catalog.kafka.KafkaCatalog.CATALOG_PROPERTIES_METADATA;
import static
com.datastrato.gravitino.catalog.kafka.KafkaCatalog.SCHEMA_PROPERTIES_METADATA;
@@ -33,10 +43,11 @@ import static
com.datastrato.gravitino.catalog.kafka.KafkaCatalogOperations.CLIE
import static
com.datastrato.gravitino.catalog.kafka.KafkaCatalogPropertiesMetadata.BOOTSTRAP_SERVERS;
import static
com.datastrato.gravitino.catalog.kafka.KafkaTopicPropertiesMetadata.PARTITION_COUNT;
import static
com.datastrato.gravitino.catalog.kafka.KafkaTopicPropertiesMetadata.REPLICATION_FACTOR;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.when;
import com.datastrato.gravitino.Config;
import com.datastrato.gravitino.Configs;
-import com.datastrato.gravitino.EntitySerDeFactory;
import com.datastrato.gravitino.EntityStore;
import com.datastrato.gravitino.EntityStoreFactory;
import com.datastrato.gravitino.NameIdentifier;
@@ -55,7 +66,10 @@ import com.datastrato.gravitino.meta.AuditInfo;
import com.datastrato.gravitino.meta.CatalogEntity;
import com.datastrato.gravitino.storage.IdGenerator;
import com.datastrato.gravitino.storage.RandomIdGenerator;
+import com.datastrato.gravitino.storage.relational.service.CatalogMetaService;
+import com.datastrato.gravitino.storage.relational.service.MetalakeMetaService;
import com.google.common.collect.ImmutableMap;
+import java.io.File;
import java.io.IOException;
import java.time.Instant;
import java.util.Map;
@@ -65,12 +79,13 @@ import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
+import org.mockito.MockedStatic;
import org.mockito.Mockito;
public class TestKafkaCatalogOperations extends KafkaClusterEmbedded {
- private static final String ROCKS_DB_STORE_PATH =
- "/tmp/gravitino_test_entityStore_" + genRandomString();
+ private static final String STORE_PATH = "/tmp/gravitino_test_entityStore_"
+ genRandomString();
+ private static final String H2_FILE = STORE_PATH + ".mv.db";
private static final String METALAKE_NAME = "metalake";
private static final String CATALOG_NAME = "test_kafka_catalog";
private static final String DEFAULT_SCHEMA_NAME = "default";
@@ -114,15 +129,55 @@ public class TestKafkaCatalogOperations extends
KafkaClusterEmbedded {
Mockito.when(config.get(ENTITY_STORE)).thenReturn("kv");
Mockito.when(config.get(ENTITY_KV_STORE)).thenReturn(DEFAULT_ENTITY_KV_STORE);
Mockito.when(config.get(Configs.ENTITY_SERDE)).thenReturn("proto");
-
Mockito.when(config.get(ENTITY_KV_ROCKSDB_BACKEND_PATH)).thenReturn(ROCKS_DB_STORE_PATH);
+
Mockito.when(config.get(ENTITY_KV_ROCKSDB_BACKEND_PATH)).thenReturn(STORE_PATH);
- Assertions.assertEquals(ROCKS_DB_STORE_PATH,
config.get(ENTITY_KV_ROCKSDB_BACKEND_PATH));
+ Assertions.assertEquals(STORE_PATH,
config.get(ENTITY_KV_ROCKSDB_BACKEND_PATH));
Mockito.when(config.get(STORE_TRANSACTION_MAX_SKEW_TIME)).thenReturn(1000L);
Mockito.when(config.get(STORE_DELETE_AFTER_TIME)).thenReturn(20 * 60 *
1000L);
+ when(config.get(ENTITY_STORE)).thenReturn(RELATIONAL_ENTITY_STORE);
+
when(config.get(ENTITY_RELATIONAL_STORE)).thenReturn(DEFAULT_ENTITY_RELATIONAL_STORE);
+
when(config.get(ENTITY_RELATIONAL_JDBC_BACKEND_PATH)).thenReturn(STORE_PATH);
+
+ when(config.get(ENTITY_RELATIONAL_JDBC_BACKEND_URL))
+ .thenReturn(String.format("jdbc:h2:%s;DB_CLOSE_DELAY=-1;MODE=MYSQL",
STORE_PATH));
+
when(config.get(ENTITY_RELATIONAL_JDBC_BACKEND_USER)).thenReturn("gravitino");
+
when(config.get(ENTITY_RELATIONAL_JDBC_BACKEND_PASSWORD)).thenReturn("gravitino");
+
when(config.get(ENTITY_RELATIONAL_JDBC_BACKEND_DRIVER)).thenReturn("org.h2.Driver");
+
+ File f = FileUtils.getFile(STORE_PATH);
+ f.deleteOnExit();
+
+ when(config.get(VERSION_RETENTION_COUNT)).thenReturn(1L);
+ when(config.get(STORE_TRANSACTION_MAX_SKEW_TIME)).thenReturn(1000L);
+ when(config.get(STORE_DELETE_AFTER_TIME)).thenReturn(20 * 60 * 1000L);
+ when(config.get(ENTITY_SERDE)).thenReturn("proto");
+
+ // Mock
+ MetalakeMetaService metalakeMetaService =
MetalakeMetaService.getInstance();
+ MetalakeMetaService spyMetaservice = Mockito.spy(metalakeMetaService);
+ doReturn(1L).when(spyMetaservice).getMetalakeIdByName(Mockito.anyString());
+
+ CatalogMetaService catalogMetaService = CatalogMetaService.getInstance();
+ CatalogMetaService spyCatalogMetaService = Mockito.spy(catalogMetaService);
+ doReturn(1L)
+ .when(spyCatalogMetaService)
+ .getCatalogIdByMetalakeIdAndName(Mockito.anyLong(),
Mockito.anyString());
+
+ MockedStatic<MetalakeMetaService> metalakeMetaServiceMockedStatic =
+ Mockito.mockStatic(MetalakeMetaService.class);
+ MockedStatic<CatalogMetaService> catalogMetaServiceMockedStatic =
+ Mockito.mockStatic(CatalogMetaService.class);
+
+ metalakeMetaServiceMockedStatic
+ .when(MetalakeMetaService::getInstance)
+ .thenReturn(spyMetaservice);
+ catalogMetaServiceMockedStatic
+ .when(CatalogMetaService::getInstance)
+ .thenReturn(spyCatalogMetaService);
+
store = EntityStoreFactory.createEntityStore(config);
store.initialize(config);
- store.setSerDe(EntitySerDeFactory.createEntitySerDe(config));
idGenerator = new RandomIdGenerator();
kafkaCatalogEntity =
CatalogEntity.builder()
@@ -147,7 +202,7 @@ public class TestKafkaCatalogOperations extends
KafkaClusterEmbedded {
public static void tearDown() throws IOException {
if (store != null) {
store.close();
- FileUtils.deleteDirectory(FileUtils.getFile(ROCKS_DB_STORE_PATH));
+ FileUtils.deleteQuietly(FileUtils.getFile(H2_FILE));
}
}
diff --git
a/catalogs/catalog-lakehouse-paimon/src/test/java/com/datastrato/gravitino/catalog/lakehouse/paimon/TestGravitinoPaimonTable.java
b/catalogs/catalog-lakehouse-paimon/src/test/java/com/datastrato/gravitino/catalog/lakehouse/paimon/TestGravitinoPaimonTable.java
index eba62d4de..1c8b40fe6 100644
---
a/catalogs/catalog-lakehouse-paimon/src/test/java/com/datastrato/gravitino/catalog/lakehouse/paimon/TestGravitinoPaimonTable.java
+++
b/catalogs/catalog-lakehouse-paimon/src/test/java/com/datastrato/gravitino/catalog/lakehouse/paimon/TestGravitinoPaimonTable.java
@@ -38,11 +38,15 @@ import
com.datastrato.gravitino.rel.expressions.sorts.SortOrder;
import com.datastrato.gravitino.rel.expressions.transforms.Transform;
import com.datastrato.gravitino.rel.types.Types;
import com.google.common.collect.Maps;
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.time.Instant;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
+import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.paimon.schema.Schema;
import org.apache.paimon.types.DataField;
@@ -98,6 +102,13 @@ public class TestGravitinoPaimonTable {
@AfterAll
static void cleanUp() {
paimonCatalogOperations.dropSchema(schemaIdent, true);
+ String warehousePath = "/tmp/paimon_catalog_warehouse";
+ try {
+ FileUtils.deleteDirectory(new File(warehousePath));
+ Files.delete(Paths.get(warehousePath));
+ } catch (Exception e) {
+ // Ignore
+ }
}
private static CatalogEntity createDefaultCatalogEntity() {
diff --git
a/catalogs/catalog-lakehouse-paimon/src/test/java/com/datastrato/gravitino/catalog/lakehouse/paimon/TestPaimonCatalog.java
b/catalogs/catalog-lakehouse-paimon/src/test/java/com/datastrato/gravitino/catalog/lakehouse/paimon/TestPaimonCatalog.java
index fb8cb2bd6..3ba2dde0c 100644
---
a/catalogs/catalog-lakehouse-paimon/src/test/java/com/datastrato/gravitino/catalog/lakehouse/paimon/TestPaimonCatalog.java
+++
b/catalogs/catalog-lakehouse-paimon/src/test/java/com/datastrato/gravitino/catalog/lakehouse/paimon/TestPaimonCatalog.java
@@ -35,6 +35,8 @@ import java.io.File;
import java.io.IOException;
import java.time.Instant;
import java.util.Map;
+import org.apache.commons.io.FileUtils;
+import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -69,9 +71,18 @@ public class TestPaimonCatalog {
}
};
- private String tempDir =
+ private static String tempDir =
String.join(File.separator, System.getProperty("java.io.tmpdir"),
"paimon_catalog_warehouse");
+ @AfterAll
+ public static void clean() {
+ try {
+ FileUtils.deleteDirectory(new File(tempDir));
+ } catch (Exception e) {
+ // Ignore
+ }
+ }
+
@Test
public void testCatalogOperation() {
AuditInfo auditInfo =
diff --git
a/catalogs/catalog-lakehouse-paimon/src/test/java/com/datastrato/gravitino/catalog/lakehouse/paimon/TestPaimonSchema.java
b/catalogs/catalog-lakehouse-paimon/src/test/java/com/datastrato/gravitino/catalog/lakehouse/paimon/TestPaimonSchema.java
index f492c30ab..3fe4f563c 100644
---
a/catalogs/catalog-lakehouse-paimon/src/test/java/com/datastrato/gravitino/catalog/lakehouse/paimon/TestPaimonSchema.java
+++
b/catalogs/catalog-lakehouse-paimon/src/test/java/com/datastrato/gravitino/catalog/lakehouse/paimon/TestPaimonSchema.java
@@ -28,11 +28,14 @@ import com.datastrato.gravitino.meta.AuditInfo;
import com.datastrato.gravitino.meta.CatalogEntity;
import com.google.common.collect.Maps;
import java.io.File;
+import java.io.IOException;
import java.time.Instant;
import java.util.Arrays;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
+import org.apache.commons.io.FileUtils;
+import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -51,6 +54,16 @@ public class TestPaimonSchema {
NoSuchSchemaException.class, () ->
paimonCatalogOperations.loadSchema(ident));
}
+ @AfterAll
+ static void cleanUpFile() {
+ try {
+ FileUtils.deleteDirectory(
+ new File(System.getProperty("java.io.tmpdir") +
"/paimon_catalog_warehouse"));
+ } catch (IOException e) {
+ // Ignore
+ }
+ }
+
@Test
public void testCreatePaimonSchema() {
PaimonCatalog paimonCatalog = initPaimonCatalog("testCreatePaimonSchema");
diff --git
a/clients/filesystem-hadoop3/src/test/java/com/datastrato/gravitino/filesystem/hadoop/TestGvfsBase.java
b/clients/filesystem-hadoop3/src/test/java/com/datastrato/gravitino/filesystem/hadoop/TestGvfsBase.java
index dfe489421..2c6af2ef5 100644
---
a/clients/filesystem-hadoop3/src/test/java/com/datastrato/gravitino/filesystem/hadoop/TestGvfsBase.java
+++
b/clients/filesystem-hadoop3/src/test/java/com/datastrato/gravitino/filesystem/hadoop/TestGvfsBase.java
@@ -27,6 +27,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import com.datastrato.gravitino.NameIdentifier;
import com.datastrato.gravitino.file.Fileset;
+import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
@@ -37,6 +38,7 @@ import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
+import org.apache.commons.io.FileUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
@@ -80,6 +82,12 @@ public class TestGvfsBase extends GravitinoMockServerBase {
@AfterAll
public static void tearDown() {
GravitinoMockServerBase.tearDown();
+ String fileName = FileSystemTestUtils.localRootPrefix().replace("file:",
"");
+ try {
+ FileUtils.deleteDirectory(new File(fileName));
+ } catch (Exception e) {
+ // Ignore
+ }
}
@BeforeEach
diff --git a/core/src/main/java/com/datastrato/gravitino/Configs.java
b/core/src/main/java/com/datastrato/gravitino/Configs.java
index 5ee2232ca..6c7fa3fb5 100644
--- a/core/src/main/java/com/datastrato/gravitino/Configs.java
+++ b/core/src/main/java/com/datastrato/gravitino/Configs.java
@@ -30,7 +30,7 @@ public class Configs {
private Configs() {}
- public static final String DEFAULT_ENTITY_STORE = "kv";
+ public static final String KV_STORE_KEY = "kv";
public static final String RELATIONAL_ENTITY_STORE = "relational";
public static final String ENTITY_STORE_KEY = "gravitino.entity.store";
diff --git
a/core/src/main/java/com/datastrato/gravitino/EntityStoreFactory.java
b/core/src/main/java/com/datastrato/gravitino/EntityStoreFactory.java
index 249a0a9e9..bfd74efc7 100644
--- a/core/src/main/java/com/datastrato/gravitino/EntityStoreFactory.java
+++ b/core/src/main/java/com/datastrato/gravitino/EntityStoreFactory.java
@@ -18,6 +18,8 @@
*/
package com.datastrato.gravitino;
+import static com.datastrato.gravitino.Configs.KV_STORE_KEY;
+
import com.datastrato.gravitino.storage.kv.KvEntityStore;
import com.datastrato.gravitino.storage.relational.RelationalEntityStore;
import com.google.common.collect.ImmutableMap;
@@ -36,7 +38,7 @@ public class EntityStoreFactory {
// doesn't need to specify the full qualified class name when creating an
EntityStore.
public static final ImmutableMap<String, String> ENTITY_STORES =
ImmutableMap.of(
- Configs.DEFAULT_ENTITY_STORE,
+ KV_STORE_KEY,
KvEntityStore.class.getCanonicalName(),
Configs.RELATIONAL_ENTITY_STORE,
RelationalEntityStore.class.getCanonicalName());
@@ -54,6 +56,11 @@ public class EntityStoreFactory {
String name = config.get(Configs.ENTITY_STORE);
String className = ENTITY_STORES.getOrDefault(name, name);
+ if (KV_STORE_KEY.equals(name)) {
+ throw new UnsupportedOperationException(
+ "KvEntityStore is not supported since version 0.6.0. Please use
RelationalEntityStore instead.");
+ }
+
try {
return (EntityStore)
Class.forName(className).getDeclaredConstructor().newInstance();
} catch (Exception e) {
diff --git
a/core/src/test/java/com/datastrato/gravitino/storage/TestEntityStorage.java
b/core/src/test/java/com/datastrato/gravitino/storage/TestEntityStorage.java
index b38dc0ef5..09a14682c 100644
--- a/core/src/test/java/com/datastrato/gravitino/storage/TestEntityStorage.java
+++ b/core/src/test/java/com/datastrato/gravitino/storage/TestEntityStorage.java
@@ -63,14 +63,12 @@ import com.datastrato.gravitino.meta.SchemaVersion;
import com.datastrato.gravitino.meta.TableEntity;
import com.datastrato.gravitino.meta.TopicEntity;
import com.datastrato.gravitino.meta.UserEntity;
-import com.datastrato.gravitino.storage.relational.RelationalEntityStore;
import
com.datastrato.gravitino.storage.relational.session.SqlSessionFactoryHelper;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import java.io.File;
import java.io.IOException;
-import java.nio.charset.StandardCharsets;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
@@ -78,10 +76,8 @@ import java.sql.Statement;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
-import java.util.Objects;
import java.util.UUID;
import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.jupiter.api.Assertions;
@@ -96,14 +92,15 @@ public class TestEntityStorage {
private static final String JDBC_STORE_PATH =
"/tmp/gravitino_jdbc_entityStore_" +
UUID.randomUUID().toString().replace("-", "");
private static final String DB_DIR = JDBC_STORE_PATH + "/testdb";
+ private static final String H2_FILE = DB_DIR + ".mv.db";
static Object[] storageProvider() {
- return new Object[] {Configs.DEFAULT_ENTITY_STORE,
Configs.RELATIONAL_ENTITY_STORE};
+ return new Object[] {Configs.RELATIONAL_ENTITY_STORE};
}
private void init(String type, Config config) {
Preconditions.checkArgument(StringUtils.isNotBlank(type));
- if (type.equals(Configs.DEFAULT_ENTITY_STORE)) {
+ if (type.equals(Configs.KV_STORE_KEY)) {
try {
FileUtils.deleteDirectory(FileUtils.getFile(KV_STORE_PATH));
} catch (Exception e) {
@@ -145,28 +142,9 @@ public class TestEntityStorage {
}
}
- private void prepareJdbcTable() {
- // Read the ddl sql to create table
- String scriptPath = "h2/schema-h2.sql";
- try (SqlSession sqlSession =
-
SqlSessionFactoryHelper.getInstance().getSqlSessionFactory().openSession(true);
- Connection connection = sqlSession.getConnection();
- Statement statement = connection.createStatement()) {
- StringBuilder ddlBuilder = new StringBuilder();
- IOUtils.readLines(
- Objects.requireNonNull(
-
this.getClass().getClassLoader().getResourceAsStream(scriptPath)),
- StandardCharsets.UTF_8)
- .forEach(line -> ddlBuilder.append(line).append("\n"));
- statement.execute(ddlBuilder.toString());
- } catch (Exception e) {
- throw new IllegalStateException("Create tables failed", e);
- }
- }
-
private void destroy(String type) {
Preconditions.checkArgument(StringUtils.isNotBlank(type));
- if (type.equals(Configs.DEFAULT_ENTITY_STORE)) {
+ if (type.equals(Configs.KV_STORE_KEY)) {
try {
FileUtils.deleteDirectory(FileUtils.getFile(KV_STORE_PATH));
} catch (Exception e) {
@@ -178,6 +156,8 @@ public class TestEntityStorage {
if (dir.exists()) {
dir.delete();
}
+
+ FileUtils.deleteQuietly(new File(H2_FILE));
} else {
throw new UnsupportedOperationException("Unsupported entity store type:
" + type);
}
@@ -2135,9 +2115,6 @@ public class TestEntityStorage {
try (EntityStore store = EntityStoreFactory.createEntityStore(config)) {
store.initialize(config);
- if (store instanceof RelationalEntityStore) {
- prepareJdbcTable();
- }
BaseMetalake metalake = createBaseMakeLake(1L, "metalake", auditInfo);
CatalogEntity catalog = createCatalog(1L, Namespace.of("metalake"),
"catalog", auditInfo);
diff --git
a/core/src/test/java/com/datastrato/gravitino/storage/kv/TestEntityKeyEncoding.java
b/core/src/test/java/com/datastrato/gravitino/storage/kv/TestEntityKeyEncoding.java
index 588bde8e6..a8c7a2ac3 100644
---
a/core/src/test/java/com/datastrato/gravitino/storage/kv/TestEntityKeyEncoding.java
+++
b/core/src/test/java/com/datastrato/gravitino/storage/kv/TestEntityKeyEncoding.java
@@ -46,6 +46,7 @@ import java.util.Random;
import java.util.stream.Stream;
import org.apache.commons.lang3.tuple.Pair;
import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestInstance.Lifecycle;
@@ -55,6 +56,7 @@ import org.junit.jupiter.params.provider.MethodSource;
import org.mockito.Mockito;
@TestInstance(Lifecycle.PER_CLASS)
+@Disabled("Gravitino will not support KV entity store since 0.6.0, so we
disable this test.")
public class TestEntityKeyEncoding {
private Config getConfig() throws IOException {
File baseDir = new File(System.getProperty("java.io.tmpdir"));
diff --git
a/core/src/test/java/com/datastrato/gravitino/storage/kv/TestKvEntityStorage.java
b/core/src/test/java/com/datastrato/gravitino/storage/kv/TestKvEntityStorage.java
index f8d41f351..28985c31e 100644
---
a/core/src/test/java/com/datastrato/gravitino/storage/kv/TestKvEntityStorage.java
+++
b/core/src/test/java/com/datastrato/gravitino/storage/kv/TestKvEntityStorage.java
@@ -63,6 +63,7 @@ import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
+@Disabled("Gravitino will not support KV entity store since 0.6.0, so we
disable this test.")
public class TestKvEntityStorage extends TestEntityStorage {
@BeforeEach
@AfterEach
diff --git
a/core/src/test/java/com/datastrato/gravitino/storage/kv/TestKvGarbageCollector.java
b/core/src/test/java/com/datastrato/gravitino/storage/kv/TestKvGarbageCollector.java
index 8a58f8525..cef6e2e40 100644
---
a/core/src/test/java/com/datastrato/gravitino/storage/kv/TestKvGarbageCollector.java
+++
b/core/src/test/java/com/datastrato/gravitino/storage/kv/TestKvGarbageCollector.java
@@ -59,10 +59,12 @@ import java.time.Instant;
import java.util.List;
import org.apache.commons.lang3.tuple.Pair;
import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@SuppressWarnings("DefaultCharset")
+@Disabled("Gravitino will not support KV entity store since 0.6.0, so we
disable this test.")
class TestKvGarbageCollector {
public Config getConfig() throws IOException {
Config config = Mockito.mock(Config.class);
diff --git
a/core/src/test/java/com/datastrato/gravitino/storage/kv/TestKvNameMappingService.java
b/core/src/test/java/com/datastrato/gravitino/storage/kv/TestKvNameMappingService.java
index 40a6bacc8..f8cdd091b 100644
---
a/core/src/test/java/com/datastrato/gravitino/storage/kv/TestKvNameMappingService.java
+++
b/core/src/test/java/com/datastrato/gravitino/storage/kv/TestKvNameMappingService.java
@@ -37,9 +37,11 @@ import java.io.IOException;
import java.lang.reflect.Field;
import java.nio.file.Files;
import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
+@Disabled("Gravitino will not support KV entity store since 0.6.0, so we
disable this test.")
public class TestKvNameMappingService {
private Config getConfig() throws IOException {
File baseDir = new File(System.getProperty("java.io.tmpdir"));
diff --git
a/core/src/test/java/com/datastrato/gravitino/storage/kv/TestRocksDBKvBackend.java
b/core/src/test/java/com/datastrato/gravitino/storage/kv/TestRocksDBKvBackend.java
index 588908ba2..e1d3d80b0 100644
---
a/core/src/test/java/com/datastrato/gravitino/storage/kv/TestRocksDBKvBackend.java
+++
b/core/src/test/java/com/datastrato/gravitino/storage/kv/TestRocksDBKvBackend.java
@@ -30,11 +30,13 @@ import java.nio.file.Files;
import java.util.List;
import org.apache.commons.lang3.tuple.Pair;
import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.rocksdb.RocksDB;
import org.rocksdb.RocksDBException;
+@Disabled("Gravitino will not support KV entity store since 0.6.0, so we
disable this test.")
public class TestRocksDBKvBackend {
private KvBackend getKvBackEnd() throws IOException {
diff --git
a/core/src/test/java/com/datastrato/gravitino/storage/kv/TestStorageVersion.java
b/core/src/test/java/com/datastrato/gravitino/storage/kv/TestStorageVersion.java
index 3f8bd230b..fcf1eb03d 100644
---
a/core/src/test/java/com/datastrato/gravitino/storage/kv/TestStorageVersion.java
+++
b/core/src/test/java/com/datastrato/gravitino/storage/kv/TestStorageVersion.java
@@ -37,9 +37,11 @@ import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
+@Disabled("Gravitino will not support KV entity store since 0.6.0, so we
disable this test.")
class TestStorageVersion {
@Test
diff --git
a/core/src/test/java/com/datastrato/gravitino/storage/kv/TestTransactionIdGenerator.java
b/core/src/test/java/com/datastrato/gravitino/storage/kv/TestTransactionIdGenerator.java
index a2903bc4a..22e6b9f5e 100644
---
a/core/src/test/java/com/datastrato/gravitino/storage/kv/TestTransactionIdGenerator.java
+++
b/core/src/test/java/com/datastrato/gravitino/storage/kv/TestTransactionIdGenerator.java
@@ -42,6 +42,7 @@ import org.mockito.Mockito;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+@Disabled("Gravitino will not support KV entity store since 0.6.0, so we
disable this test.")
public class TestTransactionIdGenerator {
private static final Logger LOGGER =
LoggerFactory.getLogger(TestTransactionalKvBackend.class);
diff --git
a/core/src/test/java/com/datastrato/gravitino/storage/kv/TestTransactionalKvBackend.java
b/core/src/test/java/com/datastrato/gravitino/storage/kv/TestTransactionalKvBackend.java
index 936fbc492..7514c290c 100644
---
a/core/src/test/java/com/datastrato/gravitino/storage/kv/TestTransactionalKvBackend.java
+++
b/core/src/test/java/com/datastrato/gravitino/storage/kv/TestTransactionalKvBackend.java
@@ -54,6 +54,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@SuppressWarnings("DefaultCharset")
+@Disabled("Gravitino will not support KV entity store since 0.6.0, so we
disable this test.")
class TestTransactionalKvBackend {
private static final Logger LOGGER =
LoggerFactory.getLogger(TestTransactionalKvBackend.class);
diff --git
a/core/src/test/java/com/datastrato/gravitino/storage/relational/TestJDBCBackend.java
b/core/src/test/java/com/datastrato/gravitino/storage/relational/TestJDBCBackend.java
index ffb7f9dc4..7a62eacab 100644
---
a/core/src/test/java/com/datastrato/gravitino/storage/relational/TestJDBCBackend.java
+++
b/core/src/test/java/com/datastrato/gravitino/storage/relational/TestJDBCBackend.java
@@ -65,6 +65,8 @@ import com.google.common.collect.Lists;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
@@ -88,6 +90,7 @@ public class TestJDBCBackend {
private static final String JDBC_STORE_PATH =
"/tmp/gravitino_jdbc_entityStore_" +
UUID.randomUUID().toString().replace("-", "");
private static final String DB_DIR = JDBC_STORE_PATH + "/testdb";
+ private static final String H2_FILE = DB_DIR + ".mv.db";
private static final Config config = Mockito.mock(Config.class);
public static final ImmutableMap<String, String> RELATIONAL_BACKENDS =
ImmutableMap.of(
@@ -97,6 +100,7 @@ public class TestJDBCBackend {
@BeforeAll
public static void setup() {
File dir = new File(DB_DIR);
+ dir.deleteOnExit();
if (dir.exists() || !dir.isDirectory()) {
dir.delete();
}
@@ -127,8 +131,11 @@ public class TestJDBCBackend {
dropAllTables();
File dir = new File(DB_DIR);
if (dir.exists()) {
- dir.delete();
+ Files.delete(Paths.get(DB_DIR));
}
+
+ Files.delete(Paths.get(H2_FILE));
+ Files.delete(Paths.get(JDBC_STORE_PATH));
backend.close();
}
diff --git
a/core/src/test/java/com/datastrato/gravitino/storage/relational/session/TestSqlSession.java
b/core/src/test/java/com/datastrato/gravitino/storage/relational/session/TestSqlSession.java
index e64e454c1..03e9904ed 100644
---
a/core/src/test/java/com/datastrato/gravitino/storage/relational/session/TestSqlSession.java
+++
b/core/src/test/java/com/datastrato/gravitino/storage/relational/session/TestSqlSession.java
@@ -35,9 +35,12 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
import com.datastrato.gravitino.Config;
import java.io.File;
import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.sql.SQLException;
import java.util.UUID;
import org.apache.commons.dbcp2.BasicDataSource;
+import org.apache.commons.io.FileUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
@@ -85,8 +88,11 @@ public class TestSqlSession {
public static void tearDown() throws IOException {
File dir = new File(DB_DIR);
if (dir.exists()) {
- dir.delete();
+ FileUtils.deleteDirectory(FileUtils.getFile(DB_DIR));
}
+
+ Files.delete(Paths.get(MYSQL_STORE_PATH));
+
SqlSessionFactoryHelper.getInstance().close();
}
diff --git a/core/src/test/resources/h2/schema-h2.sql
b/core/src/test/resources/h2/schema-h2.sql
deleted file mode 100644
index 8d29af599..000000000
--- a/core/src/test/resources/h2/schema-h2.sql
+++ /dev/null
@@ -1,218 +0,0 @@
---
--- Licensed to the Apache Software Foundation (ASF) under one
--- or more contributor license agreements. See the NOTICE file--
--- distributed with this work for additional information
--- regarding copyright ownership. The ASF licenses this file
--- to you under the Apache License, Version 2.0 (the
--- "License"). You may not use this file except in compliance
--- with the License. You may obtain a copy of the License at
---
--- http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing,
--- software distributed under the License is distributed on an
--- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
--- KIND, either express or implied. See the License for the
--- specific language governing permissions and limitations
--- under the License.
---
-
-CREATE TABLE IF NOT EXISTS `metalake_meta` (
- `metalake_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'metalake id',
- `metalake_name` VARCHAR(128) NOT NULL COMMENT 'metalake name',
- `metalake_comment` VARCHAR(256) DEFAULT '' COMMENT 'metalake comment',
- `properties` MEDIUMTEXT DEFAULT NULL COMMENT 'metalake properties',
- `audit_info` MEDIUMTEXT NOT NULL COMMENT 'metalake audit info',
- `schema_version` MEDIUMTEXT NOT NULL COMMENT 'metalake schema version
info',
- `current_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'metalake
current version',
- `last_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'metalake last
version',
- `deleted_at` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'metalake
deleted at',
- PRIMARY KEY (metalake_id),
- CONSTRAINT uk_mn_del UNIQUE (metalake_name, deleted_at)
-) ENGINE = InnoDB;
-
-
-CREATE TABLE IF NOT EXISTS `catalog_meta` (
- `catalog_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'catalog id',
- `catalog_name` VARCHAR(128) NOT NULL COMMENT 'catalog name',
- `metalake_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'metalake id',
- `type` VARCHAR(64) NOT NULL COMMENT 'catalog type',
- `provider` VARCHAR(64) NOT NULL COMMENT 'catalog provider',
- `catalog_comment` VARCHAR(256) DEFAULT '' COMMENT 'catalog comment',
- `properties` MEDIUMTEXT DEFAULT NULL COMMENT 'catalog properties',
- `audit_info` MEDIUMTEXT NOT NULL COMMENT 'catalog audit info',
- `current_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'catalog current
version',
- `last_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'catalog last
version',
- `deleted_at` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'catalog
deleted at',
- PRIMARY KEY (catalog_id),
- CONSTRAINT uk_mid_cn_del UNIQUE (metalake_id, catalog_name, deleted_at)
-) ENGINE=InnoDB;
-
-
-CREATE TABLE IF NOT EXISTS `schema_meta` (
- `schema_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'schema id',
- `schema_name` VARCHAR(128) NOT NULL COMMENT 'schema name',
- `metalake_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'metalake id',
- `catalog_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'catalog id',
- `schema_comment` VARCHAR(256) DEFAULT '' COMMENT 'schema comment',
- `properties` MEDIUMTEXT DEFAULT NULL COMMENT 'schema properties',
- `audit_info` MEDIUMTEXT NOT NULL COMMENT 'schema audit info',
- `current_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'schema current
version',
- `last_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'schema last
version',
- `deleted_at` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'schema
deleted at',
- PRIMARY KEY (schema_id),
- CONSTRAINT uk_cid_sn_del UNIQUE (catalog_id, schema_name, deleted_at),
- -- Aliases are used here, and indexes with the same name in H2 can only be
created once.
- KEY idx_smid (metalake_id)
-) ENGINE=InnoDB;
-
-CREATE TABLE IF NOT EXISTS `table_meta` (
- `table_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'table id',
- `table_name` VARCHAR(128) NOT NULL COMMENT 'table name',
- `metalake_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'metalake id',
- `catalog_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'catalog id',
- `schema_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'schema id',
- `audit_info` MEDIUMTEXT NOT NULL COMMENT 'table audit info',
- `current_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'table current
version',
- `last_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'table last
version',
- `deleted_at` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'table deleted
at',
- PRIMARY KEY (table_id),
- CONSTRAINT uk_sid_tn_del UNIQUE (schema_id, table_name, deleted_at),
- -- Aliases are used here, and indexes with the same name in H2 can only be
created once.
- KEY idx_tmid (metalake_id),
- KEY idx_tcid (catalog_id)
-) ENGINE=InnoDB;
-
-
-CREATE TABLE IF NOT EXISTS `fileset_meta` (
- `fileset_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'fileset id',
- `fileset_name` VARCHAR(128) NOT NULL COMMENT 'fileset name',
- `metalake_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'metalake id',
- `catalog_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'catalog id',
- `schema_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'schema id',
- `type` VARCHAR(64) NOT NULL COMMENT 'fileset type',
- `audit_info` MEDIUMTEXT NOT NULL COMMENT 'fileset audit info',
- `current_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'fileset current
version',
- `last_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'fileset last
version',
- `deleted_at` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'fileset
deleted at',
- PRIMARY KEY (fileset_id),
- CONSTRAINT uk_sid_fn_del UNIQUE (schema_id, fileset_name, deleted_at),
- -- Aliases are used here, and indexes with the same name in H2 can only be
created once.
- KEY idx_fmid (metalake_id),
- KEY idx_fcid (catalog_id)
-) ENGINE=InnoDB;
-
-
-CREATE TABLE IF NOT EXISTS `fileset_version_info` (
- `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'auto increment
id',
- `metalake_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'metalake id',
- `catalog_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'catalog id',
- `schema_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'schema id',
- `fileset_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'fileset id',
- `version` INT UNSIGNED NOT NULL COMMENT 'fileset info version',
- `fileset_comment` VARCHAR(256) DEFAULT '' COMMENT 'fileset comment',
- `properties` MEDIUMTEXT DEFAULT NULL COMMENT 'fileset properties',
- `storage_location` MEDIUMTEXT DEFAULT NULL COMMENT 'fileset storage
location',
- `deleted_at` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'fileset
deleted at',
- PRIMARY KEY (id),
- CONSTRAINT uk_fid_ver_del UNIQUE (fileset_id, version, deleted_at),
- -- Aliases are used here, and indexes with the same name in H2 can only be
created once.
- KEY idx_fvmid (metalake_id),
- KEY idx_fvcid (catalog_id)
-) ENGINE=InnoDB;
-
-CREATE TABLE IF NOT EXISTS `topic_meta` (
- `topic_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'topic id',
- `topic_name` VARCHAR(128) NOT NULL COMMENT 'topic name',
- `metalake_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'metalake id',
- `catalog_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'catalog id',
- `schema_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'schema id',
- `comment` VARCHAR(256) DEFAULT '' COMMENT 'topic comment',
- `properties` MEDIUMTEXT DEFAULT NULL COMMENT 'topic properties',
- `audit_info` MEDIUMTEXT NOT NULL COMMENT 'topic audit info',
- `current_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'topic current
version',
- `last_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'topic last
version',
- `deleted_at` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'topic deleted
at',
- PRIMARY KEY (topic_id),
- CONSTRAINT uk_cid_tn_del UNIQUE (schema_id, topic_name, deleted_at),
- -- Aliases are used here, and indexes with the same name in H2 can only be
created once.
- KEY idx_tvmid (metalake_id),
- KEY idx_tvcid (catalog_id)
-) ENGINE=InnoDB;
-
-CREATE TABLE IF NOT EXISTS `user_meta` (
- `user_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'user id',
- `user_name` VARCHAR(128) NOT NULL COMMENT 'username',
- `metalake_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'metalake id',
- `audit_info` MEDIUMTEXT NOT NULL COMMENT 'user audit info',
- `current_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'user current
version',
- `last_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'user last version',
- `deleted_at` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'user deleted
at',
- PRIMARY KEY (`user_id`),
- CONSTRAINT `uk_mid_us_del` UNIQUE (`metalake_id`, `user_name`,
`deleted_at`)
-) ENGINE=InnoDB;
-
-CREATE TABLE IF NOT EXISTS `role_meta` (
- `role_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'role id',
- `role_name` VARCHAR(128) NOT NULL COMMENT 'role name',
- `metalake_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'metalake id',
- `properties` MEDIUMTEXT DEFAULT NULL COMMENT 'schema properties',
- `audit_info` MEDIUMTEXT NOT NULL COMMENT 'role audit info',
- `current_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'role current
version',
- `last_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'role last version',
- `deleted_at` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'role deleted
at',
- PRIMARY KEY (`role_id`),
- CONSTRAINT `uk_mid_rn_del` UNIQUE (`metalake_id`, `role_name`,
`deleted_at`)
-) ENGINE=InnoDB;
-
-CREATE TABLE IF NOT EXISTS `role_meta_securable_object` (
- `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'auto increment
id',
- `role_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'role id',
- `entity_id` BIGINT(20) NOT NULL COMMENT 'securable object entity id',
- `type` VARCHAR(128) NOT NULL COMMENT 'securable object type',
- `privilege_names` VARCHAR(256) NOT NULL COMMENT 'securable object
privilege names',
- `privilege_conditions` VARCHAR(256) NOT NULL COMMENT 'securable object
privilege conditions',
- `current_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'securable
objectcurrent version',
- `last_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'securable object
last version',
- `deleted_at` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'securable
object deleted at',
- PRIMARY KEY (`id`),
- KEY `idx_obj_rid` (`role_id`)
- ) ENGINE=InnoDB;
-
-CREATE TABLE IF NOT EXISTS `user_role_rel` (
- `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'auto increment
id',
- `user_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'user id',
- `role_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'role id',
- `audit_info` MEDIUMTEXT NOT NULL COMMENT 'relation audit info',
- `current_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'relation
current version',
- `last_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'relation last
version',
- `deleted_at` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'relation
deleted at',
- PRIMARY KEY (`id`),
- CONSTRAINT `uk_ui_ri_del` UNIQUE (`user_id`, `role_id`, `deleted_at`),
- KEY `idx_rid` (`role_id`)
-) ENGINE=InnoDB;
-
-CREATE TABLE IF NOT EXISTS `group_meta` (
- `group_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'group id',
- `group_name` VARCHAR(128) NOT NULL COMMENT 'group name',
- `metalake_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'metalake id',
- `audit_info` MEDIUMTEXT NOT NULL COMMENT 'group audit info',
- `current_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'group current
version',
- `last_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'group last
version',
- `deleted_at` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'group deleted
at',
- PRIMARY KEY (`group_id`),
- CONSTRAINT `uk_mid_gr_del` UNIQUE (`metalake_id`, `group_name`,
`deleted_at`)
- ) ENGINE=InnoDB;
-
-CREATE TABLE IF NOT EXISTS `group_role_rel` (
- `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'auto increment
id',
- `group_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'group id',
- `role_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'role id',
- `audit_info` MEDIUMTEXT NOT NULL COMMENT 'relation audit info',
- `current_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'relation
current version',
- `last_version` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'relation last
version',
- `deleted_at` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'relation
deleted at',
- PRIMARY KEY (`id`),
- CONSTRAINT `uk_gi_ri_del` UNIQUE (`group_id`, `role_id`, `deleted_at`),
- KEY `idx_gid` (`group_id`)
- ) ENGINE=InnoDB;
\ No newline at end of file
diff --git a/docs/gravitino-server-config.md b/docs/gravitino-server-config.md
index 769f99958..cc815f9ee 100644
--- a/docs/gravitino-server-config.md
+++ b/docs/gravitino-server-config.md
@@ -44,7 +44,7 @@ You can also specify filter parameters by setting
configuration entries of the f
| Configuration item | Description
| Default value
| Required | Since
version |
|---------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------|--------------------------------------------------|---------------|
-| `gravitino.entity.store` | Which storage
implementation to use. Key-value pair storage and relational storage are
currently supported, the default value is `kv`, and the optional value is
`relational`.
| `kv` | No
| 0.1.0 |
+| `gravitino.entity.store` | Which entity storage
implementation to use. Only`relational` storage is currently supported.
| `relational`
| No | 0.1.0
|
| `gravitino.entity.store.kv` | Detailed implementation
of KV storage. `RocksDB` storage is currently supported, and the implementation
is `RocksDBKvBackend`.
|
`RocksDBKvBackend` | No
| 0.1.0 |
| `gravitino.entity.store.kv.rocksdbPath` | The storage path for
RocksDB storage implementation. It supports both absolute and relative path, if
the value is a relative path, the final path is
`${GRAVITINO_HOME}/${PATH_YOU_HAVA_SET}`, default value is
`${GRAVITINO_HOME}/data/rocksdb` | `${GRAVITINO_HOME}/data/rocksdb` | No
| 0.1.0 |
| `gravitino.entity.serde` | The
serialization/deserialization class used to support entity storage. `proto' is
currently supported.
| `proto` | No
| 0.1.0 |
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 59d89981d..7fa802ef6 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -124,6 +124,7 @@ jersey-test-framework-core = { group =
"org.glassfish.jersey.test-framework", na
jersey-test-framework-provider-jetty = { group =
"org.glassfish.jersey.test-framework.providers", name =
"jersey-test-framework-provider-jetty", version.ref = "jersey" }
jodd-core = { group = "org.jodd", name = "jodd-core", version.ref = "jodd" }
mockito-core = { group = "org.mockito", name = "mockito-core", version.ref =
"mockito" }
+mockito-inline = { group = "org.mockito", name = "mockito-inline", version.ref
= "mockito" }
hive2-metastore = { group = "org.apache.hive", name = "hive-metastore",
version.ref = "hive2"}
hive2-exec = { group = "org.apache.hive", name = "hive-exec", version.ref =
"hive2"}
hive2-common = { group = "org.apache.hive", name = "hive-common", version.ref
= "hive2"}
diff --git
a/integration-test-common/src/test/java/com/datastrato/gravitino/integration/test/util/AbstractIT.java
b/integration-test-common/src/test/java/com/datastrato/gravitino/integration/test/util/AbstractIT.java
index 8eacdc885..a763737e8 100644
---
a/integration-test-common/src/test/java/com/datastrato/gravitino/integration/test/util/AbstractIT.java
+++
b/integration-test-common/src/test/java/com/datastrato/gravitino/integration/test/util/AbstractIT.java
@@ -206,7 +206,7 @@ public class AbstractIT {
LOG.info("Running Gravitino Server in {} mode", testMode);
- if ("true".equals(System.getenv("jdbcBackend"))) {
+ if ("MySQL".equalsIgnoreCase(System.getenv("jdbcBackend"))) {
// Start MySQL docker instance.
META_DATA = TestDatabaseName.MYSQL_JDBC_BACKEND;
containerSuite.startMySQLContainer(META_DATA);
diff --git
a/integration-test/src/test/java/com/datastrato/gravitino/integration/test/store/relational/service/FilesetMetaServiceIT.java
b/integration-test/src/test/java/com/datastrato/gravitino/integration/test/store/relational/service/FilesetMetaServiceIT.java
index 95c8834e1..1222cbd19 100644
---
a/integration-test/src/test/java/com/datastrato/gravitino/integration/test/store/relational/service/FilesetMetaServiceIT.java
+++
b/integration-test/src/test/java/com/datastrato/gravitino/integration/test/store/relational/service/FilesetMetaServiceIT.java
@@ -76,7 +76,7 @@ public class FilesetMetaServiceIT {
@BeforeAll
public static void setup() {
- Assumptions.assumeTrue("true".equals(System.getenv("jdbcBackend")));
+ Assumptions.assumeTrue("MySQL".equals(System.getenv("jdbcBackend")));
TestDatabaseName META_DATA = TestDatabaseName.MYSQL_JDBC_BACKEND;
containerSuite.startMySQLContainer(META_DATA);
MySQLContainer MYSQL_CONTAINER = containerSuite.getMySQLContainer();
@@ -123,7 +123,7 @@ public class FilesetMetaServiceIT {
@Test
public void testDeleteFilesetVersionsByRetentionCount() throws IOException {
- Assumptions.assumeTrue("true".equals(System.getenv("jdbcBackend")));
+ Assumptions.assumeTrue("MySQL".equals(System.getenv("jdbcBackend")));
IdGenerator idGenerator = new RandomIdGenerator();
AuditInfo auditInfo =
AuditInfo.builder().withCreator("creator").withCreateTime(Instant.now()).build();