blob: 5e2b4f3989fc42d53fa43ed52f379e7a0f4aa15b [file] [log] [blame]
import{_ as e,O as i,P as t,ah as n,aW as a}from"./framework-62ad666a.js";const s={},r=a(`<h1 id="edge-cloud-collaboration" tabindex="-1"><a class="header-anchor" href="#edge-cloud-collaboration" aria-hidden="true">#</a> Edge-Cloud Collaboration</h1><h2 id="_1-introduction" tabindex="-1"><a class="header-anchor" href="#_1-introduction" aria-hidden="true">#</a> 1.Introduction</h2><p>The Sync Tool is an IoTDB suite tool that continuously uploads the timeseries data from the edge (sender) to the cloud(receiver).</p><p>On the sender side of the sync-tool, the sync module is embedded in the IoTDB engine. The receiver side of the sync-tool supports IoTDB (standalone/cluster).</p><p>You can use SQL commands to start or close a synchronization task at the sender, and you can check the status of the synchronization task at any time. At the receiving end, you can set the IP white list to specify the access IP address range of sender.</p><h2 id="_2-model-definition" tabindex="-1"><a class="header-anchor" href="#_2-model-definition" aria-hidden="true">#</a> 2.Model definition</h2><figure><img src="https://alioss.timecho.com/docs/img/UserGuide/System-Tools/Sync-Tool/pipe2.png" alt="pipe2.png" tabindex="0" loading="lazy"><figcaption>pipe2.png</figcaption></figure><p>Two machines A and B, which are installed with iotdb, we want to continuously synchronize the data from A to B. To better describe this process, we introduce the following concepts.</p><ul><li>Pipe <ul><li>It refers to a synchronization task. In the above case, we can see that there is a data flow pipeline connecting A and B.</li><li>A pipe has three states, RUNNING, STOP and DROP, which respectively indicate running, pause and permanent cancellation.</li></ul></li><li>PipeSink <ul><li>It refers to the receiving end. In the above case, pipesink is machine B. At present, the pipesink type only supports IoTDB, that is, the receiver is the IoTDB instance installed on B.</li><li>Pipeserver: when the type of pipesink is IoTDB, you need to open the pipeserver service of IoTDB to process the pipe data.</li></ul></li></ul><h2 id="_3-precautions-for-use" tabindex="-1"><a class="header-anchor" href="#_3-precautions-for-use" aria-hidden="true">#</a> 3.Precautions for Use</h2><ul><li>The sender side of the sync-tool currently supports IoTDB version 1.0 <strong>only if data_replication_factor is set to 1</strong>. The receiver side supports any IoTDB version 1.0 configuration</li><li>A normal Pipe has two states: RUNNING indicates that it is synchronizing data to the receiver, and STOP indicates that synchronization to the receiver is suspended.</li><li>When one or more senders send data to a receiver, there should be no intersection between the respective device path sets of these senders and receivers, otherwise unexpected errors may occur. <ul><li>e.g. When sender A includes path <code>root.sg.d.s</code>, sender B also includes the path <code>root.sg.d.s</code>, sender A deletes database <code>root.sg</code> will also delete all data of B stored in the path <code>root.sg.d.s</code> at receiver.</li></ul></li><li>The two &quot;ends&quot; do not support synchronization with each other.</li><li>The Sync Tool only synchronizes insertions. If no database is created on the receiver, a database of the same level as the sender will be automatically created. Currently, deletion operation is not guaranteed to be synchronized and do not support TTL settings, trigger and other operations. <ul><li>If TTL is set on the sender side, all unexpired data in the IoTDB and all future data writes and deletions will be synchronized to the receiver side when Pipe is started.</li></ul></li><li>When operating a synchronization task, ensure that all DataNode nodes in <code>SHOW DATANODES</code> that are in the Running state are connected, otherwise the execution will fail.</li></ul><h2 id="_4-quick-start" tabindex="-1"><a class="header-anchor" href="#_4-quick-start" aria-hidden="true">#</a> 4.Quick Start</h2><p>Execute the following SQL statements at the sender and receiver to quickly start a data synchronization task between two IoTDB. For complete SQL statements and configuration matters, please see the <code>parameter configuration</code>and <code>SQL</code> sections. For more usage examples, please refer to the <code>usage examples</code> section.</p><h3 id="_4-1-receiver" tabindex="-1"><a class="header-anchor" href="#_4-1-receiver" aria-hidden="true">#</a> 4.1 Receiver</h3><ul><li><p>Start sender IoTDB and receiver IoTDB.</p></li><li><p>Create a PipeSink with IoTDB type.</p></li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; CREATE PIPESINK central_iotdb AS IoTDB (ip=&#39;There is your goal IP&#39;, port=&#39;There is your goal port&#39;)
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>Establish a Pipe (before creation, ensure that receiver IoTDB has been started).</li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; CREATE PIPE my_pipe TO central_iotDB
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>Start this Pipe.</li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; START PIPE my_pipe
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>Show Pipe&#39;s status.</li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; SHOW PIPES
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>Stop this Pipe.</li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; STOP PIPE my_pipe
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>Continue this Pipe.</li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; START PIPE my_pipe
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>Drop this Pipe (delete all information about this pipe).</li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; DROP PIPE my_pipe
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h2 id="_5-parameter-configuration" tabindex="-1"><a class="header-anchor" href="#_5-parameter-configuration" aria-hidden="true">#</a> 5.Parameter Configuration</h2><p>All parameters are in <code>$IOTDB_ HOME$/conf/iotdb-common.properties</code>, after all modifications are completed, execute <code>load configuration</code> and it will take effect immediately.</p><h3 id="_5-1-sender" tabindex="-1"><a class="header-anchor" href="#_5-1-sender" aria-hidden="true">#</a> 5.1 Sender</h3><table><thead><tr><th><strong>Parameter Name</strong></th><th><strong>max_number_of_sync_file_retry</strong></th></tr></thead><tbody><tr><td>Description</td><td>The maximum number of retries when the sender fails to synchronize files to the receiver.</td></tr><tr><td>Data type</td><td>Int : [0,2147483647]</td></tr><tr><td>Default value</td><td>5</td></tr></tbody></table><h3 id="_5-2-receiver" tabindex="-1"><a class="header-anchor" href="#_5-2-receiver" aria-hidden="true">#</a> 5.2 Receiver</h3><table><thead><tr><th><strong>Parameter Name</strong></th><th><strong>ip_white_list</strong></th></tr></thead><tbody><tr><td>Description</td><td>Set the white list of IP addresses of the sender of the synchronization, which is expressed in the form of network segments, and multiple network segments are separated by commas. When the sender synchronizes data to the receiver, the receiver allows synchronization only when the IP address of the sender is within the network segment set in the white list. If the whitelist is empty, the receiver does not allow any sender to synchronize data. By default, the receiver rejects the synchronization request of all IP addresses except 127.0.0.1. When configuring this parameter, please ensure that all DataNode addresses on the sender are set.</td></tr><tr><td>Data type</td><td>String</td></tr><tr><td>Default value</td><td>127.0.0.1/32</td></tr></tbody></table><h2 id="_6-sql" tabindex="-1"><a class="header-anchor" href="#_6-sql" aria-hidden="true">#</a> 6.SQL</h2><h3 id="show-pipesinktype" tabindex="-1"><a class="header-anchor" href="#show-pipesinktype" aria-hidden="true">#</a> SHOW PIPESINKTYPE</h3><ul><li>Show all PipeSink types supported by IoTDB.</li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; SHOW PIPESINKTYPE
IoTDB&gt;
+-----+
| type|
+-----+
|IoTDB|
+-----+
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="create-pipesink" tabindex="-1"><a class="header-anchor" href="#create-pipesink" aria-hidden="true">#</a> CREATE PIPESINK</h3><ul><li>Create a PipeSink with IoTDB type, where IP and port are optional parameters.</li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; CREATE PIPESINK &lt;PipeSinkName&gt; AS IoTDB [(ip=&#39;127.0.0.1&#39;,port=6667);]
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="drop-pipesink" tabindex="-1"><a class="header-anchor" href="#drop-pipesink" aria-hidden="true">#</a> DROP PIPESINK</h3><ul><li>Drop the pipesink with PipeSinkName parameter.</li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; DROP PIPESINK &lt;PipeSinkName&gt;
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="show-pipesink" tabindex="-1"><a class="header-anchor" href="#show-pipesink" aria-hidden="true">#</a> SHOW PIPESINK</h3><ul><li>Show all PipeSinks&#39; definition, the results set has three columns, name, PipeSink’s type and PipeSink‘s attributes.</li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; SHOW PIPESINKS
IoTDB&gt; SHOW PIPESINK [PipeSinkName]
IoTDB&gt;
+-----------+-----+------------------------+
| name| type| attributes|
+-----------+-----+------------------------+
|my_pipesink|IoTDB|ip=&#39;127.0.0.1&#39;,port=6667|
+-----------+-----+------------------------+
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="create-pipe" tabindex="-1"><a class="header-anchor" href="#create-pipe" aria-hidden="true">#</a> CREATE PIPE</h3><ul><li><p>Create a pipe.</p><ul><li>At present, the SELECT statement only supports <code>**</code> (i.e. data in all timeseries), the FROM statement only supports <code>root</code>, and the WHERE statement only supports the start time of the specified time. The start time can be specified in the form of yyyy-mm-dd HH:MM:SS or a timestamp.</li></ul></li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; CREATE PIPE my_pipe TO my_iotdb [FROM (select ** from root WHERE time&gt;=&#39;yyyy-mm-dd HH:MM:SS&#39; )]
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="stop-pipe" tabindex="-1"><a class="header-anchor" href="#stop-pipe" aria-hidden="true">#</a> STOP PIPE</h3><ul><li>Stop the Pipe with PipeName.</li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; STOP PIPE &lt;PipeName&gt;
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="start-pipe" tabindex="-1"><a class="header-anchor" href="#start-pipe" aria-hidden="true">#</a> START PIPE</h3><ul><li>Continue the Pipe with PipeName.</li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; START PIPE &lt;PipeName&gt;
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="drop-pipe" tabindex="-1"><a class="header-anchor" href="#drop-pipe" aria-hidden="true">#</a> DROP PIPE</h3><ul><li>Drop the pipe with PipeName(delete all information about this pipe).</li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; DROP PIPE &lt;PipeName&gt;
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="show-pipe" tabindex="-1"><a class="header-anchor" href="#show-pipe" aria-hidden="true">#</a> SHOW PIPE</h3><blockquote><p>This statement can be executed on both senders and receivers.</p></blockquote><ul><li><p>Show all Pipe&#39;s status.</p><ul><li><p><code>create time</code>: the creation time of this pipe.</p></li><li><p><code>name</code>: the name of this pipe.</p></li><li><p><code>role</code>: the current role of this IoTDB in pipe, there are two possible roles.</p><ul><li>Sender, the current IoTDB is the synchronous sender</li><li>Receiver, the current IoTDB is the synchronous receiver</li></ul></li><li><p><code>remote</code>: information about the opposite end of the Pipe.</p><ul><li>When role is sender, the value of this field is the PipeSink name.</li><li>When role is receiver, the value of this field is the sender&#39;s IP.</li></ul></li><li><p><code>status</code>: the Pipe&#39;s status.</p></li><li><p><code>attributes</code>: the attributes of Pipe</p><ul><li>When role is sender, the value of this field is the synchronization start time of the Pipe and whether to synchronize the delete operation.</li><li>When role is receiver, the value of this field is the name of the database corresponding to the synchronization connection created on this DataNode.</li></ul></li><li><p><code>message</code>: the status message of this pipe. When pipe runs normally, this column is NORMAL. When an exception occurs, messages may appear in following two states.</p><ul><li>WARN, this indicates that a data loss or other error has occurred, but the pipe will remain running.</li><li>ERROR, This indicates a problem where the network connection works but the data cannot be transferred, for example, the IP of the sender is not in the whitelist of the receiver or the version of the sender is not compatible with that of the receiver.</li><li>When the ERROR status appears, it is recommended to check the DataNode logs after STOP PIPE, check the receiver configuration or network conditions, and then START PIPE again.</li></ul></li></ul></li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; SHOW PIPES
IoTDB&gt;
+-----------------------+--------+--------+-------------+---------+------------------------------------+-------+
| create time| name | role| remote| status| attributes|message|
+-----------------------+--------+--------+-------------+---------+------------------------------------+-------+
|2022-03-30T20:58:30.689|my_pipe1| sender| my_pipesink| STOP|SyncDelOp=false,DataStartTimestamp=0| NORMAL|
+-----------------------+--------+--------+-------------+---------+------------------------------------+-------+
|2022-03-31T12:55:28.129|my_pipe2|receiver|192.168.11.11| RUNNING| Database=&#39;root.vehicle&#39;| NORMAL|
+-----------------------+--------+--------+-------------+---------+------------------------------------+-------+
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Show the pipe status with PipeName. When the PipeName is empty,it is the same with <code>Show PIPES</code>.</li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; SHOW PIPE [PipeName]
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h2 id="_7-usage-examples" tabindex="-1"><a class="header-anchor" href="#_7-usage-examples" aria-hidden="true">#</a> 7. Usage Examples</h2><h3 id="goal" tabindex="-1"><a class="header-anchor" href="#goal" aria-hidden="true">#</a> Goal</h3><ul><li>Create a synchronize task from sender IoTDB to receiver IoTDB.</li><li>Sender wants to synchronize the data after 2022-3-30 00:00:00.</li><li>Sender does not want to synchronize the deletions.</li><li>Receiver only wants to receive data from this sender(sender ip 192.168.0.1).</li></ul><h3 id="receiver" tabindex="-1"><a class="header-anchor" href="#receiver" aria-hidden="true">#</a> Receiver</h3><ul><li><code>vi conf/iotdb-common.properties</code> to config the parameters,set the IP white list to 192.168.0.1/32 to receive and only receive data from sender.</li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>####################
### PIPE Server Configuration
####################
# White IP list of Sync client.
# Please use the form of IPv4 network segment to present the range of IP, for example: 192.168.0.0/16
# If there are more than one IP segment, please separate them by commas
# The default is to reject all IP to sync except 0.0.0.0
# Datatype: String
ip_white_list=192.168.0.1/32
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="sender" tabindex="-1"><a class="header-anchor" href="#sender" aria-hidden="true">#</a> Sender</h3><ul><li>Create PipeSink with IoTDB type, input ip address 192.168.0.1, port 6667.</li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; CREATE PIPESINK my_iotdb AS IoTDB (IP=&#39;192.168.0.2&#39;,PORT=6667)
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>Create Pipe connect to my_iotdb, input the start time 2022-03-30 00:00:00 in WHERE statments. The following two SQL statements are equivalent</li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; CREATE PIPE p TO my_iotdb FROM (select ** from root where time&gt;=&#39;2022-03-30 00:00:00&#39;)
IoTDB&gt; CREATE PIPE p TO my_iotdb FROM (select ** from root where time&gt;= 1648569600000)
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>Start the Pipe p</li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; START PIPE p
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><ul><li>Show the status of pipe p.</li></ul><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; SHOW PIPE p
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="result-verification" tabindex="-1"><a class="header-anchor" href="#result-verification" aria-hidden="true">#</a> Result Verification</h3><p>Execute SQL on sender.</p><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>CREATE DATABASE root.vehicle;
CREATE TIMESERIES root.vehicle.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE;
CREATE TIMESERIES root.vehicle.d0.s1 WITH DATATYPE=TEXT, ENCODING=PLAIN;
CREATE TIMESERIES root.vehicle.d1.s2 WITH DATATYPE=FLOAT, ENCODING=RLE;
CREATE TIMESERIES root.vehicle.d1.s3 WITH DATATYPE=BOOLEAN, ENCODING=PLAIN;
insert into root.vehicle.d0(timestamp,s0) values(now(),10);
insert into root.vehicle.d0(timestamp,s0,s1) values(now(),12,&#39;12&#39;);
insert into root.vehicle.d0(timestamp,s1) values(now(),&#39;14&#39;);
insert into root.vehicle.d1(timestamp,s2) values(now(),16.0);
insert into root.vehicle.d1(timestamp,s2,s3) values(now(),18.0,true);
insert into root.vehicle.d1(timestamp,s3) values(now(),false);
flush;
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>Execute SELECT statements, the same results can be found on sender and receiver.</p><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>IoTDB&gt; select ** from root.vehicle
+-----------------------------+------------------+------------------+------------------+------------------+
| Time|root.vehicle.d0.s0|root.vehicle.d0.s1|root.vehicle.d1.s3|root.vehicle.d1.s2|
+-----------------------------+------------------+------------------+------------------+------------------+
|2022-04-03T20:08:17.127+08:00| 10| null| null| null|
|2022-04-03T20:08:17.358+08:00| 12| 12| null| null|
|2022-04-03T20:08:17.393+08:00| null| 14| null| null|
|2022-04-03T20:08:17.538+08:00| null| null| null| 16.0|
|2022-04-03T20:08:17.753+08:00| null| null| true| 18.0|
|2022-04-03T20:08:18.263+08:00| null| null| false| null|
+-----------------------------+------------------+------------------+------------------+------------------+
Total line number = 6
It costs 0.134s
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="_8-q-a" tabindex="-1"><a class="header-anchor" href="#_8-q-a" aria-hidden="true">#</a> 8.Q&amp;A</h2><ul><li><p>Execute <code>CREATE PIPESINK demo as IoTDB</code> get message <code>PIPESINK [demo] already exists in IoTDB.</code></p><ul><li>Cause by: Current PipeSink already exists</li><li>Solution: Execute <code>DROP PIPESINK demo</code> to drop PipeSink and recreate it.</li></ul></li><li><p>Execute <code>DROP PIPESINK pipesinkName</code> get message <code>Can not drop PIPESINK [demo], because PIPE [mypipe] is using it.</code></p><ul><li>Cause by: It is not allowed to delete PipeSink that is used by a running PIPE.</li><li>Solution: Execute <code>SHOW PIPE</code> on the sender side to stop using the PipeSink&#39;s PIPE.</li></ul></li><li><p>Execute <code>CREATE PIPE p to demo</code> get message <code>PIPE [p] is STOP, please retry after drop it.</code></p><ul><li>Cause by: Current Pipe already exists</li><li>Solution: Execute <code>DROP PIPE p</code> to drop Pipe and recreate it.</li></ul></li><li><p>Execute <code>CREATE PIPE p to demo</code> get message <code>Fail to create PIPE [p] because Connection refused on DataNode: {id=2, internalEndPoint=TEndPoint(ip:127.0.0.1, port:10732)}.</code></p><ul><li>Cause by: There are some DataNodes with the status Running cannot be connected.</li><li>Solution: Execute <code>SHOW DATANODES</code>, and check for unreachable DataNode networks, or wait for their status to change to Unknown and re-execute the statement.</li></ul></li><li><p>Execute <code>START PIPE p</code> get message <code>Fail to start PIPE [p] because Connection refused on DataNode: {id=2, internalEndPoint=TEndPoint(ip:127.0.0.1, port:10732)}.</code></p><ul><li>Cause by: There are some DataNodes with the status Running cannot be connected.</li><li>Solution: Execute <code>SHOW DATANODES</code>, and check for unreachable DataNode networks, or wait for their status to change to Unknown and re-execute the statement.</li></ul></li><li><p>Execute <code>STOP PIPE p</code> get message <code>Fail to stop PIPE [p] because Connection refused on DataNode: {id=2, internalEndPoint=TEndPoint(ip:127.0.0.1, port:10732)}.</code></p><ul><li>Cause by: There are some DataNodes with the status Running cannot be connected.</li><li>Solution: Execute <code>SHOW DATANODES</code>, and check for unreachable DataNode networks, or wait for their status to change to Unknown and re-execute the statement.</li></ul></li><li><p>Execute <code>DROP PIPE p</code> get message <code>Fail to DROP_PIPE because Fail to drop PIPE [p] because Connection refused on DataNode: {id=2, internalEndPoint=TEndPoint(ip:127.0.0.1, port:10732)}. Please execute [DROP PIPE p] later to retry.</code></p><ul><li>Cause by: There are some DataNodes with the status Running cannot be connected. Pipe has been deleted on some nodes and the status has been set to <em><strong>DROP</strong></em>.</li><li>Solution: Execute <code>SHOW DATANODES</code>, and check for unreachable DataNode networks, or wait for their status to change to Unknown and re-execute the statement.</li></ul></li><li><p>Sync.log prompts <code>org.apache.iotdb.commons.exception.IoTDBException: root.** already been created as database</code></p><ul><li>Cause by: The synchronization tool attempts to automatically create a database at the sender at the receiver. This is a normal phenomenon.</li><li>Solution: No intervention is required.</li></ul></li></ul>`,87);function o(d,l){return i(),t("div",null,[n(`
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.
`),r])}const u=e(s,[["render",o],["__file","Sync-Tool.html.vue"]]);export{u as default};