[Bug] IoTDB v1.3.0 版本不定时出现重启之后,结构和数据均查询不到的情况
- Langage dominant
- Java
- Étoiles
- 6.4k
- Forks
- 1.2k
- Merge moyen
- 1 j 23 h
- PR mergées (30 j)
- 115
Description
### Search before asking
- [X] I searched in the [issues](https://github.com/apache/iotdb/issues) and found nothing similar.
### Version
v1.3.0
### Describe the bug and provide the minimal reproduce step
1. v1.3.0版本
2. 部署环境:
```
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: foca
```
3. JDK:
```
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
```
4. 安装方式:Standalone 安装
1. 修改的配置如下:
1. common修改
```
config_node_consensus_protocol_class=org.apache.iotdb.consensus.simple.SimpleConsensus
schema_replication_factor=1
schema_region_consensus_protocol_class=org.apache.iotdb.consensus.simple.SimpleConsensus
data_replication_factor=1
data_region_consensus_protocol_class=org.apache.iotdb.consensus.simple.SimpleConsensus
```
2. confignode修改:
```
cn_internal_address=10.166.50.30
cn_seed_config_node=10.166.50.30:10710
```
3. datanode 修改:
```
dn_internal_address=10.166.50.30
dn_seed_config_node=10.166.50.30:10710
```
5. 启动方式
1. 先启动 confignode
```
[Unit]
Description=iotdb-confignode
Documentation=https://iotdb.apache.org/
After=network.target
[Service]
StandardOutput=null
StandardError=null
LimitNOFILE=65536
Type=simple
User=root
Group=root
Environment=JAVA_HOME=/usr/local/jdk-11.0.2
ExecStart=/usr/local/apache-iotdb-1.3.0-all-bin/sbin/start-confignode.sh
ExecStop=/usr/local/apache-iotdb-1.3.0-all-bin/sbin/stop-confignode.sh
Restart=on-failure
SuccessExitStatus=143
RestartSec=5
StartLimitInterval=600s
StartLimitBurst=3
RestartPreventExitStatus=SIGKILL
[Install]
WantedBy=multi-user.target
```
2. 后启动 datanode
```
[Unit]
Description=iotdb-datanode
Documentation=https://iotdb.apache.org/
After=network.target
[Service]
StandardOutput=null
StandardError=null
LimitNOFILE=65536
Type=simple
User=root
Group=root
Environment=JAVA_HOME=/usr/local/jdk-11.0.2
ExecStart=/usr/local/apache-iotdb-1.3.0-all-bin/sbin/start-datanode.sh
ExecStop=/usr/local/apache-iotdb-1.3.0-all-bin/sbin/stop-datanode.sh
Restart=on-failure
SuccessExitStatus=143
RestartSec=5
StartLimitInterval=600s
StartLimitBurst=3
RestartPreventExitStatus=SIGKILL
[Install]
WantedBy=multi-user.target
```
6. 写入数据方式:
1. 通过JDBC写入
```java
public class JDBCExample2 {
private static Logger logger = LoggerFactory.getLogger(JDBCExample.class);
public static String GetPVPath() {
Random random = new Random();
int sId = random.nextInt(6) + 1;
int sysId = random.nextInt(1000) + 1;
StringBuilder pvIdBuilder = new StringBuilder();
String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (int i = 0; i < 10; i++) {
int index = random.nextInt(characters.length());
char ch = characters.charAt(index);
pvIdBuilder.append(ch);
}
String pvId = pvIdBuilder.toString();
String result = String.format("root.fz4.pv.s_%d.sys_%d.pv_%s", sId, sysId, pvId);
String pvInsert =
"insert into "+result+"(timestamp, is_alarm, is_bad, pv_name, subsystem_id, equipment_name, pv_type, io_type, server_time, pv_time, " +
"original, string_value, int_value, double_value, boolean_value, dword_value, long_value, float_value, char_value, word_value, station_id) " +
"aligned VALUES(NOW(),False,False,'ceshi',110,'ceshi',9,1,1,1,'0.3','',null,null,null,null,null,1.1,'ceshi',null,1)";
System.out.println(pvInsert);
return pvInsert;
}
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("org.apache.iotdb.jdbc.IoTDBDriver");
try{
while (true){
Connection connection =
DriverManager.getConnection(
"jdbc:iotdb://10.166.50.30:6667?version=V_1_0", "root", "root");
Statement statement = connection.createStatement();
String sql = GetPVPath();
for (int i = 1; i <= 100; i++) {
statement.addBatch(sql);
}
statement.executeBatch();
statement.clearBatch();
statement.close();
connection.close();
}
} catch (IoTDBSQLException e) {
logger.error("IoTDB Jdbc example error", e);
}
}
}
```
```
6. 写入结果:均正常写入,并可以在线查询到结果
7. 重启方式:`../sbin/stop-standalone`方式和`systemctl stop iotdb-confignode` 、`systemctl stop iotdb-datanode`
8. 重启后,查询timeseries和数据,均查询不到。
9. 再次写入:
1. 通过shell端写入sql
```sql
CREATE DATABASE root.sg1;
CREATE TIMESERIES root.sg1.d1.s1 WITH DATATYPE=INT64, ENCODING=RLE, COMPRESSOR=SNAPPY;
CREATE TIMESERIES root.sg1.d1.s2 WITH DATATYPE=INT64, ENCODING=RLE, COMPRESSOR=SNAPPY;
CREATE TIMESERIES root.sg1.d1.s3 WITH DATATYPE=INT64, ENCODING=RLE, COMPRESSOR=SNAPPY;
insert into root.sg1.d1(timestamp, s1, s2, s3) values(now(),1,2,3);
```
2. 通过JDBC写入(和上面JDBC写入方式一样)
10. 重启
11. 重启后,查询timeseries和数据,均可以正常查询到
### What did you expect to see?
expect :
JDBC写入重启可以正常查询到数据
### What did you see instead?
怀疑JDBC写入有问题
### Anything else?
1
### Are you willing to submit a PR?
- [ ] I'm willing to submit a PR!
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Commencez par reproduire le problème sur IoTDB v1.3.0 avec le JDBC batch writer fourni, puis redémarrez en utilisant les commandes standalone ou systemd indiquées. Après le redémarrage, comparez les chemins créés par JDBC aux données root.sg1 créées par le shell, et examinez le comportement pertinent au démarrage et en matière de persistance. Le travail est terminé lorsque les deux schémas et les données restent interrogeables après le redémarrage, et que le déclencheur spécifique à JDBC a été identifié.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- java
- Domaine
- databases
- Type d'issue
- Bug
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- À clarifier
- Accessibilité débutants
- 18/100