You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2025/06/16 11:26:06 UTC

(iotdb) 01/01: Correct binary column memory calculation (#14796)

This is an automated email from the ASF dual-hosted git repository.

jackietien pushed a commit to branch ty/correctBinaryColumn
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit c1dc4fd3d26ba4b7c24af10637115bb62f04d805
Author: Jackie Tien <ja...@gmail.com>
AuthorDate: Fri Feb 7 15:38:09 2025 +0800

    Correct binary column memory calculation (#14796)
    
    * use getSizeInBytes instead of getRetainedSizeInBytes in some places
    
    * change tsfile version
    
    (cherry picked from commit a49958c1f30c5e9d6a795a03489421346c28594d)
---
 iotdb-core/ainode/ainode/conf/git.properties       |     3 +
 iotdb-core/ainode/ainode/conf/pom.properties       |    21 +
 iotdb-core/ainode/ainode/thrift/__init__.py        |     0
 .../ainode/thrift/ainode/IAINodeRPCService-remote  |   152 +
 .../ainode/thrift/ainode/IAINodeRPCService.py      |  1175 +
 iotdb-core/ainode/ainode/thrift/ainode/__init__.py |     1 +
 .../ainode/ainode/thrift/ainode/constants.py       |    14 +
 iotdb-core/ainode/ainode/thrift/ainode/ttypes.py   |  1272 +
 iotdb-core/ainode/ainode/thrift/common/__init__.py |     1 +
 .../ainode/ainode/thrift/common/constants.py       |    14 +
 iotdb-core/ainode/ainode/thrift/common/ttypes.py   |  3328 +++
 .../thrift/confignode/IConfigNodeRPCService-remote |  1195 +
 .../thrift/confignode/IConfigNodeRPCService.py     | 28998 +++++++++++++++++++
 .../ainode/ainode/thrift/confignode/__init__.py    |     1 +
 .../ainode/ainode/thrift/confignode/constants.py   |    14 +
 .../ainode/ainode/thrift/confignode/ttypes.py      | 17939 ++++++++++++
 .../thrift/datanode/IDataNodeRPCService-remote     |   782 +
 .../ainode/thrift/datanode/IDataNodeRPCService.py  | 18150 ++++++++++++
 .../thrift/datanode/MPPDataExchangeService-remote  |   152 +
 .../thrift/datanode/MPPDataExchangeService.py      |  1071 +
 .../ainode/ainode/thrift/datanode/__init__.py      |     1 +
 .../ainode/ainode/thrift/datanode/constants.py     |    14 +
 iotdb-core/ainode/ainode/thrift/datanode/ttypes.py | 11163 +++++++
 .../execution/exchange/SharedTsBlockQueue.java     |     8 +-
 .../execution/exchange/sink/SinkChannel.java       |    11 +-
 .../exchange/source/LocalSourceHandle.java         |     4 +-
 .../execution/operator/AbstractOperator.java       |     2 +-
 .../execution/operator/process/SortOperator.java   |     4 +-
 .../db/queryengine/execution/exchange/Utils.java   |     3 +
 .../execution/operator/OperatorMemoryTest.java     |     2 +
 pom.xml                                            |     2 +-
 31 files changed, 85480 insertions(+), 17 deletions(-)

diff --git a/iotdb-core/ainode/ainode/conf/git.properties b/iotdb-core/ainode/ainode/conf/git.properties
new file mode 100644
index 00000000000..b10ea438498
--- /dev/null
+++ b/iotdb-core/ainode/ainode/conf/git.properties
@@ -0,0 +1,3 @@
+#Generated by Git-Commit-Id-Plugin
+git.commit.id.abbrev=a8f1e40
+git.dirty=true
diff --git a/iotdb-core/ainode/ainode/conf/pom.properties b/iotdb-core/ainode/ainode/conf/pom.properties
new file mode 100644
index 00000000000..d4adf99b6d2
--- /dev/null
+++ b/iotdb-core/ainode/ainode/conf/pom.properties
@@ -0,0 +1,21 @@
+#
+# 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.
+
+artifactId=iotdb-ainode
+groupId=org.apache.iotdb
+version=2.0.4-SNAPSHOT
\ No newline at end of file
diff --git a/iotdb-core/ainode/ainode/thrift/__init__.py b/iotdb-core/ainode/ainode/thrift/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/iotdb-core/ainode/ainode/thrift/ainode/IAINodeRPCService-remote b/iotdb-core/ainode/ainode/thrift/ainode/IAINodeRPCService-remote
new file mode 100755
index 00000000000..2034303cbcd
--- /dev/null
+++ b/iotdb-core/ainode/ainode/thrift/ainode/IAINodeRPCService-remote
@@ -0,0 +1,152 @@
+#!/usr/bin/env python
+#
+# Autogenerated by Thrift Compiler (0.14.1)
+#
+# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+#
+#  options string: py
+#
+
+import sys
+import pprint
+if sys.version_info[0] > 2:
+    from urllib.parse import urlparse
+else:
+    from urlparse import urlparse
+from thrift.transport import TTransport, TSocket, TSSLSocket, THttpClient
+from thrift.protocol.TBinaryProtocol import TBinaryProtocol
+
+from iotdb.thrift.ainode import IAINodeRPCService
+from iotdb.thrift.ainode.ttypes import *
+
+if len(sys.argv) <= 1 or sys.argv[1] == '--help':
+    print('')
+    print('Usage: ' + sys.argv[0] + ' [-h host[:port]] [-u url] [-f[ramed]] [-s[sl]] [-novalidate] [-ca_certs certs] [-keyfile keyfile] [-certfile certfile] function [arg1 [arg2...]]')
+    print('')
+    print('Functions:')
+    print('  TSStatus deleteModel(TDeleteModelReq req)')
+    print('  TRegisterModelResp registerModel(TRegisterModelReq req)')
+    print('  TAIHeartbeatResp getAIHeartbeat(TAIHeartbeatReq req)')
+    print('  TSStatus createTrainingTask(TTrainingReq req)')
+    print('  TInferenceResp inference(TInferenceReq req)')
+    print('  TForecastResp forecast(TForecastReq req)')
+    print('')
+    sys.exit(0)
+
+pp = pprint.PrettyPrinter(indent=2)
+host = 'localhost'
+port = 9090
+uri = ''
+framed = False
+ssl = False
+validate = True
+ca_certs = None
+keyfile = None
+certfile = None
+http = False
+argi = 1
+
+if sys.argv[argi] == '-h':
+    parts = sys.argv[argi + 1].split(':')
+    host = parts[0]
+    if len(parts) > 1:
+        port = int(parts[1])
+    argi += 2
+
+if sys.argv[argi] == '-u':
+    url = urlparse(sys.argv[argi + 1])
+    parts = url[1].split(':')
+    host = parts[0]
+    if len(parts) > 1:
+        port = int(parts[1])
+    else:
+        port = 80
+    uri = url[2]
+    if url[4]:
+        uri += '?%s' % url[4]
+    http = True
+    argi += 2
+
+if sys.argv[argi] == '-f' or sys.argv[argi] == '-framed':
+    framed = True
+    argi += 1
+
+if sys.argv[argi] == '-s' or sys.argv[argi] == '-ssl':
+    ssl = True
+    argi += 1
+
+if sys.argv[argi] == '-novalidate':
+    validate = False
+    argi += 1
+
+if sys.argv[argi] == '-ca_certs':
+    ca_certs = sys.argv[argi+1]
+    argi += 2
+
+if sys.argv[argi] == '-keyfile':
+    keyfile = sys.argv[argi+1]
+    argi += 2
+
+if sys.argv[argi] == '-certfile':
+    certfile = sys.argv[argi+1]
+    argi += 2
+
+cmd = sys.argv[argi]
+args = sys.argv[argi + 1:]
+
+if http:
+    transport = THttpClient.THttpClient(host, port, uri)
+else:
+    if ssl:
+        socket = TSSLSocket.TSSLSocket(host, port, validate=validate, ca_certs=ca_certs, keyfile=keyfile, certfile=certfile)
+    else:
+        socket = TSocket.TSocket(host, port)
+    if framed:
+        transport = TTransport.TFramedTransport(socket)
+    else:
+        transport = TTransport.TBufferedTransport(socket)
+protocol = TBinaryProtocol(transport)
+client = IAINodeRPCService.Client(protocol)
+transport.open()
+
+if cmd == 'deleteModel':
+    if len(args) != 1:
+        print('deleteModel requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.deleteModel(eval(args[0]),))
+
+elif cmd == 'registerModel':
+    if len(args) != 1:
+        print('registerModel requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.registerModel(eval(args[0]),))
+
+elif cmd == 'getAIHeartbeat':
+    if len(args) != 1:
+        print('getAIHeartbeat requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getAIHeartbeat(eval(args[0]),))
+
+elif cmd == 'createTrainingTask':
+    if len(args) != 1:
+        print('createTrainingTask requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.createTrainingTask(eval(args[0]),))
+
+elif cmd == 'inference':
+    if len(args) != 1:
+        print('inference requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.inference(eval(args[0]),))
+
+elif cmd == 'forecast':
+    if len(args) != 1:
+        print('forecast requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.forecast(eval(args[0]),))
+
+else:
+    print('Unrecognized method %s' % cmd)
+    sys.exit(1)
+
+transport.close()
diff --git a/iotdb-core/ainode/ainode/thrift/ainode/IAINodeRPCService.py b/iotdb-core/ainode/ainode/thrift/ainode/IAINodeRPCService.py
new file mode 100644
index 00000000000..5024c99c884
--- /dev/null
+++ b/iotdb-core/ainode/ainode/thrift/ainode/IAINodeRPCService.py
@@ -0,0 +1,1175 @@
+#
+# Autogenerated by Thrift Compiler (0.14.1)
+#
+# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+#
+#  options string: py
+#
+
+from thrift.Thrift import TType, TMessageType, TFrozenDict, TException, TApplicationException
+from thrift.protocol.TProtocol import TProtocolException
+from thrift.TRecursive import fix_spec
+
+import sys
+import logging
+from .ttypes import *
+from thrift.Thrift import TProcessor
+from thrift.transport import TTransport
+all_structs = []
+
+
+class Iface(object):
+    def deleteModel(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def registerModel(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def getAIHeartbeat(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def createTrainingTask(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def inference(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def forecast(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+
+class Client(Iface):
+    def __init__(self, iprot, oprot=None):
+        self._iprot = self._oprot = iprot
+        if oprot is not None:
+            self._oprot = oprot
+        self._seqid = 0
+
+    def deleteModel(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        self.send_deleteModel(req)
+        return self.recv_deleteModel()
+
+    def send_deleteModel(self, req):
+        self._oprot.writeMessageBegin('deleteModel', TMessageType.CALL, self._seqid)
+        args = deleteModel_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_deleteModel(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = deleteModel_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "deleteModel failed: unknown result")
+
+    def registerModel(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        self.send_registerModel(req)
+        return self.recv_registerModel()
+
+    def send_registerModel(self, req):
+        self._oprot.writeMessageBegin('registerModel', TMessageType.CALL, self._seqid)
+        args = registerModel_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_registerModel(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = registerModel_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "registerModel failed: unknown result")
+
+    def getAIHeartbeat(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        self.send_getAIHeartbeat(req)
+        return self.recv_getAIHeartbeat()
+
+    def send_getAIHeartbeat(self, req):
+        self._oprot.writeMessageBegin('getAIHeartbeat', TMessageType.CALL, self._seqid)
+        args = getAIHeartbeat_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_getAIHeartbeat(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = getAIHeartbeat_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "getAIHeartbeat failed: unknown result")
+
+    def createTrainingTask(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        self.send_createTrainingTask(req)
+        return self.recv_createTrainingTask()
+
+    def send_createTrainingTask(self, req):
+        self._oprot.writeMessageBegin('createTrainingTask', TMessageType.CALL, self._seqid)
+        args = createTrainingTask_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_createTrainingTask(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = createTrainingTask_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "createTrainingTask failed: unknown result")
+
+    def inference(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        self.send_inference(req)
+        return self.recv_inference()
+
+    def send_inference(self, req):
+        self._oprot.writeMessageBegin('inference', TMessageType.CALL, self._seqid)
+        args = inference_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_inference(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = inference_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "inference failed: unknown result")
+
+    def forecast(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        self.send_forecast(req)
+        return self.recv_forecast()
+
+    def send_forecast(self, req):
+        self._oprot.writeMessageBegin('forecast', TMessageType.CALL, self._seqid)
+        args = forecast_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_forecast(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = forecast_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "forecast failed: unknown result")
+
+
+class Processor(Iface, TProcessor):
+    def __init__(self, handler):
+        self._handler = handler
+        self._processMap = {}
+        self._processMap["deleteModel"] = Processor.process_deleteModel
+        self._processMap["registerModel"] = Processor.process_registerModel
+        self._processMap["getAIHeartbeat"] = Processor.process_getAIHeartbeat
+        self._processMap["createTrainingTask"] = Processor.process_createTrainingTask
+        self._processMap["inference"] = Processor.process_inference
+        self._processMap["forecast"] = Processor.process_forecast
+        self._on_message_begin = None
+
+    def on_message_begin(self, func):
+        self._on_message_begin = func
+
+    def process(self, iprot, oprot):
+        (name, type, seqid) = iprot.readMessageBegin()
+        if self._on_message_begin:
+            self._on_message_begin(name, type, seqid)
+        if name not in self._processMap:
+            iprot.skip(TType.STRUCT)
+            iprot.readMessageEnd()
+            x = TApplicationException(TApplicationException.UNKNOWN_METHOD, 'Unknown function %s' % (name))
+            oprot.writeMessageBegin(name, TMessageType.EXCEPTION, seqid)
+            x.write(oprot)
+            oprot.writeMessageEnd()
+            oprot.trans.flush()
+            return
+        else:
+            self._processMap[name](self, seqid, iprot, oprot)
+        return True
+
+    def process_deleteModel(self, seqid, iprot, oprot):
+        args = deleteModel_args()
+        args.read(iprot)
+        iprot.readMessageEnd()
+        result = deleteModel_result()
+        try:
+            result.success = self._handler.deleteModel(args.req)
+            msg_type = TMessageType.REPLY
+        except TTransport.TTransportException:
+            raise
+        except TApplicationException as ex:
+            logging.exception('TApplication exception in handler')
+            msg_type = TMessageType.EXCEPTION
+            result = ex
+        except Exception:
+            logging.exception('Unexpected exception in handler')
+            msg_type = TMessageType.EXCEPTION
+            result = TApplicationException(TApplicationException.INTERNAL_ERROR, 'Internal error')
+        oprot.writeMessageBegin("deleteModel", msg_type, seqid)
+        result.write(oprot)
+        oprot.writeMessageEnd()
+        oprot.trans.flush()
+
+    def process_registerModel(self, seqid, iprot, oprot):
+        args = registerModel_args()
+        args.read(iprot)
+        iprot.readMessageEnd()
+        result = registerModel_result()
+        try:
+            result.success = self._handler.registerModel(args.req)
+            msg_type = TMessageType.REPLY
+        except TTransport.TTransportException:
+            raise
+        except TApplicationException as ex:
+            logging.exception('TApplication exception in handler')
+            msg_type = TMessageType.EXCEPTION
+            result = ex
+        except Exception:
+            logging.exception('Unexpected exception in handler')
+            msg_type = TMessageType.EXCEPTION
+            result = TApplicationException(TApplicationException.INTERNAL_ERROR, 'Internal error')
+        oprot.writeMessageBegin("registerModel", msg_type, seqid)
+        result.write(oprot)
+        oprot.writeMessageEnd()
+        oprot.trans.flush()
+
+    def process_getAIHeartbeat(self, seqid, iprot, oprot):
+        args = getAIHeartbeat_args()
+        args.read(iprot)
+        iprot.readMessageEnd()
+        result = getAIHeartbeat_result()
+        try:
+            result.success = self._handler.getAIHeartbeat(args.req)
+            msg_type = TMessageType.REPLY
+        except TTransport.TTransportException:
+            raise
+        except TApplicationException as ex:
+            logging.exception('TApplication exception in handler')
+            msg_type = TMessageType.EXCEPTION
+            result = ex
+        except Exception:
+            logging.exception('Unexpected exception in handler')
+            msg_type = TMessageType.EXCEPTION
+            result = TApplicationException(TApplicationException.INTERNAL_ERROR, 'Internal error')
+        oprot.writeMessageBegin("getAIHeartbeat", msg_type, seqid)
+        result.write(oprot)
+        oprot.writeMessageEnd()
+        oprot.trans.flush()
+
+    def process_createTrainingTask(self, seqid, iprot, oprot):
+        args = createTrainingTask_args()
+        args.read(iprot)
+        iprot.readMessageEnd()
+        result = createTrainingTask_result()
+        try:
+            result.success = self._handler.createTrainingTask(args.req)
+            msg_type = TMessageType.REPLY
+        except TTransport.TTransportException:
+            raise
+        except TApplicationException as ex:
+            logging.exception('TApplication exception in handler')
+            msg_type = TMessageType.EXCEPTION
+            result = ex
+        except Exception:
+            logging.exception('Unexpected exception in handler')
+            msg_type = TMessageType.EXCEPTION
+            result = TApplicationException(TApplicationException.INTERNAL_ERROR, 'Internal error')
+        oprot.writeMessageBegin("createTrainingTask", msg_type, seqid)
+        result.write(oprot)
+        oprot.writeMessageEnd()
+        oprot.trans.flush()
+
+    def process_inference(self, seqid, iprot, oprot):
+        args = inference_args()
+        args.read(iprot)
+        iprot.readMessageEnd()
+        result = inference_result()
+        try:
+            result.success = self._handler.inference(args.req)
+            msg_type = TMessageType.REPLY
+        except TTransport.TTransportException:
+            raise
+        except TApplicationException as ex:
+            logging.exception('TApplication exception in handler')
+            msg_type = TMessageType.EXCEPTION
+            result = ex
+        except Exception:
+            logging.exception('Unexpected exception in handler')
+            msg_type = TMessageType.EXCEPTION
+            result = TApplicationException(TApplicationException.INTERNAL_ERROR, 'Internal error')
+        oprot.writeMessageBegin("inference", msg_type, seqid)
+        result.write(oprot)
+        oprot.writeMessageEnd()
+        oprot.trans.flush()
+
+    def process_forecast(self, seqid, iprot, oprot):
+        args = forecast_args()
+        args.read(iprot)
+        iprot.readMessageEnd()
+        result = forecast_result()
+        try:
+            result.success = self._handler.forecast(args.req)
+            msg_type = TMessageType.REPLY
+        except TTransport.TTransportException:
+            raise
+        except TApplicationException as ex:
+            logging.exception('TApplication exception in handler')
+            msg_type = TMessageType.EXCEPTION
+            result = ex
+        except Exception:
+            logging.exception('Unexpected exception in handler')
+            msg_type = TMessageType.EXCEPTION
+            result = TApplicationException(TApplicationException.INTERNAL_ERROR, 'Internal error')
+        oprot.writeMessageBegin("forecast", msg_type, seqid)
+        result.write(oprot)
+        oprot.writeMessageEnd()
+        oprot.trans.flush()
+
+# HELPER FUNCTIONS AND STRUCTURES
+
+
+class deleteModel_args(object):
+    """
+    Attributes:
+     - req
+
+    """
+
+
+    def __init__(self, req=None,):
+        self.req = req
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == -1:
+                if ftype == TType.STRUCT:
+                    self.req = TDeleteModelReq()
+                    self.req.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('deleteModel_args')
+        if self.req is not None:
+            oprot.writeFieldBegin('req', TType.STRUCT, -1)
+            self.req.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+all_structs.append(deleteModel_args)
+deleteModel_args.thrift_spec = ()
+
+
+class deleteModel_result(object):
+    """
+    Attributes:
+     - success
+
+    """
+
+
+    def __init__(self, success=None,):
+        self.success = success
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 0:
+                if ftype == TType.STRUCT:
+                    self.success = iotdb.thrift.common.ttypes.TSStatus()
+                    self.success.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('deleteModel_result')
+        if self.success is not None:
+            oprot.writeFieldBegin('success', TType.STRUCT, 0)
+            self.success.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+all_structs.append(deleteModel_result)
+deleteModel_result.thrift_spec = (
+    (0, TType.STRUCT, 'success', [iotdb.thrift.common.ttypes.TSStatus, None], None, ),  # 0
+)
+
+
+class registerModel_args(object):
+    """
+    Attributes:
+     - req
+
+    """
+
+
+    def __init__(self, req=None,):
+        self.req = req
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == -1:
+                if ftype == TType.STRUCT:
+                    self.req = TRegisterModelReq()
+                    self.req.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('registerModel_args')
+        if self.req is not None:
+            oprot.writeFieldBegin('req', TType.STRUCT, -1)
+            self.req.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+all_structs.append(registerModel_args)
+registerModel_args.thrift_spec = ()
+
+
+class registerModel_result(object):
+    """
+    Attributes:
+     - success
+
+    """
+
+
+    def __init__(self, success=None,):
+        self.success = success
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 0:
+                if ftype == TType.STRUCT:
+                    self.success = TRegisterModelResp()
+                    self.success.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('registerModel_result')
+        if self.success is not None:
+            oprot.writeFieldBegin('success', TType.STRUCT, 0)
+            self.success.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+all_structs.append(registerModel_result)
+registerModel_result.thrift_spec = (
+    (0, TType.STRUCT, 'success', [TRegisterModelResp, None], None, ),  # 0
+)
+
+
+class getAIHeartbeat_args(object):
+    """
+    Attributes:
+     - req
+
+    """
+
+
+    def __init__(self, req=None,):
+        self.req = req
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == -1:
+                if ftype == TType.STRUCT:
+                    self.req = TAIHeartbeatReq()
+                    self.req.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('getAIHeartbeat_args')
+        if self.req is not None:
+            oprot.writeFieldBegin('req', TType.STRUCT, -1)
+            self.req.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+all_structs.append(getAIHeartbeat_args)
+getAIHeartbeat_args.thrift_spec = ()
+
+
+class getAIHeartbeat_result(object):
+    """
+    Attributes:
+     - success
+
+    """
+
+
+    def __init__(self, success=None,):
+        self.success = success
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 0:
+                if ftype == TType.STRUCT:
+                    self.success = TAIHeartbeatResp()
+                    self.success.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('getAIHeartbeat_result')
+        if self.success is not None:
+            oprot.writeFieldBegin('success', TType.STRUCT, 0)
+            self.success.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+all_structs.append(getAIHeartbeat_result)
+getAIHeartbeat_result.thrift_spec = (
+    (0, TType.STRUCT, 'success', [TAIHeartbeatResp, None], None, ),  # 0
+)
+
+
+class createTrainingTask_args(object):
+    """
+    Attributes:
+     - req
+
+    """
+
+
+    def __init__(self, req=None,):
+        self.req = req
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == -1:
+                if ftype == TType.STRUCT:
+                    self.req = TTrainingReq()
+                    self.req.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('createTrainingTask_args')
+        if self.req is not None:
+            oprot.writeFieldBegin('req', TType.STRUCT, -1)
+            self.req.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+all_structs.append(createTrainingTask_args)
+createTrainingTask_args.thrift_spec = ()
+
+
+class createTrainingTask_result(object):
+    """
+    Attributes:
+     - success
+
+    """
+
+
+    def __init__(self, success=None,):
+        self.success = success
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 0:
+                if ftype == TType.STRUCT:
+                    self.success = iotdb.thrift.common.ttypes.TSStatus()
+                    self.success.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('createTrainingTask_result')
+        if self.success is not None:
+            oprot.writeFieldBegin('success', TType.STRUCT, 0)
+            self.success.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+all_structs.append(createTrainingTask_result)
+createTrainingTask_result.thrift_spec = (
+    (0, TType.STRUCT, 'success', [iotdb.thrift.common.ttypes.TSStatus, None], None, ),  # 0
+)
+
+
+class inference_args(object):
+    """
+    Attributes:
+     - req
+
+    """
+
+
+    def __init__(self, req=None,):
+        self.req = req
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == -1:
+                if ftype == TType.STRUCT:
+                    self.req = TInferenceReq()
+                    self.req.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('inference_args')
+        if self.req is not None:
+            oprot.writeFieldBegin('req', TType.STRUCT, -1)
+            self.req.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+all_structs.append(inference_args)
+inference_args.thrift_spec = ()
+
+
+class inference_result(object):
+    """
+    Attributes:
+     - success
+
+    """
+
+
+    def __init__(self, success=None,):
+        self.success = success
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 0:
+                if ftype == TType.STRUCT:
+                    self.success = TInferenceResp()
+                    self.success.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('inference_result')
+        if self.success is not None:
+            oprot.writeFieldBegin('success', TType.STRUCT, 0)
+            self.success.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+all_structs.append(inference_result)
+inference_result.thrift_spec = (
+    (0, TType.STRUCT, 'success', [TInferenceResp, None], None, ),  # 0
+)
+
+
+class forecast_args(object):
+    """
+    Attributes:
+     - req
+
+    """
+
+
+    def __init__(self, req=None,):
+        self.req = req
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == -1:
+                if ftype == TType.STRUCT:
+                    self.req = TForecastReq()
+                    self.req.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('forecast_args')
+        if self.req is not None:
+            oprot.writeFieldBegin('req', TType.STRUCT, -1)
+            self.req.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+all_structs.append(forecast_args)
+forecast_args.thrift_spec = ()
+
+
+class forecast_result(object):
+    """
+    Attributes:
+     - success
+
+    """
+
+
+    def __init__(self, success=None,):
+        self.success = success
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 0:
+                if ftype == TType.STRUCT:
+                    self.success = TForecastResp()
+                    self.success.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('forecast_result')
+        if self.success is not None:
+            oprot.writeFieldBegin('success', TType.STRUCT, 0)
+            self.success.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+all_structs.append(forecast_result)
+forecast_result.thrift_spec = (
+    (0, TType.STRUCT, 'success', [TForecastResp, None], None, ),  # 0
+)
+fix_spec(all_structs)
+del all_structs
diff --git a/iotdb-core/ainode/ainode/thrift/ainode/__init__.py b/iotdb-core/ainode/ainode/thrift/ainode/__init__.py
new file mode 100644
index 00000000000..c2a97b09754
--- /dev/null
+++ b/iotdb-core/ainode/ainode/thrift/ainode/__init__.py
@@ -0,0 +1 @@
+__all__ = ['ttypes', 'constants', 'IAINodeRPCService']
diff --git a/iotdb-core/ainode/ainode/thrift/ainode/constants.py b/iotdb-core/ainode/ainode/thrift/ainode/constants.py
new file mode 100644
index 00000000000..69c181ade38
--- /dev/null
+++ b/iotdb-core/ainode/ainode/thrift/ainode/constants.py
@@ -0,0 +1,14 @@
+#
+# Autogenerated by Thrift Compiler (0.14.1)
+#
+# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+#
+#  options string: py
+#
+
+from thrift.Thrift import TType, TMessageType, TFrozenDict, TException, TApplicationException
+from thrift.protocol.TProtocol import TProtocolException
+from thrift.TRecursive import fix_spec
+
+import sys
+from .ttypes import *
diff --git a/iotdb-core/ainode/ainode/thrift/ainode/ttypes.py b/iotdb-core/ainode/ainode/thrift/ainode/ttypes.py
new file mode 100644
index 00000000000..17d61c701ed
--- /dev/null
+++ b/iotdb-core/ainode/ainode/thrift/ainode/ttypes.py
@@ -0,0 +1,1272 @@
+#
+# Autogenerated by Thrift Compiler (0.14.1)
+#
+# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+#
+#  options string: py
+#
+
+from thrift.Thrift import TType, TMessageType, TFrozenDict, TException, TApplicationException
+from thrift.protocol.TProtocol import TProtocolException
+from thrift.TRecursive import fix_spec
+
+import sys
+import iotdb.thrift.common.ttypes
+
+from thrift.transport import TTransport
+all_structs = []
+
+
+class TDeleteModelReq(object):
+    """
+    Attributes:
+     - modelId
+
+    """
+
+
+    def __init__(self, modelId=None,):
+        self.modelId = modelId
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRING:
+                    self.modelId = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TDeleteModelReq')
+        if self.modelId is not None:
+            oprot.writeFieldBegin('modelId', TType.STRING, 1)
+            oprot.writeString(self.modelId.encode('utf-8') if sys.version_info[0] == 2 else self.modelId)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.modelId is None:
+            raise TProtocolException(message='Required field modelId is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TAIHeartbeatReq(object):
+    """
+    Attributes:
+     - heartbeatTimestamp
+     - needSamplingLoad
+
+    """
+
+
+    def __init__(self, heartbeatTimestamp=None, needSamplingLoad=None,):
+        self.heartbeatTimestamp = heartbeatTimestamp
+        self.needSamplingLoad = needSamplingLoad
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.I64:
+                    self.heartbeatTimestamp = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.BOOL:
+                    self.needSamplingLoad = iprot.readBool()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TAIHeartbeatReq')
+        if self.heartbeatTimestamp is not None:
+            oprot.writeFieldBegin('heartbeatTimestamp', TType.I64, 1)
+            oprot.writeI64(self.heartbeatTimestamp)
+            oprot.writeFieldEnd()
+        if self.needSamplingLoad is not None:
+            oprot.writeFieldBegin('needSamplingLoad', TType.BOOL, 2)
+            oprot.writeBool(self.needSamplingLoad)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.heartbeatTimestamp is None:
+            raise TProtocolException(message='Required field heartbeatTimestamp is unset!')
+        if self.needSamplingLoad is None:
+            raise TProtocolException(message='Required field needSamplingLoad is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TAIHeartbeatResp(object):
+    """
+    Attributes:
+     - heartbeatTimestamp
+     - status
+     - statusReason
+     - loadSample
+
+    """
+
+
+    def __init__(self, heartbeatTimestamp=None, status=None, statusReason=None, loadSample=None,):
+        self.heartbeatTimestamp = heartbeatTimestamp
+        self.status = status
+        self.statusReason = statusReason
+        self.loadSample = loadSample
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.I64:
+                    self.heartbeatTimestamp = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRING:
+                    self.status = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.STRING:
+                    self.statusReason = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.STRUCT:
+                    self.loadSample = iotdb.thrift.common.ttypes.TLoadSample()
+                    self.loadSample.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TAIHeartbeatResp')
+        if self.heartbeatTimestamp is not None:
+            oprot.writeFieldBegin('heartbeatTimestamp', TType.I64, 1)
+            oprot.writeI64(self.heartbeatTimestamp)
+            oprot.writeFieldEnd()
+        if self.status is not None:
+            oprot.writeFieldBegin('status', TType.STRING, 2)
+            oprot.writeString(self.status.encode('utf-8') if sys.version_info[0] == 2 else self.status)
+            oprot.writeFieldEnd()
+        if self.statusReason is not None:
+            oprot.writeFieldBegin('statusReason', TType.STRING, 3)
+            oprot.writeString(self.statusReason.encode('utf-8') if sys.version_info[0] == 2 else self.statusReason)
+            oprot.writeFieldEnd()
+        if self.loadSample is not None:
+            oprot.writeFieldBegin('loadSample', TType.STRUCT, 4)
+            self.loadSample.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.heartbeatTimestamp is None:
+            raise TProtocolException(message='Required field heartbeatTimestamp is unset!')
+        if self.status is None:
+            raise TProtocolException(message='Required field status is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TRegisterModelReq(object):
+    """
+    Attributes:
+     - uri
+     - modelId
+
+    """
+
+
+    def __init__(self, uri=None, modelId=None,):
+        self.uri = uri
+        self.modelId = modelId
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRING:
+                    self.uri = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRING:
+                    self.modelId = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TRegisterModelReq')
+        if self.uri is not None:
+            oprot.writeFieldBegin('uri', TType.STRING, 1)
+            oprot.writeString(self.uri.encode('utf-8') if sys.version_info[0] == 2 else self.uri)
+            oprot.writeFieldEnd()
+        if self.modelId is not None:
+            oprot.writeFieldBegin('modelId', TType.STRING, 2)
+            oprot.writeString(self.modelId.encode('utf-8') if sys.version_info[0] == 2 else self.modelId)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.uri is None:
+            raise TProtocolException(message='Required field uri is unset!')
+        if self.modelId is None:
+            raise TProtocolException(message='Required field modelId is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TConfigs(object):
+    """
+    Attributes:
+     - input_shape
+     - output_shape
+     - input_type
+     - output_type
+
+    """
+
+
+    def __init__(self, input_shape=None, output_shape=None, input_type=None, output_type=None,):
+        self.input_shape = input_shape
+        self.output_shape = output_shape
+        self.input_type = input_type
+        self.output_type = output_type
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.LIST:
+                    self.input_shape = []
+                    (_etype3, _size0) = iprot.readListBegin()
+                    for _i4 in range(_size0):
+                        _elem5 = iprot.readI32()
+                        self.input_shape.append(_elem5)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.LIST:
+                    self.output_shape = []
+                    (_etype9, _size6) = iprot.readListBegin()
+                    for _i10 in range(_size6):
+                        _elem11 = iprot.readI32()
+                        self.output_shape.append(_elem11)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.LIST:
+                    self.input_type = []
+                    (_etype15, _size12) = iprot.readListBegin()
+                    for _i16 in range(_size12):
+                        _elem17 = iprot.readByte()
+                        self.input_type.append(_elem17)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.LIST:
+                    self.output_type = []
+                    (_etype21, _size18) = iprot.readListBegin()
+                    for _i22 in range(_size18):
+                        _elem23 = iprot.readByte()
+                        self.output_type.append(_elem23)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TConfigs')
+        if self.input_shape is not None:
+            oprot.writeFieldBegin('input_shape', TType.LIST, 1)
+            oprot.writeListBegin(TType.I32, len(self.input_shape))
+            for iter24 in self.input_shape:
+                oprot.writeI32(iter24)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.output_shape is not None:
+            oprot.writeFieldBegin('output_shape', TType.LIST, 2)
+            oprot.writeListBegin(TType.I32, len(self.output_shape))
+            for iter25 in self.output_shape:
+                oprot.writeI32(iter25)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.input_type is not None:
+            oprot.writeFieldBegin('input_type', TType.LIST, 3)
+            oprot.writeListBegin(TType.BYTE, len(self.input_type))
+            for iter26 in self.input_type:
+                oprot.writeByte(iter26)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.output_type is not None:
+            oprot.writeFieldBegin('output_type', TType.LIST, 4)
+            oprot.writeListBegin(TType.BYTE, len(self.output_type))
+            for iter27 in self.output_type:
+                oprot.writeByte(iter27)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.input_shape is None:
+            raise TProtocolException(message='Required field input_shape is unset!')
+        if self.output_shape is None:
+            raise TProtocolException(message='Required field output_shape is unset!')
+        if self.input_type is None:
+            raise TProtocolException(message='Required field input_type is unset!')
+        if self.output_type is None:
+            raise TProtocolException(message='Required field output_type is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TRegisterModelResp(object):
+    """
+    Attributes:
+     - status
+     - configs
+     - attributes
+
+    """
+
+
+    def __init__(self, status=None, configs=None, attributes=None,):
+        self.status = status
+        self.configs = configs
+        self.attributes = attributes
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRUCT:
+                    self.status = iotdb.thrift.common.ttypes.TSStatus()
+                    self.status.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRUCT:
+                    self.configs = TConfigs()
+                    self.configs.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.STRING:
+                    self.attributes = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TRegisterModelResp')
+        if self.status is not None:
+            oprot.writeFieldBegin('status', TType.STRUCT, 1)
+            self.status.write(oprot)
+            oprot.writeFieldEnd()
+        if self.configs is not None:
+            oprot.writeFieldBegin('configs', TType.STRUCT, 2)
+            self.configs.write(oprot)
+            oprot.writeFieldEnd()
+        if self.attributes is not None:
+            oprot.writeFieldBegin('attributes', TType.STRING, 3)
+            oprot.writeString(self.attributes.encode('utf-8') if sys.version_info[0] == 2 else self.attributes)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.status is None:
+            raise TProtocolException(message='Required field status is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TInferenceReq(object):
+    """
+    Attributes:
+     - modelId
+     - dataset
+     - windowParams
+     - inferenceAttributes
+
+    """
+
+
+    def __init__(self, modelId=None, dataset=None, windowParams=None, inferenceAttributes=None,):
+        self.modelId = modelId
+        self.dataset = dataset
+        self.windowParams = windowParams
+        self.inferenceAttributes = inferenceAttributes
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRING:
+                    self.modelId = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRING:
+                    self.dataset = iprot.readBinary()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.STRUCT:
+                    self.windowParams = TWindowParams()
+                    self.windowParams.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.MAP:
+                    self.inferenceAttributes = {}
+                    (_ktype29, _vtype30, _size28) = iprot.readMapBegin()
+                    for _i32 in range(_size28):
+                        _key33 = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                        _val34 = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                        self.inferenceAttributes[_key33] = _val34
+                    iprot.readMapEnd()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TInferenceReq')
+        if self.modelId is not None:
+            oprot.writeFieldBegin('modelId', TType.STRING, 1)
+            oprot.writeString(self.modelId.encode('utf-8') if sys.version_info[0] == 2 else self.modelId)
+            oprot.writeFieldEnd()
+        if self.dataset is not None:
+            oprot.writeFieldBegin('dataset', TType.STRING, 2)
+            oprot.writeBinary(self.dataset)
+            oprot.writeFieldEnd()
+        if self.windowParams is not None:
+            oprot.writeFieldBegin('windowParams', TType.STRUCT, 3)
+            self.windowParams.write(oprot)
+            oprot.writeFieldEnd()
+        if self.inferenceAttributes is not None:
+            oprot.writeFieldBegin('inferenceAttributes', TType.MAP, 4)
+            oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.inferenceAttributes))
+            for kiter35, viter36 in self.inferenceAttributes.items():
+                oprot.writeString(kiter35.encode('utf-8') if sys.version_info[0] == 2 else kiter35)
+                oprot.writeString(viter36.encode('utf-8') if sys.version_info[0] == 2 else viter36)
+            oprot.writeMapEnd()
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.modelId is None:
+            raise TProtocolException(message='Required field modelId is unset!')
+        if self.dataset is None:
+            raise TProtocolException(message='Required field dataset is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TWindowParams(object):
+    """
+    Attributes:
+     - windowInterval
+     - windowStep
+
+    """
+
+
+    def __init__(self, windowInterval=None, windowStep=None,):
+        self.windowInterval = windowInterval
+        self.windowStep = windowStep
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.I32:
+                    self.windowInterval = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.I32:
+                    self.windowStep = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TWindowParams')
+        if self.windowInterval is not None:
+            oprot.writeFieldBegin('windowInterval', TType.I32, 1)
+            oprot.writeI32(self.windowInterval)
+            oprot.writeFieldEnd()
+        if self.windowStep is not None:
+            oprot.writeFieldBegin('windowStep', TType.I32, 2)
+            oprot.writeI32(self.windowStep)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.windowInterval is None:
+            raise TProtocolException(message='Required field windowInterval is unset!')
+        if self.windowStep is None:
+            raise TProtocolException(message='Required field windowStep is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TInferenceResp(object):
+    """
+    Attributes:
+     - status
+     - inferenceResult
+
+    """
+
+
+    def __init__(self, status=None, inferenceResult=None,):
+        self.status = status
+        self.inferenceResult = inferenceResult
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRUCT:
+                    self.status = iotdb.thrift.common.ttypes.TSStatus()
+                    self.status.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.LIST:
+                    self.inferenceResult = []
+                    (_etype40, _size37) = iprot.readListBegin()
+                    for _i41 in range(_size37):
+                        _elem42 = iprot.readBinary()
+                        self.inferenceResult.append(_elem42)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TInferenceResp')
+        if self.status is not None:
+            oprot.writeFieldBegin('status', TType.STRUCT, 1)
+            self.status.write(oprot)
+            oprot.writeFieldEnd()
+        if self.inferenceResult is not None:
+            oprot.writeFieldBegin('inferenceResult', TType.LIST, 2)
+            oprot.writeListBegin(TType.STRING, len(self.inferenceResult))
+            for iter43 in self.inferenceResult:
+                oprot.writeBinary(iter43)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.status is None:
+            raise TProtocolException(message='Required field status is unset!')
+        if self.inferenceResult is None:
+            raise TProtocolException(message='Required field inferenceResult is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class IDataSchema(object):
+    """
+    Attributes:
+     - schemaName
+     - timeRange
+
+    """
+
+
+    def __init__(self, schemaName=None, timeRange=None,):
+        self.schemaName = schemaName
+        self.timeRange = timeRange
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRING:
+                    self.schemaName = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.LIST:
+                    self.timeRange = []
+                    (_etype47, _size44) = iprot.readListBegin()
+                    for _i48 in range(_size44):
+                        _elem49 = iprot.readI64()
+                        self.timeRange.append(_elem49)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('IDataSchema')
+        if self.schemaName is not None:
+            oprot.writeFieldBegin('schemaName', TType.STRING, 1)
+            oprot.writeString(self.schemaName.encode('utf-8') if sys.version_info[0] == 2 else self.schemaName)
+            oprot.writeFieldEnd()
+        if self.timeRange is not None:
+            oprot.writeFieldBegin('timeRange', TType.LIST, 2)
+            oprot.writeListBegin(TType.I64, len(self.timeRange))
+            for iter50 in self.timeRange:
+                oprot.writeI64(iter50)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.schemaName is None:
+            raise TProtocolException(message='Required field schemaName is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TTrainingReq(object):
+    """
+    Attributes:
+     - dbType
+     - modelId
+     - modelType
+     - targetDataSchema
+     - parameters
+     - existingModelId
+
+    """
+
+
+    def __init__(self, dbType=None, modelId=None, modelType=None, targetDataSchema=None, parameters=None, existingModelId=None,):
+        self.dbType = dbType
+        self.modelId = modelId
+        self.modelType = modelType
+        self.targetDataSchema = targetDataSchema
+        self.parameters = parameters
+        self.existingModelId = existingModelId
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRING:
+                    self.dbType = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRING:
+                    self.modelId = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.STRING:
+                    self.modelType = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.LIST:
+                    self.targetDataSchema = []
+                    (_etype54, _size51) = iprot.readListBegin()
+                    for _i55 in range(_size51):
+                        _elem56 = IDataSchema()
+                        _elem56.read(iprot)
+                        self.targetDataSchema.append(_elem56)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 5:
+                if ftype == TType.MAP:
+                    self.parameters = {}
+                    (_ktype58, _vtype59, _size57) = iprot.readMapBegin()
+                    for _i61 in range(_size57):
+                        _key62 = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                        _val63 = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                        self.parameters[_key62] = _val63
+                    iprot.readMapEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 6:
+                if ftype == TType.STRING:
+                    self.existingModelId = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TTrainingReq')
+        if self.dbType is not None:
+            oprot.writeFieldBegin('dbType', TType.STRING, 1)
+            oprot.writeString(self.dbType.encode('utf-8') if sys.version_info[0] == 2 else self.dbType)
+            oprot.writeFieldEnd()
+        if self.modelId is not None:
+            oprot.writeFieldBegin('modelId', TType.STRING, 2)
+            oprot.writeString(self.modelId.encode('utf-8') if sys.version_info[0] == 2 else self.modelId)
+            oprot.writeFieldEnd()
+        if self.modelType is not None:
+            oprot.writeFieldBegin('modelType', TType.STRING, 3)
+            oprot.writeString(self.modelType.encode('utf-8') if sys.version_info[0] == 2 else self.modelType)
+            oprot.writeFieldEnd()
+        if self.targetDataSchema is not None:
+            oprot.writeFieldBegin('targetDataSchema', TType.LIST, 4)
+            oprot.writeListBegin(TType.STRUCT, len(self.targetDataSchema))
+            for iter64 in self.targetDataSchema:
+                iter64.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.parameters is not None:
+            oprot.writeFieldBegin('parameters', TType.MAP, 5)
+            oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.parameters))
+            for kiter65, viter66 in self.parameters.items():
+                oprot.writeString(kiter65.encode('utf-8') if sys.version_info[0] == 2 else kiter65)
+                oprot.writeString(viter66.encode('utf-8') if sys.version_info[0] == 2 else viter66)
+            oprot.writeMapEnd()
+            oprot.writeFieldEnd()
+        if self.existingModelId is not None:
+            oprot.writeFieldBegin('existingModelId', TType.STRING, 6)
+            oprot.writeString(self.existingModelId.encode('utf-8') if sys.version_info[0] == 2 else self.existingModelId)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.dbType is None:
+            raise TProtocolException(message='Required field dbType is unset!')
+        if self.modelId is None:
+            raise TProtocolException(message='Required field modelId is unset!')
+        if self.modelType is None:
+            raise TProtocolException(message='Required field modelType is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TForecastReq(object):
+    """
+    Attributes:
+     - modelId
+     - inputData
+     - outputLength
+     - options
+
+    """
+
+
+    def __init__(self, modelId=None, inputData=None, outputLength=None, options=None,):
+        self.modelId = modelId
+        self.inputData = inputData
+        self.outputLength = outputLength
+        self.options = options
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRING:
+                    self.modelId = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRING:
+                    self.inputData = iprot.readBinary()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.I32:
+                    self.outputLength = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.MAP:
+                    self.options = {}
+                    (_ktype68, _vtype69, _size67) = iprot.readMapBegin()
+                    for _i71 in range(_size67):
+                        _key72 = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                        _val73 = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                        self.options[_key72] = _val73
+                    iprot.readMapEnd()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TForecastReq')
+        if self.modelId is not None:
+            oprot.writeFieldBegin('modelId', TType.STRING, 1)
+            oprot.writeString(self.modelId.encode('utf-8') if sys.version_info[0] == 2 else self.modelId)
+            oprot.writeFieldEnd()
+        if self.inputData is not None:
+            oprot.writeFieldBegin('inputData', TType.STRING, 2)
+            oprot.writeBinary(self.inputData)
+            oprot.writeFieldEnd()
+        if self.outputLength is not None:
+            oprot.writeFieldBegin('outputLength', TType.I32, 3)
+            oprot.writeI32(self.outputLength)
+            oprot.writeFieldEnd()
+        if self.options is not None:
+            oprot.writeFieldBegin('options', TType.MAP, 4)
+            oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.options))
+            for kiter74, viter75 in self.options.items():
+                oprot.writeString(kiter74.encode('utf-8') if sys.version_info[0] == 2 else kiter74)
+                oprot.writeString(viter75.encode('utf-8') if sys.version_info[0] == 2 else viter75)
+            oprot.writeMapEnd()
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.modelId is None:
+            raise TProtocolException(message='Required field modelId is unset!')
+        if self.inputData is None:
+            raise TProtocolException(message='Required field inputData is unset!')
+        if self.outputLength is None:
+            raise TProtocolException(message='Required field outputLength is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TForecastResp(object):
+    """
+    Attributes:
+     - status
+     - forecastResult
+
+    """
+
+
+    def __init__(self, status=None, forecastResult=None,):
+        self.status = status
+        self.forecastResult = forecastResult
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRUCT:
+                    self.status = iotdb.thrift.common.ttypes.TSStatus()
+                    self.status.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRING:
+                    self.forecastResult = iprot.readBinary()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TForecastResp')
+        if self.status is not None:
+            oprot.writeFieldBegin('status', TType.STRUCT, 1)
+            self.status.write(oprot)
+            oprot.writeFieldEnd()
+        if self.forecastResult is not None:
+            oprot.writeFieldBegin('forecastResult', TType.STRING, 2)
+            oprot.writeBinary(self.forecastResult)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.status is None:
+            raise TProtocolException(message='Required field status is unset!')
+        if self.forecastResult is None:
+            raise TProtocolException(message='Required field forecastResult is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+all_structs.append(TDeleteModelReq)
+TDeleteModelReq.thrift_spec = (
+    None,  # 0
+    (1, TType.STRING, 'modelId', 'UTF8', None, ),  # 1
+)
+all_structs.append(TAIHeartbeatReq)
+TAIHeartbeatReq.thrift_spec = (
+    None,  # 0
+    (1, TType.I64, 'heartbeatTimestamp', None, None, ),  # 1
+    (2, TType.BOOL, 'needSamplingLoad', None, None, ),  # 2
+)
+all_structs.append(TAIHeartbeatResp)
+TAIHeartbeatResp.thrift_spec = (
+    None,  # 0
+    (1, TType.I64, 'heartbeatTimestamp', None, None, ),  # 1
+    (2, TType.STRING, 'status', 'UTF8', None, ),  # 2
+    (3, TType.STRING, 'statusReason', 'UTF8', None, ),  # 3
+    (4, TType.STRUCT, 'loadSample', [iotdb.thrift.common.ttypes.TLoadSample, None], None, ),  # 4
+)
+all_structs.append(TRegisterModelReq)
+TRegisterModelReq.thrift_spec = (
+    None,  # 0
+    (1, TType.STRING, 'uri', 'UTF8', None, ),  # 1
+    (2, TType.STRING, 'modelId', 'UTF8', None, ),  # 2
+)
+all_structs.append(TConfigs)
+TConfigs.thrift_spec = (
+    None,  # 0
+    (1, TType.LIST, 'input_shape', (TType.I32, None, False), None, ),  # 1
+    (2, TType.LIST, 'output_shape', (TType.I32, None, False), None, ),  # 2
+    (3, TType.LIST, 'input_type', (TType.BYTE, None, False), None, ),  # 3
+    (4, TType.LIST, 'output_type', (TType.BYTE, None, False), None, ),  # 4
+)
+all_structs.append(TRegisterModelResp)
+TRegisterModelResp.thrift_spec = (
+    None,  # 0
+    (1, TType.STRUCT, 'status', [iotdb.thrift.common.ttypes.TSStatus, None], None, ),  # 1
+    (2, TType.STRUCT, 'configs', [TConfigs, None], None, ),  # 2
+    (3, TType.STRING, 'attributes', 'UTF8', None, ),  # 3
+)
+all_structs.append(TInferenceReq)
+TInferenceReq.thrift_spec = (
+    None,  # 0
+    (1, TType.STRING, 'modelId', 'UTF8', None, ),  # 1
+    (2, TType.STRING, 'dataset', 'BINARY', None, ),  # 2
+    (3, TType.STRUCT, 'windowParams', [TWindowParams, None], None, ),  # 3
+    (4, TType.MAP, 'inferenceAttributes', (TType.STRING, 'UTF8', TType.STRING, 'UTF8', False), None, ),  # 4
+)
+all_structs.append(TWindowParams)
+TWindowParams.thrift_spec = (
+    None,  # 0
+    (1, TType.I32, 'windowInterval', None, None, ),  # 1
+    (2, TType.I32, 'windowStep', None, None, ),  # 2
+)
+all_structs.append(TInferenceResp)
+TInferenceResp.thrift_spec = (
+    None,  # 0
+    (1, TType.STRUCT, 'status', [iotdb.thrift.common.ttypes.TSStatus, None], None, ),  # 1
+    (2, TType.LIST, 'inferenceResult', (TType.STRING, 'BINARY', False), None, ),  # 2
+)
+all_structs.append(IDataSchema)
+IDataSchema.thrift_spec = (
+    None,  # 0
+    (1, TType.STRING, 'schemaName', 'UTF8', None, ),  # 1
+    (2, TType.LIST, 'timeRange', (TType.I64, None, False), None, ),  # 2
+)
+all_structs.append(TTrainingReq)
+TTrainingReq.thrift_spec = (
+    None,  # 0
+    (1, TType.STRING, 'dbType', 'UTF8', None, ),  # 1
+    (2, TType.STRING, 'modelId', 'UTF8', None, ),  # 2
+    (3, TType.STRING, 'modelType', 'UTF8', None, ),  # 3
+    (4, TType.LIST, 'targetDataSchema', (TType.STRUCT, [IDataSchema, None], False), None, ),  # 4
+    (5, TType.MAP, 'parameters', (TType.STRING, 'UTF8', TType.STRING, 'UTF8', False), None, ),  # 5
+    (6, TType.STRING, 'existingModelId', 'UTF8', None, ),  # 6
+)
+all_structs.append(TForecastReq)
+TForecastReq.thrift_spec = (
+    None,  # 0
+    (1, TType.STRING, 'modelId', 'UTF8', None, ),  # 1
+    (2, TType.STRING, 'inputData', 'BINARY', None, ),  # 2
+    (3, TType.I32, 'outputLength', None, None, ),  # 3
+    (4, TType.MAP, 'options', (TType.STRING, 'UTF8', TType.STRING, 'UTF8', False), None, ),  # 4
+)
+all_structs.append(TForecastResp)
+TForecastResp.thrift_spec = (
+    None,  # 0
+    (1, TType.STRUCT, 'status', [iotdb.thrift.common.ttypes.TSStatus, None], None, ),  # 1
+    (2, TType.STRING, 'forecastResult', 'BINARY', None, ),  # 2
+)
+fix_spec(all_structs)
+del all_structs
diff --git a/iotdb-core/ainode/ainode/thrift/common/__init__.py b/iotdb-core/ainode/ainode/thrift/common/__init__.py
new file mode 100644
index 00000000000..adefd8e51fc
--- /dev/null
+++ b/iotdb-core/ainode/ainode/thrift/common/__init__.py
@@ -0,0 +1 @@
+__all__ = ['ttypes', 'constants']
diff --git a/iotdb-core/ainode/ainode/thrift/common/constants.py b/iotdb-core/ainode/ainode/thrift/common/constants.py
new file mode 100644
index 00000000000..69c181ade38
--- /dev/null
+++ b/iotdb-core/ainode/ainode/thrift/common/constants.py
@@ -0,0 +1,14 @@
+#
+# Autogenerated by Thrift Compiler (0.14.1)
+#
+# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+#
+#  options string: py
+#
+
+from thrift.Thrift import TType, TMessageType, TFrozenDict, TException, TApplicationException
+from thrift.protocol.TProtocol import TProtocolException
+from thrift.TRecursive import fix_spec
+
+import sys
+from .ttypes import *
diff --git a/iotdb-core/ainode/ainode/thrift/common/ttypes.py b/iotdb-core/ainode/ainode/thrift/common/ttypes.py
new file mode 100644
index 00000000000..355ff665a55
--- /dev/null
+++ b/iotdb-core/ainode/ainode/thrift/common/ttypes.py
@@ -0,0 +1,3328 @@
+#
+# Autogenerated by Thrift Compiler (0.14.1)
+#
+# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+#
+#  options string: py
+#
+
+from thrift.Thrift import TType, TMessageType, TFrozenDict, TException, TApplicationException
+from thrift.protocol.TProtocol import TProtocolException
+from thrift.TRecursive import fix_spec
+
+import sys
+
+from thrift.transport import TTransport
+all_structs = []
+
+
+class TConsensusGroupType(object):
+    ConfigRegion = 0
+    DataRegion = 1
+    SchemaRegion = 2
+
+    _VALUES_TO_NAMES = {
+        0: "ConfigRegion",
+        1: "DataRegion",
+        2: "SchemaRegion",
+    }
+
+    _NAMES_TO_VALUES = {
+        "ConfigRegion": 0,
+        "DataRegion": 1,
+        "SchemaRegion": 2,
+    }
+
+
+class TRegionMigrateFailedType(object):
+    AddPeerFailed = 0
+    RemovePeerFailed = 1
+    RemoveConsensusGroupFailed = 2
+    DeleteRegionFailed = 3
+    CreateRegionFailed = 4
+    Disconnect = 5
+
+    _VALUES_TO_NAMES = {
+        0: "AddPeerFailed",
+        1: "RemovePeerFailed",
+        2: "RemoveConsensusGroupFailed",
+        3: "DeleteRegionFailed",
+        4: "CreateRegionFailed",
+        5: "Disconnect",
+    }
+
+    _NAMES_TO_VALUES = {
+        "AddPeerFailed": 0,
+        "RemovePeerFailed": 1,
+        "RemoveConsensusGroupFailed": 2,
+        "DeleteRegionFailed": 3,
+        "CreateRegionFailed": 4,
+        "Disconnect": 5,
+    }
+
+
+class TRegionMaintainTaskStatus(object):
+    TASK_NOT_EXIST = 0
+    PROCESSING = 1
+    SUCCESS = 2
+    FAIL = 3
+
+    _VALUES_TO_NAMES = {
+        0: "TASK_NOT_EXIST",
+        1: "PROCESSING",
+        2: "SUCCESS",
+        3: "FAIL",
+    }
+
+    _NAMES_TO_VALUES = {
+        "TASK_NOT_EXIST": 0,
+        "PROCESSING": 1,
+        "SUCCESS": 2,
+        "FAIL": 3,
+    }
+
+
+class ThrottleType(object):
+    REQUEST_NUMBER = 0
+    REQUEST_SIZE = 1
+    WRITE_NUMBER = 2
+    WRITE_SIZE = 3
+    READ_NUMBER = 4
+    READ_SIZE = 5
+
+    _VALUES_TO_NAMES = {
+        0: "REQUEST_NUMBER",
+        1: "REQUEST_SIZE",
+        2: "WRITE_NUMBER",
+        3: "WRITE_SIZE",
+        4: "READ_NUMBER",
+        5: "READ_SIZE",
+    }
+
+    _NAMES_TO_VALUES = {
+        "REQUEST_NUMBER": 0,
+        "REQUEST_SIZE": 1,
+        "WRITE_NUMBER": 2,
+        "WRITE_SIZE": 3,
+        "READ_NUMBER": 4,
+        "READ_SIZE": 5,
+    }
+
+
+class TServiceType(object):
+    ConfigNodeInternalService = 0
+    DataNodeInternalService = 1
+    DataNodeMPPService = 2
+    DataNodeExternalService = 3
+
+    _VALUES_TO_NAMES = {
+        0: "ConfigNodeInternalService",
+        1: "DataNodeInternalService",
+        2: "DataNodeMPPService",
+        3: "DataNodeExternalService",
+    }
+
+    _NAMES_TO_VALUES = {
+        "ConfigNodeInternalService": 0,
+        "DataNodeInternalService": 1,
+        "DataNodeMPPService": 2,
+        "DataNodeExternalService": 3,
+    }
+
+
+class TAggregationType(object):
+    COUNT = 0
+    AVG = 1
+    SUM = 2
+    FIRST_VALUE = 3
+    LAST_VALUE = 4
+    MAX_TIME = 5
+    MIN_TIME = 6
+    MAX_VALUE = 7
+    MIN_VALUE = 8
+    EXTREME = 9
+    COUNT_IF = 10
+    TIME_DURATION = 11
+    MODE = 12
+    COUNT_TIME = 13
+    STDDEV = 14
+    STDDEV_POP = 15
+    STDDEV_SAMP = 16
+    VARIANCE = 17
+    VAR_POP = 18
+    VAR_SAMP = 19
+    MAX_BY = 20
+    MIN_BY = 21
+    UDAF = 22
+    FIRST = 23
+    LAST = 24
+    FIRST_BY = 25
+    LAST_BY = 26
+    MIN = 27
+    MAX = 28
+    COUNT_ALL = 29
+    APPROX_COUNT_DISTINCT = 30
+    APPROX_MOST_FREQUENT = 31
+
+    _VALUES_TO_NAMES = {
+        0: "COUNT",
+        1: "AVG",
+        2: "SUM",
+        3: "FIRST_VALUE",
+        4: "LAST_VALUE",
+        5: "MAX_TIME",
+        6: "MIN_TIME",
+        7: "MAX_VALUE",
+        8: "MIN_VALUE",
+        9: "EXTREME",
+        10: "COUNT_IF",
+        11: "TIME_DURATION",
+        12: "MODE",
+        13: "COUNT_TIME",
+        14: "STDDEV",
+        15: "STDDEV_POP",
+        16: "STDDEV_SAMP",
+        17: "VARIANCE",
+        18: "VAR_POP",
+        19: "VAR_SAMP",
+        20: "MAX_BY",
+        21: "MIN_BY",
+        22: "UDAF",
+        23: "FIRST",
+        24: "LAST",
+        25: "FIRST_BY",
+        26: "LAST_BY",
+        27: "MIN",
+        28: "MAX",
+        29: "COUNT_ALL",
+        30: "APPROX_COUNT_DISTINCT",
+        31: "APPROX_MOST_FREQUENT",
+    }
+
+    _NAMES_TO_VALUES = {
+        "COUNT": 0,
+        "AVG": 1,
+        "SUM": 2,
+        "FIRST_VALUE": 3,
+        "LAST_VALUE": 4,
+        "MAX_TIME": 5,
+        "MIN_TIME": 6,
+        "MAX_VALUE": 7,
+        "MIN_VALUE": 8,
+        "EXTREME": 9,
+        "COUNT_IF": 10,
+        "TIME_DURATION": 11,
+        "MODE": 12,
+        "COUNT_TIME": 13,
+        "STDDEV": 14,
+        "STDDEV_POP": 15,
+        "STDDEV_SAMP": 16,
+        "VARIANCE": 17,
+        "VAR_POP": 18,
+        "VAR_SAMP": 19,
+        "MAX_BY": 20,
+        "MIN_BY": 21,
+        "UDAF": 22,
+        "FIRST": 23,
+        "LAST": 24,
+        "FIRST_BY": 25,
+        "LAST_BY": 26,
+        "MIN": 27,
+        "MAX": 28,
+        "COUNT_ALL": 29,
+        "APPROX_COUNT_DISTINCT": 30,
+        "APPROX_MOST_FREQUENT": 31,
+    }
+
+
+class TrainingState(object):
+    PENDING = 0
+    RUNNING = 1
+    FINISHED = 2
+    FAILED = 3
+    DROPPING = 4
+
+    _VALUES_TO_NAMES = {
+        0: "PENDING",
+        1: "RUNNING",
+        2: "FINISHED",
+        3: "FAILED",
+        4: "DROPPING",
+    }
+
+    _NAMES_TO_VALUES = {
+        "PENDING": 0,
+        "RUNNING": 1,
+        "FINISHED": 2,
+        "FAILED": 3,
+        "DROPPING": 4,
+    }
+
+
+class Model(object):
+    TREE = 0
+    TABLE = 1
+
+    _VALUES_TO_NAMES = {
+        0: "TREE",
+        1: "TABLE",
+    }
+
+    _NAMES_TO_VALUES = {
+        "TREE": 0,
+        "TABLE": 1,
+    }
+
+
+class FunctionType(object):
+    NONE = 0
+    SCALAR = 1
+    AGGREGATE = 2
+    TABLE = 3
+
+    _VALUES_TO_NAMES = {
+        0: "NONE",
+        1: "SCALAR",
+        2: "AGGREGATE",
+        3: "TABLE",
+    }
+
+    _NAMES_TO_VALUES = {
+        "NONE": 0,
+        "SCALAR": 1,
+        "AGGREGATE": 2,
+        "TABLE": 3,
+    }
+
+
+class TEndPoint(object):
+    """
+    Attributes:
+     - ip
+     - port
+
+    """
+
+
+    def __init__(self, ip=None, port=None,):
+        self.ip = ip
+        self.port = port
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRING:
+                    self.ip = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.I32:
+                    self.port = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TEndPoint')
+        if self.ip is not None:
+            oprot.writeFieldBegin('ip', TType.STRING, 1)
+            oprot.writeString(self.ip.encode('utf-8') if sys.version_info[0] == 2 else self.ip)
+            oprot.writeFieldEnd()
+        if self.port is not None:
+            oprot.writeFieldBegin('port', TType.I32, 2)
+            oprot.writeI32(self.port)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.ip is None:
+            raise TProtocolException(message='Required field ip is unset!')
+        if self.port is None:
+            raise TProtocolException(message='Required field port is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TSStatus(object):
+    """
+    Attributes:
+     - code
+     - message
+     - subStatus
+     - redirectNode
+     - needRetry
+
+    """
+
+
+    def __init__(self, code=None, message=None, subStatus=None, redirectNode=None, needRetry=None,):
+        self.code = code
+        self.message = message
+        self.subStatus = subStatus
+        self.redirectNode = redirectNode
+        self.needRetry = needRetry
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.I32:
+                    self.code = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRING:
+                    self.message = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.LIST:
+                    self.subStatus = []
+                    (_etype3, _size0) = iprot.readListBegin()
+                    for _i4 in range(_size0):
+                        _elem5 = TSStatus()
+                        _elem5.read(iprot)
+                        self.subStatus.append(_elem5)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.STRUCT:
+                    self.redirectNode = TEndPoint()
+                    self.redirectNode.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 5:
+                if ftype == TType.BOOL:
+                    self.needRetry = iprot.readBool()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TSStatus')
+        if self.code is not None:
+            oprot.writeFieldBegin('code', TType.I32, 1)
+            oprot.writeI32(self.code)
+            oprot.writeFieldEnd()
+        if self.message is not None:
+            oprot.writeFieldBegin('message', TType.STRING, 2)
+            oprot.writeString(self.message.encode('utf-8') if sys.version_info[0] == 2 else self.message)
+            oprot.writeFieldEnd()
+        if self.subStatus is not None:
+            oprot.writeFieldBegin('subStatus', TType.LIST, 3)
+            oprot.writeListBegin(TType.STRUCT, len(self.subStatus))
+            for iter6 in self.subStatus:
+                iter6.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.redirectNode is not None:
+            oprot.writeFieldBegin('redirectNode', TType.STRUCT, 4)
+            self.redirectNode.write(oprot)
+            oprot.writeFieldEnd()
+        if self.needRetry is not None:
+            oprot.writeFieldBegin('needRetry', TType.BOOL, 5)
+            oprot.writeBool(self.needRetry)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.code is None:
+            raise TProtocolException(message='Required field code is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TConsensusGroupId(object):
+    """
+    Attributes:
+     - type
+     - id
+
+    """
+
+
+    def __init__(self, type=None, id=None,):
+        self.type = type
+        self.id = id
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.I32:
+                    self.type = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.I32:
+                    self.id = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TConsensusGroupId')
+        if self.type is not None:
+            oprot.writeFieldBegin('type', TType.I32, 1)
+            oprot.writeI32(self.type)
+            oprot.writeFieldEnd()
+        if self.id is not None:
+            oprot.writeFieldBegin('id', TType.I32, 2)
+            oprot.writeI32(self.id)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.type is None:
+            raise TProtocolException(message='Required field type is unset!')
+        if self.id is None:
+            raise TProtocolException(message='Required field id is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TSeriesPartitionSlot(object):
+    """
+    Attributes:
+     - slotId
+
+    """
+
+
+    def __init__(self, slotId=None,):
+        self.slotId = slotId
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.I32:
+                    self.slotId = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TSeriesPartitionSlot')
+        if self.slotId is not None:
+            oprot.writeFieldBegin('slotId', TType.I32, 1)
+            oprot.writeI32(self.slotId)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.slotId is None:
+            raise TProtocolException(message='Required field slotId is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TTimePartitionSlot(object):
+    """
+    Attributes:
+     - startTime
+
+    """
+
+
+    def __init__(self, startTime=None,):
+        self.startTime = startTime
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.I64:
+                    self.startTime = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TTimePartitionSlot')
+        if self.startTime is not None:
+            oprot.writeFieldBegin('startTime', TType.I64, 1)
+            oprot.writeI64(self.startTime)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.startTime is None:
+            raise TProtocolException(message='Required field startTime is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TRegionReplicaSet(object):
+    """
+    Attributes:
+     - regionId
+     - dataNodeLocations
+
+    """
+
+
+    def __init__(self, regionId=None, dataNodeLocations=None,):
+        self.regionId = regionId
+        self.dataNodeLocations = dataNodeLocations
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRUCT:
+                    self.regionId = TConsensusGroupId()
+                    self.regionId.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.LIST:
+                    self.dataNodeLocations = []
+                    (_etype10, _size7) = iprot.readListBegin()
+                    for _i11 in range(_size7):
+                        _elem12 = TDataNodeLocation()
+                        _elem12.read(iprot)
+                        self.dataNodeLocations.append(_elem12)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TRegionReplicaSet')
+        if self.regionId is not None:
+            oprot.writeFieldBegin('regionId', TType.STRUCT, 1)
+            self.regionId.write(oprot)
+            oprot.writeFieldEnd()
+        if self.dataNodeLocations is not None:
+            oprot.writeFieldBegin('dataNodeLocations', TType.LIST, 2)
+            oprot.writeListBegin(TType.STRUCT, len(self.dataNodeLocations))
+            for iter13 in self.dataNodeLocations:
+                iter13.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.regionId is None:
+            raise TProtocolException(message='Required field regionId is unset!')
+        if self.dataNodeLocations is None:
+            raise TProtocolException(message='Required field dataNodeLocations is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TNodeResource(object):
+    """
+    Attributes:
+     - cpuCoreNum
+     - maxMemory
+
+    """
+
+
+    def __init__(self, cpuCoreNum=None, maxMemory=None,):
+        self.cpuCoreNum = cpuCoreNum
+        self.maxMemory = maxMemory
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.I32:
+                    self.cpuCoreNum = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.I64:
+                    self.maxMemory = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TNodeResource')
+        if self.cpuCoreNum is not None:
+            oprot.writeFieldBegin('cpuCoreNum', TType.I32, 1)
+            oprot.writeI32(self.cpuCoreNum)
+            oprot.writeFieldEnd()
+        if self.maxMemory is not None:
+            oprot.writeFieldBegin('maxMemory', TType.I64, 2)
+            oprot.writeI64(self.maxMemory)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.cpuCoreNum is None:
+            raise TProtocolException(message='Required field cpuCoreNum is unset!')
+        if self.maxMemory is None:
+            raise TProtocolException(message='Required field maxMemory is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TConfigNodeLocation(object):
+    """
+    Attributes:
+     - configNodeId
+     - internalEndPoint
+     - consensusEndPoint
+
+    """
+
+
+    def __init__(self, configNodeId=None, internalEndPoint=None, consensusEndPoint=None,):
+        self.configNodeId = configNodeId
+        self.internalEndPoint = internalEndPoint
+        self.consensusEndPoint = consensusEndPoint
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.I32:
+                    self.configNodeId = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRUCT:
+                    self.internalEndPoint = TEndPoint()
+                    self.internalEndPoint.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.STRUCT:
+                    self.consensusEndPoint = TEndPoint()
+                    self.consensusEndPoint.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TConfigNodeLocation')
+        if self.configNodeId is not None:
+            oprot.writeFieldBegin('configNodeId', TType.I32, 1)
+            oprot.writeI32(self.configNodeId)
+            oprot.writeFieldEnd()
+        if self.internalEndPoint is not None:
+            oprot.writeFieldBegin('internalEndPoint', TType.STRUCT, 2)
+            self.internalEndPoint.write(oprot)
+            oprot.writeFieldEnd()
+        if self.consensusEndPoint is not None:
+            oprot.writeFieldBegin('consensusEndPoint', TType.STRUCT, 3)
+            self.consensusEndPoint.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.configNodeId is None:
+            raise TProtocolException(message='Required field configNodeId is unset!')
+        if self.internalEndPoint is None:
+            raise TProtocolException(message='Required field internalEndPoint is unset!')
+        if self.consensusEndPoint is None:
+            raise TProtocolException(message='Required field consensusEndPoint is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TDataNodeLocation(object):
+    """
+    Attributes:
+     - dataNodeId
+     - clientRpcEndPoint
+     - internalEndPoint
+     - mPPDataExchangeEndPoint
+     - dataRegionConsensusEndPoint
+     - schemaRegionConsensusEndPoint
+
+    """
+
+
+    def __init__(self, dataNodeId=None, clientRpcEndPoint=None, internalEndPoint=None, mPPDataExchangeEndPoint=None, dataRegionConsensusEndPoint=None, schemaRegionConsensusEndPoint=None,):
+        self.dataNodeId = dataNodeId
+        self.clientRpcEndPoint = clientRpcEndPoint
+        self.internalEndPoint = internalEndPoint
+        self.mPPDataExchangeEndPoint = mPPDataExchangeEndPoint
+        self.dataRegionConsensusEndPoint = dataRegionConsensusEndPoint
+        self.schemaRegionConsensusEndPoint = schemaRegionConsensusEndPoint
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.I32:
+                    self.dataNodeId = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRUCT:
+                    self.clientRpcEndPoint = TEndPoint()
+                    self.clientRpcEndPoint.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.STRUCT:
+                    self.internalEndPoint = TEndPoint()
+                    self.internalEndPoint.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.STRUCT:
+                    self.mPPDataExchangeEndPoint = TEndPoint()
+                    self.mPPDataExchangeEndPoint.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 5:
+                if ftype == TType.STRUCT:
+                    self.dataRegionConsensusEndPoint = TEndPoint()
+                    self.dataRegionConsensusEndPoint.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 6:
+                if ftype == TType.STRUCT:
+                    self.schemaRegionConsensusEndPoint = TEndPoint()
+                    self.schemaRegionConsensusEndPoint.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TDataNodeLocation')
+        if self.dataNodeId is not None:
+            oprot.writeFieldBegin('dataNodeId', TType.I32, 1)
+            oprot.writeI32(self.dataNodeId)
+            oprot.writeFieldEnd()
+        if self.clientRpcEndPoint is not None:
+            oprot.writeFieldBegin('clientRpcEndPoint', TType.STRUCT, 2)
+            self.clientRpcEndPoint.write(oprot)
+            oprot.writeFieldEnd()
+        if self.internalEndPoint is not None:
+            oprot.writeFieldBegin('internalEndPoint', TType.STRUCT, 3)
+            self.internalEndPoint.write(oprot)
+            oprot.writeFieldEnd()
+        if self.mPPDataExchangeEndPoint is not None:
+            oprot.writeFieldBegin('mPPDataExchangeEndPoint', TType.STRUCT, 4)
+            self.mPPDataExchangeEndPoint.write(oprot)
+            oprot.writeFieldEnd()
+        if self.dataRegionConsensusEndPoint is not None:
+            oprot.writeFieldBegin('dataRegionConsensusEndPoint', TType.STRUCT, 5)
+            self.dataRegionConsensusEndPoint.write(oprot)
+            oprot.writeFieldEnd()
+        if self.schemaRegionConsensusEndPoint is not None:
+            oprot.writeFieldBegin('schemaRegionConsensusEndPoint', TType.STRUCT, 6)
+            self.schemaRegionConsensusEndPoint.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.dataNodeId is None:
+            raise TProtocolException(message='Required field dataNodeId is unset!')
+        if self.clientRpcEndPoint is None:
+            raise TProtocolException(message='Required field clientRpcEndPoint is unset!')
+        if self.internalEndPoint is None:
+            raise TProtocolException(message='Required field internalEndPoint is unset!')
+        if self.mPPDataExchangeEndPoint is None:
+            raise TProtocolException(message='Required field mPPDataExchangeEndPoint is unset!')
+        if self.dataRegionConsensusEndPoint is None:
+            raise TProtocolException(message='Required field dataRegionConsensusEndPoint is unset!')
+        if self.schemaRegionConsensusEndPoint is None:
+            raise TProtocolException(message='Required field schemaRegionConsensusEndPoint is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TAINodeLocation(object):
+    """
+    Attributes:
+     - aiNodeId
+     - internalEndPoint
+
+    """
+
+
+    def __init__(self, aiNodeId=None, internalEndPoint=None,):
+        self.aiNodeId = aiNodeId
+        self.internalEndPoint = internalEndPoint
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.I32:
+                    self.aiNodeId = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRUCT:
+                    self.internalEndPoint = TEndPoint()
+                    self.internalEndPoint.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TAINodeLocation')
+        if self.aiNodeId is not None:
+            oprot.writeFieldBegin('aiNodeId', TType.I32, 1)
+            oprot.writeI32(self.aiNodeId)
+            oprot.writeFieldEnd()
+        if self.internalEndPoint is not None:
+            oprot.writeFieldBegin('internalEndPoint', TType.STRUCT, 2)
+            self.internalEndPoint.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.aiNodeId is None:
+            raise TProtocolException(message='Required field aiNodeId is unset!')
+        if self.internalEndPoint is None:
+            raise TProtocolException(message='Required field internalEndPoint is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TDataNodeConfiguration(object):
+    """
+    Attributes:
+     - location
+     - resource
+
+    """
+
+
+    def __init__(self, location=None, resource=None,):
+        self.location = location
+        self.resource = resource
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRUCT:
+                    self.location = TDataNodeLocation()
+                    self.location.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRUCT:
+                    self.resource = TNodeResource()
+                    self.resource.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TDataNodeConfiguration')
+        if self.location is not None:
+            oprot.writeFieldBegin('location', TType.STRUCT, 1)
+            self.location.write(oprot)
+            oprot.writeFieldEnd()
+        if self.resource is not None:
+            oprot.writeFieldBegin('resource', TType.STRUCT, 2)
+            self.resource.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.location is None:
+            raise TProtocolException(message='Required field location is unset!')
+        if self.resource is None:
+            raise TProtocolException(message='Required field resource is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TAINodeConfiguration(object):
+    """
+    Attributes:
+     - location
+     - resource
+
+    """
+
+
+    def __init__(self, location=None, resource=None,):
+        self.location = location
+        self.resource = resource
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRUCT:
+                    self.location = TAINodeLocation()
+                    self.location.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRUCT:
+                    self.resource = TNodeResource()
+                    self.resource.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TAINodeConfiguration')
+        if self.location is not None:
+            oprot.writeFieldBegin('location', TType.STRUCT, 1)
+            self.location.write(oprot)
+            oprot.writeFieldEnd()
+        if self.resource is not None:
+            oprot.writeFieldBegin('resource', TType.STRUCT, 2)
+            self.resource.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.location is None:
+            raise TProtocolException(message='Required field location is unset!')
+        if self.resource is None:
+            raise TProtocolException(message='Required field resource is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TFlushReq(object):
+    """
+    Attributes:
+     - isSeq
+     - storageGroups
+     - regionIds
+
+    """
+
+
+    def __init__(self, isSeq=None, storageGroups=None, regionIds=None,):
+        self.isSeq = isSeq
+        self.storageGroups = storageGroups
+        self.regionIds = regionIds
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRING:
+                    self.isSeq = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.LIST:
+                    self.storageGroups = []
+                    (_etype17, _size14) = iprot.readListBegin()
+                    for _i18 in range(_size14):
+                        _elem19 = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                        self.storageGroups.append(_elem19)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.LIST:
+                    self.regionIds = []
+                    (_etype23, _size20) = iprot.readListBegin()
+                    for _i24 in range(_size20):
+                        _elem25 = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                        self.regionIds.append(_elem25)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TFlushReq')
+        if self.isSeq is not None:
+            oprot.writeFieldBegin('isSeq', TType.STRING, 1)
+            oprot.writeString(self.isSeq.encode('utf-8') if sys.version_info[0] == 2 else self.isSeq)
+            oprot.writeFieldEnd()
+        if self.storageGroups is not None:
+            oprot.writeFieldBegin('storageGroups', TType.LIST, 2)
+            oprot.writeListBegin(TType.STRING, len(self.storageGroups))
+            for iter26 in self.storageGroups:
+                oprot.writeString(iter26.encode('utf-8') if sys.version_info[0] == 2 else iter26)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.regionIds is not None:
+            oprot.writeFieldBegin('regionIds', TType.LIST, 3)
+            oprot.writeListBegin(TType.STRING, len(self.regionIds))
+            for iter27 in self.regionIds:
+                oprot.writeString(iter27.encode('utf-8') if sys.version_info[0] == 2 else iter27)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TSettleReq(object):
+    """
+    Attributes:
+     - paths
+
+    """
+
+
+    def __init__(self, paths=None,):
+        self.paths = paths
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.LIST:
+                    self.paths = []
+                    (_etype31, _size28) = iprot.readListBegin()
+                    for _i32 in range(_size28):
+                        _elem33 = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                        self.paths.append(_elem33)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TSettleReq')
+        if self.paths is not None:
+            oprot.writeFieldBegin('paths', TType.LIST, 1)
+            oprot.writeListBegin(TType.STRING, len(self.paths))
+            for iter34 in self.paths:
+                oprot.writeString(iter34.encode('utf-8') if sys.version_info[0] == 2 else iter34)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.paths is None:
+            raise TProtocolException(message='Required field paths is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TSchemaNode(object):
+    """
+    Attributes:
+     - nodeName
+     - nodeType
+
+    """
+
+
+    def __init__(self, nodeName=None, nodeType=None,):
+        self.nodeName = nodeName
+        self.nodeType = nodeType
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRING:
+                    self.nodeName = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.BYTE:
+                    self.nodeType = iprot.readByte()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TSchemaNode')
+        if self.nodeName is not None:
+            oprot.writeFieldBegin('nodeName', TType.STRING, 1)
+            oprot.writeString(self.nodeName.encode('utf-8') if sys.version_info[0] == 2 else self.nodeName)
+            oprot.writeFieldEnd()
+        if self.nodeType is not None:
+            oprot.writeFieldBegin('nodeType', TType.BYTE, 2)
+            oprot.writeByte(self.nodeType)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.nodeName is None:
+            raise TProtocolException(message='Required field nodeName is unset!')
+        if self.nodeType is None:
+            raise TProtocolException(message='Required field nodeType is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TSetConfigurationReq(object):
+    """
+    Attributes:
+     - configs
+     - nodeId
+
+    """
+
+
+    def __init__(self, configs=None, nodeId=None,):
+        self.configs = configs
+        self.nodeId = nodeId
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.MAP:
+                    self.configs = {}
+                    (_ktype36, _vtype37, _size35) = iprot.readMapBegin()
+                    for _i39 in range(_size35):
+                        _key40 = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                        _val41 = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                        self.configs[_key40] = _val41
+                    iprot.readMapEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.I32:
+                    self.nodeId = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TSetConfigurationReq')
+        if self.configs is not None:
+            oprot.writeFieldBegin('configs', TType.MAP, 1)
+            oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.configs))
+            for kiter42, viter43 in self.configs.items():
+                oprot.writeString(kiter42.encode('utf-8') if sys.version_info[0] == 2 else kiter42)
+                oprot.writeString(viter43.encode('utf-8') if sys.version_info[0] == 2 else viter43)
+            oprot.writeMapEnd()
+            oprot.writeFieldEnd()
+        if self.nodeId is not None:
+            oprot.writeFieldBegin('nodeId', TType.I32, 2)
+            oprot.writeI32(self.nodeId)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.configs is None:
+            raise TProtocolException(message='Required field configs is unset!')
+        if self.nodeId is None:
+            raise TProtocolException(message='Required field nodeId is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TSetTTLReq(object):
+    """
+    Attributes:
+     - pathPattern
+     - TTL
+     - isDataBase
+
+    """
+
+
+    def __init__(self, pathPattern=None, TTL=None, isDataBase=None,):
+        self.pathPattern = pathPattern
+        self.TTL = TTL
+        self.isDataBase = isDataBase
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.LIST:
+                    self.pathPattern = []
+                    (_etype47, _size44) = iprot.readListBegin()
+                    for _i48 in range(_size44):
+                        _elem49 = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                        self.pathPattern.append(_elem49)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.I64:
+                    self.TTL = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.BOOL:
+                    self.isDataBase = iprot.readBool()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TSetTTLReq')
+        if self.pathPattern is not None:
+            oprot.writeFieldBegin('pathPattern', TType.LIST, 1)
+            oprot.writeListBegin(TType.STRING, len(self.pathPattern))
+            for iter50 in self.pathPattern:
+                oprot.writeString(iter50.encode('utf-8') if sys.version_info[0] == 2 else iter50)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.TTL is not None:
+            oprot.writeFieldBegin('TTL', TType.I64, 2)
+            oprot.writeI64(self.TTL)
+            oprot.writeFieldEnd()
+        if self.isDataBase is not None:
+            oprot.writeFieldBegin('isDataBase', TType.BOOL, 3)
+            oprot.writeBool(self.isDataBase)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.pathPattern is None:
+            raise TProtocolException(message='Required field pathPattern is unset!')
+        if self.TTL is None:
+            raise TProtocolException(message='Required field TTL is unset!')
+        if self.isDataBase is None:
+            raise TProtocolException(message='Required field isDataBase is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TShowTTLReq(object):
+    """
+    Attributes:
+     - pathPattern
+
+    """
+
+
+    def __init__(self, pathPattern=None,):
+        self.pathPattern = pathPattern
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.LIST:
+                    self.pathPattern = []
+                    (_etype54, _size51) = iprot.readListBegin()
+                    for _i55 in range(_size51):
+                        _elem56 = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                        self.pathPattern.append(_elem56)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TShowTTLReq')
+        if self.pathPattern is not None:
+            oprot.writeFieldBegin('pathPattern', TType.LIST, 1)
+            oprot.writeListBegin(TType.STRING, len(self.pathPattern))
+            for iter57 in self.pathPattern:
+                oprot.writeString(iter57.encode('utf-8') if sys.version_info[0] == 2 else iter57)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.pathPattern is None:
+            raise TProtocolException(message='Required field pathPattern is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TFile(object):
+    """
+    Attributes:
+     - fileName
+     - file
+
+    """
+
+
+    def __init__(self, fileName=None, file=None,):
+        self.fileName = fileName
+        self.file = file
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRING:
+                    self.fileName = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRING:
+                    self.file = iprot.readBinary()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TFile')
+        if self.fileName is not None:
+            oprot.writeFieldBegin('fileName', TType.STRING, 1)
+            oprot.writeString(self.fileName.encode('utf-8') if sys.version_info[0] == 2 else self.fileName)
+            oprot.writeFieldEnd()
+        if self.file is not None:
+            oprot.writeFieldBegin('file', TType.STRING, 2)
+            oprot.writeBinary(self.file)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.fileName is None:
+            raise TProtocolException(message='Required field fileName is unset!')
+        if self.file is None:
+            raise TProtocolException(message='Required field file is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TFilesResp(object):
+    """
+    Attributes:
+     - status
+     - files
+
+    """
+
+
+    def __init__(self, status=None, files=None,):
+        self.status = status
+        self.files = files
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRUCT:
+                    self.status = TSStatus()
+                    self.status.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.LIST:
+                    self.files = []
+                    (_etype61, _size58) = iprot.readListBegin()
+                    for _i62 in range(_size58):
+                        _elem63 = TFile()
+                        _elem63.read(iprot)
+                        self.files.append(_elem63)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TFilesResp')
+        if self.status is not None:
+            oprot.writeFieldBegin('status', TType.STRUCT, 1)
+            self.status.write(oprot)
+            oprot.writeFieldEnd()
+        if self.files is not None:
+            oprot.writeFieldBegin('files', TType.LIST, 2)
+            oprot.writeListBegin(TType.STRUCT, len(self.files))
+            for iter64 in self.files:
+                iter64.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.status is None:
+            raise TProtocolException(message='Required field status is unset!')
+        if self.files is None:
+            raise TProtocolException(message='Required field files is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TSpaceQuota(object):
+    """
+    Attributes:
+     - diskSize
+     - deviceNum
+     - timeserieNum
+
+    """
+
+
+    def __init__(self, diskSize=None, deviceNum=None, timeserieNum=None,):
+        self.diskSize = diskSize
+        self.deviceNum = deviceNum
+        self.timeserieNum = timeserieNum
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.I64:
+                    self.diskSize = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.I64:
+                    self.deviceNum = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.I64:
+                    self.timeserieNum = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TSpaceQuota')
+        if self.diskSize is not None:
+            oprot.writeFieldBegin('diskSize', TType.I64, 1)
+            oprot.writeI64(self.diskSize)
+            oprot.writeFieldEnd()
+        if self.deviceNum is not None:
+            oprot.writeFieldBegin('deviceNum', TType.I64, 2)
+            oprot.writeI64(self.deviceNum)
+            oprot.writeFieldEnd()
+        if self.timeserieNum is not None:
+            oprot.writeFieldBegin('timeserieNum', TType.I64, 3)
+            oprot.writeI64(self.timeserieNum)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TTimedQuota(object):
+    """
+    Attributes:
+     - timeUnit
+     - softLimit
+
+    """
+
+
+    def __init__(self, timeUnit=None, softLimit=None,):
+        self.timeUnit = timeUnit
+        self.softLimit = softLimit
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.I64:
+                    self.timeUnit = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.I64:
+                    self.softLimit = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TTimedQuota')
+        if self.timeUnit is not None:
+            oprot.writeFieldBegin('timeUnit', TType.I64, 1)
+            oprot.writeI64(self.timeUnit)
+            oprot.writeFieldEnd()
+        if self.softLimit is not None:
+            oprot.writeFieldBegin('softLimit', TType.I64, 2)
+            oprot.writeI64(self.softLimit)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.timeUnit is None:
+            raise TProtocolException(message='Required field timeUnit is unset!')
+        if self.softLimit is None:
+            raise TProtocolException(message='Required field softLimit is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TThrottleQuota(object):
+    """
+    Attributes:
+     - throttleLimit
+     - memLimit
+     - cpuLimit
+
+    """
+
+
+    def __init__(self, throttleLimit=None, memLimit=None, cpuLimit=None,):
+        self.throttleLimit = throttleLimit
+        self.memLimit = memLimit
+        self.cpuLimit = cpuLimit
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.MAP:
+                    self.throttleLimit = {}
+                    (_ktype66, _vtype67, _size65) = iprot.readMapBegin()
+                    for _i69 in range(_size65):
+                        _key70 = iprot.readI32()
+                        _val71 = TTimedQuota()
+                        _val71.read(iprot)
+                        self.throttleLimit[_key70] = _val71
+                    iprot.readMapEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.I64:
+                    self.memLimit = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.I32:
+                    self.cpuLimit = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TThrottleQuota')
+        if self.throttleLimit is not None:
+            oprot.writeFieldBegin('throttleLimit', TType.MAP, 1)
+            oprot.writeMapBegin(TType.I32, TType.STRUCT, len(self.throttleLimit))
+            for kiter72, viter73 in self.throttleLimit.items():
+                oprot.writeI32(kiter72)
+                viter73.write(oprot)
+            oprot.writeMapEnd()
+            oprot.writeFieldEnd()
+        if self.memLimit is not None:
+            oprot.writeFieldBegin('memLimit', TType.I64, 2)
+            oprot.writeI64(self.memLimit)
+            oprot.writeFieldEnd()
+        if self.cpuLimit is not None:
+            oprot.writeFieldBegin('cpuLimit', TType.I32, 3)
+            oprot.writeI32(self.cpuLimit)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TSetSpaceQuotaReq(object):
+    """
+    Attributes:
+     - database
+     - spaceLimit
+
+    """
+
+
+    def __init__(self, database=None, spaceLimit=None,):
+        self.database = database
+        self.spaceLimit = spaceLimit
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.LIST:
+                    self.database = []
+                    (_etype77, _size74) = iprot.readListBegin()
+                    for _i78 in range(_size74):
+                        _elem79 = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                        self.database.append(_elem79)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRUCT:
+                    self.spaceLimit = TSpaceQuota()
+                    self.spaceLimit.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TSetSpaceQuotaReq')
+        if self.database is not None:
+            oprot.writeFieldBegin('database', TType.LIST, 1)
+            oprot.writeListBegin(TType.STRING, len(self.database))
+            for iter80 in self.database:
+                oprot.writeString(iter80.encode('utf-8') if sys.version_info[0] == 2 else iter80)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.spaceLimit is not None:
+            oprot.writeFieldBegin('spaceLimit', TType.STRUCT, 2)
+            self.spaceLimit.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.database is None:
+            raise TProtocolException(message='Required field database is unset!')
+        if self.spaceLimit is None:
+            raise TProtocolException(message='Required field spaceLimit is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TSetThrottleQuotaReq(object):
+    """
+    Attributes:
+     - userName
+     - throttleQuota
+
+    """
+
+
+    def __init__(self, userName=None, throttleQuota=None,):
+        self.userName = userName
+        self.throttleQuota = throttleQuota
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRING:
+                    self.userName = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRUCT:
+                    self.throttleQuota = TThrottleQuota()
+                    self.throttleQuota.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TSetThrottleQuotaReq')
+        if self.userName is not None:
+            oprot.writeFieldBegin('userName', TType.STRING, 1)
+            oprot.writeString(self.userName.encode('utf-8') if sys.version_info[0] == 2 else self.userName)
+            oprot.writeFieldEnd()
+        if self.throttleQuota is not None:
+            oprot.writeFieldBegin('throttleQuota', TType.STRUCT, 2)
+            self.throttleQuota.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.userName is None:
+            raise TProtocolException(message='Required field userName is unset!')
+        if self.throttleQuota is None:
+            raise TProtocolException(message='Required field throttleQuota is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TLicense(object):
+    """
+    Attributes:
+     - licenseIssueTimestamp
+     - expireTimestamp
+     - dataNodeNumLimit
+     - cpuCoreNumLimit
+     - deviceNumLimit
+     - sensorNumLimit
+     - disconnectionFromActiveNodeTimeLimit
+     - mlNodeNumLimit
+
+    """
+
+
+    def __init__(self, licenseIssueTimestamp=None, expireTimestamp=None, dataNodeNumLimit=None, cpuCoreNumLimit=None, deviceNumLimit=None, sensorNumLimit=None, disconnectionFromActiveNodeTimeLimit=None, mlNodeNumLimit=None,):
+        self.licenseIssueTimestamp = licenseIssueTimestamp
+        self.expireTimestamp = expireTimestamp
+        self.dataNodeNumLimit = dataNodeNumLimit
+        self.cpuCoreNumLimit = cpuCoreNumLimit
+        self.deviceNumLimit = deviceNumLimit
+        self.sensorNumLimit = sensorNumLimit
+        self.disconnectionFromActiveNodeTimeLimit = disconnectionFromActiveNodeTimeLimit
+        self.mlNodeNumLimit = mlNodeNumLimit
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.I64:
+                    self.licenseIssueTimestamp = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.I64:
+                    self.expireTimestamp = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.I16:
+                    self.dataNodeNumLimit = iprot.readI16()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 5:
+                if ftype == TType.I32:
+                    self.cpuCoreNumLimit = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 6:
+                if ftype == TType.I64:
+                    self.deviceNumLimit = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 7:
+                if ftype == TType.I64:
+                    self.sensorNumLimit = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 8:
+                if ftype == TType.I64:
+                    self.disconnectionFromActiveNodeTimeLimit = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 9:
+                if ftype == TType.I16:
+                    self.mlNodeNumLimit = iprot.readI16()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TLicense')
+        if self.licenseIssueTimestamp is not None:
+            oprot.writeFieldBegin('licenseIssueTimestamp', TType.I64, 1)
+            oprot.writeI64(self.licenseIssueTimestamp)
+            oprot.writeFieldEnd()
+        if self.expireTimestamp is not None:
+            oprot.writeFieldBegin('expireTimestamp', TType.I64, 2)
+            oprot.writeI64(self.expireTimestamp)
+            oprot.writeFieldEnd()
+        if self.dataNodeNumLimit is not None:
+            oprot.writeFieldBegin('dataNodeNumLimit', TType.I16, 4)
+            oprot.writeI16(self.dataNodeNumLimit)
+            oprot.writeFieldEnd()
+        if self.cpuCoreNumLimit is not None:
+            oprot.writeFieldBegin('cpuCoreNumLimit', TType.I32, 5)
+            oprot.writeI32(self.cpuCoreNumLimit)
+            oprot.writeFieldEnd()
+        if self.deviceNumLimit is not None:
+            oprot.writeFieldBegin('deviceNumLimit', TType.I64, 6)
+            oprot.writeI64(self.deviceNumLimit)
+            oprot.writeFieldEnd()
+        if self.sensorNumLimit is not None:
+            oprot.writeFieldBegin('sensorNumLimit', TType.I64, 7)
+            oprot.writeI64(self.sensorNumLimit)
+            oprot.writeFieldEnd()
+        if self.disconnectionFromActiveNodeTimeLimit is not None:
+            oprot.writeFieldBegin('disconnectionFromActiveNodeTimeLimit', TType.I64, 8)
+            oprot.writeI64(self.disconnectionFromActiveNodeTimeLimit)
+            oprot.writeFieldEnd()
+        if self.mlNodeNumLimit is not None:
+            oprot.writeFieldBegin('mlNodeNumLimit', TType.I16, 9)
+            oprot.writeI16(self.mlNodeNumLimit)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.licenseIssueTimestamp is None:
+            raise TProtocolException(message='Required field licenseIssueTimestamp is unset!')
+        if self.expireTimestamp is None:
+            raise TProtocolException(message='Required field expireTimestamp is unset!')
+        if self.dataNodeNumLimit is None:
+            raise TProtocolException(message='Required field dataNodeNumLimit is unset!')
+        if self.cpuCoreNumLimit is None:
+            raise TProtocolException(message='Required field cpuCoreNumLimit is unset!')
+        if self.deviceNumLimit is None:
+            raise TProtocolException(message='Required field deviceNumLimit is unset!')
+        if self.sensorNumLimit is None:
+            raise TProtocolException(message='Required field sensorNumLimit is unset!')
+        if self.disconnectionFromActiveNodeTimeLimit is None:
+            raise TProtocolException(message='Required field disconnectionFromActiveNodeTimeLimit is unset!')
+        if self.mlNodeNumLimit is None:
+            raise TProtocolException(message='Required field mlNodeNumLimit is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TLoadSample(object):
+    """
+    Attributes:
+     - cpuUsageRate
+     - memoryUsageRate
+     - diskUsageRate
+     - freeDiskSpace
+
+    """
+
+
+    def __init__(self, cpuUsageRate=None, memoryUsageRate=None, diskUsageRate=None, freeDiskSpace=None,):
+        self.cpuUsageRate = cpuUsageRate
+        self.memoryUsageRate = memoryUsageRate
+        self.diskUsageRate = diskUsageRate
+        self.freeDiskSpace = freeDiskSpace
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.DOUBLE:
+                    self.cpuUsageRate = iprot.readDouble()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.DOUBLE:
+                    self.memoryUsageRate = iprot.readDouble()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.DOUBLE:
+                    self.diskUsageRate = iprot.readDouble()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.DOUBLE:
+                    self.freeDiskSpace = iprot.readDouble()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TLoadSample')
+        if self.cpuUsageRate is not None:
+            oprot.writeFieldBegin('cpuUsageRate', TType.DOUBLE, 1)
+            oprot.writeDouble(self.cpuUsageRate)
+            oprot.writeFieldEnd()
+        if self.memoryUsageRate is not None:
+            oprot.writeFieldBegin('memoryUsageRate', TType.DOUBLE, 2)
+            oprot.writeDouble(self.memoryUsageRate)
+            oprot.writeFieldEnd()
+        if self.diskUsageRate is not None:
+            oprot.writeFieldBegin('diskUsageRate', TType.DOUBLE, 3)
+            oprot.writeDouble(self.diskUsageRate)
+            oprot.writeFieldEnd()
+        if self.freeDiskSpace is not None:
+            oprot.writeFieldBegin('freeDiskSpace', TType.DOUBLE, 4)
+            oprot.writeDouble(self.freeDiskSpace)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.cpuUsageRate is None:
+            raise TProtocolException(message='Required field cpuUsageRate is unset!')
+        if self.memoryUsageRate is None:
+            raise TProtocolException(message='Required field memoryUsageRate is unset!')
+        if self.diskUsageRate is None:
+            raise TProtocolException(message='Required field diskUsageRate is unset!')
+        if self.freeDiskSpace is None:
+            raise TProtocolException(message='Required field freeDiskSpace is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TServiceProvider(object):
+    """
+    Attributes:
+     - endPoint
+     - serviceType
+     - nodeId
+
+    """
+
+
+    def __init__(self, endPoint=None, serviceType=None, nodeId=None,):
+        self.endPoint = endPoint
+        self.serviceType = serviceType
+        self.nodeId = nodeId
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRUCT:
+                    self.endPoint = TEndPoint()
+                    self.endPoint.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.I32:
+                    self.serviceType = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.I32:
+                    self.nodeId = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TServiceProvider')
+        if self.endPoint is not None:
+            oprot.writeFieldBegin('endPoint', TType.STRUCT, 1)
+            self.endPoint.write(oprot)
+            oprot.writeFieldEnd()
+        if self.serviceType is not None:
+            oprot.writeFieldBegin('serviceType', TType.I32, 2)
+            oprot.writeI32(self.serviceType)
+            oprot.writeFieldEnd()
+        if self.nodeId is not None:
+            oprot.writeFieldBegin('nodeId', TType.I32, 3)
+            oprot.writeI32(self.nodeId)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.endPoint is None:
+            raise TProtocolException(message='Required field endPoint is unset!')
+        if self.serviceType is None:
+            raise TProtocolException(message='Required field serviceType is unset!')
+        if self.nodeId is None:
+            raise TProtocolException(message='Required field nodeId is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TSender(object):
+    """
+    Attributes:
+     - dataNodeLocation
+     - configNodeLocation
+
+    """
+
+
+    def __init__(self, dataNodeLocation=None, configNodeLocation=None,):
+        self.dataNodeLocation = dataNodeLocation
+        self.configNodeLocation = configNodeLocation
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRUCT:
+                    self.dataNodeLocation = TDataNodeLocation()
+                    self.dataNodeLocation.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRUCT:
+                    self.configNodeLocation = TConfigNodeLocation()
+                    self.configNodeLocation.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TSender')
+        if self.dataNodeLocation is not None:
+            oprot.writeFieldBegin('dataNodeLocation', TType.STRUCT, 1)
+            self.dataNodeLocation.write(oprot)
+            oprot.writeFieldEnd()
+        if self.configNodeLocation is not None:
+            oprot.writeFieldBegin('configNodeLocation', TType.STRUCT, 2)
+            self.configNodeLocation.write(oprot)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TTestConnectionResult(object):
+    """
+    Attributes:
+     - serviceProvider
+     - sender
+     - success
+     - reason
+
+    """
+
+
+    def __init__(self, serviceProvider=None, sender=None, success=None, reason=None,):
+        self.serviceProvider = serviceProvider
+        self.sender = sender
+        self.success = success
+        self.reason = reason
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRUCT:
+                    self.serviceProvider = TServiceProvider()
+                    self.serviceProvider.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRUCT:
+                    self.sender = TSender()
+                    self.sender.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.BOOL:
+                    self.success = iprot.readBool()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.STRING:
+                    self.reason = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TTestConnectionResult')
+        if self.serviceProvider is not None:
+            oprot.writeFieldBegin('serviceProvider', TType.STRUCT, 1)
+            self.serviceProvider.write(oprot)
+            oprot.writeFieldEnd()
+        if self.sender is not None:
+            oprot.writeFieldBegin('sender', TType.STRUCT, 2)
+            self.sender.write(oprot)
+            oprot.writeFieldEnd()
+        if self.success is not None:
+            oprot.writeFieldBegin('success', TType.BOOL, 3)
+            oprot.writeBool(self.success)
+            oprot.writeFieldEnd()
+        if self.reason is not None:
+            oprot.writeFieldBegin('reason', TType.STRING, 4)
+            oprot.writeString(self.reason.encode('utf-8') if sys.version_info[0] == 2 else self.reason)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.serviceProvider is None:
+            raise TProtocolException(message='Required field serviceProvider is unset!')
+        if self.sender is None:
+            raise TProtocolException(message='Required field sender is unset!')
+        if self.success is None:
+            raise TProtocolException(message='Required field success is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TTestConnectionResp(object):
+    """
+    Attributes:
+     - status
+     - resultList
+
+    """
+
+
+    def __init__(self, status=None, resultList=None,):
+        self.status = status
+        self.resultList = resultList
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRUCT:
+                    self.status = TSStatus()
+                    self.status.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.LIST:
+                    self.resultList = []
+                    (_etype84, _size81) = iprot.readListBegin()
+                    for _i85 in range(_size81):
+                        _elem86 = TTestConnectionResult()
+                        _elem86.read(iprot)
+                        self.resultList.append(_elem86)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TTestConnectionResp')
+        if self.status is not None:
+            oprot.writeFieldBegin('status', TType.STRUCT, 1)
+            self.status.write(oprot)
+            oprot.writeFieldEnd()
+        if self.resultList is not None:
+            oprot.writeFieldBegin('resultList', TType.LIST, 2)
+            oprot.writeListBegin(TType.STRUCT, len(self.resultList))
+            for iter87 in self.resultList:
+                iter87.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.status is None:
+            raise TProtocolException(message='Required field status is unset!')
+        if self.resultList is None:
+            raise TProtocolException(message='Required field resultList is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TNodeLocations(object):
+    """
+    Attributes:
+     - configNodeLocations
+     - dataNodeLocations
+
+    """
+
+
+    def __init__(self, configNodeLocations=None, dataNodeLocations=None,):
+        self.configNodeLocations = configNodeLocations
+        self.dataNodeLocations = dataNodeLocations
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.LIST:
+                    self.configNodeLocations = []
+                    (_etype91, _size88) = iprot.readListBegin()
+                    for _i92 in range(_size88):
+                        _elem93 = TConfigNodeLocation()
+                        _elem93.read(iprot)
+                        self.configNodeLocations.append(_elem93)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.LIST:
+                    self.dataNodeLocations = []
+                    (_etype97, _size94) = iprot.readListBegin()
+                    for _i98 in range(_size94):
+                        _elem99 = TDataNodeLocation()
+                        _elem99.read(iprot)
+                        self.dataNodeLocations.append(_elem99)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TNodeLocations')
+        if self.configNodeLocations is not None:
+            oprot.writeFieldBegin('configNodeLocations', TType.LIST, 1)
+            oprot.writeListBegin(TType.STRUCT, len(self.configNodeLocations))
+            for iter100 in self.configNodeLocations:
+                iter100.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.dataNodeLocations is not None:
+            oprot.writeFieldBegin('dataNodeLocations', TType.LIST, 2)
+            oprot.writeListBegin(TType.STRUCT, len(self.dataNodeLocations))
+            for iter101 in self.dataNodeLocations:
+                iter101.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TShowConfigurationTemplateResp(object):
+    """
+    Attributes:
+     - status
+     - content
+
+    """
+
+
+    def __init__(self, status=None, content=None,):
+        self.status = status
+        self.content = content
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRUCT:
+                    self.status = TSStatus()
+                    self.status.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRING:
+                    self.content = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TShowConfigurationTemplateResp')
+        if self.status is not None:
+            oprot.writeFieldBegin('status', TType.STRUCT, 1)
+            self.status.write(oprot)
+            oprot.writeFieldEnd()
+        if self.content is not None:
+            oprot.writeFieldBegin('content', TType.STRING, 2)
+            oprot.writeString(self.content.encode('utf-8') if sys.version_info[0] == 2 else self.content)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.status is None:
+            raise TProtocolException(message='Required field status is unset!')
+        if self.content is None:
+            raise TProtocolException(message='Required field content is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class TShowConfigurationResp(object):
+    """
+    Attributes:
+     - status
+     - content
+
+    """
+
+
+    def __init__(self, status=None, content=None,):
+        self.status = status
+        self.content = content
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRUCT:
+                    self.status = TSStatus()
+                    self.status.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRING:
+                    self.content = iprot.readString().decode('utf-8', errors='replace') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
+            return
+        oprot.writeStructBegin('TShowConfigurationResp')
+        if self.status is not None:
+            oprot.writeFieldBegin('status', TType.STRUCT, 1)
+            self.status.write(oprot)
+            oprot.writeFieldEnd()
+        if self.content is not None:
+            oprot.writeFieldBegin('content', TType.STRING, 2)
+            oprot.writeString(self.content.encode('utf-8') if sys.version_info[0] == 2 else self.content)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.status is None:
+            raise TProtocolException(message='Required field status is unset!')
+        if self.content is None:
+            raise TProtocolException(message='Required field content is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+all_structs.append(TEndPoint)
+TEndPoint.thrift_spec = (
+    None,  # 0
+    (1, TType.STRING, 'ip', 'UTF8', None, ),  # 1
+    (2, TType.I32, 'port', None, None, ),  # 2
+)
+all_structs.append(TSStatus)
+TSStatus.thrift_spec = (
+    None,  # 0
+    (1, TType.I32, 'code', None, None, ),  # 1
+    (2, TType.STRING, 'message', 'UTF8', None, ),  # 2
+    (3, TType.LIST, 'subStatus', (TType.STRUCT, [TSStatus, None], False), None, ),  # 3
+    (4, TType.STRUCT, 'redirectNode', [TEndPoint, None], None, ),  # 4
+    (5, TType.BOOL, 'needRetry', None, None, ),  # 5
+)
+all_structs.append(TConsensusGroupId)
+TConsensusGroupId.thrift_spec = (
+    None,  # 0
+    (1, TType.I32, 'type', None, None, ),  # 1
+    (2, TType.I32, 'id', None, None, ),  # 2
+)
+all_structs.append(TSeriesPartitionSlot)
+TSeriesPartitionSlot.thrift_spec = (
+    None,  # 0
+    (1, TType.I32, 'slotId', None, None, ),  # 1
+)
+all_structs.append(TTimePartitionSlot)
+TTimePartitionSlot.thrift_spec = (
+    None,  # 0
+    (1, TType.I64, 'startTime', None, None, ),  # 1
+)
+all_structs.append(TRegionReplicaSet)
+TRegionReplicaSet.thrift_spec = (
+    None,  # 0
+    (1, TType.STRUCT, 'regionId', [TConsensusGroupId, None], None, ),  # 1
+    (2, TType.LIST, 'dataNodeLocations', (TType.STRUCT, [TDataNodeLocation, None], False), None, ),  # 2
+)
+all_structs.append(TNodeResource)
+TNodeResource.thrift_spec = (
+    None,  # 0
+    (1, TType.I32, 'cpuCoreNum', None, None, ),  # 1
+    (2, TType.I64, 'maxMemory', None, None, ),  # 2
+)
+all_structs.append(TConfigNodeLocation)
+TConfigNodeLocation.thrift_spec = (
+    None,  # 0
+    (1, TType.I32, 'configNodeId', None, None, ),  # 1
+    (2, TType.STRUCT, 'internalEndPoint', [TEndPoint, None], None, ),  # 2
+    (3, TType.STRUCT, 'consensusEndPoint', [TEndPoint, None], None, ),  # 3
+)
+all_structs.append(TDataNodeLocation)
+TDataNodeLocation.thrift_spec = (
+    None,  # 0
+    (1, TType.I32, 'dataNodeId', None, None, ),  # 1
+    (2, TType.STRUCT, 'clientRpcEndPoint', [TEndPoint, None], None, ),  # 2
+    (3, TType.STRUCT, 'internalEndPoint', [TEndPoint, None], None, ),  # 3
+    (4, TType.STRUCT, 'mPPDataExchangeEndPoint', [TEndPoint, None], None, ),  # 4
+    (5, TType.STRUCT, 'dataRegionConsensusEndPoint', [TEndPoint, None], None, ),  # 5
+    (6, TType.STRUCT, 'schemaRegionConsensusEndPoint', [TEndPoint, None], None, ),  # 6
+)
+all_structs.append(TAINodeLocation)
+TAINodeLocation.thrift_spec = (
+    None,  # 0
+    (1, TType.I32, 'aiNodeId', None, None, ),  # 1
+    (2, TType.STRUCT, 'internalEndPoint', [TEndPoint, None], None, ),  # 2
+)
+all_structs.append(TDataNodeConfiguration)
+TDataNodeConfiguration.thrift_spec = (
+    None,  # 0
+    (1, TType.STRUCT, 'location', [TDataNodeLocation, None], None, ),  # 1
+    (2, TType.STRUCT, 'resource', [TNodeResource, None], None, ),  # 2
+)
+all_structs.append(TAINodeConfiguration)
+TAINodeConfiguration.thrift_spec = (
+    None,  # 0
+    (1, TType.STRUCT, 'location', [TAINodeLocation, None], None, ),  # 1
+    (2, TType.STRUCT, 'resource', [TNodeResource, None], None, ),  # 2
+)
+all_structs.append(TFlushReq)
+TFlushReq.thrift_spec = (
+    None,  # 0
+    (1, TType.STRING, 'isSeq', 'UTF8', None, ),  # 1
+    (2, TType.LIST, 'storageGroups', (TType.STRING, 'UTF8', False), None, ),  # 2
+    (3, TType.LIST, 'regionIds', (TType.STRING, 'UTF8', False), None, ),  # 3
+)
+all_structs.append(TSettleReq)
+TSettleReq.thrift_spec = (
+    None,  # 0
+    (1, TType.LIST, 'paths', (TType.STRING, 'UTF8', False), None, ),  # 1
+)
+all_structs.append(TSchemaNode)
+TSchemaNode.thrift_spec = (
+    None,  # 0
+    (1, TType.STRING, 'nodeName', 'UTF8', None, ),  # 1
+    (2, TType.BYTE, 'nodeType', None, None, ),  # 2
+)
+all_structs.append(TSetConfigurationReq)
+TSetConfigurationReq.thrift_spec = (
+    None,  # 0
+    (1, TType.MAP, 'configs', (TType.STRING, 'UTF8', TType.STRING, 'UTF8', False), None, ),  # 1
+    (2, TType.I32, 'nodeId', None, None, ),  # 2
+)
+all_structs.append(TSetTTLReq)
+TSetTTLReq.thrift_spec = (
+    None,  # 0
+    (1, TType.LIST, 'pathPattern', (TType.STRING, 'UTF8', False), None, ),  # 1
+    (2, TType.I64, 'TTL', None, None, ),  # 2
+    (3, TType.BOOL, 'isDataBase', None, None, ),  # 3
+)
+all_structs.append(TShowTTLReq)
+TShowTTLReq.thrift_spec = (
+    None,  # 0
+    (1, TType.LIST, 'pathPattern', (TType.STRING, 'UTF8', False), None, ),  # 1
+)
+all_structs.append(TFile)
+TFile.thrift_spec = (
+    None,  # 0
+    (1, TType.STRING, 'fileName', 'UTF8', None, ),  # 1
+    (2, TType.STRING, 'file', 'BINARY', None, ),  # 2
+)
+all_structs.append(TFilesResp)
+TFilesResp.thrift_spec = (
+    None,  # 0
+    (1, TType.STRUCT, 'status', [TSStatus, None], None, ),  # 1
+    (2, TType.LIST, 'files', (TType.STRUCT, [TFile, None], False), None, ),  # 2
+)
+all_structs.append(TSpaceQuota)
+TSpaceQuota.thrift_spec = (
+    None,  # 0
+    (1, TType.I64, 'diskSize', None, None, ),  # 1
+    (2, TType.I64, 'deviceNum', None, None, ),  # 2
+    (3, TType.I64, 'timeserieNum', None, None, ),  # 3
+)
+all_structs.append(TTimedQuota)
+TTimedQuota.thrift_spec = (
+    None,  # 0
+    (1, TType.I64, 'timeUnit', None, None, ),  # 1
+    (2, TType.I64, 'softLimit', None, None, ),  # 2
+)
+all_structs.append(TThrottleQuota)
+TThrottleQuota.thrift_spec = (
+    None,  # 0
+    (1, TType.MAP, 'throttleLimit', (TType.I32, None, TType.STRUCT, [TTimedQuota, None], False), None, ),  # 1
+    (2, TType.I64, 'memLimit', None, None, ),  # 2
+    (3, TType.I32, 'cpuLimit', None, None, ),  # 3
+)
+all_structs.append(TSetSpaceQuotaReq)
+TSetSpaceQuotaReq.thrift_spec = (
+    None,  # 0
+    (1, TType.LIST, 'database', (TType.STRING, 'UTF8', False), None, ),  # 1
+    (2, TType.STRUCT, 'spaceLimit', [TSpaceQuota, None], None, ),  # 2
+)
+all_structs.append(TSetThrottleQuotaReq)
+TSetThrottleQuotaReq.thrift_spec = (
+    None,  # 0
+    (1, TType.STRING, 'userName', 'UTF8', None, ),  # 1
+    (2, TType.STRUCT, 'throttleQuota', [TThrottleQuota, None], None, ),  # 2
+)
+all_structs.append(TLicense)
+TLicense.thrift_spec = (
+    None,  # 0
+    (1, TType.I64, 'licenseIssueTimestamp', None, None, ),  # 1
+    (2, TType.I64, 'expireTimestamp', None, None, ),  # 2
+    None,  # 3
+    (4, TType.I16, 'dataNodeNumLimit', None, None, ),  # 4
+    (5, TType.I32, 'cpuCoreNumLimit', None, None, ),  # 5
+    (6, TType.I64, 'deviceNumLimit', None, None, ),  # 6
+    (7, TType.I64, 'sensorNumLimit', None, None, ),  # 7
+    (8, TType.I64, 'disconnectionFromActiveNodeTimeLimit', None, None, ),  # 8
+    (9, TType.I16, 'mlNodeNumLimit', None, None, ),  # 9
+)
+all_structs.append(TLoadSample)
+TLoadSample.thrift_spec = (
+    None,  # 0
+    (1, TType.DOUBLE, 'cpuUsageRate', None, None, ),  # 1
+    (2, TType.DOUBLE, 'memoryUsageRate', None, None, ),  # 2
+    (3, TType.DOUBLE, 'diskUsageRate', None, None, ),  # 3
+    (4, TType.DOUBLE, 'freeDiskSpace', None, None, ),  # 4
+)
+all_structs.append(TServiceProvider)
+TServiceProvider.thrift_spec = (
+    None,  # 0
+    (1, TType.STRUCT, 'endPoint', [TEndPoint, None], None, ),  # 1
+    (2, TType.I32, 'serviceType', None, None, ),  # 2
+    (3, TType.I32, 'nodeId', None, None, ),  # 3
+)
+all_structs.append(TSender)
+TSender.thrift_spec = (
+    None,  # 0
+    (1, TType.STRUCT, 'dataNodeLocation', [TDataNodeLocation, None], None, ),  # 1
+    (2, TType.STRUCT, 'configNodeLocation', [TConfigNodeLocation, None], None, ),  # 2
+)
+all_structs.append(TTestConnectionResult)
+TTestConnectionResult.thrift_spec = (
+    None,  # 0
+    (1, TType.STRUCT, 'serviceProvider', [TServiceProvider, None], None, ),  # 1
+    (2, TType.STRUCT, 'sender', [TSender, None], None, ),  # 2
+    (3, TType.BOOL, 'success', None, None, ),  # 3
+    (4, TType.STRING, 'reason', 'UTF8', None, ),  # 4
+)
+all_structs.append(TTestConnectionResp)
+TTestConnectionResp.thrift_spec = (
+    None,  # 0
+    (1, TType.STRUCT, 'status', [TSStatus, None], None, ),  # 1
+    (2, TType.LIST, 'resultList', (TType.STRUCT, [TTestConnectionResult, None], False), None, ),  # 2
+)
+all_structs.append(TNodeLocations)
+TNodeLocations.thrift_spec = (
+    None,  # 0
+    (1, TType.LIST, 'configNodeLocations', (TType.STRUCT, [TConfigNodeLocation, None], False), None, ),  # 1
+    (2, TType.LIST, 'dataNodeLocations', (TType.STRUCT, [TDataNodeLocation, None], False), None, ),  # 2
+)
+all_structs.append(TShowConfigurationTemplateResp)
+TShowConfigurationTemplateResp.thrift_spec = (
+    None,  # 0
+    (1, TType.STRUCT, 'status', [TSStatus, None], None, ),  # 1
+    (2, TType.STRING, 'content', 'UTF8', None, ),  # 2
+)
+all_structs.append(TShowConfigurationResp)
+TShowConfigurationResp.thrift_spec = (
+    None,  # 0
+    (1, TType.STRUCT, 'status', [TSStatus, None], None, ),  # 1
+    (2, TType.STRING, 'content', 'UTF8', None, ),  # 2
+)
+fix_spec(all_structs)
+del all_structs
diff --git a/iotdb-core/ainode/ainode/thrift/confignode/IConfigNodeRPCService-remote b/iotdb-core/ainode/ainode/thrift/confignode/IConfigNodeRPCService-remote
new file mode 100755
index 00000000000..cfd2e719141
--- /dev/null
+++ b/iotdb-core/ainode/ainode/thrift/confignode/IConfigNodeRPCService-remote
@@ -0,0 +1,1195 @@
+#!/usr/bin/env python
+#
+# Autogenerated by Thrift Compiler (0.14.1)
+#
+# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+#
+#  options string: py
+#
+
+import sys
+import pprint
+if sys.version_info[0] > 2:
+    from urllib.parse import urlparse
+else:
+    from urlparse import urlparse
+from thrift.transport import TTransport, TSocket, TSSLSocket, THttpClient
+from thrift.protocol.TBinaryProtocol import TBinaryProtocol
+
+from iotdb.thrift.confignode import IConfigNodeRPCService
+from iotdb.thrift.confignode.ttypes import *
+
+if len(sys.argv) <= 1 or sys.argv[1] == '--help':
+    print('')
+    print('Usage: ' + sys.argv[0] + ' [-h host[:port]] [-u url] [-f[ramed]] [-s[sl]] [-novalidate] [-ca_certs certs] [-keyfile keyfile] [-certfile certfile] function [arg1 [arg2...]]')
+    print('')
+    print('Functions:')
+    print('  TGetClusterIdResp getClusterId()')
+    print('  TDataNodeRegisterResp registerDataNode(TDataNodeRegisterReq req)')
+    print('  TDataNodeRestartResp restartDataNode(TDataNodeRestartReq req)')
+    print('  TAINodeRegisterResp registerAINode(TAINodeRegisterReq req)')
+    print('  TAINodeRestartResp restartAINode(TAINodeRestartReq req)')
+    print('  TSStatus removeAINode(TAINodeRemoveReq req)')
+    print('  TShowAINodesResp showAINodes()')
+    print('  TAINodeConfigurationResp getAINodeConfiguration(i32 aiNodeId)')
+    print('  TSystemConfigurationResp getSystemConfiguration()')
+    print('  TDataNodeRemoveResp removeDataNode(TDataNodeRemoveReq req)')
+    print('  TSStatus reportDataNodeShutdown(TDataNodeLocation dataNodeLocation)')
+    print('  TDataNodeConfigurationResp getDataNodeConfiguration(i32 dataNodeId)')
+    print('  TSStatus setDatabase(TDatabaseSchema databaseSchema)')
+    print('  TSStatus alterDatabase(TDatabaseSchema databaseSchema)')
+    print('  TSStatus deleteDatabase(TDeleteDatabaseReq req)')
+    print('  TSStatus deleteDatabases(TDeleteDatabasesReq req)')
+    print('  TSStatus setSchemaReplicationFactor(TSetSchemaReplicationFactorReq req)')
+    print('  TSStatus setDataReplicationFactor(TSetDataReplicationFactorReq req)')
+    print('  TSStatus setTimePartitionInterval(TSetTimePartitionIntervalReq req)')
+    print('  TCountDatabaseResp countMatchedDatabases(TGetDatabaseReq req)')
+    print('  TDatabaseSchemaResp getMatchedDatabaseSchemas(TGetDatabaseReq req)')
+    print('  TSStatus callSpecialProcedure(TTestOperation operation)')
+    print('  TSchemaPartitionTableResp getSchemaPartitionTable(TSchemaPartitionReq req)')
+    print('  TSchemaPartitionTableResp getSchemaPartitionTableWithSlots( dbSlotMap)')
+    print('  TSchemaPartitionTableResp getOrCreateSchemaPartitionTable(TSchemaPartitionReq req)')
+    print('  TSchemaPartitionTableResp getOrCreateSchemaPartitionTableWithSlots( dbSlotMap)')
+    print('  TSchemaNodeManagementResp getSchemaNodeManagementPartition(TSchemaNodeManagementReq req)')
+    print('  TDataPartitionTableResp getDataPartitionTable(TDataPartitionReq req)')
+    print('  TDataPartitionTableResp getOrCreateDataPartitionTable(TDataPartitionReq req)')
+    print('  TSStatus operatePermission(TAuthorizerReq req)')
+    print('  TSStatus operateRPermission(TAuthorizerRelationalReq req)')
+    print('  TAuthorizerResp queryPermission(TAuthorizerReq req)')
+    print('  TAuthorizerResp queryRPermission(TAuthorizerRelationalReq req)')
+    print('  TPermissionInfoResp login(TLoginReq req)')
+    print('  TPermissionInfoResp checkUserPrivileges(TCheckUserPrivilegesReq req)')
+    print('  TAuthizedPatternTreeResp fetchAuthizedPatternTree(TCheckUserPrivilegesReq req)')
+    print('  TPermissionInfoResp checkRoleOfUser(TAuthorizerReq req)')
+    print('  TConfigNodeRegisterResp registerConfigNode(TConfigNodeRegisterReq req)')
+    print('  TSStatus addConsensusGroup(TAddConsensusGroupReq req)')
+    print('  TSStatus notifyRegisterSuccess()')
+    print('  TSStatus removeConfigNode(TConfigNodeLocation configNodeLocation)')
+    print('  TSStatus deleteConfigNodePeer(TConfigNodeLocation configNodeLocation)')
+    print('  TSStatus reportConfigNodeShutdown(TConfigNodeLocation configNodeLocation)')
+    print('  TSStatus stopAndClearConfigNode(TConfigNodeLocation configNodeLocation)')
+    print('  TConfigNodeHeartbeatResp getConfigNodeHeartBeat(TConfigNodeHeartbeatReq req)')
+    print('  TSStatus createFunction(TCreateFunctionReq req)')
+    print('  TSStatus dropFunction(TDropFunctionReq req)')
+    print('  TGetUDFTableResp getUDFTable(TGetUdfTableReq req)')
+    print('  TGetJarInListResp getUDFJar(TGetJarInListReq req)')
+    print('  TSStatus createTrigger(TCreateTriggerReq req)')
+    print('  TSStatus dropTrigger(TDropTriggerReq req)')
+    print('  TGetLocationForTriggerResp getLocationOfStatefulTrigger(string triggerName)')
+    print('  TGetTriggerTableResp getTriggerTable()')
+    print('  TGetTriggerTableResp getStatefulTriggerTable()')
+    print('  TGetJarInListResp getTriggerJar(TGetJarInListReq req)')
+    print('  TSStatus createPipePlugin(TCreatePipePluginReq req)')
+    print('  TSStatus dropPipePlugin(TDropPipePluginReq req)')
+    print('  TGetPipePluginTableResp getPipePluginTable()')
+    print('  TGetPipePluginTableResp getPipePluginTableExtended(TShowPipePluginReq req)')
+    print('  TGetJarInListResp getPipePluginJar(TGetJarInListReq req)')
+    print('  TShowTTLResp showTTL(TShowTTLReq req)')
+    print('  TSStatus setTTL(TSetTTLReq req)')
+    print('  TSStatus merge()')
+    print('  TSStatus flush(TFlushReq req)')
+    print('  TSStatus clearCache( cacheClearOptions)')
+    print('  TSStatus setConfiguration(TSetConfigurationReq req)')
+    print('  TShowConfigurationResp showConfiguration(i32 nodeId)')
+    print('  TSStatus startRepairData()')
+    print('  TSStatus stopRepairData()')
+    print('  TSStatus submitLoadConfigurationTask()')
+    print('  TSStatus loadConfiguration()')
+    print('  TSStatus setSystemStatus(string status)')
+    print('  TSStatus setDataNodeStatus(TSetDataNodeStatusReq req)')
+    print('  TSStatus migrateRegion(TMigrateRegionReq req)')
+    print('  TSStatus reconstructRegion(TReconstructRegionReq req)')
+    print('  TSStatus extendRegion(TExtendRegionReq req)')
+    print('  TSStatus removeRegion(TRemoveRegionReq req)')
+    print('  TSStatus killQuery(string queryId, i32 dataNodeId)')
+    print('  TGetDataNodeLocationsResp getReadableDataNodeLocations()')
+    print('  TShowClusterResp showCluster()')
+    print('  TShowVariablesResp showVariables()')
+    print('  TShowDataNodesResp showDataNodes()')
+    print('  TShowDataNodes4InformationSchemaResp showDataNodes4InformationSchema()')
+    print('  TShowConfigNodesResp showConfigNodes()')
+    print('  TShowConfigNodes4InformationSchemaResp showConfigNodes4InformationSchema()')
+    print('  TShowDatabaseResp showDatabase(TGetDatabaseReq req)')
+    print('  TTestConnectionResp submitTestConnectionTask(TNodeLocations nodeLocations)')
+    print('  TTestConnectionResp submitTestConnectionTaskToLeader()')
+    print('  TSStatus testConnectionEmptyRPC()')
+    print('  TShowRegionResp showRegion(TShowRegionReq req)')
+    print('  TRegionRouteMapResp getLatestRegionRouteMap()')
+    print('  TSStatus createSchemaTemplate(TCreateSchemaTemplateReq req)')
+    print('  TGetAllTemplatesResp getAllTemplates()')
+    print('  TGetTemplateResp getTemplate(string req)')
+    print('  TSStatus setSchemaTemplate(TSetSchemaTemplateReq req)')
+    print('  TGetPathsSetTemplatesResp getPathsSetTemplate(TGetPathsSetTemplatesReq req)')
+    print('  TSStatus deactivateSchemaTemplate(TDeactivateSchemaTemplateReq req)')
+    print('  TSStatus unsetSchemaTemplate(TUnsetSchemaTemplateReq req)')
+    print('  TSStatus dropSchemaTemplate(string req)')
+    print('  TSStatus alterSchemaTemplate(TAlterSchemaTemplateReq req)')
+    print('  TSStatus deleteTimeSeries(TDeleteTimeSeriesReq req)')
+    print('  TSStatus deleteLogicalView(TDeleteLogicalViewReq req)')
+    print('  TSStatus alterLogicalView(TAlterLogicalViewReq req)')
+    print('  TSStatus createPipe(TCreatePipeReq req)')
+    print('  TSStatus alterPipe(TAlterPipeReq req)')
+    print('  TSStatus startPipe(string pipeName)')
+    print('  TSStatus startPipeExtended(TStartPipeReq req)')
+    print('  TSStatus stopPipe(string pipeName)')
+    print('  TSStatus stopPipeExtended(TStopPipeReq req)')
+    print('  TSStatus dropPipe(string pipeName)')
+    print('  TSStatus dropPipeExtended(TDropPipeReq req)')
+    print('  TShowPipeResp showPipe(TShowPipeReq req)')
+    print('  TGetAllPipeInfoResp getAllPipeInfo()')
+    print('  TPipeConfigTransferResp handleTransferConfigPlan(TPipeConfigTransferReq req)')
+    print('  TSStatus handlePipeConfigClientExit(string clientId)')
+    print('  TSStatus createTopic(TCreateTopicReq req)')
+    print('  TSStatus dropTopic(string topicName)')
+    print('  TSStatus dropTopicExtended(TDropTopicReq req)')
+    print('  TShowTopicResp showTopic(TShowTopicReq req)')
+    print('  TGetAllTopicInfoResp getAllTopicInfo()')
+    print('  TSStatus createConsumer(TCreateConsumerReq req)')
+    print('  TSStatus closeConsumer(TCloseConsumerReq req)')
+    print('  TSStatus createSubscription(TSubscribeReq req)')
+    print('  TSStatus dropSubscription(TUnsubscribeReq req)')
+    print('  TSStatus dropSubscriptionById(TDropSubscriptionReq req)')
+    print('  TShowSubscriptionResp showSubscription(TShowSubscriptionReq req)')
+    print('  TGetAllSubscriptionInfoResp getAllSubscriptionInfo()')
+    print('  TGetRegionIdResp getRegionId(TGetRegionIdReq req)')
+    print('  TGetTimeSlotListResp getTimeSlotList(TGetTimeSlotListReq req)')
+    print('  TCountTimeSlotListResp countTimeSlotList(TCountTimeSlotListReq req)')
+    print('  TGetSeriesSlotListResp getSeriesSlotList(TGetSeriesSlotListReq req)')
+    print('  TSStatus createCQ(TCreateCQReq req)')
+    print('  TSStatus dropCQ(TDropCQReq req)')
+    print('  TShowCQResp showCQ()')
+    print('  TSStatus createModel(TCreateModelReq req)')
+    print('  TSStatus dropModel(TDropModelReq req)')
+    print('  TShowModelResp showModel(TShowModelReq req)')
+    print('  TGetModelInfoResp getModelInfo(TGetModelInfoReq req)')
+    print('  TSStatus updateModelInfo(TUpdateModelInfoReq req)')
+    print('  TSStatus createTraining(TCreateTrainingReq req)')
+    print('  TSStatus setSpaceQuota(TSetSpaceQuotaReq req)')
+    print('  TSpaceQuotaResp showSpaceQuota( databases)')
+    print('  TSpaceQuotaResp getSpaceQuota()')
+    print('  TSStatus setThrottleQuota(TSetThrottleQuotaReq req)')
+    print('  TThrottleQuotaResp showThrottleQuota(TShowThrottleReq req)')
+    print('  TThrottleQuotaResp getThrottleQuota()')
+    print('  TSStatus createTable(string tableInfo)')
+    print('  TSStatus alterOrDropTable(TAlterOrDropTableReq req)')
+    print('  TShowTableResp showTables(string database, bool isDetails)')
+    print('  TShowTable4InformationSchemaResp showTables4InformationSchema()')
+    print('  TDescTableResp describeTable(string database, string tableName, bool isDetails)')
+    print('  TDescTable4InformationSchemaResp descTables4InformationSchema()')
+    print('  TFetchTableResp fetchTables( fetchTableMap)')
+    print('  TDeleteTableDeviceResp deleteDevice(TDeleteTableDeviceReq req)')
+    print('  TSStatus createTableView(TCreateTableViewReq req)')
+    print('')
+    sys.exit(0)
+
+pp = pprint.PrettyPrinter(indent=2)
+host = 'localhost'
+port = 9090
+uri = ''
+framed = False
+ssl = False
+validate = True
+ca_certs = None
+keyfile = None
+certfile = None
+http = False
+argi = 1
+
+if sys.argv[argi] == '-h':
+    parts = sys.argv[argi + 1].split(':')
+    host = parts[0]
+    if len(parts) > 1:
+        port = int(parts[1])
+    argi += 2
+
+if sys.argv[argi] == '-u':
+    url = urlparse(sys.argv[argi + 1])
+    parts = url[1].split(':')
+    host = parts[0]
+    if len(parts) > 1:
+        port = int(parts[1])
+    else:
+        port = 80
+    uri = url[2]
+    if url[4]:
+        uri += '?%s' % url[4]
+    http = True
+    argi += 2
+
+if sys.argv[argi] == '-f' or sys.argv[argi] == '-framed':
+    framed = True
+    argi += 1
+
+if sys.argv[argi] == '-s' or sys.argv[argi] == '-ssl':
+    ssl = True
+    argi += 1
+
+if sys.argv[argi] == '-novalidate':
+    validate = False
+    argi += 1
+
+if sys.argv[argi] == '-ca_certs':
+    ca_certs = sys.argv[argi+1]
+    argi += 2
+
+if sys.argv[argi] == '-keyfile':
+    keyfile = sys.argv[argi+1]
+    argi += 2
+
+if sys.argv[argi] == '-certfile':
+    certfile = sys.argv[argi+1]
+    argi += 2
+
+cmd = sys.argv[argi]
+args = sys.argv[argi + 1:]
+
+if http:
+    transport = THttpClient.THttpClient(host, port, uri)
+else:
+    if ssl:
+        socket = TSSLSocket.TSSLSocket(host, port, validate=validate, ca_certs=ca_certs, keyfile=keyfile, certfile=certfile)
+    else:
+        socket = TSocket.TSocket(host, port)
+    if framed:
+        transport = TTransport.TFramedTransport(socket)
+    else:
+        transport = TTransport.TBufferedTransport(socket)
+protocol = TBinaryProtocol(transport)
+client = IConfigNodeRPCService.Client(protocol)
+transport.open()
+
+if cmd == 'getClusterId':
+    if len(args) != 0:
+        print('getClusterId requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.getClusterId())
+
+elif cmd == 'registerDataNode':
+    if len(args) != 1:
+        print('registerDataNode requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.registerDataNode(eval(args[0]),))
+
+elif cmd == 'restartDataNode':
+    if len(args) != 1:
+        print('restartDataNode requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.restartDataNode(eval(args[0]),))
+
+elif cmd == 'registerAINode':
+    if len(args) != 1:
+        print('registerAINode requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.registerAINode(eval(args[0]),))
+
+elif cmd == 'restartAINode':
+    if len(args) != 1:
+        print('restartAINode requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.restartAINode(eval(args[0]),))
+
+elif cmd == 'removeAINode':
+    if len(args) != 1:
+        print('removeAINode requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.removeAINode(eval(args[0]),))
+
+elif cmd == 'showAINodes':
+    if len(args) != 0:
+        print('showAINodes requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.showAINodes())
+
+elif cmd == 'getAINodeConfiguration':
+    if len(args) != 1:
+        print('getAINodeConfiguration requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getAINodeConfiguration(eval(args[0]),))
+
+elif cmd == 'getSystemConfiguration':
+    if len(args) != 0:
+        print('getSystemConfiguration requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.getSystemConfiguration())
+
+elif cmd == 'removeDataNode':
+    if len(args) != 1:
+        print('removeDataNode requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.removeDataNode(eval(args[0]),))
+
+elif cmd == 'reportDataNodeShutdown':
+    if len(args) != 1:
+        print('reportDataNodeShutdown requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.reportDataNodeShutdown(eval(args[0]),))
+
+elif cmd == 'getDataNodeConfiguration':
+    if len(args) != 1:
+        print('getDataNodeConfiguration requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getDataNodeConfiguration(eval(args[0]),))
+
+elif cmd == 'setDatabase':
+    if len(args) != 1:
+        print('setDatabase requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.setDatabase(eval(args[0]),))
+
+elif cmd == 'alterDatabase':
+    if len(args) != 1:
+        print('alterDatabase requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.alterDatabase(eval(args[0]),))
+
+elif cmd == 'deleteDatabase':
+    if len(args) != 1:
+        print('deleteDatabase requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.deleteDatabase(eval(args[0]),))
+
+elif cmd == 'deleteDatabases':
+    if len(args) != 1:
+        print('deleteDatabases requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.deleteDatabases(eval(args[0]),))
+
+elif cmd == 'setSchemaReplicationFactor':
+    if len(args) != 1:
+        print('setSchemaReplicationFactor requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.setSchemaReplicationFactor(eval(args[0]),))
+
+elif cmd == 'setDataReplicationFactor':
+    if len(args) != 1:
+        print('setDataReplicationFactor requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.setDataReplicationFactor(eval(args[0]),))
+
+elif cmd == 'setTimePartitionInterval':
+    if len(args) != 1:
+        print('setTimePartitionInterval requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.setTimePartitionInterval(eval(args[0]),))
+
+elif cmd == 'countMatchedDatabases':
+    if len(args) != 1:
+        print('countMatchedDatabases requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.countMatchedDatabases(eval(args[0]),))
+
+elif cmd == 'getMatchedDatabaseSchemas':
+    if len(args) != 1:
+        print('getMatchedDatabaseSchemas requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getMatchedDatabaseSchemas(eval(args[0]),))
+
+elif cmd == 'callSpecialProcedure':
+    if len(args) != 1:
+        print('callSpecialProcedure requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.callSpecialProcedure(eval(args[0]),))
+
+elif cmd == 'getSchemaPartitionTable':
+    if len(args) != 1:
+        print('getSchemaPartitionTable requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getSchemaPartitionTable(eval(args[0]),))
+
+elif cmd == 'getSchemaPartitionTableWithSlots':
+    if len(args) != 1:
+        print('getSchemaPartitionTableWithSlots requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getSchemaPartitionTableWithSlots(eval(args[0]),))
+
+elif cmd == 'getOrCreateSchemaPartitionTable':
+    if len(args) != 1:
+        print('getOrCreateSchemaPartitionTable requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getOrCreateSchemaPartitionTable(eval(args[0]),))
+
+elif cmd == 'getOrCreateSchemaPartitionTableWithSlots':
+    if len(args) != 1:
+        print('getOrCreateSchemaPartitionTableWithSlots requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getOrCreateSchemaPartitionTableWithSlots(eval(args[0]),))
+
+elif cmd == 'getSchemaNodeManagementPartition':
+    if len(args) != 1:
+        print('getSchemaNodeManagementPartition requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getSchemaNodeManagementPartition(eval(args[0]),))
+
+elif cmd == 'getDataPartitionTable':
+    if len(args) != 1:
+        print('getDataPartitionTable requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getDataPartitionTable(eval(args[0]),))
+
+elif cmd == 'getOrCreateDataPartitionTable':
+    if len(args) != 1:
+        print('getOrCreateDataPartitionTable requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getOrCreateDataPartitionTable(eval(args[0]),))
+
+elif cmd == 'operatePermission':
+    if len(args) != 1:
+        print('operatePermission requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.operatePermission(eval(args[0]),))
+
+elif cmd == 'operateRPermission':
+    if len(args) != 1:
+        print('operateRPermission requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.operateRPermission(eval(args[0]),))
+
+elif cmd == 'queryPermission':
+    if len(args) != 1:
+        print('queryPermission requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.queryPermission(eval(args[0]),))
+
+elif cmd == 'queryRPermission':
+    if len(args) != 1:
+        print('queryRPermission requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.queryRPermission(eval(args[0]),))
+
+elif cmd == 'login':
+    if len(args) != 1:
+        print('login requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.login(eval(args[0]),))
+
+elif cmd == 'checkUserPrivileges':
+    if len(args) != 1:
+        print('checkUserPrivileges requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.checkUserPrivileges(eval(args[0]),))
+
+elif cmd == 'fetchAuthizedPatternTree':
+    if len(args) != 1:
+        print('fetchAuthizedPatternTree requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.fetchAuthizedPatternTree(eval(args[0]),))
+
+elif cmd == 'checkRoleOfUser':
+    if len(args) != 1:
+        print('checkRoleOfUser requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.checkRoleOfUser(eval(args[0]),))
+
+elif cmd == 'registerConfigNode':
+    if len(args) != 1:
+        print('registerConfigNode requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.registerConfigNode(eval(args[0]),))
+
+elif cmd == 'addConsensusGroup':
+    if len(args) != 1:
+        print('addConsensusGroup requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.addConsensusGroup(eval(args[0]),))
+
+elif cmd == 'notifyRegisterSuccess':
+    if len(args) != 0:
+        print('notifyRegisterSuccess requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.notifyRegisterSuccess())
+
+elif cmd == 'removeConfigNode':
+    if len(args) != 1:
+        print('removeConfigNode requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.removeConfigNode(eval(args[0]),))
+
+elif cmd == 'deleteConfigNodePeer':
+    if len(args) != 1:
+        print('deleteConfigNodePeer requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.deleteConfigNodePeer(eval(args[0]),))
+
+elif cmd == 'reportConfigNodeShutdown':
+    if len(args) != 1:
+        print('reportConfigNodeShutdown requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.reportConfigNodeShutdown(eval(args[0]),))
+
+elif cmd == 'stopAndClearConfigNode':
+    if len(args) != 1:
+        print('stopAndClearConfigNode requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.stopAndClearConfigNode(eval(args[0]),))
+
+elif cmd == 'getConfigNodeHeartBeat':
+    if len(args) != 1:
+        print('getConfigNodeHeartBeat requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getConfigNodeHeartBeat(eval(args[0]),))
+
+elif cmd == 'createFunction':
+    if len(args) != 1:
+        print('createFunction requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.createFunction(eval(args[0]),))
+
+elif cmd == 'dropFunction':
+    if len(args) != 1:
+        print('dropFunction requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.dropFunction(eval(args[0]),))
+
+elif cmd == 'getUDFTable':
+    if len(args) != 1:
+        print('getUDFTable requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getUDFTable(eval(args[0]),))
+
+elif cmd == 'getUDFJar':
+    if len(args) != 1:
+        print('getUDFJar requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getUDFJar(eval(args[0]),))
+
+elif cmd == 'createTrigger':
+    if len(args) != 1:
+        print('createTrigger requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.createTrigger(eval(args[0]),))
+
+elif cmd == 'dropTrigger':
+    if len(args) != 1:
+        print('dropTrigger requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.dropTrigger(eval(args[0]),))
+
+elif cmd == 'getLocationOfStatefulTrigger':
+    if len(args) != 1:
+        print('getLocationOfStatefulTrigger requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getLocationOfStatefulTrigger(args[0],))
+
+elif cmd == 'getTriggerTable':
+    if len(args) != 0:
+        print('getTriggerTable requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.getTriggerTable())
+
+elif cmd == 'getStatefulTriggerTable':
+    if len(args) != 0:
+        print('getStatefulTriggerTable requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.getStatefulTriggerTable())
+
+elif cmd == 'getTriggerJar':
+    if len(args) != 1:
+        print('getTriggerJar requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getTriggerJar(eval(args[0]),))
+
+elif cmd == 'createPipePlugin':
+    if len(args) != 1:
+        print('createPipePlugin requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.createPipePlugin(eval(args[0]),))
+
+elif cmd == 'dropPipePlugin':
+    if len(args) != 1:
+        print('dropPipePlugin requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.dropPipePlugin(eval(args[0]),))
+
+elif cmd == 'getPipePluginTable':
+    if len(args) != 0:
+        print('getPipePluginTable requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.getPipePluginTable())
+
+elif cmd == 'getPipePluginTableExtended':
+    if len(args) != 1:
+        print('getPipePluginTableExtended requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getPipePluginTableExtended(eval(args[0]),))
+
+elif cmd == 'getPipePluginJar':
+    if len(args) != 1:
+        print('getPipePluginJar requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getPipePluginJar(eval(args[0]),))
+
+elif cmd == 'showTTL':
+    if len(args) != 1:
+        print('showTTL requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.showTTL(eval(args[0]),))
+
+elif cmd == 'setTTL':
+    if len(args) != 1:
+        print('setTTL requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.setTTL(eval(args[0]),))
+
+elif cmd == 'merge':
+    if len(args) != 0:
+        print('merge requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.merge())
+
+elif cmd == 'flush':
+    if len(args) != 1:
+        print('flush requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.flush(eval(args[0]),))
+
+elif cmd == 'clearCache':
+    if len(args) != 1:
+        print('clearCache requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.clearCache(eval(args[0]),))
+
+elif cmd == 'setConfiguration':
+    if len(args) != 1:
+        print('setConfiguration requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.setConfiguration(eval(args[0]),))
+
+elif cmd == 'showConfiguration':
+    if len(args) != 1:
+        print('showConfiguration requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.showConfiguration(eval(args[0]),))
+
+elif cmd == 'startRepairData':
+    if len(args) != 0:
+        print('startRepairData requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.startRepairData())
+
+elif cmd == 'stopRepairData':
+    if len(args) != 0:
+        print('stopRepairData requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.stopRepairData())
+
+elif cmd == 'submitLoadConfigurationTask':
+    if len(args) != 0:
+        print('submitLoadConfigurationTask requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.submitLoadConfigurationTask())
+
+elif cmd == 'loadConfiguration':
+    if len(args) != 0:
+        print('loadConfiguration requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.loadConfiguration())
+
+elif cmd == 'setSystemStatus':
+    if len(args) != 1:
+        print('setSystemStatus requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.setSystemStatus(args[0],))
+
+elif cmd == 'setDataNodeStatus':
+    if len(args) != 1:
+        print('setDataNodeStatus requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.setDataNodeStatus(eval(args[0]),))
+
+elif cmd == 'migrateRegion':
+    if len(args) != 1:
+        print('migrateRegion requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.migrateRegion(eval(args[0]),))
+
+elif cmd == 'reconstructRegion':
+    if len(args) != 1:
+        print('reconstructRegion requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.reconstructRegion(eval(args[0]),))
+
+elif cmd == 'extendRegion':
+    if len(args) != 1:
+        print('extendRegion requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.extendRegion(eval(args[0]),))
+
+elif cmd == 'removeRegion':
+    if len(args) != 1:
+        print('removeRegion requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.removeRegion(eval(args[0]),))
+
+elif cmd == 'killQuery':
+    if len(args) != 2:
+        print('killQuery requires 2 args')
+        sys.exit(1)
+    pp.pprint(client.killQuery(args[0], eval(args[1]),))
+
+elif cmd == 'getReadableDataNodeLocations':
+    if len(args) != 0:
+        print('getReadableDataNodeLocations requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.getReadableDataNodeLocations())
+
+elif cmd == 'showCluster':
+    if len(args) != 0:
+        print('showCluster requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.showCluster())
+
+elif cmd == 'showVariables':
+    if len(args) != 0:
+        print('showVariables requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.showVariables())
+
+elif cmd == 'showDataNodes':
+    if len(args) != 0:
+        print('showDataNodes requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.showDataNodes())
+
+elif cmd == 'showDataNodes4InformationSchema':
+    if len(args) != 0:
+        print('showDataNodes4InformationSchema requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.showDataNodes4InformationSchema())
+
+elif cmd == 'showConfigNodes':
+    if len(args) != 0:
+        print('showConfigNodes requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.showConfigNodes())
+
+elif cmd == 'showConfigNodes4InformationSchema':
+    if len(args) != 0:
+        print('showConfigNodes4InformationSchema requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.showConfigNodes4InformationSchema())
+
+elif cmd == 'showDatabase':
+    if len(args) != 1:
+        print('showDatabase requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.showDatabase(eval(args[0]),))
+
+elif cmd == 'submitTestConnectionTask':
+    if len(args) != 1:
+        print('submitTestConnectionTask requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.submitTestConnectionTask(eval(args[0]),))
+
+elif cmd == 'submitTestConnectionTaskToLeader':
+    if len(args) != 0:
+        print('submitTestConnectionTaskToLeader requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.submitTestConnectionTaskToLeader())
+
+elif cmd == 'testConnectionEmptyRPC':
+    if len(args) != 0:
+        print('testConnectionEmptyRPC requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.testConnectionEmptyRPC())
+
+elif cmd == 'showRegion':
+    if len(args) != 1:
+        print('showRegion requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.showRegion(eval(args[0]),))
+
+elif cmd == 'getLatestRegionRouteMap':
+    if len(args) != 0:
+        print('getLatestRegionRouteMap requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.getLatestRegionRouteMap())
+
+elif cmd == 'createSchemaTemplate':
+    if len(args) != 1:
+        print('createSchemaTemplate requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.createSchemaTemplate(eval(args[0]),))
+
+elif cmd == 'getAllTemplates':
+    if len(args) != 0:
+        print('getAllTemplates requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.getAllTemplates())
+
+elif cmd == 'getTemplate':
+    if len(args) != 1:
+        print('getTemplate requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getTemplate(args[0],))
+
+elif cmd == 'setSchemaTemplate':
+    if len(args) != 1:
+        print('setSchemaTemplate requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.setSchemaTemplate(eval(args[0]),))
+
+elif cmd == 'getPathsSetTemplate':
+    if len(args) != 1:
+        print('getPathsSetTemplate requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getPathsSetTemplate(eval(args[0]),))
+
+elif cmd == 'deactivateSchemaTemplate':
+    if len(args) != 1:
+        print('deactivateSchemaTemplate requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.deactivateSchemaTemplate(eval(args[0]),))
+
+elif cmd == 'unsetSchemaTemplate':
+    if len(args) != 1:
+        print('unsetSchemaTemplate requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.unsetSchemaTemplate(eval(args[0]),))
+
+elif cmd == 'dropSchemaTemplate':
+    if len(args) != 1:
+        print('dropSchemaTemplate requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.dropSchemaTemplate(args[0],))
+
+elif cmd == 'alterSchemaTemplate':
+    if len(args) != 1:
+        print('alterSchemaTemplate requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.alterSchemaTemplate(eval(args[0]),))
+
+elif cmd == 'deleteTimeSeries':
+    if len(args) != 1:
+        print('deleteTimeSeries requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.deleteTimeSeries(eval(args[0]),))
+
+elif cmd == 'deleteLogicalView':
+    if len(args) != 1:
+        print('deleteLogicalView requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.deleteLogicalView(eval(args[0]),))
+
+elif cmd == 'alterLogicalView':
+    if len(args) != 1:
+        print('alterLogicalView requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.alterLogicalView(eval(args[0]),))
+
+elif cmd == 'createPipe':
+    if len(args) != 1:
+        print('createPipe requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.createPipe(eval(args[0]),))
+
+elif cmd == 'alterPipe':
+    if len(args) != 1:
+        print('alterPipe requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.alterPipe(eval(args[0]),))
+
+elif cmd == 'startPipe':
+    if len(args) != 1:
+        print('startPipe requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.startPipe(args[0],))
+
+elif cmd == 'startPipeExtended':
+    if len(args) != 1:
+        print('startPipeExtended requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.startPipeExtended(eval(args[0]),))
+
+elif cmd == 'stopPipe':
+    if len(args) != 1:
+        print('stopPipe requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.stopPipe(args[0],))
+
+elif cmd == 'stopPipeExtended':
+    if len(args) != 1:
+        print('stopPipeExtended requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.stopPipeExtended(eval(args[0]),))
+
+elif cmd == 'dropPipe':
+    if len(args) != 1:
+        print('dropPipe requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.dropPipe(args[0],))
+
+elif cmd == 'dropPipeExtended':
+    if len(args) != 1:
+        print('dropPipeExtended requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.dropPipeExtended(eval(args[0]),))
+
+elif cmd == 'showPipe':
+    if len(args) != 1:
+        print('showPipe requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.showPipe(eval(args[0]),))
+
+elif cmd == 'getAllPipeInfo':
+    if len(args) != 0:
+        print('getAllPipeInfo requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.getAllPipeInfo())
+
+elif cmd == 'handleTransferConfigPlan':
+    if len(args) != 1:
+        print('handleTransferConfigPlan requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.handleTransferConfigPlan(eval(args[0]),))
+
+elif cmd == 'handlePipeConfigClientExit':
+    if len(args) != 1:
+        print('handlePipeConfigClientExit requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.handlePipeConfigClientExit(args[0],))
+
+elif cmd == 'createTopic':
+    if len(args) != 1:
+        print('createTopic requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.createTopic(eval(args[0]),))
+
+elif cmd == 'dropTopic':
+    if len(args) != 1:
+        print('dropTopic requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.dropTopic(args[0],))
+
+elif cmd == 'dropTopicExtended':
+    if len(args) != 1:
+        print('dropTopicExtended requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.dropTopicExtended(eval(args[0]),))
+
+elif cmd == 'showTopic':
+    if len(args) != 1:
+        print('showTopic requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.showTopic(eval(args[0]),))
+
+elif cmd == 'getAllTopicInfo':
+    if len(args) != 0:
+        print('getAllTopicInfo requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.getAllTopicInfo())
+
+elif cmd == 'createConsumer':
+    if len(args) != 1:
+        print('createConsumer requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.createConsumer(eval(args[0]),))
+
+elif cmd == 'closeConsumer':
+    if len(args) != 1:
+        print('closeConsumer requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.closeConsumer(eval(args[0]),))
+
+elif cmd == 'createSubscription':
+    if len(args) != 1:
+        print('createSubscription requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.createSubscription(eval(args[0]),))
+
+elif cmd == 'dropSubscription':
+    if len(args) != 1:
+        print('dropSubscription requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.dropSubscription(eval(args[0]),))
+
+elif cmd == 'dropSubscriptionById':
+    if len(args) != 1:
+        print('dropSubscriptionById requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.dropSubscriptionById(eval(args[0]),))
+
+elif cmd == 'showSubscription':
+    if len(args) != 1:
+        print('showSubscription requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.showSubscription(eval(args[0]),))
+
+elif cmd == 'getAllSubscriptionInfo':
+    if len(args) != 0:
+        print('getAllSubscriptionInfo requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.getAllSubscriptionInfo())
+
+elif cmd == 'getRegionId':
+    if len(args) != 1:
+        print('getRegionId requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getRegionId(eval(args[0]),))
+
+elif cmd == 'getTimeSlotList':
+    if len(args) != 1:
+        print('getTimeSlotList requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getTimeSlotList(eval(args[0]),))
+
+elif cmd == 'countTimeSlotList':
+    if len(args) != 1:
+        print('countTimeSlotList requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.countTimeSlotList(eval(args[0]),))
+
+elif cmd == 'getSeriesSlotList':
+    if len(args) != 1:
+        print('getSeriesSlotList requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getSeriesSlotList(eval(args[0]),))
+
+elif cmd == 'createCQ':
+    if len(args) != 1:
+        print('createCQ requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.createCQ(eval(args[0]),))
+
+elif cmd == 'dropCQ':
+    if len(args) != 1:
+        print('dropCQ requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.dropCQ(eval(args[0]),))
+
+elif cmd == 'showCQ':
+    if len(args) != 0:
+        print('showCQ requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.showCQ())
+
+elif cmd == 'createModel':
+    if len(args) != 1:
+        print('createModel requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.createModel(eval(args[0]),))
+
+elif cmd == 'dropModel':
+    if len(args) != 1:
+        print('dropModel requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.dropModel(eval(args[0]),))
+
+elif cmd == 'showModel':
+    if len(args) != 1:
+        print('showModel requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.showModel(eval(args[0]),))
+
+elif cmd == 'getModelInfo':
+    if len(args) != 1:
+        print('getModelInfo requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.getModelInfo(eval(args[0]),))
+
+elif cmd == 'updateModelInfo':
+    if len(args) != 1:
+        print('updateModelInfo requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.updateModelInfo(eval(args[0]),))
+
+elif cmd == 'createTraining':
+    if len(args) != 1:
+        print('createTraining requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.createTraining(eval(args[0]),))
+
+elif cmd == 'setSpaceQuota':
+    if len(args) != 1:
+        print('setSpaceQuota requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.setSpaceQuota(eval(args[0]),))
+
+elif cmd == 'showSpaceQuota':
+    if len(args) != 1:
+        print('showSpaceQuota requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.showSpaceQuota(eval(args[0]),))
+
+elif cmd == 'getSpaceQuota':
+    if len(args) != 0:
+        print('getSpaceQuota requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.getSpaceQuota())
+
+elif cmd == 'setThrottleQuota':
+    if len(args) != 1:
+        print('setThrottleQuota requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.setThrottleQuota(eval(args[0]),))
+
+elif cmd == 'showThrottleQuota':
+    if len(args) != 1:
+        print('showThrottleQuota requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.showThrottleQuota(eval(args[0]),))
+
+elif cmd == 'getThrottleQuota':
+    if len(args) != 0:
+        print('getThrottleQuota requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.getThrottleQuota())
+
+elif cmd == 'createTable':
+    if len(args) != 1:
+        print('createTable requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.createTable(args[0],))
+
+elif cmd == 'alterOrDropTable':
+    if len(args) != 1:
+        print('alterOrDropTable requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.alterOrDropTable(eval(args[0]),))
+
+elif cmd == 'showTables':
+    if len(args) != 2:
+        print('showTables requires 2 args')
+        sys.exit(1)
+    pp.pprint(client.showTables(args[0], eval(args[1]),))
+
+elif cmd == 'showTables4InformationSchema':
+    if len(args) != 0:
+        print('showTables4InformationSchema requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.showTables4InformationSchema())
+
+elif cmd == 'describeTable':
+    if len(args) != 3:
+        print('describeTable requires 3 args')
+        sys.exit(1)
+    pp.pprint(client.describeTable(args[0], args[1], eval(args[2]),))
+
+elif cmd == 'descTables4InformationSchema':
+    if len(args) != 0:
+        print('descTables4InformationSchema requires 0 args')
+        sys.exit(1)
+    pp.pprint(client.descTables4InformationSchema())
+
+elif cmd == 'fetchTables':
+    if len(args) != 1:
+        print('fetchTables requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.fetchTables(eval(args[0]),))
+
+elif cmd == 'deleteDevice':
+    if len(args) != 1:
+        print('deleteDevice requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.deleteDevice(eval(args[0]),))
+
+elif cmd == 'createTableView':
+    if len(args) != 1:
+        print('createTableView requires 1 args')
+        sys.exit(1)
+    pp.pprint(client.createTableView(eval(args[0]),))
+
+else:
+    print('Unrecognized method %s' % cmd)
+    sys.exit(1)
+
+transport.close()
diff --git a/iotdb-core/ainode/ainode/thrift/confignode/IConfigNodeRPCService.py b/iotdb-core/ainode/ainode/thrift/confignode/IConfigNodeRPCService.py
new file mode 100644
index 00000000000..674085a5568
--- /dev/null
+++ b/iotdb-core/ainode/ainode/thrift/confignode/IConfigNodeRPCService.py
@@ -0,0 +1,28998 @@
+#
+# Autogenerated by Thrift Compiler (0.14.1)
+#
+# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+#
+#  options string: py
+#
+
+from thrift.Thrift import TType, TMessageType, TFrozenDict, TException, TApplicationException
+from thrift.protocol.TProtocol import TProtocolException
+from thrift.TRecursive import fix_spec
+
+import sys
+import logging
+from .ttypes import *
+from thrift.Thrift import TProcessor
+from thrift.transport import TTransport
+all_structs = []
+
+
+class Iface(object):
+    def getClusterId(self):
+        """
+        Get cluster ID
+
+        """
+        pass
+
+    def registerDataNode(self, req):
+        """
+        Register a new DataNode into the cluster
+
+        @return SUCCESS_STATUS if the new DataNode registered successfully
+                REJECT_NODE_START if the configuration chek of the DataNode to be registered fails,
+                                  and a detailed error message will be returned.
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def restartDataNode(self, req):
+        """
+        Restart an existed DataNode
+
+        @return SUCCESS_STATUS if DataNode restart request is accepted
+                REJECT_NODE_START if the configuration chek of the DataNode to be restarted fails,
+                                  and a detailed error message will be returned.
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def registerAINode(self, req):
+        """
+        node management for ainode, it's similar to datanode above
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def restartAINode(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def removeAINode(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def showAINodes(self):
+        pass
+
+    def getAINodeConfiguration(self, aiNodeId):
+        """
+        Parameters:
+         - aiNodeId
+
+        """
+        pass
+
+    def getSystemConfiguration(self):
+        """
+        Get system configurations. i.e. configurations that is not associated with the DataNodeId
+
+        """
+        pass
+
+    def removeDataNode(self, req):
+        """
+        Generate a set of DataNodeRemoveProcedure to remove some specific DataNodes from the cluster
+
+        @return SUCCESS_STATUS if the DataNodeRemoveProcedure submitted successfully
+                LACK_REPLICATION if the number of DataNodes will be too small to maintain
+                                 RegionReplicas after remove these DataNodes
+                DATANODE_NOT_EXIST if one of the DataNodes in the TDataNodeRemoveReq doesn't exist in the cluster
+                NODE_DELETE_FAILED_ERROR if failed to submit the DataNodeRemoveProcedure
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def reportDataNodeShutdown(self, dataNodeLocation):
+        """
+        Report that the specified DataNode will be shutdown.
+        The ConfigNode-leader will mark it as Unknown.
+
+        @return SUCCESS_STATUS if reporting successfully
+
+        Parameters:
+         - dataNodeLocation
+
+        """
+        pass
+
+    def getDataNodeConfiguration(self, dataNodeId):
+        """
+        Get one or more DataNodes' configuration
+
+        @param dataNodeId, the specific DataNode's index
+        @return The specific DataNode's configuration if the DataNode exists,
+                or all DataNodes' configuration if dataNodeId is -1
+
+        Parameters:
+         - dataNodeId
+
+        """
+        pass
+
+    def setDatabase(self, databaseSchema):
+        """
+        Set a new Database, all fields in TDatabaseSchema can be customized
+        while the undefined fields will automatically use default values
+
+        @return SUCCESS_STATUS if the new Database set successfully
+                ILLEGAL_PATH if the new Database name is illegal
+                DATABASE_CONFIG_ERROR if some of the DatabaseSchema is illeagal
+                DATABASE_ALREADY_EXISTS if the Database already exist
+
+        Parameters:
+         - databaseSchema
+
+        """
+        pass
+
+    def alterDatabase(self, databaseSchema):
+        """
+        Alter a Database's schema, including
+        TTL, ReplicationFactor, timePartitionInterval and RegionGroupNum
+
+        @return SUCCESS_STATUS if the specified DatabaseSchema is altered successfully
+                ILLEGAL_PATH if the new Database name is illegal
+                DATABASE_CONFIG_ERROR if some of the DatabaseSchema is illeagal
+                DATABASE_NOT_EXIST if the specified Database doesn't exist
+
+        Parameters:
+         - databaseSchema
+
+        """
+        pass
+
+    def deleteDatabase(self, req):
+        """
+        Generate a DeleteDatabaseProcedure to delete a specified Database
+
+        @return SUCCESS_STATUS if the DeleteDatabaseProcedure submitted successfully
+                TIMESERIES_NOT_EXIST if the specific Database doesn't exist
+                EXECUTE_STATEMENT_ERROR if failed to submit the DeleteDatabaseProcedure
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def deleteDatabases(self, req):
+        """
+        Generate a set of DeleteDatabaseProcedure to delete some specific Databases
+
+        @return SUCCESS_STATUS if the DeleteDatabaseProcedure submitted successfully
+                TIMESERIES_NOT_EXIST if the specific Database doesn't exist
+                EXECUTE_STATEMENT_ERROR if failed to submit the DeleteDatabaseProcedure
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def setSchemaReplicationFactor(self, req):
+        """
+        Update the specific Database's SchemaReplicationFactor
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def setDataReplicationFactor(self, req):
+        """
+        Update the specific Database's DataReplicationFactor
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def setTimePartitionInterval(self, req):
+        """
+        Update the specific Database's PartitionInterval
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def countMatchedDatabases(self, req):
+        """
+        Count the matched Databases
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def getMatchedDatabaseSchemas(self, req):
+        """
+        Get the matched Databases' TDatabaseSchema
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def callSpecialProcedure(self, operation):
+        """
+        Test only
+
+        Parameters:
+         - operation
+
+        """
+        pass
+
+    def getSchemaPartitionTable(self, req):
+        """
+        Get SchemaPartitionTable by specific PathPatternTree,
+        the returned SchemaPartitionTable will not contain the unallocated SeriesPartitionSlots
+        See https://apache-iotdb.feishu.cn/docs/doccnqe3PLPEKwsCX1xadXQ2JOg for detailed matching rules
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def getSchemaPartitionTableWithSlots(self, dbSlotMap):
+        """
+        Get SchemaPartitionTable by specific database name and series slots.
+
+
+        Parameters:
+         - dbSlotMap
+
+        """
+        pass
+
+    def getOrCreateSchemaPartitionTable(self, req):
+        """
+        Get or create SchemaPartitionTable by specific PathPatternTree,
+        the returned SchemaPartitionTable always contains all the SeriesPartitionSlots
+        since the unallocated SeriesPartitionSlots will be allocated by the way
+
+        @return SUCCESS_STATUS if the SchemaPartitionTable got or created successfully
+                NOT_ENOUGH_DATA_NODE if the number of cluster DataNodes is not enough for creating new SchemaRegions
+                DATABASE_NOT_EXIST if some Databases don't exist
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def getOrCreateSchemaPartitionTableWithSlots(self, dbSlotMap):
+        """
+        Get or create SchemaPartitionTable by specific database name and series slots.
+
+
+        Parameters:
+         - dbSlotMap
+
+        """
+        pass
+
+    def getSchemaNodeManagementPartition(self, req):
+        """
+        Get the partition info used for schema node query and get the node info in CluterSchemaInfo.
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def getDataPartitionTable(self, req):
+        """
+        Get DataPartitionTable by specific PartitionSlotsMap,
+        the returned DataPartitionTable will not contain the unallocated SeriesPartitionSlots and TimePartitionSlots
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def getOrCreateDataPartitionTable(self, req):
+        """
+        Get or create DataPartitionTable by specific PartitionSlotsMap,
+        the returned SchemaPartitionTable always contains all the SeriesPartitionSlots and TimePartitionSlots
+        since the unallocated SeriesPartitionSlots and TimePartitionSlots will be allocated by the way
+
+        @return SUCCESS_STATUS if the DataPartitionTable got or created successfully
+                NOT_ENOUGH_DATA_NODE if the number of cluster DataNodes is not enough for creating new DataRegions
+                DATABASE_NOT_EXIST if some Databases don't exist
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def operatePermission(self, req):
+        """
+        Execute permission write operations such as create user, create role, and grant permission.
+        There is no need to update the cache information of the DataNode for creating users and roles
+
+        @return SUCCESS_STATUS if the permission write operation is executed successfully
+                INVALIDATE_PERMISSION_CACHE_ERROR if the update cache of the permission information in the datanode fails
+                EXECUTE_PERMISSION_EXCEPTION_ERROR if the permission write operation fails, like the user doesn't exist
+                INTERNAL_SERVER_ERROR if the permission type does not exist
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def operateRPermission(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def queryPermission(self, req):
+        """
+        Execute permission read operations such as list user
+
+        @return SUCCESS_STATUS if the permission read operation is executed successfully
+                ROLE_NOT_EXIST_ERROR if the role does not exist
+                USER_NOT_EXIST_ERROR if the user does not exist
+                INTERNAL_SERVER_ERROR if the permission type does not exist
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def queryRPermission(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def login(self, req):
+        """
+        Authenticate user login
+
+        @return SUCCESS_STATUS if the user exists and the correct username and password are entered
+                WRONG_LOGIN_PASSWORD_ERROR if the user enters the wrong username or password
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def checkUserPrivileges(self, req):
+        """
+        Permission checking for user operations
+
+        @return SUCCESS_STATUS if the user has the permission
+                EXECUTE_PERMISSION_EXCEPTION_ERROR if the seriesPath or the privilege is illegal.
+                NO_PERMISSION_ERROR if the user does not have this permission
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def fetchAuthizedPatternTree(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def checkRoleOfUser(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def registerConfigNode(self, req):
+        """
+        The Non-Seed-ConfigNode submit a registration request to the ConfigNode-leader when first startup
+
+        @return SUCCESS_STATUS if the AddConfigNodeProcedure submitted successfully.
+                REJECT_NODE_START if the configuration chek of the ConfigNode to be registered fails,
+                                  and a detailed error message will be returned.
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def addConsensusGroup(self, req):
+        """
+        The ConfigNode-leader will guide the Non-Seed-ConfigNode to join the ConsensusGroup when first startup
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def notifyRegisterSuccess(self):
+        """
+        The ConfigNode-leader will notify the Non-Seed-ConfigNode that the registration success
+
+        """
+        pass
+
+    def removeConfigNode(self, configNodeLocation):
+        """
+        Remove the specific ConfigNode from the cluster
+
+        @return SUCCESS_STATUS if the RemoveConfigNodeProcedure submitted successfully
+                REMOVE_CONFIGNODE_FAILED if the number of ConfigNode is less than 1
+                                         or the specific ConfigNode doesn't exist
+                                         or the specific ConfigNode is leader
+
+        Parameters:
+         - configNodeLocation
+
+        """
+        pass
+
+    def deleteConfigNodePeer(self, configNodeLocation):
+        """
+        Let the specific ConfigNode delete the peer
+
+        @return SUCCESS_STATUS if delete peer  successfully
+                REMOVE_CONFIGNODE_FAILED if the specific ConfigNode doesn't exist in the current cluster
+                                         or Ratis internal failure
+
+        Parameters:
+         - configNodeLocation
+
+        """
+        pass
+
+    def reportConfigNodeShutdown(self, configNodeLocation):
+        """
+        Report that the specified ConfigNode will be shutdown.
+        The ConfigNode-leader will mark it as Unknown.
+
+        @return SUCCESS_STATUS if reporting successfully
+
+        Parameters:
+         - configNodeLocation
+
+        """
+        pass
+
+    def stopAndClearConfigNode(self, configNodeLocation):
+        """
+        Stop the specific ConfigNode and clear data
+
+        Parameters:
+         - configNodeLocation
+
+        """
+        pass
+
+    def getConfigNodeHeartBeat(self, req):
+        """
+        The ConfigNode-leader will ping other ConfigNodes periodically
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def createFunction(self, req):
+        """
+        Create a function on all online ConfigNodes and DataNodes
+
+        @return SUCCESS_STATUS if the function was created successfully
+                EXECUTE_STATEMENT_ERROR if operations on any node failed
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def dropFunction(self, req):
+        """
+        Remove a function on all online ConfigNodes and DataNodes
+
+        @return SUCCESS_STATUS if the function was removed successfully
+                EXECUTE_STATEMENT_ERROR if operations on any node failed
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def getUDFTable(self, req):
+        """
+        Return the UDF table
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def getUDFJar(self, req):
+        """
+        Return the UDF jar list of the jar name list
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def createTrigger(self, req):
+        """
+        Create a statless trigger on all online DataNodes or Create a stateful trigger on a specific DataNode
+        and sync Information of it to all ConfigNodes
+
+        @return SUCCESS_STATUS if the trigger was created successfully
+                EXECUTE_STATEMENT_ERROR if operations on any node failed
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def dropTrigger(self, req):
+        """
+        Remove a trigger on all online ConfigNodes and DataNodes
+
+        @return SUCCESS_STATUS if the function was removed successfully
+                EXECUTE_STATEMENT_ERROR if operations on any node failed
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def getLocationOfStatefulTrigger(self, triggerName):
+        """
+        Get TDataNodeLocation of a stateful trigger
+
+        Parameters:
+         - triggerName
+
+        """
+        pass
+
+    def getTriggerTable(self):
+        """
+        Return the trigger table
+
+        """
+        pass
+
+    def getStatefulTriggerTable(self):
+        """
+        Return the Stateful trigger table
+
+        """
+        pass
+
+    def getTriggerJar(self, req):
+        """
+        Return the trigger jar list of the trigger name list
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def createPipePlugin(self, req):
+        """
+        Create a pipe plugin on the specified DataNode
+
+        @return SUCCESS_STATUS if the pipe plugin was created successfully
+                EXECUTE_STATEMENT_ERROR if operations on any node failed
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def dropPipePlugin(self, req):
+        """
+        Remove a pipe plugin on the DataNodes
+
+        @return SUCCESS_STATUS if the pipe plugin was removed successfully
+                EXECUTE_STATEMENT_ERROR if operations on any node failed
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def getPipePluginTable(self):
+        """
+        Return the pipe plugin table
+
+        """
+        pass
+
+    def getPipePluginTableExtended(self, req):
+        """
+        Return the pipe plugin table
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def getPipePluginJar(self, req):
+        """
+        Return the pipe plugin jar list of the plugin name list
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def showTTL(self, req):
+        """
+        Show ttl
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def setTTL(self, req):
+        """
+        Update the specific device's TTL
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def merge(self):
+        """
+        Execute Level Compaction and unsequence Compaction task on all DataNodes
+
+        """
+        pass
+
+    def flush(self, req):
+        """
+        Persist all the data points in the memory table of the database to the disk, and seal the data file on all DataNodes
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def clearCache(self, cacheClearOptions):
+        """
+        Clear the specific caches of all DataNodes
+
+        Parameters:
+         - cacheClearOptions
+
+        """
+        pass
+
+    def setConfiguration(self, req):
+        """
+        Set configuration on specified node
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def showConfiguration(self, nodeId):
+        """
+        Show content of configuration file
+
+        Parameters:
+         - nodeId
+
+        """
+        pass
+
+    def startRepairData(self):
+        """
+        Check and repair unsorted tsfile by compaction
+
+        """
+        pass
+
+    def stopRepairData(self):
+        """
+        Stop repair data task
+
+        """
+        pass
+
+    def submitLoadConfigurationTask(self):
+        """
+        Submit configuration task to every datanodes
+
+        """
+        pass
+
+    def loadConfiguration(self):
+        """
+        Load configuration on this confignode
+
+        """
+        pass
+
+    def setSystemStatus(self, status):
+        """
+        Set system status on DataNodes
+
+        Parameters:
+         - status
+
+        """
+        pass
+
+    def setDataNodeStatus(self, req):
+        """
+        TestOnly. Set the target DataNode to the specified status
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def migrateRegion(self, req):
+        """
+        Migrate a region replica from one dataNode to another
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def reconstructRegion(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def extendRegion(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def removeRegion(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def killQuery(self, queryId, dataNodeId):
+        """
+        Kill query
+
+        Parameters:
+         - queryId
+         - dataNodeId
+
+        """
+        pass
+
+    def getReadableDataNodeLocations(self):
+        """
+        Get all DataNodeLocations of Readable DataNodes
+
+        """
+        pass
+
+    def showCluster(self):
+        """
+        Show cluster ConfigNodes' and DataNodes' information
+
+        """
+        pass
+
+    def showVariables(self):
+        """
+        Show variables who should be consist in the same cluster
+
+        """
+        pass
+
+    def showDataNodes(self):
+        """
+        Show cluster DataNodes' information
+
+        """
+        pass
+
+    def showDataNodes4InformationSchema(self):
+        """
+        Show cluster DataNodes' information for information schema
+
+        """
+        pass
+
+    def showConfigNodes(self):
+        """
+        Show cluster ConfigNodes' information
+
+        """
+        pass
+
+    def showConfigNodes4InformationSchema(self):
+        """
+        Show cluster ConfigNodes' information for information schema
+
+        """
+        pass
+
+    def showDatabase(self, req):
+        """
+        Show cluster Databases' information
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def submitTestConnectionTask(self, nodeLocations):
+        """
+        Test connection of every node in the cluster
+
+        Parameters:
+         - nodeLocations
+
+        """
+        pass
+
+    def submitTestConnectionTaskToLeader(self):
+        pass
+
+    def testConnectionEmptyRPC(self):
+        """
+        Empty rpc, only for connection test
+
+        """
+        pass
+
+    def showRegion(self, req):
+        """
+        Show the matched cluster Regions' information
+        See https://apache-iotdb.feishu.cn/docx/doxcnOzmIlaE2MX5tKjmYWuMSRg for detailed matching rules
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def getLatestRegionRouteMap(self):
+        """
+        The ConfigNode-leader will generate and return a latest RegionRouteMap
+
+        """
+        pass
+
+    def createSchemaTemplate(self, req):
+        """
+        Create device template
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def getAllTemplates(self):
+        """
+        Get all device template info and template set info for DataNode registeration
+
+        """
+        pass
+
+    def getTemplate(self, req):
+        """
+        Get one device template info
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def setSchemaTemplate(self, req):
+        """
+        Set given device template to given path
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def getPathsSetTemplate(self, req):
+        """
+        Get paths setting given device template
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def deactivateSchemaTemplate(self, req):
+        """
+        Deactivate device template from paths matched by given pattern tree in cluster
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def unsetSchemaTemplate(self, req):
+        """
+        Unset device template from given path
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def dropSchemaTemplate(self, req):
+        """
+        Drop device template
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def alterSchemaTemplate(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def deleteTimeSeries(self, req):
+        """
+        Generate a set of DeleteTimeSeriesProcedure to delete some specific TimeSeries
+
+        @return SUCCESS_STATUS if the DeleteTimeSeriesProcedure submitted and executed successfully
+                TIMESERIES_NOT_EXIST if the specific TimeSeries doesn't exist
+                EXECUTE_STATEMENT_ERROR if failed to submit or execute the DeleteTimeSeriesProcedure
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def deleteLogicalView(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def alterLogicalView(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def createPipe(self, req):
+        """
+        Create Pipe
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def alterPipe(self, req):
+        """
+        Alter Pipe
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def startPipe(self, pipeName):
+        """
+        Start Pipe
+
+        Parameters:
+         - pipeName
+
+        """
+        pass
+
+    def startPipeExtended(self, req):
+        """
+        Start Pipe
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def stopPipe(self, pipeName):
+        """
+        Stop Pipe
+
+        Parameters:
+         - pipeName
+
+        """
+        pass
+
+    def stopPipeExtended(self, req):
+        """
+        Stop Pipe
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def dropPipe(self, pipeName):
+        """
+        Drop Pipe
+
+        Parameters:
+         - pipeName
+
+        """
+        pass
+
+    def dropPipeExtended(self, req):
+        """
+        Drop Pipe
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def showPipe(self, req):
+        """
+        Show Pipe by name, if name is empty, show all Pipe
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def getAllPipeInfo(self):
+        """
+        Get all pipe information. It is used for DataNode registration and restart
+
+        """
+        pass
+
+    def handleTransferConfigPlan(self, req):
+        """
+        Execute schema language from external pipes
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def handlePipeConfigClientExit(self, clientId):
+        """
+        Handle client exit for ConfigNode receiver
+
+        Parameters:
+         - clientId
+
+        """
+        pass
+
+    def createTopic(self, req):
+        """
+        Create Topic
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def dropTopic(self, topicName):
+        """
+        Drop Topic
+
+        Parameters:
+         - topicName
+
+        """
+        pass
+
+    def dropTopicExtended(self, req):
+        """
+        Drop Topic
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def showTopic(self, req):
+        """
+        Show Topic by name, if name is empty, show all Topic
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def getAllTopicInfo(self):
+        """
+        Get all topic information. It is used for DataNode registration and restart
+
+        """
+        pass
+
+    def createConsumer(self, req):
+        """
+        Create consumer
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def closeConsumer(self, req):
+        """
+        Close consumer
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def createSubscription(self, req):
+        """
+        Create subscription
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def dropSubscription(self, req):
+        """
+        Close subscription by consumer
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def dropSubscriptionById(self, req):
+        """
+        Close subscription by session
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def showSubscription(self, req):
+        """
+        Show Subscription on topic name, if name is empty, show all subscriptions
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def getAllSubscriptionInfo(self):
+        """
+        Get all subscription information. It is used for DataNode registration and restart
+
+        """
+        pass
+
+    def getRegionId(self, req):
+        """
+        Get a particular DataPartition's corresponding Regions
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def getTimeSlotList(self, req):
+        """
+        Get a specific SeriesSlot's TimeSlots by start time and end time
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def countTimeSlotList(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def getSeriesSlotList(self, req):
+        """
+        Get the given database's assigned SeriesSlots
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def createCQ(self, req):
+        """
+        Create a CQ
+
+        @return SUCCESS_STATUS if the cq was created successfully
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def dropCQ(self, req):
+        """
+        Drop a CQ
+
+        @return SUCCESS_STATUS if the CQ was removed successfully
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def showCQ(self):
+        """
+        Return the cq table of config leader
+
+        """
+        pass
+
+    def createModel(self, req):
+        """
+        Create a model
+
+        @return SUCCESS_STATUS if the model was created successfully
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def dropModel(self, req):
+        """
+        Drop a model
+
+        @return SUCCESS_STATUS if the model was removed successfully
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def showModel(self, req):
+        """
+        Return the model table
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def getModelInfo(self, req):
+        """
+        Return the model info by model_id
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def updateModelInfo(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def createTraining(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def setSpaceQuota(self, req):
+        """
+        Set Space Quota
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def showSpaceQuota(self, databases):
+        """
+        Show space quota
+
+        Parameters:
+         - databases
+
+        """
+        pass
+
+    def getSpaceQuota(self):
+        """
+        Get space quota information
+
+        """
+        pass
+
+    def setThrottleQuota(self, req):
+        """
+        Set throttle quota
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def showThrottleQuota(self, req):
+        """
+        Show throttle quota
+
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def getThrottleQuota(self):
+        """
+        Get throttle quota information
+
+        """
+        pass
+
+    def createTable(self, tableInfo):
+        """
+        Parameters:
+         - tableInfo
+
+        """
+        pass
+
+    def alterOrDropTable(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def showTables(self, database, isDetails):
+        """
+        Parameters:
+         - database
+         - isDetails
+
+        """
+        pass
+
+    def showTables4InformationSchema(self):
+        pass
+
+    def describeTable(self, database, tableName, isDetails):
+        """
+        Parameters:
+         - database
+         - tableName
+         - isDetails
+
+        """
+        pass
+
+    def descTables4InformationSchema(self):
+        pass
+
+    def fetchTables(self, fetchTableMap):
+        """
+        Parameters:
+         - fetchTableMap
+
+        """
+        pass
+
+    def deleteDevice(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+    def createTableView(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        pass
+
+
+class Client(Iface):
+    def __init__(self, iprot, oprot=None):
+        self._iprot = self._oprot = iprot
+        if oprot is not None:
+            self._oprot = oprot
+        self._seqid = 0
+
+    def getClusterId(self):
+        """
+        Get cluster ID
+
+        """
+        self.send_getClusterId()
+        return self.recv_getClusterId()
+
+    def send_getClusterId(self):
+        self._oprot.writeMessageBegin('getClusterId', TMessageType.CALL, self._seqid)
+        args = getClusterId_args()
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_getClusterId(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = getClusterId_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "getClusterId failed: unknown result")
+
+    def registerDataNode(self, req):
+        """
+        Register a new DataNode into the cluster
+
+        @return SUCCESS_STATUS if the new DataNode registered successfully
+                REJECT_NODE_START if the configuration chek of the DataNode to be registered fails,
+                                  and a detailed error message will be returned.
+
+        Parameters:
+         - req
+
+        """
+        self.send_registerDataNode(req)
+        return self.recv_registerDataNode()
+
+    def send_registerDataNode(self, req):
+        self._oprot.writeMessageBegin('registerDataNode', TMessageType.CALL, self._seqid)
+        args = registerDataNode_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_registerDataNode(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = registerDataNode_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "registerDataNode failed: unknown result")
+
+    def restartDataNode(self, req):
+        """
+        Restart an existed DataNode
+
+        @return SUCCESS_STATUS if DataNode restart request is accepted
+                REJECT_NODE_START if the configuration chek of the DataNode to be restarted fails,
+                                  and a detailed error message will be returned.
+
+        Parameters:
+         - req
+
+        """
+        self.send_restartDataNode(req)
+        return self.recv_restartDataNode()
+
+    def send_restartDataNode(self, req):
+        self._oprot.writeMessageBegin('restartDataNode', TMessageType.CALL, self._seqid)
+        args = restartDataNode_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_restartDataNode(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = restartDataNode_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "restartDataNode failed: unknown result")
+
+    def registerAINode(self, req):
+        """
+        node management for ainode, it's similar to datanode above
+
+        Parameters:
+         - req
+
+        """
+        self.send_registerAINode(req)
+        return self.recv_registerAINode()
+
+    def send_registerAINode(self, req):
+        self._oprot.writeMessageBegin('registerAINode', TMessageType.CALL, self._seqid)
+        args = registerAINode_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_registerAINode(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = registerAINode_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "registerAINode failed: unknown result")
+
+    def restartAINode(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        self.send_restartAINode(req)
+        return self.recv_restartAINode()
+
+    def send_restartAINode(self, req):
+        self._oprot.writeMessageBegin('restartAINode', TMessageType.CALL, self._seqid)
+        args = restartAINode_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_restartAINode(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = restartAINode_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "restartAINode failed: unknown result")
+
+    def removeAINode(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        self.send_removeAINode(req)
+        return self.recv_removeAINode()
+
+    def send_removeAINode(self, req):
+        self._oprot.writeMessageBegin('removeAINode', TMessageType.CALL, self._seqid)
+        args = removeAINode_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_removeAINode(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = removeAINode_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "removeAINode failed: unknown result")
+
+    def showAINodes(self):
+        self.send_showAINodes()
+        return self.recv_showAINodes()
+
+    def send_showAINodes(self):
+        self._oprot.writeMessageBegin('showAINodes', TMessageType.CALL, self._seqid)
+        args = showAINodes_args()
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_showAINodes(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = showAINodes_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "showAINodes failed: unknown result")
+
+    def getAINodeConfiguration(self, aiNodeId):
+        """
+        Parameters:
+         - aiNodeId
+
+        """
+        self.send_getAINodeConfiguration(aiNodeId)
+        return self.recv_getAINodeConfiguration()
+
+    def send_getAINodeConfiguration(self, aiNodeId):
+        self._oprot.writeMessageBegin('getAINodeConfiguration', TMessageType.CALL, self._seqid)
+        args = getAINodeConfiguration_args()
+        args.aiNodeId = aiNodeId
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_getAINodeConfiguration(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = getAINodeConfiguration_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "getAINodeConfiguration failed: unknown result")
+
+    def getSystemConfiguration(self):
+        """
+        Get system configurations. i.e. configurations that is not associated with the DataNodeId
+
+        """
+        self.send_getSystemConfiguration()
+        return self.recv_getSystemConfiguration()
+
+    def send_getSystemConfiguration(self):
+        self._oprot.writeMessageBegin('getSystemConfiguration', TMessageType.CALL, self._seqid)
+        args = getSystemConfiguration_args()
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_getSystemConfiguration(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = getSystemConfiguration_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "getSystemConfiguration failed: unknown result")
+
+    def removeDataNode(self, req):
+        """
+        Generate a set of DataNodeRemoveProcedure to remove some specific DataNodes from the cluster
+
+        @return SUCCESS_STATUS if the DataNodeRemoveProcedure submitted successfully
+                LACK_REPLICATION if the number of DataNodes will be too small to maintain
+                                 RegionReplicas after remove these DataNodes
+                DATANODE_NOT_EXIST if one of the DataNodes in the TDataNodeRemoveReq doesn't exist in the cluster
+                NODE_DELETE_FAILED_ERROR if failed to submit the DataNodeRemoveProcedure
+
+        Parameters:
+         - req
+
+        """
+        self.send_removeDataNode(req)
+        return self.recv_removeDataNode()
+
+    def send_removeDataNode(self, req):
+        self._oprot.writeMessageBegin('removeDataNode', TMessageType.CALL, self._seqid)
+        args = removeDataNode_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_removeDataNode(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = removeDataNode_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "removeDataNode failed: unknown result")
+
+    def reportDataNodeShutdown(self, dataNodeLocation):
+        """
+        Report that the specified DataNode will be shutdown.
+        The ConfigNode-leader will mark it as Unknown.
+
+        @return SUCCESS_STATUS if reporting successfully
+
+        Parameters:
+         - dataNodeLocation
+
+        """
+        self.send_reportDataNodeShutdown(dataNodeLocation)
+        return self.recv_reportDataNodeShutdown()
+
+    def send_reportDataNodeShutdown(self, dataNodeLocation):
+        self._oprot.writeMessageBegin('reportDataNodeShutdown', TMessageType.CALL, self._seqid)
+        args = reportDataNodeShutdown_args()
+        args.dataNodeLocation = dataNodeLocation
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_reportDataNodeShutdown(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = reportDataNodeShutdown_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "reportDataNodeShutdown failed: unknown result")
+
+    def getDataNodeConfiguration(self, dataNodeId):
+        """
+        Get one or more DataNodes' configuration
+
+        @param dataNodeId, the specific DataNode's index
+        @return The specific DataNode's configuration if the DataNode exists,
+                or all DataNodes' configuration if dataNodeId is -1
+
+        Parameters:
+         - dataNodeId
+
+        """
+        self.send_getDataNodeConfiguration(dataNodeId)
+        return self.recv_getDataNodeConfiguration()
+
+    def send_getDataNodeConfiguration(self, dataNodeId):
+        self._oprot.writeMessageBegin('getDataNodeConfiguration', TMessageType.CALL, self._seqid)
+        args = getDataNodeConfiguration_args()
+        args.dataNodeId = dataNodeId
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_getDataNodeConfiguration(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = getDataNodeConfiguration_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "getDataNodeConfiguration failed: unknown result")
+
+    def setDatabase(self, databaseSchema):
+        """
+        Set a new Database, all fields in TDatabaseSchema can be customized
+        while the undefined fields will automatically use default values
+
+        @return SUCCESS_STATUS if the new Database set successfully
+                ILLEGAL_PATH if the new Database name is illegal
+                DATABASE_CONFIG_ERROR if some of the DatabaseSchema is illeagal
+                DATABASE_ALREADY_EXISTS if the Database already exist
+
+        Parameters:
+         - databaseSchema
+
+        """
+        self.send_setDatabase(databaseSchema)
+        return self.recv_setDatabase()
+
+    def send_setDatabase(self, databaseSchema):
+        self._oprot.writeMessageBegin('setDatabase', TMessageType.CALL, self._seqid)
+        args = setDatabase_args()
+        args.databaseSchema = databaseSchema
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_setDatabase(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = setDatabase_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "setDatabase failed: unknown result")
+
+    def alterDatabase(self, databaseSchema):
+        """
+        Alter a Database's schema, including
+        TTL, ReplicationFactor, timePartitionInterval and RegionGroupNum
+
+        @return SUCCESS_STATUS if the specified DatabaseSchema is altered successfully
+                ILLEGAL_PATH if the new Database name is illegal
+                DATABASE_CONFIG_ERROR if some of the DatabaseSchema is illeagal
+                DATABASE_NOT_EXIST if the specified Database doesn't exist
+
+        Parameters:
+         - databaseSchema
+
+        """
+        self.send_alterDatabase(databaseSchema)
+        return self.recv_alterDatabase()
+
+    def send_alterDatabase(self, databaseSchema):
+        self._oprot.writeMessageBegin('alterDatabase', TMessageType.CALL, self._seqid)
+        args = alterDatabase_args()
+        args.databaseSchema = databaseSchema
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_alterDatabase(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = alterDatabase_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "alterDatabase failed: unknown result")
+
+    def deleteDatabase(self, req):
+        """
+        Generate a DeleteDatabaseProcedure to delete a specified Database
+
+        @return SUCCESS_STATUS if the DeleteDatabaseProcedure submitted successfully
+                TIMESERIES_NOT_EXIST if the specific Database doesn't exist
+                EXECUTE_STATEMENT_ERROR if failed to submit the DeleteDatabaseProcedure
+
+        Parameters:
+         - req
+
+        """
+        self.send_deleteDatabase(req)
+        return self.recv_deleteDatabase()
+
+    def send_deleteDatabase(self, req):
+        self._oprot.writeMessageBegin('deleteDatabase', TMessageType.CALL, self._seqid)
+        args = deleteDatabase_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_deleteDatabase(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = deleteDatabase_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "deleteDatabase failed: unknown result")
+
+    def deleteDatabases(self, req):
+        """
+        Generate a set of DeleteDatabaseProcedure to delete some specific Databases
+
+        @return SUCCESS_STATUS if the DeleteDatabaseProcedure submitted successfully
+                TIMESERIES_NOT_EXIST if the specific Database doesn't exist
+                EXECUTE_STATEMENT_ERROR if failed to submit the DeleteDatabaseProcedure
+
+        Parameters:
+         - req
+
+        """
+        self.send_deleteDatabases(req)
+        return self.recv_deleteDatabases()
+
+    def send_deleteDatabases(self, req):
+        self._oprot.writeMessageBegin('deleteDatabases', TMessageType.CALL, self._seqid)
+        args = deleteDatabases_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_deleteDatabases(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = deleteDatabases_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "deleteDatabases failed: unknown result")
+
+    def setSchemaReplicationFactor(self, req):
+        """
+        Update the specific Database's SchemaReplicationFactor
+
+        Parameters:
+         - req
+
+        """
+        self.send_setSchemaReplicationFactor(req)
+        return self.recv_setSchemaReplicationFactor()
+
+    def send_setSchemaReplicationFactor(self, req):
+        self._oprot.writeMessageBegin('setSchemaReplicationFactor', TMessageType.CALL, self._seqid)
+        args = setSchemaReplicationFactor_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_setSchemaReplicationFactor(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = setSchemaReplicationFactor_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "setSchemaReplicationFactor failed: unknown result")
+
+    def setDataReplicationFactor(self, req):
+        """
+        Update the specific Database's DataReplicationFactor
+
+        Parameters:
+         - req
+
+        """
+        self.send_setDataReplicationFactor(req)
+        return self.recv_setDataReplicationFactor()
+
+    def send_setDataReplicationFactor(self, req):
+        self._oprot.writeMessageBegin('setDataReplicationFactor', TMessageType.CALL, self._seqid)
+        args = setDataReplicationFactor_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_setDataReplicationFactor(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = setDataReplicationFactor_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "setDataReplicationFactor failed: unknown result")
+
+    def setTimePartitionInterval(self, req):
+        """
+        Update the specific Database's PartitionInterval
+
+        Parameters:
+         - req
+
+        """
+        self.send_setTimePartitionInterval(req)
+        return self.recv_setTimePartitionInterval()
+
+    def send_setTimePartitionInterval(self, req):
+        self._oprot.writeMessageBegin('setTimePartitionInterval', TMessageType.CALL, self._seqid)
+        args = setTimePartitionInterval_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_setTimePartitionInterval(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = setTimePartitionInterval_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "setTimePartitionInterval failed: unknown result")
+
+    def countMatchedDatabases(self, req):
+        """
+        Count the matched Databases
+
+        Parameters:
+         - req
+
+        """
+        self.send_countMatchedDatabases(req)
+        return self.recv_countMatchedDatabases()
+
+    def send_countMatchedDatabases(self, req):
+        self._oprot.writeMessageBegin('countMatchedDatabases', TMessageType.CALL, self._seqid)
+        args = countMatchedDatabases_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_countMatchedDatabases(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = countMatchedDatabases_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "countMatchedDatabases failed: unknown result")
+
+    def getMatchedDatabaseSchemas(self, req):
+        """
+        Get the matched Databases' TDatabaseSchema
+
+        Parameters:
+         - req
+
+        """
+        self.send_getMatchedDatabaseSchemas(req)
+        return self.recv_getMatchedDatabaseSchemas()
+
+    def send_getMatchedDatabaseSchemas(self, req):
+        self._oprot.writeMessageBegin('getMatchedDatabaseSchemas', TMessageType.CALL, self._seqid)
+        args = getMatchedDatabaseSchemas_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_getMatchedDatabaseSchemas(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = getMatchedDatabaseSchemas_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "getMatchedDatabaseSchemas failed: unknown result")
+
+    def callSpecialProcedure(self, operation):
+        """
+        Test only
+
+        Parameters:
+         - operation
+
+        """
+        self.send_callSpecialProcedure(operation)
+        return self.recv_callSpecialProcedure()
+
+    def send_callSpecialProcedure(self, operation):
+        self._oprot.writeMessageBegin('callSpecialProcedure', TMessageType.CALL, self._seqid)
+        args = callSpecialProcedure_args()
+        args.operation = operation
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_callSpecialProcedure(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = callSpecialProcedure_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "callSpecialProcedure failed: unknown result")
+
+    def getSchemaPartitionTable(self, req):
+        """
+        Get SchemaPartitionTable by specific PathPatternTree,
+        the returned SchemaPartitionTable will not contain the unallocated SeriesPartitionSlots
+        See https://apache-iotdb.feishu.cn/docs/doccnqe3PLPEKwsCX1xadXQ2JOg for detailed matching rules
+
+        Parameters:
+         - req
+
+        """
+        self.send_getSchemaPartitionTable(req)
+        return self.recv_getSchemaPartitionTable()
+
+    def send_getSchemaPartitionTable(self, req):
+        self._oprot.writeMessageBegin('getSchemaPartitionTable', TMessageType.CALL, self._seqid)
+        args = getSchemaPartitionTable_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_getSchemaPartitionTable(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = getSchemaPartitionTable_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "getSchemaPartitionTable failed: unknown result")
+
+    def getSchemaPartitionTableWithSlots(self, dbSlotMap):
+        """
+        Get SchemaPartitionTable by specific database name and series slots.
+
+
+        Parameters:
+         - dbSlotMap
+
+        """
+        self.send_getSchemaPartitionTableWithSlots(dbSlotMap)
+        return self.recv_getSchemaPartitionTableWithSlots()
+
+    def send_getSchemaPartitionTableWithSlots(self, dbSlotMap):
+        self._oprot.writeMessageBegin('getSchemaPartitionTableWithSlots', TMessageType.CALL, self._seqid)
+        args = getSchemaPartitionTableWithSlots_args()
+        args.dbSlotMap = dbSlotMap
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_getSchemaPartitionTableWithSlots(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = getSchemaPartitionTableWithSlots_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "getSchemaPartitionTableWithSlots failed: unknown result")
+
+    def getOrCreateSchemaPartitionTable(self, req):
+        """
+        Get or create SchemaPartitionTable by specific PathPatternTree,
+        the returned SchemaPartitionTable always contains all the SeriesPartitionSlots
+        since the unallocated SeriesPartitionSlots will be allocated by the way
+
+        @return SUCCESS_STATUS if the SchemaPartitionTable got or created successfully
+                NOT_ENOUGH_DATA_NODE if the number of cluster DataNodes is not enough for creating new SchemaRegions
+                DATABASE_NOT_EXIST if some Databases don't exist
+
+        Parameters:
+         - req
+
+        """
+        self.send_getOrCreateSchemaPartitionTable(req)
+        return self.recv_getOrCreateSchemaPartitionTable()
+
+    def send_getOrCreateSchemaPartitionTable(self, req):
+        self._oprot.writeMessageBegin('getOrCreateSchemaPartitionTable', TMessageType.CALL, self._seqid)
+        args = getOrCreateSchemaPartitionTable_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_getOrCreateSchemaPartitionTable(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = getOrCreateSchemaPartitionTable_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "getOrCreateSchemaPartitionTable failed: unknown result")
+
+    def getOrCreateSchemaPartitionTableWithSlots(self, dbSlotMap):
+        """
+        Get or create SchemaPartitionTable by specific database name and series slots.
+
+
+        Parameters:
+         - dbSlotMap
+
+        """
+        self.send_getOrCreateSchemaPartitionTableWithSlots(dbSlotMap)
+        return self.recv_getOrCreateSchemaPartitionTableWithSlots()
+
+    def send_getOrCreateSchemaPartitionTableWithSlots(self, dbSlotMap):
+        self._oprot.writeMessageBegin('getOrCreateSchemaPartitionTableWithSlots', TMessageType.CALL, self._seqid)
+        args = getOrCreateSchemaPartitionTableWithSlots_args()
+        args.dbSlotMap = dbSlotMap
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_getOrCreateSchemaPartitionTableWithSlots(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = getOrCreateSchemaPartitionTableWithSlots_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "getOrCreateSchemaPartitionTableWithSlots failed: unknown result")
+
+    def getSchemaNodeManagementPartition(self, req):
+        """
+        Get the partition info used for schema node query and get the node info in CluterSchemaInfo.
+
+        Parameters:
+         - req
+
+        """
+        self.send_getSchemaNodeManagementPartition(req)
+        return self.recv_getSchemaNodeManagementPartition()
+
+    def send_getSchemaNodeManagementPartition(self, req):
+        self._oprot.writeMessageBegin('getSchemaNodeManagementPartition', TMessageType.CALL, self._seqid)
+        args = getSchemaNodeManagementPartition_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_getSchemaNodeManagementPartition(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = getSchemaNodeManagementPartition_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "getSchemaNodeManagementPartition failed: unknown result")
+
+    def getDataPartitionTable(self, req):
+        """
+        Get DataPartitionTable by specific PartitionSlotsMap,
+        the returned DataPartitionTable will not contain the unallocated SeriesPartitionSlots and TimePartitionSlots
+
+        Parameters:
+         - req
+
+        """
+        self.send_getDataPartitionTable(req)
+        return self.recv_getDataPartitionTable()
+
+    def send_getDataPartitionTable(self, req):
+        self._oprot.writeMessageBegin('getDataPartitionTable', TMessageType.CALL, self._seqid)
+        args = getDataPartitionTable_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_getDataPartitionTable(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = getDataPartitionTable_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "getDataPartitionTable failed: unknown result")
+
+    def getOrCreateDataPartitionTable(self, req):
+        """
+        Get or create DataPartitionTable by specific PartitionSlotsMap,
+        the returned SchemaPartitionTable always contains all the SeriesPartitionSlots and TimePartitionSlots
+        since the unallocated SeriesPartitionSlots and TimePartitionSlots will be allocated by the way
+
+        @return SUCCESS_STATUS if the DataPartitionTable got or created successfully
+                NOT_ENOUGH_DATA_NODE if the number of cluster DataNodes is not enough for creating new DataRegions
+                DATABASE_NOT_EXIST if some Databases don't exist
+
+        Parameters:
+         - req
+
+        """
+        self.send_getOrCreateDataPartitionTable(req)
+        return self.recv_getOrCreateDataPartitionTable()
+
+    def send_getOrCreateDataPartitionTable(self, req):
+        self._oprot.writeMessageBegin('getOrCreateDataPartitionTable', TMessageType.CALL, self._seqid)
+        args = getOrCreateDataPartitionTable_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_getOrCreateDataPartitionTable(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = getOrCreateDataPartitionTable_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "getOrCreateDataPartitionTable failed: unknown result")
+
+    def operatePermission(self, req):
+        """
+        Execute permission write operations such as create user, create role, and grant permission.
+        There is no need to update the cache information of the DataNode for creating users and roles
+
+        @return SUCCESS_STATUS if the permission write operation is executed successfully
+                INVALIDATE_PERMISSION_CACHE_ERROR if the update cache of the permission information in the datanode fails
+                EXECUTE_PERMISSION_EXCEPTION_ERROR if the permission write operation fails, like the user doesn't exist
+                INTERNAL_SERVER_ERROR if the permission type does not exist
+
+        Parameters:
+         - req
+
+        """
+        self.send_operatePermission(req)
+        return self.recv_operatePermission()
+
+    def send_operatePermission(self, req):
+        self._oprot.writeMessageBegin('operatePermission', TMessageType.CALL, self._seqid)
+        args = operatePermission_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_operatePermission(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = operatePermission_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "operatePermission failed: unknown result")
+
+    def operateRPermission(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        self.send_operateRPermission(req)
+        return self.recv_operateRPermission()
+
+    def send_operateRPermission(self, req):
+        self._oprot.writeMessageBegin('operateRPermission', TMessageType.CALL, self._seqid)
+        args = operateRPermission_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_operateRPermission(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = operateRPermission_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "operateRPermission failed: unknown result")
+
+    def queryPermission(self, req):
+        """
+        Execute permission read operations such as list user
+
+        @return SUCCESS_STATUS if the permission read operation is executed successfully
+                ROLE_NOT_EXIST_ERROR if the role does not exist
+                USER_NOT_EXIST_ERROR if the user does not exist
+                INTERNAL_SERVER_ERROR if the permission type does not exist
+
+        Parameters:
+         - req
+
+        """
+        self.send_queryPermission(req)
+        return self.recv_queryPermission()
+
+    def send_queryPermission(self, req):
+        self._oprot.writeMessageBegin('queryPermission', TMessageType.CALL, self._seqid)
+        args = queryPermission_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_queryPermission(self):
+        iprot = self._iprot
+        (fname, mtype, rseqid) = iprot.readMessageBegin()
+        if mtype == TMessageType.EXCEPTION:
+            x = TApplicationException()
+            x.read(iprot)
+            iprot.readMessageEnd()
+            raise x
+        result = queryPermission_result()
+        result.read(iprot)
+        iprot.readMessageEnd()
+        if result.success is not None:
+            return result.success
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "queryPermission failed: unknown result")
+
+    def queryRPermission(self, req):
+        """
+        Parameters:
+         - req
+
+        """
+        self.send_queryRPermission(req)
+        return self.recv_queryRPermission()
+
+    def send_queryRPermission(self, req):
+        self._oprot.writeMessageBegin('queryRPermission', TMessageType.CALL, self._seqid)
+        args = queryRPermission_args()
+        args.req = req
+        args.write(self._oprot)
+        self._oprot.writeMessageEnd()
+        self._oprot.trans.flush()
+
+    def recv_queryRPermission(self):
... 75816 lines suppressed ...