apache / apache/iotdb

[Bug] 2.0.4版本jdbc问题 private static final String TSFILE_URL_PREFIX = "jdbc:iotdb://.*";匹配模版,不支持连接集群?

Abierto
#16,600 4 comentarios 0 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

集群部署在red hat 4.8.5-44 iotdb使用版本2.0.4

### Describe the bug and provide the minimal reproduce step

传入以逗号分隔的url后出现异常,是我这边的传入方式有问题还是本事不支持这个功能?jdbc的方式不能连接集群吗?
reate connection SQLException, url: jdbc:iotdb://xx.xx.xx.xxx:6667,xx.xx.xx.xxx:6667,xx.xx.xx.xxx:6667/?sql_dialect=table, errorCode 0, state null
java.sql.SQLException: Connection Error, please check whether the network is available or the server has started.
at org.apache.iotdb.jdbc.IoTDBDriver.connect(IoTDBDriver.java:67) ~[iotdb-jdbc-2.0.4.jar:2.0.4]
at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1652) ~[druid-1.2.4.jar:1.2.4]
at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1718) ~[druid-1.2.4.jar:1.2.4]
at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2785) [druid-1.2.4.jar:1.2.4]
Caused by: org.apache.thrift.transport.TTransportException: java.net.UnknownHostException: 10.72.8.165:6667,10.72.8.164:6667,10.72.8.163
at org.apache.thrift.transport.TSocket.open(TSocket.java:243) ~[libthrift-0.14.1.jar:0.14.1]
at org.apache.iotdb.rpc.TElasticFramedTransport.open(TElasticFramedTransport.java:101) ~[service-rpc-2.0.4.jar:2.0.4]
at org.apache.iotdb.jdbc.IoTDBConnection.openTransport(IoTDBConnection.java:553) ~[iotdb-jdbc-2.0.4.jar:2.0.4]
at org.apache.iotdb.jdbc.IoTDBConnection.(IoTDBConnection.java:133) ~[iotdb-jdbc-2.0.4.jar:2.0.4]
at org.apache.iotdb.jdbc.IoTDBDriver.connect(IoTDBDriver.java:65) ~[iotdb-jdbc-2.0.4.jar:2.0.4]
... 3 more
Caused by: java.net.UnknownHostException: xx.xx.xx.xxx6667,xx.xxxx.xxx:6667,xx.xx.xx.xxx
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184) ~[?:1.8.0_231]
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[?:1.8.0_231]
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[?:1.8.0_231]
at java.net.Socket.connect(Socket.java:606) ~[?:1.8.0_231]
at org.apache.thrift.transport.TSocket.open(TSocket.java:238) ~[libthrift-0.14.1.jar:0.14.1]
at org.apache.iotdb.rpc.TElasticFramedTransport.open(TElasticFramedTransport.java:101) ~[service-rpc-2.0.4.jar:2.0.4]
at org.apache.iotdb.jdbc.IoTDBConnection.openTransport(IoTDBConnection.java:553) ~[iotdb-jdbc-2.0.4.jar:2.0.4]
at org.apache.iotdb.jdbc.IoTDBConnection.(IoTDBConnection.java:133) ~[iotdb-jdbc-2.0.4.jar:2.0.4]

附创建iotdatasource部分代码
@Bean(name = "iotDataSource")
public DataSource setDataSource() {

DruidDataSource datasource = new DruidDataSource();
datasource.setDriverClassName(iotDbDTSProperties.getDriverClassName());
// 添加查询超时和内存限制参数
datasource.setUrl("jdbc:iotdb://"+iotDbDTSProperties.getNodeUrls()+"?sql_dialect=table");
datasource.setUsername(iotDbDTSProperties.getUsername());
datasource.setPassword(iotDbDTSProperties.getPassword());

// 连接池配置
datasource.setInitialSize(5);
datasource.setMinIdle(5);
datasource.setMaxActive(10); // 减少最大连接数
datasource.setMaxWait(30000); // 减少等待时间

// 连接保活配置
datasource.setTimeBetweenEvictionRunsMillis(30000); // 更频繁的检查
datasource.setMinEvictableIdleTimeMillis(180000);
datasource.setMaxEvictableIdleTimeMillis(300000); // 更短的最大空闲时间

// 禁用连接验证查询,避免IoTDB SQL语法不兼容问题
datasource.setTestWhileIdle(false);
datasource.setTestOnBorrow(false);
datasource.setTestOnReturn(false);
datasource.setValidationQuery(null);

// 连接泄露检测 - 更严格的超时
datasource.setRemoveAbandoned(true);
datasource.setRemoveAbandonedTimeout(60); // 1分钟超时
datasource.setLogAbandoned(true);

// 其他配置保持不变
datasource.setDefaultAutoCommit(true);
datasource.setMaxPoolPreparedStatementPerConnectionSize(-1);
datasource.setPoolPreparedStatements(false);
datasource.setInitVariants(false);
datasource.setInitGlobalVariants(false);
datasource.setUseGlobalDataSourceStat(false);
datasource.setMaxOpenPreparedStatements(-1);

return datasource;
}

### What did you expect to see?

我期望以逗号分隔的传入方式能够得到支持

### What did you see instead?

我看到了无法解析传入的以逗号分隔的url导致连接iotdb数据库失败

### Anything else?

_No response_

### Are you willing to submit a PR?

- [x] I'm willing to submit a PR!

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Comienza en org.apache.iotdb.jdbc.IoTDBDriver.connect y en el patrón TSFILE_URL_PREFIX mencionado en el informe; reproduce la URL JDBC separada por comas e inspecciona cómo se analiza el host antes de IoTDBConnection.openTransport. Se considera completado cuando una URL de clúster compatible se conecta correctamente sin tratar todo el valor separado por comas como un único host.

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
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.