apache / apache/iotdb

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

Ouverte
#16,600 4 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
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

集群部署在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!

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez par org.apache.iotdb.jdbc.IoTDBDriver.connect et le modèle TSFILE_URL_PREFIX mentionné dans le rapport ; reproduisez l’URL JDBC séparée par des virgules et examinez comment l’hôte est analysé avant IoTDBConnection.openTransport. Le travail est terminé lorsqu’une URL de cluster prise en charge se connecte avec succès sans traiter toute la valeur séparée par des virgules comme un seul hôte.

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é
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
45/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.