[Bug] 2.0.4版本jdbc问题 private static final String TSFILE_URL_PREFIX = "jdbc:iotdb://.*";匹配模版,不支持连接集群?
- Vorherrschende Sprache
- Java
- Sterne
- 6.4k
- Forks
- 1.2k
- Ø Merge
- 1 T. 23 Std.
- Gemergte PRs (30 T.)
- 115
Beschreibung
### 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!
Beitragsleitfaden
Rechercherichtung
Beginne bei org.apache.iotdb.jdbc.IoTDBDriver.connect und dem im Bericht erwähnten TSFILE_URL_PREFIX-Muster; reproduziere die durch Kommas getrennte JDBC-URL und untersuche, wie der Host vor IoTDBConnection.openTransport geparst wird. Erledigt ist es, wenn eine unterstützte Cluster-URL erfolgreich eine Verbindung herstellt, ohne den gesamten durch Kommas getrennten Wert als einen Host zu behandeln.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- java
- Bereich
- databases
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 45/100