diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ConfigMTree.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ConfigMTree.java index 0f1007a65c42..2725053b8439 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ConfigMTree.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ConfigMTree.java @@ -107,6 +107,8 @@ public class ConfigMTree { private static final String TABLE_ERROR_MSG = "Failed to recover configNode, because there exists data from an older incompatible version, will shutdown soon. Please delete all data, and then restart again."; + private static final int MARKER_HAVE_PREALTERED_COLUMNS = Integer.MIN_VALUE; + private final Logger logger = LoggerFactory.getLogger(ConfigMTree.class); private IConfigMNode root; // this store is only used for traverser invoking @@ -1136,15 +1138,22 @@ private void serializeTableNode(final ConfigTableNode tableNode, final OutputStr tableNode.getTable().serialize(outputStream); tableNode.getStatus().serialize(outputStream); final Set preDeletedColumns = tableNode.getPreDeletedColumns(); - ReadWriteIOUtils.write(preDeletedColumns.size(), outputStream); + + int preAlteredColumnSize = tableNode.getPreAlteredColumns().size(); + int preDeletedColumnSize = preDeletedColumns.size(); + if (preAlteredColumnSize > 0) { + ReadWriteIOUtils.write(MARKER_HAVE_PREALTERED_COLUMNS, outputStream); + ReadWriteForEncodingUtils.writeVarInt(preAlteredColumnSize, outputStream); + for (Entry entry : tableNode.getPreAlteredColumns().entrySet()) { + ReadWriteIOUtils.writeVar(entry.getKey(), outputStream); + ReadWriteIOUtils.write(entry.getValue(), outputStream); + } + } + + ReadWriteIOUtils.write(preDeletedColumnSize, outputStream); for (final String column : preDeletedColumns) { ReadWriteIOUtils.write(column, outputStream); } - ReadWriteForEncodingUtils.writeVarInt(tableNode.getPreAlteredColumns().size(), outputStream); - for (Entry entry : tableNode.getPreAlteredColumns().entrySet()) { - ReadWriteIOUtils.writeVar(entry.getKey(), outputStream); - ReadWriteIOUtils.write(entry.getValue(), outputStream); - } } public void deserialize(final InputStream inputStream) throws IOException { @@ -1238,16 +1247,20 @@ public static ConfigTableNode deserializeTableMNode(final InputStream inputStrea tableNode.setTable(TsTable.deserialize(inputStream)); tableNode.setStatus(TableNodeStatus.deserialize(inputStream)); int size = ReadWriteIOUtils.readInt(inputStream); + if (size == MARKER_HAVE_PREALTERED_COLUMNS) { + size = ReadWriteForEncodingUtils.readVarInt(inputStream); + for (int i = 0; i < size; i++) { + tableNode.addPreAlteredColumn( + ReadWriteIOUtils.readVarIntString(inputStream), + ReadWriteIOUtils.readDataType(inputStream)); + } + size = ReadWriteIOUtils.readInt(inputStream); + } + for (int i = 0; i < size; ++i) { tableNode.addPreDeletedColumn(ReadWriteIOUtils.readString(inputStream)); } - size = ReadWriteForEncodingUtils.readVarInt(inputStream); - for (int i = 0; i < size; i++) { - tableNode.addPreAlteredColumn( - ReadWriteIOUtils.readVarIntString(inputStream), - ReadWriteIOUtils.readDataType(inputStream)); - } return tableNode; }