apache / apache/iotdb

[Bug] IoTDB v1.3.0 版本不定时出现重启之后,结构和数据均查询不到的情况

Abierto
#11,952 6 comentarios 3 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Java
Estrellas
6.4k
Forks
1.2k
Merge medio
1 d 23 h
PR fusionados (30 d)
115

Descripción

### 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!

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Empieza reproduciendo el problema en IoTDB v1.3.0 con el JDBC batch writer proporcionado y, después, reinicia usando los comandos standalone o systemd indicados. Tras el reinicio, compara las rutas creadas por JDBC con los datos root.sg1 creados mediante shell e inspecciona el comportamiento relevante de inicio y persistencia. Se considera terminado cuando ambos esquemas y los datos siguen siendo consultables después del reinicio y se ha identificado el desencadenante específico de JDBC.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
java
Área
databases
Tipo de issue
Error
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Estancado
Claridad
Necesita aclaración
Aptitud para principiantes
18/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.