This is an automated email from the ASF dual-hosted git repository. hxd pushed a commit to branch seperate_thrift in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 1f5e7b2bda07e8c4d653e5fa327755c8606daeff Author: xiangdong huang <[email protected]> AuthorDate: Wed Mar 10 16:08:16 2021 +0800 seperate thrift module into 3 parts; extract Node Serialization from Server module into Cluster module --- cluster/pom.xml | 15 ++ .../apache/iotdb/cluster/RemoteTsFileResource.java | 5 +- .../org/apache/iotdb/cluster/log/HardState.java | 6 +- .../iotdb/cluster/log/logtypes/AddNodeLog.java | 6 +- .../iotdb/cluster/log/logtypes/RemoveNodeLog.java | 6 +- .../log/snapshot/PullSnapshotTaskDescriptor.java | 6 +- .../iotdb/cluster/partition/slot/SlotManager.java | 6 +- .../cluster/partition/slot/SlotPartitionTable.java | 5 +- .../iotdb/cluster/utils/NodeSerializeUtils.java | 90 ++++++++++ .../iotdb/cluster/utils/SerializeUtilTest.java | 13 ++ grafana/pom.xml | 4 + jdbc/pom.xml | 5 - pom.xml | 2 + server/pom.xml | 5 + .../org/apache/iotdb/db/utils/SerializeUtils.java | 62 ------- .../apache/iotdb/db/utils/SerializeUtilsTest.java | 13 -- service-rpc/pom.xml | 7 + session/pom.xml | 5 - thrift-cluster/README.md | 22 +++ thrift-cluster/pom.xml | 44 +++++ thrift-cluster/rpc-changelist.md | 181 +++++++++++++++++++++ .../src/main/thrift/cluster.thrift | 0 thrift-sync/README.md | 22 +++ thrift-sync/pom.xml | 44 +++++ thrift-sync/rpc-changelist.md | 181 +++++++++++++++++++++ .../src/main/thrift/sync.thrift | 0 thrift/README.md | 22 +++ 27 files changed, 673 insertions(+), 104 deletions(-) diff --git a/cluster/pom.xml b/cluster/pom.xml index 1d29693..7347a3c 100644 --- a/cluster/pom.xml +++ b/cluster/pom.xml @@ -76,6 +76,21 @@ <artifactId>libthrift</artifactId> </exclusion> </exclusions> + </dependency> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + </dependency> + <dependency> + <groupId>org.apache.iotdb</groupId> + <artifactId>iotdb-thrift-cluster</artifactId> + <version>0.12.0-SNAPSHOT</version> + <exclusions> + <exclusion> + <groupId>org.apache.thrift</groupId> + <artifactId>libthrift</artifactId> + </exclusion> + </exclusions> <scope>compile</scope> </dependency> <dependency> diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/RemoteTsFileResource.java b/cluster/src/main/java/org/apache/iotdb/cluster/RemoteTsFileResource.java index fdf492a..04fb776 100644 --- a/cluster/src/main/java/org/apache/iotdb/cluster/RemoteTsFileResource.java +++ b/cluster/src/main/java/org/apache/iotdb/cluster/RemoteTsFileResource.java @@ -20,6 +20,7 @@ package org.apache.iotdb.cluster; import org.apache.iotdb.cluster.rpc.thrift.Node; +import org.apache.iotdb.cluster.utils.NodeSerializeUtils; import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; import org.apache.iotdb.db.utils.SerializeUtils; @@ -82,7 +83,7 @@ public class RemoteTsFileResource extends TsFileResource { } public void serialize(DataOutputStream dataOutputStream) { - SerializeUtils.serialize(source, dataOutputStream); + NodeSerializeUtils.serialize(source, dataOutputStream); try { // the path here is only for the remote node to get a download link, so it does not matter // if it is absolute @@ -102,7 +103,7 @@ public class RemoteTsFileResource extends TsFileResource { public void deserialize(ByteBuffer buffer) { source = new Node(); - SerializeUtils.deserialize(source, buffer); + NodeSerializeUtils.deserialize(source, buffer); setFile(new File(SerializeUtils.deserializeString(buffer))); timeIndex = diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/log/HardState.java b/cluster/src/main/java/org/apache/iotdb/cluster/log/HardState.java index 03e12fc..2e9e172 100644 --- a/cluster/src/main/java/org/apache/iotdb/cluster/log/HardState.java +++ b/cluster/src/main/java/org/apache/iotdb/cluster/log/HardState.java @@ -20,7 +20,7 @@ package org.apache.iotdb.cluster.log; import org.apache.iotdb.cluster.rpc.thrift.Node; -import org.apache.iotdb.db.utils.SerializeUtils; +import org.apache.iotdb.cluster.utils.NodeSerializeUtils; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; import org.apache.commons.lang3.builder.EqualsBuilder; @@ -46,7 +46,7 @@ public class HardState { int isNull = buffer.get(); if (isNull == 1) { Node node = new Node(); - SerializeUtils.deserialize(node, buffer); + NodeSerializeUtils.deserialize(node, buffer); res.setVoteFor(node); } else { res.setVoteFor(null); @@ -63,7 +63,7 @@ public class HardState { dataOutputStream.writeByte(0); } else { dataOutputStream.writeByte(1); - SerializeUtils.serialize(voteFor, dataOutputStream); + NodeSerializeUtils.serialize(voteFor, dataOutputStream); } } catch (IOException e) { // unreachable diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/log/logtypes/AddNodeLog.java b/cluster/src/main/java/org/apache/iotdb/cluster/log/logtypes/AddNodeLog.java index 75bb8f5..ea41685 100644 --- a/cluster/src/main/java/org/apache/iotdb/cluster/log/logtypes/AddNodeLog.java +++ b/cluster/src/main/java/org/apache/iotdb/cluster/log/logtypes/AddNodeLog.java @@ -21,7 +21,7 @@ package org.apache.iotdb.cluster.log.logtypes; import org.apache.iotdb.cluster.log.Log; import org.apache.iotdb.cluster.rpc.thrift.Node; -import org.apache.iotdb.db.utils.SerializeUtils; +import org.apache.iotdb.cluster.utils.NodeSerializeUtils; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; @@ -50,7 +50,7 @@ public class AddNodeLog extends Log { dataOutputStream.writeLong(getCurrLogIndex()); dataOutputStream.writeLong(getCurrLogTerm()); - SerializeUtils.serialize(newNode, dataOutputStream); + NodeSerializeUtils.serialize(newNode, dataOutputStream); } catch (IOException e) { // ignored } @@ -67,7 +67,7 @@ public class AddNodeLog extends Log { setCurrLogTerm(buffer.getLong()); newNode = new Node(); - SerializeUtils.deserialize(newNode, buffer); + NodeSerializeUtils.deserialize(newNode, buffer); } @Override diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/log/logtypes/RemoveNodeLog.java b/cluster/src/main/java/org/apache/iotdb/cluster/log/logtypes/RemoveNodeLog.java index 19359c2..8a84023 100644 --- a/cluster/src/main/java/org/apache/iotdb/cluster/log/logtypes/RemoveNodeLog.java +++ b/cluster/src/main/java/org/apache/iotdb/cluster/log/logtypes/RemoveNodeLog.java @@ -21,7 +21,7 @@ package org.apache.iotdb.cluster.log.logtypes; import org.apache.iotdb.cluster.log.Log; import org.apache.iotdb.cluster.rpc.thrift.Node; -import org.apache.iotdb.db.utils.SerializeUtils; +import org.apache.iotdb.cluster.utils.NodeSerializeUtils; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; @@ -41,7 +41,7 @@ public class RemoveNodeLog extends Log { dataOutputStream.writeLong(getCurrLogIndex()); dataOutputStream.writeLong(getCurrLogTerm()); - SerializeUtils.serialize(removedNode, dataOutputStream); + NodeSerializeUtils.serialize(removedNode, dataOutputStream); } catch (IOException e) { // ignored } @@ -54,7 +54,7 @@ public class RemoveNodeLog extends Log { setCurrLogTerm(buffer.getLong()); removedNode = new Node(); - SerializeUtils.deserialize(removedNode, buffer); + NodeSerializeUtils.deserialize(removedNode, buffer); } public Node getRemovedNode() { diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/log/snapshot/PullSnapshotTaskDescriptor.java b/cluster/src/main/java/org/apache/iotdb/cluster/log/snapshot/PullSnapshotTaskDescriptor.java index b811f1f..a2216fd 100644 --- a/cluster/src/main/java/org/apache/iotdb/cluster/log/snapshot/PullSnapshotTaskDescriptor.java +++ b/cluster/src/main/java/org/apache/iotdb/cluster/log/snapshot/PullSnapshotTaskDescriptor.java @@ -21,7 +21,7 @@ package org.apache.iotdb.cluster.log.snapshot; import org.apache.iotdb.cluster.partition.PartitionGroup; import org.apache.iotdb.cluster.rpc.thrift.Node; -import org.apache.iotdb.db.utils.SerializeUtils; +import org.apache.iotdb.cluster.utils.NodeSerializeUtils; import java.io.DataInputStream; import java.io.DataOutputStream; @@ -77,7 +77,7 @@ public class PullSnapshotTaskDescriptor { dataOutputStream.writeInt(previousHolders.size()); for (Node previousHolder : previousHolders) { - SerializeUtils.serialize(previousHolder, dataOutputStream); + NodeSerializeUtils.serialize(previousHolder, dataOutputStream); } dataOutputStream.writeBoolean(requireReadOnly); @@ -94,7 +94,7 @@ public class PullSnapshotTaskDescriptor { previousHolders = new PartitionGroup(); for (int i = 0; i < holderSize; i++) { Node node = new Node(); - SerializeUtils.deserialize(node, dataInputStream); + NodeSerializeUtils.deserialize(node, dataInputStream); previousHolders.add(node); } diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/partition/slot/SlotManager.java b/cluster/src/main/java/org/apache/iotdb/cluster/partition/slot/SlotManager.java index 37cc0f2..528119f 100644 --- a/cluster/src/main/java/org/apache/iotdb/cluster/partition/slot/SlotManager.java +++ b/cluster/src/main/java/org/apache/iotdb/cluster/partition/slot/SlotManager.java @@ -6,8 +6,8 @@ package org.apache.iotdb.cluster.partition.slot; import org.apache.iotdb.cluster.config.ClusterDescriptor; import org.apache.iotdb.cluster.rpc.thrift.Node; +import org.apache.iotdb.cluster.utils.NodeSerializeUtils; import org.apache.iotdb.db.exception.StorageEngineException; -import org.apache.iotdb.db.utils.SerializeUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -298,7 +298,7 @@ public class SlotManager { private void serialize(DataOutputStream outputStream) throws IOException { outputStream.writeInt(slotStatus.ordinal()); if (slotStatus == SlotStatus.PULLING || slotStatus == SlotStatus.PULLING_WRITABLE) { - SerializeUtils.serialize(source, outputStream); + NodeSerializeUtils.serialize(source, outputStream); } else if (slotStatus == SlotStatus.SENDING) { outputStream.writeInt(snapshotReceivedCount); } @@ -310,7 +310,7 @@ public class SlotManager { if (descriptor.slotStatus == SlotStatus.PULLING || descriptor.slotStatus == SlotStatus.PULLING_WRITABLE) { descriptor.source = new Node(); - SerializeUtils.deserialize(descriptor.source, buffer); + NodeSerializeUtils.deserialize(descriptor.source, buffer); } else if (descriptor.slotStatus == SlotStatus.SENDING) { descriptor.snapshotReceivedCount = buffer.getInt(); } diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/partition/slot/SlotPartitionTable.java b/cluster/src/main/java/org/apache/iotdb/cluster/partition/slot/SlotPartitionTable.java index 8c25a63..469e84d 100644 --- a/cluster/src/main/java/org/apache/iotdb/cluster/partition/slot/SlotPartitionTable.java +++ b/cluster/src/main/java/org/apache/iotdb/cluster/partition/slot/SlotPartitionTable.java @@ -12,6 +12,7 @@ import org.apache.iotdb.cluster.partition.PartitionGroup; import org.apache.iotdb.cluster.partition.PartitionTable; import org.apache.iotdb.cluster.partition.slot.SlotStrategy.DefaultStrategy; import org.apache.iotdb.cluster.rpc.thrift.Node; +import org.apache.iotdb.cluster.utils.NodeSerializeUtils; import org.apache.iotdb.db.utils.SerializeUtils; import org.slf4j.Logger; @@ -310,7 +311,7 @@ public class SlotPartitionTable implements PartitionTable { dataOutputStream.writeInt(totalSlotNumbers); dataOutputStream.writeInt(nodeSlotMap.size()); for (Entry<Node, List<Integer>> entry : nodeSlotMap.entrySet()) { - SerializeUtils.serialize(entry.getKey(), dataOutputStream); + NodeSerializeUtils.serialize(entry.getKey(), dataOutputStream); SerializeUtils.serializeIntList(entry.getValue(), dataOutputStream); } @@ -341,7 +342,7 @@ public class SlotPartitionTable implements PartitionTable { for (int i = 0; i < size; i++) { Node node = new Node(); List<Integer> slots = new ArrayList<>(); - SerializeUtils.deserialize(node, buffer); + NodeSerializeUtils.deserialize(node, buffer); SerializeUtils.deserializeIntList(slots, buffer); nodeSlotMap.put(node, slots); idNodeMap.put(node.getNodeIdentifier(), node); diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/utils/NodeSerializeUtils.java b/cluster/src/main/java/org/apache/iotdb/cluster/utils/NodeSerializeUtils.java new file mode 100644 index 0000000..6e14cc3 --- /dev/null +++ b/cluster/src/main/java/org/apache/iotdb/cluster/utils/NodeSerializeUtils.java @@ -0,0 +1,90 @@ +/* + * 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.cluster.utils; + +import org.apache.iotdb.cluster.rpc.thrift.Node; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.ByteBuffer; + +public class NodeSerializeUtils { + + public static void serialize(Node node, DataOutputStream dataOutputStream) { + try { + byte[] internalIpBytes = node.internalIp.getBytes(); + dataOutputStream.writeInt(internalIpBytes.length); + dataOutputStream.write(internalIpBytes); + dataOutputStream.writeInt(node.metaPort); + dataOutputStream.writeInt(node.nodeIdentifier); + dataOutputStream.writeInt(node.dataPort); + dataOutputStream.writeInt(node.clientPort); + byte[] clientIpBytes = node.clientIp.getBytes(); + dataOutputStream.writeInt(clientIpBytes.length); + dataOutputStream.write(clientIpBytes); + } catch (IOException e) { + // unreachable + } + } + + public static void deserialize(Node node, ByteBuffer buffer) { + int internalIpLength = buffer.getInt(); + byte[] internalIpBytes = new byte[internalIpLength]; + buffer.get(internalIpBytes); + node.setInternalIp(new String(internalIpBytes)); + node.setMetaPort(buffer.getInt()); + node.setNodeIdentifier(buffer.getInt()); + node.setDataPort(buffer.getInt()); + node.setClientPort(buffer.getInt()); + int clientIpLength = buffer.getInt(); + byte[] clientIpBytes = new byte[clientIpLength]; + buffer.get(clientIpBytes); + node.setClientIp(new String(clientIpBytes)); + } + + public static void deserialize(Node node, DataInputStream stream) throws IOException { + int ipLength = stream.readInt(); + byte[] ipBytes = new byte[ipLength]; + int readIpSize = stream.read(ipBytes); + if (readIpSize != ipLength) { + throw new IOException( + String.format( + "No sufficient bytes read when deserializing the ip of a node: %d/%d", + readIpSize, ipLength)); + } + node.setInternalIp(new String(ipBytes)); + node.setMetaPort(stream.readInt()); + node.setNodeIdentifier(stream.readInt()); + node.setDataPort(stream.readInt()); + node.setClientPort(stream.readInt()); + + int clientIpLength = stream.readInt(); + byte[] clientIpBytes = new byte[clientIpLength]; + int readClientIpSize = stream.read(clientIpBytes); + if (readClientIpSize != clientIpLength) { + throw new IOException( + String.format( + "No sufficient bytes read when deserializing the clientIp of a node: %d/%d", + readClientIpSize, clientIpLength)); + } + node.setClientIp(new String(clientIpBytes)); + } +} diff --git a/cluster/src/test/java/org/apache/iotdb/cluster/utils/SerializeUtilTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/utils/SerializeUtilTest.java index 8fabcb5..0de5cbb 100644 --- a/cluster/src/test/java/org/apache/iotdb/cluster/utils/SerializeUtilTest.java +++ b/cluster/src/test/java/org/apache/iotdb/cluster/utils/SerializeUtilTest.java @@ -34,6 +34,7 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; import org.apache.iotdb.tsfile.utils.Binary; +import org.junit.Assert; import org.junit.Test; import java.io.ByteArrayOutputStream; @@ -178,4 +179,16 @@ public class SerializeUtilTest { Log parsed = LogParser.getINSTANCE().parse(serialized); assertEquals(log, parsed); } + + @Test + public void serdesNodeTest() { + Node node = new Node("127.0.0.1", 6667, 1, 6535, 4678, "127.0.0.1"); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + DataOutputStream outputStream = new DataOutputStream(baos); + NodeSerializeUtils.serialize(node, outputStream); + ByteBuffer buffer = ByteBuffer.wrap(baos.toByteArray()); + Node anotherNode = new Node("127.0.0.1", 6667, 1, 6535, 4678, "127.0.0.1"); + NodeSerializeUtils.deserialize(anotherNode, buffer); + Assert.assertEquals(node, anotherNode); + } } diff --git a/grafana/pom.xml b/grafana/pom.xml index ac5a8e9..a24ba06 100644 --- a/grafana/pom.xml +++ b/grafana/pom.xml @@ -59,6 +59,10 @@ </dependencyManagement> <dependencies> <dependency> + <groupId>com.google.code.gson</groupId> + <artifactId>gson</artifactId> + </dependency> + <dependency> <groupId>org.apache.iotdb</groupId> <artifactId>iotdb-jdbc</artifactId> <version>${project.version}</version> diff --git a/jdbc/pom.xml b/jdbc/pom.xml index 41e1ffd..dd17752 100644 --- a/jdbc/pom.xml +++ b/jdbc/pom.xml @@ -38,11 +38,6 @@ <dependencies> <dependency> <groupId>org.apache.iotdb</groupId> - <artifactId>tsfile</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.apache.iotdb</groupId> <artifactId>service-rpc</artifactId> <version>${project.version}</version> </dependency> diff --git a/pom.xml b/pom.xml index e249644..5cf7914 100644 --- a/pom.xml +++ b/pom.xml @@ -82,6 +82,8 @@ <module>tsfile</module> <module>antlr</module> <module>thrift</module> + <module>thrift-cluster</module> + <module>thrift-sync</module> <module>service-rpc</module> <module>jdbc</module> <module>session</module> diff --git a/server/pom.xml b/server/pom.xml index a985d6a..dee952f 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -76,6 +76,11 @@ <scope>test</scope> </dependency> <dependency> + <groupId>org.apache.iotdb</groupId> + <artifactId>iotdb-thrift-sync</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> </dependency> diff --git a/server/src/main/java/org/apache/iotdb/db/utils/SerializeUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/SerializeUtils.java index e4f3bda..cb881e0 100644 --- a/server/src/main/java/org/apache/iotdb/db/utils/SerializeUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/utils/SerializeUtils.java @@ -19,7 +19,6 @@ package org.apache.iotdb.db.utils; -import org.apache.iotdb.cluster.rpc.thrift.Node; import org.apache.iotdb.tsfile.common.conf.TSFileConfig; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.read.TimeValuePair; @@ -30,7 +29,6 @@ import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; import org.apache.iotdb.tsfile.utils.TsPrimitiveType; import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.nio.ByteBuffer; @@ -119,66 +117,6 @@ public class SerializeUtils { } } - public static void serialize(Node node, DataOutputStream dataOutputStream) { - try { - byte[] internalIpBytes = node.internalIp.getBytes(); - dataOutputStream.writeInt(internalIpBytes.length); - dataOutputStream.write(internalIpBytes); - dataOutputStream.writeInt(node.metaPort); - dataOutputStream.writeInt(node.nodeIdentifier); - dataOutputStream.writeInt(node.dataPort); - dataOutputStream.writeInt(node.clientPort); - byte[] clientIpBytes = node.clientIp.getBytes(); - dataOutputStream.writeInt(clientIpBytes.length); - dataOutputStream.write(clientIpBytes); - } catch (IOException e) { - // unreachable - } - } - - public static void deserialize(Node node, ByteBuffer buffer) { - int internalIpLength = buffer.getInt(); - byte[] internalIpBytes = new byte[internalIpLength]; - buffer.get(internalIpBytes); - node.setInternalIp(new String(internalIpBytes)); - node.setMetaPort(buffer.getInt()); - node.setNodeIdentifier(buffer.getInt()); - node.setDataPort(buffer.getInt()); - node.setClientPort(buffer.getInt()); - int clientIpLength = buffer.getInt(); - byte[] clientIpBytes = new byte[clientIpLength]; - buffer.get(clientIpBytes); - node.setClientIp(new String(clientIpBytes)); - } - - public static void deserialize(Node node, DataInputStream stream) throws IOException { - int ipLength = stream.readInt(); - byte[] ipBytes = new byte[ipLength]; - int readIpSize = stream.read(ipBytes); - if (readIpSize != ipLength) { - throw new IOException( - String.format( - "No sufficient bytes read when deserializing the ip of a node: %d/%d", - readIpSize, ipLength)); - } - node.setInternalIp(new String(ipBytes)); - node.setMetaPort(stream.readInt()); - node.setNodeIdentifier(stream.readInt()); - node.setDataPort(stream.readInt()); - node.setClientPort(stream.readInt()); - - int clientIpLength = stream.readInt(); - byte[] clientIpBytes = new byte[clientIpLength]; - int readClientIpSize = stream.read(clientIpBytes); - if (readClientIpSize != clientIpLength) { - throw new IOException( - String.format( - "No sufficient bytes read when deserializing the clientIp of a node: %d/%d", - readClientIpSize, clientIpLength)); - } - node.setClientIp(new String(clientIpBytes)); - } - public static void serializeBatchData(BatchData batchData, DataOutputStream outputStream) { try { int length = batchData.length(); diff --git a/server/src/test/java/org/apache/iotdb/db/utils/SerializeUtilsTest.java b/server/src/test/java/org/apache/iotdb/db/utils/SerializeUtilsTest.java index ba91d9f..5924589 100644 --- a/server/src/test/java/org/apache/iotdb/db/utils/SerializeUtilsTest.java +++ b/server/src/test/java/org/apache/iotdb/db/utils/SerializeUtilsTest.java @@ -18,7 +18,6 @@ */ package org.apache.iotdb.db.utils; -import org.apache.iotdb.cluster.rpc.thrift.Node; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.read.TimeValuePair; import org.apache.iotdb.tsfile.read.common.BatchData; @@ -85,18 +84,6 @@ public class SerializeUtilsTest { } @Test - public void serdesNodeTest() { - Node node = new Node("127.0.0.1", 6667, 1, 6535, 4678, "127.0.0.1"); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - DataOutputStream outputStream = new DataOutputStream(baos); - SerializeUtils.serialize(node, outputStream); - ByteBuffer buffer = ByteBuffer.wrap(baos.toByteArray()); - Node anotherNode = new Node("127.0.0.1", 6667, 1, 6535, 4678, "127.0.0.1"); - SerializeUtils.deserialize(anotherNode, buffer); - Assert.assertEquals(node, anotherNode); - } - - @Test public void serdesINT32BatchDataTest() { BatchData batchData = new BatchData(TSDataType.INT32); int ivalue = 0; diff --git a/service-rpc/pom.xml b/service-rpc/pom.xml index 83995c8..8c34872 100644 --- a/service-rpc/pom.xml +++ b/service-rpc/pom.xml @@ -40,6 +40,13 @@ <groupId>org.apache.iotdb</groupId> <artifactId>tsfile</artifactId> <version>${project.version}</version> + <!-- we want to reduce the size of JDBC --> + <exclusions> + <exclusion> + <groupId>*</groupId> + <artifactId>*</artifactId> + </exclusion> + </exclusions> </dependency> <dependency> <groupId>org.apache.iotdb</groupId> diff --git a/session/pom.xml b/session/pom.xml index 3e3bb71..bd02c26 100644 --- a/session/pom.xml +++ b/session/pom.xml @@ -73,11 +73,6 @@ </dependency> <dependency> <groupId>org.apache.iotdb</groupId> - <artifactId>tsfile</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.apache.iotdb</groupId> <artifactId>iotdb-server</artifactId> <version>${project.version}</version> <type>test-jar</type> diff --git a/thrift-cluster/README.md b/thrift-cluster/README.md new file mode 100644 index 0000000..b83e1e1 --- /dev/null +++ b/thrift-cluster/README.md @@ -0,0 +1,22 @@ +<!-- + + 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. + +--> + +This modules maintains all RPC interfaces among servers for the cluster module. \ No newline at end of file diff --git a/thrift-cluster/pom.xml b/thrift-cluster/pom.xml new file mode 100644 index 0000000..c1c49a3 --- /dev/null +++ b/thrift-cluster/pom.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. + +--> +<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"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.iotdb</groupId> + <artifactId>iotdb-parent</artifactId> + <version>0.12.0-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + <artifactId>iotdb-thrift-cluster</artifactId> + <name>rpc-thrift-cluster</name> + <description>RPC (Thrift) framework among servers.</description> + <dependencies> + <dependency> + <groupId>org.apache.thrift</groupId> + <artifactId>libthrift</artifactId> + </dependency> + <dependency> + <groupId>org.apache.iotdb</groupId> + <artifactId>iotdb-thrift</artifactId> + <version>${project.version}</version> + </dependency> + </dependencies> +</project> diff --git a/thrift-cluster/rpc-changelist.md b/thrift-cluster/rpc-changelist.md new file mode 100644 index 0000000..797c0b6 --- /dev/null +++ b/thrift-cluster/rpc-changelist.md @@ -0,0 +1,181 @@ +<!-- + + 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. + +--> +# 0.11.x(version-2) -> 0.12.x(version-1) + +Last Updated on 2021.01.19 by Xiangwei Wei. + + +## 1. Delete Old + +| Latest Changes | Related Committers | +| ---------------------------------- | ------------------ | + + +## 2. Add New + +| Latest Changes | Related Committers | +| ------------------------------------------------------------ | ---------------------- | +| Add timeout in TSFetchResultsReq and TSExecuteStatementReq | Xiangwei Wei | + + +## 3. Update + +| Latest Changes | Related Committers | +| ------------------------------------------------------------ | ---------------------- | + + +# 0.10.x (version-2) -> 0.11.x (version-3) + +Last Updated on 2020-10-27 by Xiangwei Wei. + + +## 1. Delete Old + +| Latest Changes | Related Committers | +| ---------------------------------- | ------------------ | +| Remove TSBatchExecuteStatementResp | Tian Jiang | + + +## 2. Add New + +| Latest Changes | Related Committers | +| ------------------------------------------------------------ | ---------------------- | +| set the input/output as TFramedTransport | Tian Jiang | +| Add timeout(optional) in TSFetchResultsReq and TSExecuteStatementReq | Xiangwei Wei | + + +## 3. Update + +| Latest Changes | Related Committers | +| ------------------------------------------------------------ | ---------------------- | +| Add sub-status in TSStatus | Tian Jiang | +| Change the result of executeBatchStatement as TSStatus | Tian Jiang | +| Change TSDeleteDataReq, delete timestamp and add startTime and endTime | Wei Shao | +| Add zoneId in TSOpenSessionReq | Xiangwei Wei | + + +# 0.9.x (version-1) -> 0.10.x (version-2) + +Last Updated on 2020-5-25 by Kaifeng Xue. + + +## 1. Delete Old + +| Latest Changes | Related Committers | +| ---------------------------------- | ------------------ | +| Remove TS_SessionHandle,TSHandleIdentifier | Tian Jiang | +| Remove TSStatus,TSExecuteInsertRowInBatchResp | Jialin Qiao| + + +## 2. Add New + +| Latest Changes | Related Committers | +| ------------------------------------------------------------ | ---------------------------------- | +| Add parameter sessionId in getTimeZone, getProperties, setStorageGroup, createTimeseries... | Tian Jiang| +| Add struct TSQueryNonAlignDataSet | Haonan Hou| +| Add struct TSInsertTabletsReq | Jialin Qiao| +| Add method insertTablets | Jialin Qiao| +| Add method testInsertTablets | Xiangdong Huang | +| add new field `inferType` in TSInsertRecordReq | Jialin Qiao | + +## 3. Update + +| Latest Changes | Related Committers | +| ------------------------------------------------------------ | ---------------------- | +| Replace TS_SessionHandles with SessionIds, TSOperationHandle with queryIds | Tian Jiang | +| Add optional TSQueryNonAlignDataSet in TSExecuteStatementResp, TSFetchResultsResp and required bool isAlign in TSFetchResultsReq | Haonan Hou | +| Rename TSStatusType to TSStatus | Jialin Qiao | +| Remove sessionId in TSExecuteBatchStatementResp | Jialin Qiao | +| Rename insertRows to insertReords, insert to insertRecord, insertBatch to insertTablet | Jialin Qiao | +| Use TsDataType and binary rather than string in TSInsertInBatchReq and TSInsertReq | Kaifeng Xue | + + + +# 0.8.x -> 0.9.x (version-1) + +Last Updated on 2019-10-27 by Lei Rui. + + +## 1. Delete Old + +| Latest Changes | Related Committers | +| ---------------------------------- | ------------------ | +| Delete struct TSSetStorageGroupReq | Jialin Qiao | +| Remove struct TSDataValue | Lei Rui | +| Remove struct TSRowRecord | Lei Rui | +| Remove optional string version in TSFetchMetadataResp | Genius_pig | +| Remove optional set<string> childPaths, nodesList, storageGroups, devices in TSFetchMetadataResp | Genius_pig | +| Remove optional map<string, string> nodeTimeseriesNum in TSFetchMetadataResp | Genius_pig | +| Remove optional list<list<string>> timeseriesList in TSFetchMetadataResp | Genius_pig | +| Remove optinoal optional i32 timeseriesNum in TSFetchMetadataResp | Genius_pig | +| Remove optional i32 nodeLevel in TSFetchMetadataReq | Genius_pig | + + +## 2. Add New + +| Latest Changes | Related Committers | +| ------------------------------------------------------------ | ---------------------------------- | +| Add struct TSBatchInsertionReq | qiaojialin | +| Add method TSExecuteBatchStatementResp insertBatch(1:TSBatchInsertionReq req) | qiaojialin | +| Add Struct TSStatusType | Zesong Sun | +| Add TSCreateTimeseriesReq | Zesong Sun | +| Add method TSStatus setStorageGroup(1:string storageGroup) | Zesong Sun, Jialin Qiao | +| Add method TSStatus createTimeseries(1:TSCreateTimeseriesReq req) | Zesong Sun | +| Add struct TSInsertReq | qiaojialin | +| Add method TSRPCResp insertRow(1:TSInsertReq req) | qiaojialin | +| Add struct TSDeleteDataReq | Jack Tsai, qiaojialin | +| Add method TSStatus deleteData(1:TSDeleteDataReq req) | Jack Tsai, Jialin Qiao, qiaojialin | +| Add method TSStatus deleteTimeseries(1:list\<string> path) | qiaojialin | +| Add method TSStatus deleteStorageGroups(1:list\<string> storageGroup) | Yi Tao | +| Add Struct TSExecuteInsertRowInBatchResp | Kaifeng Xue | +| Add method insertRowInBatch(1:TSInsertInBatchReq req); | Kaifeng Xue | +| Add method testInsertRowInBatch(1:TSInsertInBatchReq req); | Kaifeng Xue | +| Add method testInsertRow(1:TSInsertReq req); | Kaifeng Xue | +| Add method testInsertBatch(1:TSBatchInsertionReq req); | Kaifeng Xue | +| Add struct TSCreateMultiTimeseriesReq | qiaojialin | +| Add method createMultiTimeseries(1:TSCreateMultiTimeseriesReq req); | qiaojialin | + + +## 3. Update + +| Latest Changes | Related Committers | +| ------------------------------------------------------------ | ---------------------- | +| Add required string timestampPrecision in ServerProperties | 1160300922 | +| Add optional list\<string\> dataTypeList in TSExecuteStatementResp | suyue | +| Update TSStatus to use TSStatusType, instead of using ~~TS_StatusCode, errorCode and errorMessage~~ | Zesong Sun | +| Rename item in enum TSProtocolVersion from ~~TSFILE_SERVICE_PROTOCOL_V1~~ to IOTDB_SERVICE_PROTOCOL_V1 | qiaojialin | +| Rename method name from ~~TSExecuteStatementResp executeInsertion(1:TSInsertionReq req)~~ to TSExecuteStatementResp insert(1:TSInsertionReq req) | qiaojialin | +| Add required i32 compressor in TSCreateTimeseriesReq | Jialin Qiao | +| Add optional list\<string> nodesList, optional map\<string, string> nodeTimeseriesNum in TSFetchMetadataResp | jack870131 | +| Add optional i32 nodeLevel in TSFetchMetadataReq | jack870131, Zesong Sun | +| Change the following methods' returned type to be TSStatus: <br />TSStatus closeSession(1:TSCloseSessionReq req), <br />TSStatus cancelOperation(1:TSCancelOperationReq req), <br />TSStatus closeOperation(1:TSCloseOperationReq req), <br />TSStatus setTimeZone(1:TSSetTimeZoneReq req), <br />TSStatus setStorageGroup(1:string storageGroup), <br />TSStatus createTimeseries(1:TSCreateTimeseriesReq req), <br />TSStatus insertRow(1:TSInsertReq req), <br />TSStatus deleteData(1:TSDeleteDataReq [...] +| Change from ~~required string path~~ to required list\<string> paths in TSDeleteDataReq | qiaojialin | +| Add optional set\<string> devices in TSFetchMetadataResp | Zesong Sun | +| Rename some fields in TSFetchMetadataResp: ~~ColumnsList~~ to columnsList, ~~showTimeseriesList~~ to timeseriesList, ~~showStorageGroups~~ to storageGroups | Zesong Sun | +| Change struct TSQueryDataSet to eliminate row-wise rpc writing | Lei Rui | +| Add optional i32 timeseriesNum in TSFetchMetadataResp | Jack Tsai | +| Add required i64 queryId in TSHandleIdentifier | Yuan Tian | +| Add optional set\<string> childPaths in TSFetchMetadataResp | Haonan Hou | +| Add optional string version in TSFetchMetadataResp | Genius_pig | +| Add required i64 statementId in TSExecuteStatementReq | Yuan Tian | +| Add required binary time, required list<binary> valueList, required list<binary> bitmapList and remove required binary values, required i32 rowCount in TSQueryDataSet| Yuan Tian | +| Add optional i32 fetchSize in TSExecuteStatementReq,<br />Add optional TSQueryDataSet in TSExecuteStatementResp| liutaohua | +| Add optional map<string, string> props, optional map<string, string> tags, optional map<string, string> attributes and optional string aliasPath in TSCreateTimeseriesReq | Yuan Tian | diff --git a/thrift/src/main/thrift/cluster.thrift b/thrift-cluster/src/main/thrift/cluster.thrift similarity index 100% rename from thrift/src/main/thrift/cluster.thrift rename to thrift-cluster/src/main/thrift/cluster.thrift diff --git a/thrift-sync/README.md b/thrift-sync/README.md new file mode 100644 index 0000000..94c1de6 --- /dev/null +++ b/thrift-sync/README.md @@ -0,0 +1,22 @@ +<!-- + + 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. + +--> + +This modules maintains all RPC interfaces for data synchronization among servers. \ No newline at end of file diff --git a/thrift-sync/pom.xml b/thrift-sync/pom.xml new file mode 100644 index 0000000..2108734 --- /dev/null +++ b/thrift-sync/pom.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. + +--> +<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"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.iotdb</groupId> + <artifactId>iotdb-parent</artifactId> + <version>0.12.0-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + <artifactId>iotdb-thrift-sync</artifactId> + <name>rpc-thrift-sync</name> + <description>RPC (Thrift) framework among servers for data synchronization.</description> + <dependencies> + <dependency> + <groupId>org.apache.thrift</groupId> + <artifactId>libthrift</artifactId> + </dependency> + <dependency> + <groupId>org.apache.iotdb</groupId> + <artifactId>iotdb-thrift</artifactId> + <version>${project.version}</version> + </dependency> + </dependencies> +</project> diff --git a/thrift-sync/rpc-changelist.md b/thrift-sync/rpc-changelist.md new file mode 100644 index 0000000..797c0b6 --- /dev/null +++ b/thrift-sync/rpc-changelist.md @@ -0,0 +1,181 @@ +<!-- + + 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. + +--> +# 0.11.x(version-2) -> 0.12.x(version-1) + +Last Updated on 2021.01.19 by Xiangwei Wei. + + +## 1. Delete Old + +| Latest Changes | Related Committers | +| ---------------------------------- | ------------------ | + + +## 2. Add New + +| Latest Changes | Related Committers | +| ------------------------------------------------------------ | ---------------------- | +| Add timeout in TSFetchResultsReq and TSExecuteStatementReq | Xiangwei Wei | + + +## 3. Update + +| Latest Changes | Related Committers | +| ------------------------------------------------------------ | ---------------------- | + + +# 0.10.x (version-2) -> 0.11.x (version-3) + +Last Updated on 2020-10-27 by Xiangwei Wei. + + +## 1. Delete Old + +| Latest Changes | Related Committers | +| ---------------------------------- | ------------------ | +| Remove TSBatchExecuteStatementResp | Tian Jiang | + + +## 2. Add New + +| Latest Changes | Related Committers | +| ------------------------------------------------------------ | ---------------------- | +| set the input/output as TFramedTransport | Tian Jiang | +| Add timeout(optional) in TSFetchResultsReq and TSExecuteStatementReq | Xiangwei Wei | + + +## 3. Update + +| Latest Changes | Related Committers | +| ------------------------------------------------------------ | ---------------------- | +| Add sub-status in TSStatus | Tian Jiang | +| Change the result of executeBatchStatement as TSStatus | Tian Jiang | +| Change TSDeleteDataReq, delete timestamp and add startTime and endTime | Wei Shao | +| Add zoneId in TSOpenSessionReq | Xiangwei Wei | + + +# 0.9.x (version-1) -> 0.10.x (version-2) + +Last Updated on 2020-5-25 by Kaifeng Xue. + + +## 1. Delete Old + +| Latest Changes | Related Committers | +| ---------------------------------- | ------------------ | +| Remove TS_SessionHandle,TSHandleIdentifier | Tian Jiang | +| Remove TSStatus,TSExecuteInsertRowInBatchResp | Jialin Qiao| + + +## 2. Add New + +| Latest Changes | Related Committers | +| ------------------------------------------------------------ | ---------------------------------- | +| Add parameter sessionId in getTimeZone, getProperties, setStorageGroup, createTimeseries... | Tian Jiang| +| Add struct TSQueryNonAlignDataSet | Haonan Hou| +| Add struct TSInsertTabletsReq | Jialin Qiao| +| Add method insertTablets | Jialin Qiao| +| Add method testInsertTablets | Xiangdong Huang | +| add new field `inferType` in TSInsertRecordReq | Jialin Qiao | + +## 3. Update + +| Latest Changes | Related Committers | +| ------------------------------------------------------------ | ---------------------- | +| Replace TS_SessionHandles with SessionIds, TSOperationHandle with queryIds | Tian Jiang | +| Add optional TSQueryNonAlignDataSet in TSExecuteStatementResp, TSFetchResultsResp and required bool isAlign in TSFetchResultsReq | Haonan Hou | +| Rename TSStatusType to TSStatus | Jialin Qiao | +| Remove sessionId in TSExecuteBatchStatementResp | Jialin Qiao | +| Rename insertRows to insertReords, insert to insertRecord, insertBatch to insertTablet | Jialin Qiao | +| Use TsDataType and binary rather than string in TSInsertInBatchReq and TSInsertReq | Kaifeng Xue | + + + +# 0.8.x -> 0.9.x (version-1) + +Last Updated on 2019-10-27 by Lei Rui. + + +## 1. Delete Old + +| Latest Changes | Related Committers | +| ---------------------------------- | ------------------ | +| Delete struct TSSetStorageGroupReq | Jialin Qiao | +| Remove struct TSDataValue | Lei Rui | +| Remove struct TSRowRecord | Lei Rui | +| Remove optional string version in TSFetchMetadataResp | Genius_pig | +| Remove optional set<string> childPaths, nodesList, storageGroups, devices in TSFetchMetadataResp | Genius_pig | +| Remove optional map<string, string> nodeTimeseriesNum in TSFetchMetadataResp | Genius_pig | +| Remove optional list<list<string>> timeseriesList in TSFetchMetadataResp | Genius_pig | +| Remove optinoal optional i32 timeseriesNum in TSFetchMetadataResp | Genius_pig | +| Remove optional i32 nodeLevel in TSFetchMetadataReq | Genius_pig | + + +## 2. Add New + +| Latest Changes | Related Committers | +| ------------------------------------------------------------ | ---------------------------------- | +| Add struct TSBatchInsertionReq | qiaojialin | +| Add method TSExecuteBatchStatementResp insertBatch(1:TSBatchInsertionReq req) | qiaojialin | +| Add Struct TSStatusType | Zesong Sun | +| Add TSCreateTimeseriesReq | Zesong Sun | +| Add method TSStatus setStorageGroup(1:string storageGroup) | Zesong Sun, Jialin Qiao | +| Add method TSStatus createTimeseries(1:TSCreateTimeseriesReq req) | Zesong Sun | +| Add struct TSInsertReq | qiaojialin | +| Add method TSRPCResp insertRow(1:TSInsertReq req) | qiaojialin | +| Add struct TSDeleteDataReq | Jack Tsai, qiaojialin | +| Add method TSStatus deleteData(1:TSDeleteDataReq req) | Jack Tsai, Jialin Qiao, qiaojialin | +| Add method TSStatus deleteTimeseries(1:list\<string> path) | qiaojialin | +| Add method TSStatus deleteStorageGroups(1:list\<string> storageGroup) | Yi Tao | +| Add Struct TSExecuteInsertRowInBatchResp | Kaifeng Xue | +| Add method insertRowInBatch(1:TSInsertInBatchReq req); | Kaifeng Xue | +| Add method testInsertRowInBatch(1:TSInsertInBatchReq req); | Kaifeng Xue | +| Add method testInsertRow(1:TSInsertReq req); | Kaifeng Xue | +| Add method testInsertBatch(1:TSBatchInsertionReq req); | Kaifeng Xue | +| Add struct TSCreateMultiTimeseriesReq | qiaojialin | +| Add method createMultiTimeseries(1:TSCreateMultiTimeseriesReq req); | qiaojialin | + + +## 3. Update + +| Latest Changes | Related Committers | +| ------------------------------------------------------------ | ---------------------- | +| Add required string timestampPrecision in ServerProperties | 1160300922 | +| Add optional list\<string\> dataTypeList in TSExecuteStatementResp | suyue | +| Update TSStatus to use TSStatusType, instead of using ~~TS_StatusCode, errorCode and errorMessage~~ | Zesong Sun | +| Rename item in enum TSProtocolVersion from ~~TSFILE_SERVICE_PROTOCOL_V1~~ to IOTDB_SERVICE_PROTOCOL_V1 | qiaojialin | +| Rename method name from ~~TSExecuteStatementResp executeInsertion(1:TSInsertionReq req)~~ to TSExecuteStatementResp insert(1:TSInsertionReq req) | qiaojialin | +| Add required i32 compressor in TSCreateTimeseriesReq | Jialin Qiao | +| Add optional list\<string> nodesList, optional map\<string, string> nodeTimeseriesNum in TSFetchMetadataResp | jack870131 | +| Add optional i32 nodeLevel in TSFetchMetadataReq | jack870131, Zesong Sun | +| Change the following methods' returned type to be TSStatus: <br />TSStatus closeSession(1:TSCloseSessionReq req), <br />TSStatus cancelOperation(1:TSCancelOperationReq req), <br />TSStatus closeOperation(1:TSCloseOperationReq req), <br />TSStatus setTimeZone(1:TSSetTimeZoneReq req), <br />TSStatus setStorageGroup(1:string storageGroup), <br />TSStatus createTimeseries(1:TSCreateTimeseriesReq req), <br />TSStatus insertRow(1:TSInsertReq req), <br />TSStatus deleteData(1:TSDeleteDataReq [...] +| Change from ~~required string path~~ to required list\<string> paths in TSDeleteDataReq | qiaojialin | +| Add optional set\<string> devices in TSFetchMetadataResp | Zesong Sun | +| Rename some fields in TSFetchMetadataResp: ~~ColumnsList~~ to columnsList, ~~showTimeseriesList~~ to timeseriesList, ~~showStorageGroups~~ to storageGroups | Zesong Sun | +| Change struct TSQueryDataSet to eliminate row-wise rpc writing | Lei Rui | +| Add optional i32 timeseriesNum in TSFetchMetadataResp | Jack Tsai | +| Add required i64 queryId in TSHandleIdentifier | Yuan Tian | +| Add optional set\<string> childPaths in TSFetchMetadataResp | Haonan Hou | +| Add optional string version in TSFetchMetadataResp | Genius_pig | +| Add required i64 statementId in TSExecuteStatementReq | Yuan Tian | +| Add required binary time, required list<binary> valueList, required list<binary> bitmapList and remove required binary values, required i32 rowCount in TSQueryDataSet| Yuan Tian | +| Add optional i32 fetchSize in TSExecuteStatementReq,<br />Add optional TSQueryDataSet in TSExecuteStatementResp| liutaohua | +| Add optional map<string, string> props, optional map<string, string> tags, optional map<string, string> attributes and optional string aliasPath in TSCreateTimeseriesReq | Yuan Tian | diff --git a/thrift/src/main/thrift/sync.thrift b/thrift-sync/src/main/thrift/sync.thrift similarity index 100% rename from thrift/src/main/thrift/sync.thrift rename to thrift-sync/src/main/thrift/sync.thrift diff --git a/thrift/README.md b/thrift/README.md new file mode 100644 index 0000000..1d105e8 --- /dev/null +++ b/thrift/README.md @@ -0,0 +1,22 @@ +<!-- + + 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. + +--> + +This modules maintains all RPC interfaces between clients and the server. \ No newline at end of file
