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]


Reply via email to