apache / apache/shardingsphere
java.lang.NullPointerException: Cannot invoke "org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler.close()" because "this.proxyBackendHandler" is null
- Dominant language
- Java
- Stars
- 20.8k
- Forks
- 6.9k
- Avg merge
- 11h 35m
- Merged PRs (30d)
- 326
Description
## Bug Report
### Which version of ShardingSphere did you use?
f306248c8d1d7e4b54ffec60eb4a125eb0f52119
### Which project did you use? ShardingSphere-JDBC or ShardingSphere-Proxy?
ShardingSphere-Proxy
### Expected behavior
have no error
### Actual behavior
```
[ERROR] 2022-12-21 18:42:07.195 [ShardingSphere-Command-183] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: Cannot invoke "org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler.close()" because "this.proxyBackendHandler" is null
at org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.execute.MySQLComStmtExecuteExecutor.close(MySQLComStmtExecuteExecutor.java:130)
at org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask.executeCommand(CommandExecutorTask.java:124)
at org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask.run(CommandExecutorTask.java:78)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
[ERROR] 2022-12-21 18:42:07.195 [ShardingSphere-Command-75] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: Cannot invoke "org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler.close()" because "this.proxyBackendHandler" is null
at org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.execute.MySQLComStmtExecuteExecutor.close(MySQLComStmtExecuteExecutor.java:130)
at org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask.executeCommand(CommandExecutorTask.java:124)
at org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask.run(CommandExecutorTask.java:78)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
[ERROR] 2022-12-21 18:42:07.195 [ShardingSphere-Command-164] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: Cannot invoke "org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler.close()" because "this.proxyBackendHandler" is null
at org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.execute.MySQLComStmtExecuteExecutor.close(MySQLComStmtExecuteExecutor.java:130)
at org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask.executeCommand(CommandExecutorTask.java:124)
at org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask.run(CommandExecutorTask.java:78)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
[ERROR] 2022-12-21 18:42:07.195 [ShardingSphere-Command-157] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: Cannot invoke "org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler.close()" because "this.proxyBackendHandler" is null
at org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.execute.MySQLComStmtExecuteExecutor.close(MySQLComStmtExecuteExecutor.java:130)
[ERROR] 2022-12-21 18:42:07.195 [ShardingSphere-Command-164] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: Cannot invoke "org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler.close()" because "this.proxyBackendHandler" is null
at org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.execute.MySQLComStmtExecuteExecutor.close(MySQLComStmtExecuteExecutor.java:130)
at org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask.executeCommand(CommandExecutorTask.java:124)
at org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask.run(CommandExecutorTask.java:78)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
[ERROR] 2022-12-21 18:42:07.195 [ShardingSphere-Command-157] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: Cannot invoke "org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler.close()" because "this.proxyBackendHandler" is null
at org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.execute.MySQLComStmtExecuteExecutor.close(MySQLComStmtExecuteExecutor.java:130)
...
[ERROR] 2022-12-21 18:42:07.199 [ShardingSphere-Command-192] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: null
[ERROR] 2022-12-21 18:42:07.199 [ShardingSphere-Command-161] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: null
[ERROR] 2022-12-21 18:42:07.199 [ShardingSphere-Command-155] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: null
[ERROR] 2022-12-21 18:42:07.199 [ShardingSphere-Command-75] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: null
[ERROR] 2022-12-21 18:42:07.199 [ShardingSphere-Command-75] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: null
[ERROR] 2022-12-21 18:42:07.199 [ShardingSphere-Command-192] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: null
[ERROR] 2022-12-21 18:42:07.199 [ShardingSphere-Command-75] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: null
[ERROR] 2022-12-21 18:42:07.199 [ShardingSphere-Command-147] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: null
[ERROR] 2022-12-21 18:42:07.200 [ShardingSphere-Command-189] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: null
[ERROR] 2022-12-21 18:42:07.200 [ShardingSphere-Command-154] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: null
[ERROR] 2022-12-21 18:42:07.202 [ShardingSphere-Command-189] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: null
[ERROR] 2022-12-21 18:42:07.202 [ShardingSphere-Command-163] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: null
[ERROR] 2022-12-21 18:42:07.202 [ShardingSphere-Command-155] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: null
[ERROR] 2022-12-21 18:42:07.202 [ShardingSphere-Command-196] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: null
[ERROR] 2022-12-21 18:42:07.202 [ShardingSphere-Command-161] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: null
[ERROR] 2022-12-21 18:42:07.203 [ShardingSphere-Command-151] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: null
[ERROR] 2022-12-21 18:42:07.203 [ShardingSphere-Command-196] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: null
[ERROR] 2022-12-21 18:42:07.203 [ShardingSphere-Command-189] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: null
[ERROR] 2022-12-21 18:42:07.203 [ShardingSphere-Command-195] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: null
[ERROR] 2022-12-21 18:42:07.203 [ShardingSphere-Command-132] o.a.s.p.f.c.CommandExecutorTask - Exception occur:
java.lang.NullPointerException: null
```
### Reason analyze (If you can)
can't
### Steps to reproduce the behavior, such as: SQL to execute, sharding rule configuration, when exception occur etc.
1. start proxy
2. config proxy
```
databaseName: sharding_db
dataSources:
ds_0:
password:
url: jdbc:mysql://192.168.10.23:13333/test?serverTimezone=UTC&useSSL=false
username: root
minPoolSize: 1
connectionTimeoutMilliseconds: 30000
maxLifetimeMilliseconds: 2100000
readOnly: false
idleTimeoutMilliseconds: 30000
maxPoolSize: 50
rules:
```
3. use sysbench threads=40
```
sysbench oltp_read_write --mysql-host=192.168.10.23 --mysql-port=6666 --mysql-user=root --mysql-password=root --mysql-db=sharding_db --tables=1 --table-size=1000 --report-interval=2 --time=1600 --threads=40 --max-requests=0 --mysql-ignore-errors=all --rand-type=uniform --range_selects=off --auto_inc=off run
```
4. proxy execute `show processlist;` count 40

5. proxy execute alter resource
```
ALTER STORAGE UNIT ds_0 (
URL="jdbc:mysql://192.168.10.23:13333/test?serverTimezone=UTC&useSSL=false",
USER="root",
PASSWORD="",
PROPERTIES("maximumPoolSize"="10","idleTimeout"="30000")
);
```
6. proxy execute `show processlist;` count 40

7. cat stdout.log

8. ALTER STORAGE UNIT ds_0 (
URL="jdbc:mysql://192.168.10.23:13333/test?serverTimezone=UTC&useSSL=false",
USER="root",
PASSWORD="",
PROPERTIES("maximumPoolSize"="50","idleTimeout"="30000")
);

9. cat stdout.log

sysbench resoult


### Example codes for reproduce this issue (such as a github link).
Contributor guide
Research direction
Start at MySQLComStmtExecuteExecutor.close(), line 130, and trace the cleanup path through CommandExecutorTask. Reproduce the failure with 40 sysbench threads while running ALTER STORAGE UNIT on ds_0, then verify that the sequence no longer emits the reported NullPointerException.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, mysql
- Domain
- backend, databases
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100