You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Root Cause
We need MySQL‑compatible idle disconnect behavior for wait_timeout / interactive_timeout.
The previous behavior wasn’t observable because idle timeout wasn’t being applied consistently at read time, and tests were often run via the proxy port (which doesn’t enforce CN idle timeout). In addition, the mysql client auto‑reconnects by default, which can mask disconnections.
Fix
Apply wait_timeout as the read timeout before each request read.
For interactive clients, only at login we overwrite session.wait_timeout with interactive_timeout (one‑time override).
Disallow GLOBAL changes to wait_timeout / interactive_timeout (cloud policy).
Add session‑level min/max hard limits validation.
Added minimal unit tests covering interactive/non‑interactive behavior, session/global restrictions, and boundary checks.
Verification SQL / Steps (direct CN connection, not proxy)
Use mysql --skip-reconnect to avoid auto‑reconnect masking the disconnect.
Interactive client (should disconnect):
set session wait_timeout=3;
-- idle 6 seconds
select 1; -- expected: ERROR 2013 / Lost connection
Interactive client (should NOT disconnect):
set session interactive_timeout=3;
-- idle 6 seconds
select 1; -- expected: returns 1
Non‑interactive client (batch; should disconnect):
set session wait_timeout=3;
-- idle 6 seconds
select 1; -- expected: ERROR 2013 / Lost connection
We changed the default wait_timeout and interactive_timeout from 28800 to 86400 to align with the cloud policy and login flow. In cloud mode, SET GLOBAL for these variables is blocked, but timeout values are needed before tenant login, when tenant-specific configs are not yet available. So we use 86400 (24h) as a safe pre-login fallback, and then override session values with tenant settings from mo_mysql_compatibility_mode after login.
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution. 1 out of 2 committers have signed the CLA.
✅ aptend ❌ robll-v1 You have signed the CLA already but the status is still pending? Let us recheck it.
check-success = Matrixone CI / SCA Test on Ubuntu/x86
check-neutral = Matrixone CI / SCA Test on Ubuntu/x86
check-skipped = Matrixone CI / SCA Test on Ubuntu/x86
any of [🛡 GitHub branch protection]:
check-success = Matrixone Compose CI / multi cn e2e bvt test docker compose(Optimistic/PUSH)
check-neutral = Matrixone Compose CI / multi cn e2e bvt test docker compose(Optimistic/PUSH)
check-skipped = Matrixone Compose CI / multi cn e2e bvt test docker compose(Optimistic/PUSH)
any of [🛡 GitHub branch protection]:
check-skipped = Matrixone Utils CI / Coverage
check-neutral = Matrixone Utils CI / Coverage
check-success = Matrixone Utils CI / Coverage
Reason
The merge conditions cannot be satisfied due to failing checks
Hint
You may have to fix your CI before adding the pull request to the queue again.
If you update this pull request, to fix the CI, it will automatically be requeued once the queue conditions match again.
If you think this was a flaky issue instead, you can requeue the pull request, without updating it, by posting a @mergifyio requeue comment.
check-success = Matrixone Compose CI / multi cn e2e bvt test docker compose(PESSIMISTIC)
check-neutral = Matrixone Compose CI / multi cn e2e bvt test docker compose(PESSIMISTIC)
check-skipped = Matrixone Compose CI / multi cn e2e bvt test docker compose(PESSIMISTIC)
any of [🛡 GitHub branch protection]:
check-success = Matrixone Standlone CI / Multi-CN e2e BVT Test on Linux/x64(LAUNCH, PROXY)
check-neutral = Matrixone Standlone CI / Multi-CN e2e BVT Test on Linux/x64(LAUNCH, PROXY)
check-skipped = Matrixone Standlone CI / Multi-CN e2e BVT Test on Linux/x64(LAUNCH, PROXY)
any of [🛡 GitHub branch protection]:
check-success = Matrixone Standlone CI / e2e BVT Test on Linux/x64(LAUNCH, PESSIMISTIC)
check-neutral = Matrixone Standlone CI / e2e BVT Test on Linux/x64(LAUNCH, PESSIMISTIC)
check-skipped = Matrixone Standlone CI / e2e BVT Test on Linux/x64(LAUNCH, PESSIMISTIC)
any of [🛡 GitHub branch protection]:
check-success = Matrixone CI / SCA Test on Ubuntu/x86
check-neutral = Matrixone CI / SCA Test on Ubuntu/x86
check-skipped = Matrixone CI / SCA Test on Ubuntu/x86
any of [🛡 GitHub branch protection]:
check-success = Matrixone CI / UT Test on Ubuntu/x86
check-neutral = Matrixone CI / UT Test on Ubuntu/x86
check-skipped = Matrixone CI / UT Test on Ubuntu/x86
any of [🛡 GitHub branch protection]:
check-success = Matrixone Compose CI / multi cn e2e bvt test docker compose(Optimistic/PUSH)
check-neutral = Matrixone Compose CI / multi cn e2e bvt test docker compose(Optimistic/PUSH)
check-skipped = Matrixone Compose CI / multi cn e2e bvt test docker compose(Optimistic/PUSH)
any of [🛡 GitHub branch protection]:
check-success = Matrixone Standlone CI / e2e BVT Test on Linux/x64(LAUNCH,Optimistic)
check-neutral = Matrixone Standlone CI / e2e BVT Test on Linux/x64(LAUNCH,Optimistic)
check-skipped = Matrixone Standlone CI / e2e BVT Test on Linux/x64(LAUNCH,Optimistic)
any of [🛡 GitHub branch protection]:
check-success = Matrixone Upgrade CI / Compatibility Test With Target on Linux/x64(LAUNCH)
check-neutral = Matrixone Upgrade CI / Compatibility Test With Target on Linux/x64(LAUNCH)
check-skipped = Matrixone Upgrade CI / Compatibility Test With Target on Linux/x64(LAUNCH)
any of [🛡 GitHub branch protection]:
check-skipped = Matrixone Utils CI / Coverage
check-neutral = Matrixone Utils CI / Coverage
check-success = Matrixone Utils CI / Coverage
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
kind/bugSomething isn't workingsize/LDenotes a PR that changes [500,999] lines
8 participants
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What type of PR is this?
Which issue(s) this PR fixes:
issue #12963
What this PR does / why we need it:
Root Cause
We need MySQL‑compatible idle disconnect behavior for wait_timeout / interactive_timeout.
The previous behavior wasn’t observable because idle timeout wasn’t being applied consistently at read time, and tests were often run via the proxy port (which doesn’t enforce CN idle timeout). In addition, the mysql client auto‑reconnects by default, which can mask disconnections.
Fix
Apply wait_timeout as the read timeout before each request read.
For interactive clients, only at login we overwrite session.wait_timeout with interactive_timeout (one‑time override).
Disallow GLOBAL changes to wait_timeout / interactive_timeout (cloud policy).
Add session‑level min/max hard limits validation.
Added minimal unit tests covering interactive/non‑interactive behavior, session/global restrictions, and boundary checks.
Verification SQL / Steps (direct CN connection, not proxy)
Use mysql --skip-reconnect to avoid auto‑reconnect masking the disconnect.
Interactive client (should disconnect):
set session wait_timeout=3;
-- idle 6 seconds
select 1; -- expected: ERROR 2013 / Lost connection
Interactive client (should NOT disconnect):
set session interactive_timeout=3;
-- idle 6 seconds
select 1; -- expected: returns 1
Non‑interactive client (batch; should disconnect):
set session wait_timeout=3;
-- idle 6 seconds
select 1; -- expected: ERROR 2013 / Lost connection
We changed the default wait_timeout and interactive_timeout from 28800 to 86400 to align with the cloud policy and login flow. In cloud mode, SET GLOBAL for these variables is blocked, but timeout values are needed before tenant login, when tenant-specific configs are not yet available. So we use 86400 (24h) as a safe pre-login fallback, and then override session values with tenant settings from mo_mysql_compatibility_mode after login.