This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new c58cc7e6b4 [IOTDB-2994] Separate RSchemaEngine into a separate module
(#5737)
c58cc7e6b4 is described below
commit c58cc7e6b45730fc7dcb0e9fb2bd244b73bdc614
Author: Liu Xuxin <[email protected]>
AuthorDate: Tue May 3 11:31:38 2022 +0800
[IOTDB-2994] Separate RSchemaEngine into a separate module (#5737)
---
.../Data-Modeling/SchemaRegion-rocksdb.md | 19 +++-
.../Data-Modeling/SchemaRegion-rocksdb.md | 12 ++-
pom.xml | 1 +
schema-engine-rocksdb/README.md | 38 +++++++
schema-engine-rocksdb/pom.xml | 80 +++++++++++++++
.../resources/conf/schema-rocksdb.properties | 0
.../src/assembly/schema-engine-rocksdb.xml | 44 ++++++++
.../schemaregion/rocksdb/CheckKeyResult.java | 0
.../schemaregion/rocksdb/RSchemaConfLoader.java | 0
.../schemaregion/rocksdb/RSchemaConstants.java | 0
.../schemaregion/rocksdb/RSchemaLogger.java | 0
.../rocksdb/RSchemaReadWriteHandler.java | 0
.../schemaregion/rocksdb/RSchemaRegion.java | 23 ++---
.../schemaregion/rocksdb/RSchemaUtils.java | 12 +--
.../schemaregion/rocksdb/mnode/REntityMNode.java | 0
.../schemaregion/rocksdb/mnode/RInternalMNode.java | 0
.../schemaregion/rocksdb/mnode/RMNode.java | 0
.../schemaregion/rocksdb/mnode/RMNodeType.java | 0
.../rocksdb/mnode/RMNodeValueType.java | 0
.../rocksdb/mnode/RMeasurementMNode.java | 0
.../rocksdb/mnode/RStorageGroupMNode.java | 0
.../metadata}/rocksdb/MRocksDBBenchmark.java | 0
.../metadata}/rocksdb/MRocksDBUnitTest.java | 0
.../rocksdb/RSchemaReadWriteHandlerTest.java | 0
.../rocksdb/RSchemaRegionAdvancedTest.java | 0
.../metadata}/rocksdb/RocksDBBenchmarkEngine.java | 0
.../metadata}/rocksdb/RocksDBBenchmarkTask.java | 0
.../metadata}/rocksdb/RocksDBTestUtils.java | 0
server/pom.xml | 5 -
.../org/apache/iotdb/db/conf/IoTDBDescriptor.java | 14 ++-
.../metadata/schemaregion/RSchemaRegionLoader.java | 111 +++++++++++++++++++++
.../db/metadata/schemaregion/SchemaEngine.java | 14 +--
32 files changed, 329 insertions(+), 44 deletions(-)
diff --git a/docs/UserGuide/Data-Modeling/SchemaRegion-rocksdb.md
b/docs/UserGuide/Data-Modeling/SchemaRegion-rocksdb.md
index afa3daa150..4aca0fdaab 100644
--- a/docs/UserGuide/Data-Modeling/SchemaRegion-rocksdb.md
+++ b/docs/UserGuide/Data-Modeling/SchemaRegion-rocksdb.md
@@ -21,11 +21,25 @@
# Background
-When IoTDB service is started, metadata information is organized by loading
log file `mlog.bin` and the results are held in memory for a long time. As
metadata continues to grow, memory continues to grow. In order to support the
controllable fluctuation in the massive metadata scenario, we provide a
metadata storage type based on rocksDB.
+When IoTDB service is started, metadata information is organized by loading
log file `mlog.bin` and the results are held
+in memory for a long time. As metadata continues to grow, memory continues to
grow. In order to support the controllable
+fluctuation in the massive metadata scenario, we provide a metadata storage
type based on rocksDB.
# Usage
-In the system configuration file `iotdb-engine.properties`, change the
`schema_engine_mode` to `Rocksdb_based`, for example
+Firstly, you should package **schema-engine-rocksdb** by the following command:
+
+```shell
+mvn clean package -pl schema-engine-rocksdb -am -DskipTests
+```
+
+After that, you can get a **conf** directory and a **lib** directory in
+schema-engine-rocksdb/target/schema-engine-rocksdb. Copy the file in the conf
directory to the conf directory of server,
+and copy the files in the lib directory to the lib directory of server.
+
+Then, open the **iotdb-engine.properties** in the conf directory of server,
and set the `schema_engine_mode` to
+Rocksdb_based. Restart the IoTDB, the system will use `RSchemaRegion` to
manage the metadata.
+
```
####################
### Schema Engine Configuration
@@ -33,6 +47,7 @@ In the system configuration file `iotdb-engine.properties`,
change the `schema_e
# Choose the mode of schema engine. The value could be Memory,Schema_File and
Rocksdb_based. If the provided value doesn't match any pre-defined value,
Memory mode will be used as default.
# Datatype: string
schema_engine_mode=Rocksdb_based
+
```
When rocksdb is specified as the metadata storage type, configuration
parameters of rocksDB are open to the public as file. You can modify the
configuration file `schema-rocksdb.properties` to adjust parameters according
to your own requirements, such as block cache. If there is no special
requirement, use the default value.
diff --git a/docs/zh/UserGuide/Data-Modeling/SchemaRegion-rocksdb.md
b/docs/zh/UserGuide/Data-Modeling/SchemaRegion-rocksdb.md
index f4d3f833b2..413bd3d3b7 100644
--- a/docs/zh/UserGuide/Data-Modeling/SchemaRegion-rocksdb.md
+++ b/docs/zh/UserGuide/Data-Modeling/SchemaRegion-rocksdb.md
@@ -25,7 +25,17 @@
# 使用
-在系统配置文件`iotdb-engine.properties`中,将配置项`schema_engine_mode`修改为`Rocksdb_based`,如:
+首先使用下面的命令将 `schema-engine-rocksdb` 打包
+
+```shell
+mvn clean package -pl schema-engine-rocksdb -am -DskipTests
+```
+
+命令运行结束后,在其 target/schema-engine-rocksdb 中会有一个 lib 文件夹和 conf 文件夹。将 conf
文件夹下的文件拷贝到 server 的 conf 文件夹中,将 lib 文件夹下的文件也拷贝到
+server 的 lib 的文件夹中。
+
+在系统配置文件`iotdb-engine.properties`中,将配置项`schema_engine_mode`修改为`Rocksdb_based`,
如:
+
```
####################
### Schema Engine Configuration
diff --git a/pom.xml b/pom.xml
index 2840b10274..43f497a7a4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -117,6 +117,7 @@
<module>integration</module>
<module>consensus</module>
<module>procedure</module>
+ <module>schema-engine-rocksdb</module>
<!-- <module>library-udf</module>-->
</modules>
<!-- Properties Management -->
diff --git a/schema-engine-rocksdb/README.md b/schema-engine-rocksdb/README.md
new file mode 100644
index 0000000000..6480b6a99f
--- /dev/null
+++ b/schema-engine-rocksdb/README.md
@@ -0,0 +1,38 @@
+<!--
+
+ 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.
+
+-->
+`RSchemaRegion` is an implementation of `SchemaRegion` based on
[RocksDB](http://rocksdb.org/). It performs better than
+pure in-memory schema management in the scenario that tens of billions of time
series is registered.
+
+# How To Use
+
+Firstly, you should package **schema-engine-rocksdb** by the following command:
+
+```shell
+mvn clean package -pl schema-engine-rocksdb -am -DskipTests
+```
+
+After that, you can get a **conf** directory and a **lib** directory in
+schema-engine-rocksdb/target/schema-engine-rocksdb. Copy the file in the conf
directory to the conf directory of server,
+and copy the files in the lib directory to the lib directory of server.
+
+Then, open the **iotdb-engine.properties** in the conf directory of server,
and set the `schema_engine_mode` to
+Rocksdb_based, set the `enable_last_cache` to false. Restart the IoTDB, the
system will use `RSchemaRegion` to manage
+the metadata.
\ No newline at end of file
diff --git a/schema-engine-rocksdb/pom.xml b/schema-engine-rocksdb/pom.xml
new file mode 100644
index 0000000000..90014f0fe5
--- /dev/null
+++ b/schema-engine-rocksdb/pom.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>iotdb-parent</artifactId>
+ <groupId>org.apache.iotdb</groupId>
+ <version>0.14.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>schema-engine-rocksdb</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.iotdb</groupId>
+ <artifactId>iotdb-server</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.rocksdb</groupId>
+ <artifactId>rocksdbjni</artifactId>
+ <version>6.27.3</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ <version>[${guava.version},)</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <finalName>schema-engine-rocksdb</finalName>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>${maven.assembly.version}</version>
+ <executions>
+ <!-- Package binaries-->
+ <execution>
+ <id>schema-engine-rocksdb-assembly</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+
<descriptor>src/assembly/schema-engine-rocksdb.xml</descriptor>
+ </descriptors>
+ <appendAssemblyId>false</appendAssemblyId>
+ <archive>
+ <manifest>
+
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
+ </manifest>
+ </archive>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/server/src/assembly/resources/conf/schema-rocksdb.properties
b/schema-engine-rocksdb/src/assembly/resources/conf/schema-rocksdb.properties
similarity index 100%
rename from server/src/assembly/resources/conf/schema-rocksdb.properties
rename to
schema-engine-rocksdb/src/assembly/resources/conf/schema-rocksdb.properties
diff --git a/schema-engine-rocksdb/src/assembly/schema-engine-rocksdb.xml
b/schema-engine-rocksdb/src/assembly/schema-engine-rocksdb.xml
new file mode 100644
index 0000000000..4c99986a09
--- /dev/null
+++ b/schema-engine-rocksdb/src/assembly/schema-engine-rocksdb.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<assembly>
+ <id>schema-engine-rocksdb</id>
+ <formats>
+ <format>dir</format>
+ <format>zip</format>
+ </formats>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <dependencySets>
+ <dependencySet>
+ <outputDirectory>lib/rschema-region</outputDirectory>
+ <includes>
+ <include>org.rocksdb:rocksdbjni</include>
+ <include>org.apache.iotdb:schema-engine-rocksdb</include>
+ </includes>
+ </dependencySet>
+ </dependencySets>
+ <fileSets>
+ <fileSet>
+ <directory>src/assembly/resources</directory>
+ <outputDirectory>${file.separator}</outputDirectory>
+ </fileSet>
+ </fileSets>
+</assembly>
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/CheckKeyResult.java
b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/CheckKeyResult.java
similarity index 100%
rename from
server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/CheckKeyResult.java
rename to
schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/CheckKeyResult.java
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaConfLoader.java
b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaConfLoader.java
similarity index 100%
rename from
server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaConfLoader.java
rename to
schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaConfLoader.java
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaConstants.java
b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaConstants.java
similarity index 100%
rename from
server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaConstants.java
rename to
schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaConstants.java
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaLogger.java
b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaLogger.java
similarity index 100%
rename from
server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaLogger.java
rename to
schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaLogger.java
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaReadWriteHandler.java
b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaReadWriteHandler.java
similarity index 100%
rename from
server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaReadWriteHandler.java
rename to
schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaReadWriteHandler.java
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
similarity index 98%
rename from
server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
rename to
schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
index 4a604ee5de..5cdcb64a9e 100644
---
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
+++
b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
@@ -68,6 +68,7 @@ import org.apache.iotdb.db.query.context.QueryContext;
import org.apache.iotdb.db.query.dataset.ShowDevicesResult;
import org.apache.iotdb.db.query.dataset.ShowTimeSeriesResult;
import org.apache.iotdb.db.service.IoTDB;
+import org.apache.iotdb.db.utils.EncodingInferenceUtils;
import org.apache.iotdb.db.utils.SchemaUtils;
import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -113,9 +114,6 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.function.BiFunction;
import java.util.function.Function;
-import static
org.apache.iotdb.commons.conf.IoTDBConstant.MULTI_LEVEL_PATH_WILDCARD;
-import static
org.apache.iotdb.commons.conf.IoTDBConstant.ONE_LEVEL_PATH_WILDCARD;
-import static org.apache.iotdb.commons.conf.IoTDBConstant.PATH_ROOT;
import static
org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants.ALL_NODE_TYPE_ARRAY;
import static
org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants.DEFAULT_ALIGNED_ENTITY_VALUE;
import static
org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants.DEFAULT_NODE_VALUE;
@@ -125,7 +123,6 @@ import static
org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants
import static
org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants.NODE_TYPE_MEASUREMENT;
import static
org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants.ROOT_STRING;
import static
org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants.TABLE_NAME_TAGS;
-import static
org.apache.iotdb.db.utils.EncodingInferenceUtils.getDefaultEncoding;
public class RSchemaRegion implements ISchemaRegion {
@@ -763,8 +760,8 @@ public class RSchemaRegion implements ISchemaRegion {
private int indexOfFirstWildcard(String[] nodes, int start) {
int index = start;
for (; index < nodes.length; index++) {
- if (ONE_LEVEL_PATH_WILDCARD.equals(nodes[index])
- || MULTI_LEVEL_PATH_WILDCARD.equals(nodes[index])) {
+ if (IoTDBConstant.ONE_LEVEL_PATH_WILDCARD.equals(nodes[index])
+ || IoTDBConstant.MULTI_LEVEL_PATH_WILDCARD.equals(nodes[index])) {
break;
}
}
@@ -774,8 +771,8 @@ public class RSchemaRegion implements ISchemaRegion {
private int indexOfFirstNonWildcard(String[] nodes, int start) {
int index = start;
for (; index < nodes.length; index++) {
- if (!ONE_LEVEL_PATH_WILDCARD.equals(nodes[index])
- && !MULTI_LEVEL_PATH_WILDCARD.equals(nodes[index])) {
+ if (!IoTDBConstant.ONE_LEVEL_PATH_WILDCARD.equals(nodes[index])
+ && !IoTDBConstant.MULTI_LEVEL_PATH_WILDCARD.equals(nodes[index])) {
break;
}
}
@@ -818,7 +815,7 @@ public class RSchemaRegion implements ISchemaRegion {
@Override
public boolean isPathExist(PartialPath path) throws MetadataException {
- if (PATH_ROOT.equals(path.getFullPath())) {
+ if (IoTDBConstant.PATH_ROOT.equals(path.getFullPath())) {
return true;
}
@@ -867,7 +864,7 @@ public class RSchemaRegion implements ISchemaRegion {
public int getNodesCountInGivenLevel(PartialPath pathPattern, int level,
boolean isPrefixMatch)
throws MetadataException {
// todo support wildcard
- if (pathPattern.getFullPath().contains(ONE_LEVEL_PATH_WILDCARD)) {
+ if
(pathPattern.getFullPath().contains(IoTDBConstant.ONE_LEVEL_PATH_WILDCARD)) {
throw new UnsupportedOperationException(
"Wildcards are not currently supported for this operation"
+ " [COUNT NODES pathPattern].");
@@ -946,7 +943,7 @@ public class RSchemaRegion implements ISchemaRegion {
public List<PartialPath> getNodesListInGivenLevel(
PartialPath pathPattern, int nodeLevel, boolean isPrefixMatch,
StorageGroupFilter filter)
throws MetadataException {
- if (pathPattern.getFullPath().contains(ONE_LEVEL_PATH_WILDCARD)) {
+ if
(pathPattern.getFullPath().contains(IoTDBConstant.ONE_LEVEL_PATH_WILDCARD)) {
throw new UnsupportedOperationException(
formatNotSupportInfo(Thread.currentThread().getStackTrace()[1].getMethodName()));
}
@@ -986,7 +983,7 @@ public class RSchemaRegion implements ISchemaRegion {
@Override
public Set<String> getChildNodePathInNextLevel(PartialPath pathPattern)
throws MetadataException {
// todo support wildcard
- if (pathPattern.getFullPath().contains(ONE_LEVEL_PATH_WILDCARD)) {
+ if
(pathPattern.getFullPath().contains(IoTDBConstant.ONE_LEVEL_PATH_WILDCARD)) {
throw new MetadataException(
"Wildcards are not currently supported for this operation"
+ " [SHOW CHILD PATHS pathPattern].");
@@ -1766,7 +1763,7 @@ public class RSchemaRegion implements ISchemaRegion {
measurements.add(measurementList[index]);
TSDataType type = plan.getDataTypes()[index];
dataTypes.add(type);
- encodings.add(getDefaultEncoding(type));
+ encodings.add(EncodingInferenceUtils.getDefaultEncoding(type));
}
createAlignedTimeSeries(devicePath, measurements, dataTypes,
encodings);
} else {
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaUtils.java
b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaUtils.java
similarity index 98%
rename from
server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaUtils.java
rename to
schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaUtils.java
index 1ad26f3aa8..ef45309b65 100644
---
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaUtils.java
+++
b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaUtils.java
@@ -19,6 +19,7 @@
package org.apache.iotdb.db.metadata.schemaregion.rocksdb;
+import org.apache.iotdb.commons.conf.IoTDBConstant;
import org.apache.iotdb.db.exception.metadata.IllegalPathException;
import org.apache.iotdb.db.metadata.mnode.IMNode;
import org.apache.iotdb.db.metadata.path.PartialPath;
@@ -45,9 +46,6 @@ import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
-import static
org.apache.iotdb.commons.conf.IoTDBConstant.MULTI_LEVEL_PATH_WILDCARD;
-import static
org.apache.iotdb.commons.conf.IoTDBConstant.ONE_LEVEL_PATH_WILDCARD;
-import static org.apache.iotdb.commons.conf.IoTDBConstant.PATH_ROOT;
import static
org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants.DATA_BLOCK_TYPE_ALIAS;
import static
org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants.DATA_BLOCK_TYPE_ATTRIBUTES;
import static
org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConstants.DATA_BLOCK_TYPE_ORIGIN_KEY;
@@ -166,7 +164,7 @@ public class RSchemaUtils {
public static PartialPath getPartialPathFromInnerPath(String path, char
level) {
String pathWithoutLevel = path.replace(PATH_SEPARATOR + level,
PATH_SEPARATOR);
String[] nodes = pathWithoutLevel.split(ESCAPE_PATH_SEPARATOR);
- nodes[0] = PATH_ROOT;
+ nodes[0] = IoTDBConstant.PATH_ROOT;
return new PartialPath(nodes);
}
@@ -508,7 +506,9 @@ public class RSchemaUtils {
public static String replaceWildcard(int num) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < num; i++) {
-
stringBuilder.append(RSchemaConstants.PATH_SEPARATOR).append(ONE_LEVEL_PATH_WILDCARD);
+ stringBuilder
+ .append(RSchemaConstants.PATH_SEPARATOR)
+ .append(IoTDBConstant.ONE_LEVEL_PATH_WILDCARD);
}
return stringBuilder.substring(1);
}
@@ -540,7 +540,7 @@ public class RSchemaUtils {
List<String[]> allNodesArray = new ArrayList<>();
List<Integer> multiWildcardPosition = new ArrayList<>();
for (int i = 0; i < nodes.length; i++) {
- if (MULTI_LEVEL_PATH_WILDCARD.equals(nodes[i])) {
+ if (IoTDBConstant.MULTI_LEVEL_PATH_WILDCARD.equals(nodes[i])) {
multiWildcardPosition.add(i);
}
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/REntityMNode.java
b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/REntityMNode.java
similarity index 100%
rename from
server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/REntityMNode.java
rename to
schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/REntityMNode.java
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RInternalMNode.java
b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RInternalMNode.java
similarity index 100%
rename from
server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RInternalMNode.java
rename to
schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RInternalMNode.java
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java
b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java
similarity index 100%
rename from
server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java
rename to
schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNode.java
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNodeType.java
b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNodeType.java
similarity index 100%
rename from
server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNodeType.java
rename to
schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNodeType.java
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNodeValueType.java
b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNodeValueType.java
similarity index 100%
rename from
server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNodeValueType.java
rename to
schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMNodeValueType.java
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java
b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java
similarity index 100%
rename from
server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java
rename to
schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RMeasurementMNode.java
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RStorageGroupMNode.java
b/schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RStorageGroupMNode.java
similarity index 100%
rename from
server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RStorageGroupMNode.java
rename to
schema-engine-rocksdb/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/mnode/RStorageGroupMNode.java
diff --git
a/server/src/test/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/MRocksDBBenchmark.java
b/schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/MRocksDBBenchmark.java
similarity index 100%
rename from
server/src/test/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/MRocksDBBenchmark.java
rename to
schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/MRocksDBBenchmark.java
diff --git
a/server/src/test/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/MRocksDBUnitTest.java
b/schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/MRocksDBUnitTest.java
similarity index 100%
rename from
server/src/test/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/MRocksDBUnitTest.java
rename to
schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/MRocksDBUnitTest.java
diff --git
a/server/src/test/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaReadWriteHandlerTest.java
b/schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RSchemaReadWriteHandlerTest.java
similarity index 100%
rename from
server/src/test/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaReadWriteHandlerTest.java
rename to
schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RSchemaReadWriteHandlerTest.java
diff --git
a/server/src/test/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegionAdvancedTest.java
b/schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RSchemaRegionAdvancedTest.java
similarity index 100%
rename from
server/src/test/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegionAdvancedTest.java
rename to
schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RSchemaRegionAdvancedTest.java
diff --git
a/server/src/test/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RocksDBBenchmarkEngine.java
b/schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RocksDBBenchmarkEngine.java
similarity index 100%
rename from
server/src/test/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RocksDBBenchmarkEngine.java
rename to
schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RocksDBBenchmarkEngine.java
diff --git
a/server/src/test/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RocksDBBenchmarkTask.java
b/schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RocksDBBenchmarkTask.java
similarity index 100%
rename from
server/src/test/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RocksDBBenchmarkTask.java
rename to
schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RocksDBBenchmarkTask.java
diff --git
a/server/src/test/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RocksDBTestUtils.java
b/schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RocksDBTestUtils.java
similarity index 100%
rename from
server/src/test/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RocksDBTestUtils.java
rename to
schema-engine-rocksdb/src/test/org.apache.iotdb.db/metadata/rocksdb/RocksDBTestUtils.java
diff --git a/server/pom.xml b/server/pom.xml
index 791dd03a5a..53615eff58 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -249,11 +249,6 @@
<version>2.6</version>
<scope>compile</scope>
</dependency>
- <dependency>
- <groupId>org.rocksdb</groupId>
- <artifactId>rocksdbjni</artifactId>
- <version>6.27.3</version>
- </dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
index c1651f66eb..487c9ef441 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
@@ -226,11 +226,6 @@ public class IoTDBDescriptor {
properties.getProperty(
"meta_data_cache_enable",
Boolean.toString(conf.isMetaDataCacheEnable()))));
- conf.setEnableLastCache(
- Boolean.parseBoolean(
- properties.getProperty(
- "enable_last_cache",
Boolean.toString(conf.isLastCacheEnabled()))));
-
initMemoryAllocate(properties);
loadWALProps(properties);
@@ -760,6 +755,15 @@ public class IoTDBDescriptor {
conf.setSchemaEngineMode(
properties.getProperty("schema_engine_mode",
String.valueOf(conf.getSchemaEngineMode())));
+ conf.setEnableLastCache(
+ Boolean.parseBoolean(
+ properties.getProperty(
+ "enable_last_cache",
Boolean.toString(conf.isLastCacheEnabled()))));
+
+ if (conf.getSchemaEngineMode().equals("Rocksdb_based")) {
+ conf.setEnableLastCache(false);
+ }
+
conf.setCachedMNodeSizeInSchemaFileMode(
Integer.parseInt(
properties.getProperty(
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/RSchemaRegionLoader.java
b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/RSchemaRegionLoader.java
new file mode 100644
index 0000000000..5cf6ae8be9
--- /dev/null
+++
b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/RSchemaRegionLoader.java
@@ -0,0 +1,111 @@
+/*
+ * 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.
+ */
+package org.apache.iotdb.db.metadata.schemaregion;
+
+import org.apache.iotdb.commons.consensus.SchemaRegionId;
+import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode;
+import org.apache.iotdb.db.metadata.path.PartialPath;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.LinkedList;
+import java.util.List;
+
+public class RSchemaRegionLoader {
+ private static final Logger LOGGER =
LoggerFactory.getLogger(RSchemaRegionLoader.class);
+ private static URLClassLoader urlClassLoader = null;
+ private static final String RSCHEMA_REGION_CLASS_NAME =
+ "org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaRegion";
+ private static final String RSCHEMA_CONF_LOADER_CLASS_NAME =
+ "org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConfLoader";
+ private static final String LIB_PATH =
+ ".." + File.separator + "lib" + File.separator + "rschema-region" +
File.separator;
+
+ public RSchemaRegionLoader() {}
+
+ /**
+ * Load the jar files for RSchemaRegion and create an instance of it. The
jar files should be
+ * located in "../lib/rschema-region". If jar files cannot be found, the
function will return
+ * null.
+ *
+ * @param storageGroup
+ * @param schemaRegionId
+ * @param node
+ * @return
+ */
+ public ISchemaRegion loadRSchemaRegion(
+ PartialPath storageGroup, SchemaRegionId schemaRegionId,
IStorageGroupMNode node) {
+ ISchemaRegion region = null;
+ LOGGER.info("Creating instance for schema-engine-rocksdb");
+ try {
+ loadRSchemaRegionJar();
+ Class<?> classForRSchemaRegion =
urlClassLoader.loadClass(RSCHEMA_REGION_CLASS_NAME);
+ Class<?> classForRSchemaConfLoader =
urlClassLoader.loadClass(RSCHEMA_CONF_LOADER_CLASS_NAME);
+ Constructor<?> constructor =
+ classForRSchemaRegion.getConstructor(
+ PartialPath.class,
+ SchemaRegionId.class,
+ IStorageGroupMNode.class,
+ classForRSchemaConfLoader);
+ Object rSchemaLoader =
classForRSchemaConfLoader.getConstructor().newInstance();
+ region =
+ (ISchemaRegion)
+ constructor.newInstance(storageGroup, schemaRegionId, node,
rSchemaLoader);
+ } catch (ClassNotFoundException
+ | NoSuchMethodException
+ | InvocationTargetException
+ | InstantiationException
+ | IllegalAccessException
+ | MalformedURLException
+ | RuntimeException e) {
+ LOGGER.error("Cannot initialize RSchemaRegion", e);
+ return null;
+ }
+ return region;
+ }
+
+ /**
+ * Load the jar files for rocksdb and RSchemaRegion. The jar files should be
located in directory
+ * "../lib/rschema-region". If the jar files have been loaded, it will do
nothing.
+ */
+ private void loadRSchemaRegionJar() throws MalformedURLException {
+ LOGGER.info("Loading jar for schema-engine-rocksdb");
+ if (urlClassLoader == null) {
+ File[] jars = new File(LIB_PATH).listFiles();
+ if (jars == null) {
+ throw new RuntimeException(
+ String.format("Cannot get jars from %s", new
File(LIB_PATH).getAbsolutePath()));
+ }
+ List<URL> dependentJars = new LinkedList<>();
+ for (File jar : jars) {
+ if (jar.getName().endsWith(".jar")) {
+ dependentJars.add(new URL("file:" + jar.getAbsolutePath()));
+ }
+ }
+ urlClassLoader = new URLClassLoader(dependentJars.toArray(new URL[] {}));
+ }
+ }
+}
diff --git
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaEngine.java
b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaEngine.java
index 8398f0ab22..fce9c38aeb 100644
---
a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaEngine.java
+++
b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaEngine.java
@@ -26,8 +26,6 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.exception.metadata.MetadataException;
import org.apache.iotdb.db.metadata.mnode.IStorageGroupMNode;
import org.apache.iotdb.db.metadata.path.PartialPath;
-import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaConfLoader;
-import org.apache.iotdb.db.metadata.schemaregion.rocksdb.RSchemaRegion;
import org.apache.iotdb.db.metadata.storagegroup.IStorageGroupSchemaManager;
import org.apache.iotdb.db.metadata.storagegroup.StorageGroupSchemaManager;
@@ -56,7 +54,6 @@ public class SchemaEngine {
private Map<SchemaRegionId, ISchemaRegion> schemaRegionMap;
private SchemaEngineMode schemaRegionStoredMode;
- private RSchemaConfLoader rSchemaConfLoader;
private static final Logger logger =
LoggerFactory.getLogger(SchemaEngine.class);
private static class SchemaEngineManagerHolder {
@@ -217,8 +214,8 @@ public class SchemaEngine {
break;
case Rocksdb_based:
schemaRegion =
- new RSchemaRegion(
- storageGroup, schemaRegionId, storageGroupMNode,
loadRocksdbConfFile());
+ new RSchemaRegionLoader()
+ .loadRSchemaRegion(storageGroup, schemaRegionId,
storageGroupMNode);
break;
default:
throw new UnsupportedOperationException(
@@ -233,11 +230,4 @@ public class SchemaEngine {
schemaRegionMap.get(schemaRegionId).deleteSchemaRegion();
schemaRegionMap.remove(schemaRegionId);
}
-
- private RSchemaConfLoader loadRocksdbConfFile() {
- if (rSchemaConfLoader == null) {
- rSchemaConfLoader = new RSchemaConfLoader();
- }
- return rSchemaConfLoader;
- }
}