This is an automated email from the ASF dual-hosted git repository. jianyun pushed a commit to branch rocksdb/dev in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 25421c3aed3859c4d340e89b109dd758ff368115 Author: lisijia <[email protected]> AuthorDate: Mon Mar 14 18:24:36 2022 +0800 fix npe when query aligned timeseries --- .../iotdb/db/metadata/rocksdb/RocksDBUtils.java | 43 ++++++++++++++++------ .../iotdb/db/metadata/rocksdb/mnode/RMNode.java | 4 +- .../metadata/rocksdb/mnode/RMeasurementMNode.java | 2 +- 3 files changed, 35 insertions(+), 14 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/RocksDBUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/RocksDBUtils.java index 392ba35..616a0fa 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/RocksDBUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/RocksDBUtils.java @@ -43,9 +43,34 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import static org.apache.iotdb.db.conf.IoTDBConstant.*; +import static org.apache.iotdb.db.conf.IoTDBConstant.MULTI_LEVEL_PATH_WILDCARD; +import static org.apache.iotdb.db.conf.IoTDBConstant.ONE_LEVEL_PATH_WILDCARD; +import static org.apache.iotdb.db.conf.IoTDBConstant.PATH_ROOT; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.DATA_BLOCK_TYPE_ALIAS; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.DATA_BLOCK_TYPE_ATTRIBUTES; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.DATA_BLOCK_TYPE_ORIGIN_KEY; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.DATA_BLOCK_TYPE_SCHEMA; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.DATA_BLOCK_TYPE_TAGS; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.DATA_BLOCK_TYPE_TTL; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.DATA_VERSION; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.DEFAULT_FLAG; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.ESCAPE_PATH_SEPARATOR; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.FLAG_HAS_ALIAS; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.FLAG_HAS_ATTRIBUTES; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.FLAG_HAS_SCHEMA; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.FLAG_HAS_TAGS; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.FLAG_IS_ALIGNED; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.FLAG_SET_TTL; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.NODE_TYPE_ALIAS; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.NODE_TYPE_ENTITY; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.NODE_TYPE_INTERNAL; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.NODE_TYPE_MEASUREMENT; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.NODE_TYPE_SG; import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.PATH_SEPARATOR; -import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.*; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.ROOT; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.ROOT_CHAR; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.ROOT_STRING; +import static org.apache.iotdb.db.metadata.rocksdb.RockDBConstants.ZERO; public class RocksDBUtils { @@ -339,17 +364,13 @@ public class RocksDBUtils { * @return inner name */ public static String convertPartialPathToInner(String partialPath, int level, char nodeType) { - char lastChar = START_FLAG; - StringBuilder stringBuilder = new StringBuilder(); - for (char c : partialPath.toCharArray()) { - if (START_FLAG == lastChar) { - stringBuilder.append(nodeType); - } - if (SPLIT_FLAG == lastChar) { + StringBuilder stringBuilder = new StringBuilder(nodeType + ROOT); + for (int i = partialPath.indexOf(PATH_SEPARATOR); i < partialPath.length(); i++) { + char currentChar = partialPath.charAt(i); + stringBuilder.append(partialPath.charAt(i)); + if (currentChar == SPLIT_FLAG) { stringBuilder.append(level); } - stringBuilder.append(c); - lastChar = c; } return stringBuilder.toString(); } diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/mnode/RMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/mnode/RMNode.java index 460072d..872adac 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/mnode/RMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/mnode/RMNode.java @@ -88,7 +88,7 @@ public abstract class RMNode implements IMNode { String parentInnerName = RocksDBUtils.convertPartialPathToInner(keyName, nodeNameMaxLevel, type.getValue()); try { - value = readWriteHandler.get(null, (type + parentInnerName).getBytes()); + value = readWriteHandler.get(null, parentInnerName.getBytes()); } catch (RocksDBException e) { logger.error("Failed to get parent node.", e); } @@ -101,7 +101,7 @@ public abstract class RMNode implements IMNode { node = new RInternalMNode(keyName); return node; case RockDBConstants.NODE_TYPE_ENTITY: - node = new REntityMNode(keyName); + node = new REntityMNode(keyName, value); return node; case RockDBConstants.NODE_TYPE_MEASUREMENT: node = new RMeasurementMNode(keyName, value); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/mnode/RMeasurementMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/mnode/RMeasurementMNode.java index e619d3c..32d5348 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/mnode/RMeasurementMNode.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/rocksdb/mnode/RMeasurementMNode.java @@ -72,7 +72,7 @@ public class RMeasurementMNode extends RMNode implements IMeasurementMNode { @Override public MeasurementPath getMeasurementPath() { MeasurementPath result = new MeasurementPath(super.getPartialPath(), schema); - // result.setUnderAlignedEntity(getParent().isAligned()); + result.setUnderAlignedEntity(getParent().isAligned()); if (alias != null && !alias.isEmpty()) { result.setMeasurementAlias(alias); }
