apache / apache/iotdb

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

Offen
#16,600 4 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
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

Beitragsleitfaden öffnen

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

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.