oceanbase / oceanbase/seekdb

Concurrent limiting rule fails to activate after deleting uppercase rule and re-creating lowercase rule

Open
#504 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

dima type: bug
Dominant language
C++
Stars
2.9k
Forks
342
Avg merge
2d 14h
Merged PRs (30d)
53

Description

Environment

Version information from bin/observer -V:

Starting seekdb (OceanBase seekdb) source revision 1-210636544cac7e10193998a38d7ce8e36cd031ad.
seekdb (OceanBase seekdb)

REVISION: 1-210636544cac7e10193998a38d7ce8e36cd031ad
BUILD_BRANCH: master
BUILD_TIME: Mar 27 2026 02:11:59
BUILD_FLAGS: RelWithDebInfo
BUILD_INFO: 

Copyright (c) 2011-present OceanBase Inc.

Description / Steps to Reproduce

After creating a lowercase concurrent limiting rule, deleting a rule with the same name in uppercase, and then re-creating the lowercase rule, the concurrent limiting rule does not take effect. The expected error ERROR 11087 (HY000): SQL reach max ccl rule ccl_t1_rule_cafe, concurrent num 0 is not reported.

Reproduction Steps (using mysqltest on macOS)
  1. Set up the environment and run the test:

    cd /Users/admin/jingtu/macbranch/oceanbase-lite/tools/deploy
    source activate_obd.sh
    sh deploy_android_seekdb.sh
    export OCEANBASE_HOME=/Users/admin/jingtu/macbranch/oceanbase-lite
    
    obd test mysqltest android_seekdb \
      --mysqltest-bin=${OCEANBASE_HOME}/deps/3rd/u01/obclient/bin/mysqltest \
      --obclient-bin=${OCEANBASE_HOME}/deps/3rd/u01/obclient/bin/obclient \
      --init-only \
      --init-sql-dir=${OCEANBASE_HOME}/tools/deploy \
      --init-sql-files='init.sql,init_user.sql|root@sys|test'
    
    obd test mysqltest android_seekdb \
      --mysqltest-bin=${OCEANBASE_HOME}/deps/3rd/u01/obclient/bin/mysqltest \
      --obclient-bin=${OCEANBASE_HOME}/deps/3rd/u01/obclient/bin/obclient \
      --disable-reboot \
      --test-set=ccl.ccl_other_mysql
    
  2. The test SQL (ccl.ccl_other_mysql) includes the following sequence:

    drop table ccl_t1;
    
    create table ccl_t1 (c1 int, c2 varchar(32));
    
    insert into ccl_t1 values(1, '123');
    insert into ccl_t1 values(2, '456');
    insert into ccl_t1 values(3, '789');
    
    select * from ccl_t1 where c2 = 123;
    
    -- By default *lower_case_table_names = 1*
    -- 1
    -- 1.1 lower-upper case
    CREATE CONCURRENT_LIMITING_RULE ccl_t1_rule_cafe
    ON test.ccl_t1
    TO '%'@'%'
    FOR select
    WITH MAX_CONCURRENCY = 0;
    
    -- Upper rule name, should drop successfully
    DROP CONCURRENT_LIMITING_RULE CCL_t1_rule_cafe;
    
    -- 1.2 special character
    -- cafe and café are the same in mysql
    CREATE CONCURRENT_LIMITING_RULE ccl_t1_rule_café
    ON test.ccl_t1
    TO '%'@'%'
    FOR select
    WITH MAX_CONCURRENCY = 0;
    
    -- rule name should be "ccl_t1_rule_café"
    select ccl_rule_name from oceanbase.DBA_OB_CCL_RULES;
    
    DROP CONCURRENT_LIMITING_RULE ccl_t1_rule_cafe;
    
    -- 2
    -- 2.1 By default, the behavior of affect table name controled by *lower_case_table_names*
    CREATE CONCURRENT_LIMITING_RULE ccl_t1_rule_cafe
    ON test.CCL_t1
    TO '%'@'%'
    FOR select
    WITH MAX_CONCURRENCY = 0;
    --sleep 5;
    
    -- compare is not lower case sensitive
    --error 0,11087
    select * from ccl_t1;
    
  3. The test output shows the select * from ccl_t1; query succeeds when it should fail with error 11087.

Test output showing the query succeeded

Note

Mapping between the "Target Branch" and "Iteration" attributes on the right side: https://work.oceanbase-dev.com/automerge/iteration-branch-map

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the ccl.ccl_other_mysql mysqltest case and the setup commands under tools/deploy. Reproduce the rule deletion and recreation sequence, then trace the concurrent limiting rule handling involved in the test. Done means the final SELECT reports error 11087 after the lowercase rule is recreated.

Written by the indexing model from the issue text.

Assessment

Tech stack
mysql
Domain
databases
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.