apache / apache/shardingsphere

java.lang.NullPointerException: Cannot invoke "org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler.close()" because "this.proxyBackendHandler" is null

Open
#23,018 4 comments 0 reactions 0 assignees View on GitHub
feature: DistSQL in: proxy type: bug
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
image

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
image

7. cat stdout.log

image

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")
);
image

9. cat stdout.log
image

sysbench resoult

image

image

### Example codes for reproduce this issue (such as a github link).

Contributor guide

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.