mingqing6364 opened a new issue #9607:
URL: https://github.com/apache/shardingsphere/issues/9607
### Which version of ShardingSphere did you use?
ShardingSphere-Proxy5.0
### Which project did you use? ShardingSphere-JDBC or ShardingSphere-Proxy?
ShardingSphere-Proxy5.0 + mysql5.7.33 + zookeeper3.6
### Expected behavior
When sharding-Proxy is running,the zookeeper have this note:
/${your_zk_namespace}/states/datanodes/${your_schema_name}/${your_replica_datasource_name}
### Actual behavior
zookeeper just have this note:
/${your_zk_namespace}/states/datanodes
by the way,I create the note,and set all slave disabled,sharding-proxy
report errors: java.lang.ArithmeticException: / by zero
### Reason analyze (If you can)
### Steps to reproduce the behavior, such as: SQL to execute, sharding rule
configuration, when exception occur etc.
I run zookeeper in docker
```
docker pull zookeeper:3.6
docker create --name zk -p 2181:2181 zookeeper:3.6
docker start zk
docker exec -it zk bin/zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
```
ShardingProxy config like this:
```
schemaName: replica_query_db
dataSourceCommon:
username: root
password: yKDSZE*F9s*oCvfk8hG^v@0YjHwEcFyv
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
maintenanceIntervalMilliseconds: 30000
dataSources:
primary_ds:
url: jdbc:mysql://127.0.0.1:3306/test_db?serverTimezone=UTC&useSSL=false
replica_ds_0:
url: jdbc:mysql://127.0.0.1:3306/test_db?serverTimezone=UTC&useSSL=false
rules:
- !REPLICA_QUERY
dataSources:
pr_ds:
name: pr_ds
primaryDataSourceName: primary_ds
replicaDataSourceNames:
- replica_ds_0
```
the server config like this:
```
governance:
name: governance_ds
registryCenter:
type: ZooKeeper
serverLists: localhost:2181
props:
retryIntervalMilliseconds: 500
timeToLiveSeconds: 60
maxRetries: 3
operationTimeoutMilliseconds: 500
overwrite: false
authentication:
users:
root:
password: root
props:
sql-show: true
```
start the sharding-proxy,and query the zookeeper
```
[zk: localhost:2181(CONNECTED) 4] ls /governance_ds/states/datanodes
[]
[zk: localhost:2181(CONNECTED) 5] get /governance_ds/states/datanodes
```
run sql like this:
```
[root@localhost ~]# mysql -uroot -p -h127.0.0.1 -P3307 -A
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.33-log-ShardingSphere-Proxy 5.0.0-RC1
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input
statement.
mysql> show databases;
+------------------+
| Database |
+------------------+
| replica_query_db |
+------------------+
1 row in set (0.02 sec)
mysql> use replica_query_db;
Database changed
mysql> select 1 a;
+---+
| a |
+---+
| 1 |
+---+
1 row in set (0.17 sec)
mysql>
```
the sharding-proxy logs like this:
```
[INFO ] 17:25:18.163 [ShardingSphere-Command-1] ShardingSphere-SQL - Logic
SQL: select 1 a
[INFO ] 17:25:18.163 [ShardingSphere-Command-1] ShardingSphere-SQL -
SQLStatement: MySQLSelectStatement(limit=Optional.empty, lock=Optional.empty)
[INFO ] 17:25:18.163 [ShardingSphere-Command-1] ShardingSphere-SQL - Actual
SQL: replica_ds_0 ::: select 1 a
```
then I create the note in zookeeper,and set slave disabled:
```
[zk: localhost:2181(CONNECTED) 8] create
/governance_ds/states/datanodes/replica_query_db
Created /governance_ds/states/datanodes/replica_query_db
[zk: localhost:2181(CONNECTED) 9] create
/governance_ds/states/datanodes/replica_query_db/replica_ds_0
Created /governance_ds/states/datanodes/replica_query_db/replica_ds_0
[zk: localhost:2181(CONNECTED) 10] set
/governance_ds/states/datanodes/replica_query_db/replica_ds_0 disabled
[zk: localhost:2181(CONNECTED) 11] get
/governance_ds/states/datanodes/replica_query_db/replica_ds_0
disabled
[zk: localhost:2181(CONNECTED) 12]
```
set the sql:
```
mysql> select 1 a;
ERROR 10002 (C1000): 2Unknown exception: [/ by zero]
```
the sharding logs:
```
[INFO ] 17:25:18.163 [ShardingSphere-Command-1] ShardingSphere-SQL - Logic
SQL: select 1 a
[INFO ] 17:25:18.163 [ShardingSphere-Command-1] ShardingSphere-SQL -
SQLStatement: MySQLSelectStatement(limit=Optional.empty, lock=Optional.empty)
[INFO ] 17:25:18.163 [ShardingSphere-Command-1] ShardingSphere-SQL - Actual
SQL: replica_ds_0 ::: select 1 a
[ERROR] 17:29:08.546 [ShardingSphere-Command-0]
o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.ArithmeticException: / by zero
at
org.apache.shardingsphere.replicaquery.algorithm.RoundRobinReplicaLoadBalanceAlgorithm.getDataSource(RoundRobinReplicaLoadBalanceAlgorithm.java:45)
at
org.apache.shardingsphere.replicaquery.route.engine.impl.ReplicaQueryDataSourceRouter.route(ReplicaQueryDataSourceRouter.java:46)
at
org.apache.shardingsphere.replicaquery.route.engine.ReplicaQuerySQLRouter.createRouteContext(ReplicaQuerySQLRouter.java:46)
at
org.apache.shardingsphere.replicaquery.route.engine.ReplicaQuerySQLRouter.createRouteContext(ReplicaQuerySQLRouter.java:41)
at
org.apache.shardingsphere.infra.route.engine.impl.PartialSQLRouteExecutor.route(PartialSQLRouteExecutor.java:59)
at
org.apache.shardingsphere.infra.route.engine.SQLRouteEngine.route(SQLRouteEngine.java:57)
at
org.apache.shardingsphere.infra.context.kernel.KernelProcessor.generateExecutionContext(KernelProcessor.java:52)
at
org.apache.shardingsphere.proxy.backend.communication.jdbc.JDBCDatabaseCommunicationEngine.execute(JDBCDatabaseCommunicationEngine.java:77)
at
org.apache.shardingsphere.proxy.backend.text.query.QueryBackendHandler.execute(QueryBackendHandler.java:61)
at
org.apache.shardingsphere.proxy.frontend.mysql.command.query.text.query.MySQLComQueryPacketExecutor.execute(MySQLComQueryPacketExecutor.java:62)
at
org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask.executeCommand(CommandExecutorTask.java:100)
at
org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask.run(CommandExecutorTask.java:76)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
```
### Example codes for reproduce this issue (such as a github link).
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]