Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[cherry-pick-16594] : fix moc3399 #16611

Merged
merged 3 commits into from
Jun 4, 2024

Conversation

jensenojs
Copy link
Contributor

@jensenojs jensenojs commented Jun 4, 2024

User description

What type of PR is this?

  • API-change
  • BUG
  • Improvement
  • Documentation
  • Feature
  • Test and CI
  • Code Refactoring

Which issue(s) this PR fixes:

issue #https://github.com/matrixorigin/MO-Cloud/issues/3399

What this PR does / why we need it:

When truncate table, if the table does not have any auto-incr col, there is no need to call the Reset interface of increment_service


PR Type

Bug fix


Description

  • Added logic to check for the presence of auto-increment columns before calling the Reset method of incrservice in the TruncateTable function.
  • Added logic to check for the presence of auto-increment columns before calling the Delete method of incrservice in the DropTable function.
  • Prevented unnecessary calls to the auto-increment service if no auto-increment columns are present, optimizing performance and avoiding potential errors.

Changes walkthrough 📝

Relevant files
Bug fix
ddl.go
Add checks for auto-increment columns in table operations

pkg/sql/compile/ddl.go

  • Added checks for auto-increment columns before calling Reset in
    TruncateTable.
  • Added checks for auto-increment columns before calling Delete in
    DropTable.
  • Prevent unnecessary calls to incrservice if no auto-increment columns
    are present.
  • +53/-21 

    💡 PR-Agent usage:
    Comment /help on the PR to get a list of all available PR-Agent tools and their descriptions

    When truncate table, if the table does not have any auto-incr col, there is no need to call the Reset interface of increment_service
    
    Approved by: @ouyuanning, @sukki37
    Copy link

    PR-Agent was enabled for this repository. To continue using it, please link your git user with your CodiumAI identity here.

    PR Review 🔍

    ⏱️ Estimated effort to review [1-5]

    2, because the changes are localized to specific functions within a single file and involve adding conditional checks before performing operations. The logic is straightforward, making it relatively easy to review.

    🧪 Relevant tests

    No

    ⚡ Possible issues

    Possible Bug: The check for auto-increment columns (if col.Typ.AutoIncr) assumes that all necessary columns are correctly defined in tblDef.Cols with the AutoIncr attribute properly set. If there are any discrepancies in how columns are defined or if the AutoIncr attribute is not set correctly even when it should be, this could lead to incorrect behavior where the Reset or Delete methods are not called when needed.

    🔒 Security concerns

    No

    @matrix-meow matrix-meow added the size/S Denotes a PR that changes [10,99] lines label Jun 4, 2024
    @mergify mergify bot added the kind/bug Something isn't working label Jun 4, 2024
    Copy link

    PR-Agent was enabled for this repository. To continue using it, please link your git user with your CodiumAI identity here.

    PR Code Suggestions ✨

    CategorySuggestion                                                                                                                                    Score
    Maintainability
    Refactor repeated logic for checking auto-increment columns into a helper function

    To improve readability and maintainability, consider refactoring the repeated logic for
    checking if a table contains an auto-increment column into a separate helper function.
    This will reduce code duplication and make the code easier to manage.

    pkg/sql/compile/ddl.go [1962-1969]

    -tblDef := rel.GetTableDef(c.ctx)
    -var containAuto bool
    -for _, col := range tblDef.Cols {
    -    if col.Typ.AutoIncr {
    -        containAuto = true
    -        break
    +containAuto := containsAutoIncrementColumn(rel.GetTableDef(c.ctx))
    +
    +// Helper function
    +func containsAutoIncrementColumn(tblDef TableDef) bool {
    +    for _, col := range tblDef.Cols {
    +        if col.Typ.AutoIncr {
    +            return true
    +        }
         }
    +    return false
     }
     
    Suggestion importance[1-10]: 8

    Why: The suggestion correctly identifies repeated code across multiple sections and proposes a maintainable solution by introducing a helper function. This significantly improves code maintainability and readability.

    8
    Possible bug
    Add a nil check for tblDef to prevent potential nil pointer dereference

    Add a check to ensure tblDef is not nil before accessing its columns to avoid potential
    nil pointer dereference errors.

    pkg/sql/compile/ddl.go [1962-1964]

     tblDef := rel.GetTableDef(c.ctx)
    +if tblDef == nil {
    +    return errors.New("table definition is nil")
    +}
     var containAuto bool
     for _, col := range tblDef.Cols {
     
    Suggestion importance[1-10]: 7

    Why: This suggestion addresses a potential bug of nil pointer dereference by adding a nil check before accessing tblDef.Cols. This is a crucial check that enhances the robustness of the code.

    7
    Best practice
    Log the error before returning it to aid in debugging

    Consider logging the error before returning it to provide more context for debugging
    purposes.

    pkg/sql/compile/ddl.go [1977-1978]

     if err != nil {
    +    log.Errorf("Failed to reset auto-increment value: %v", err)
         return err
     }
     
    Suggestion importance[1-10]: 6

    Why: Adding logging before returning an error is a good practice for debugging. This suggestion correctly identifies where additional context could be helpful for error analysis.

    6
    Wrap the error with additional context for better traceability

    Use a consistent error handling approach by wrapping the error with additional context
    using fmt.Errorf for better error traceability.

    pkg/sql/compile/ddl.go [1977-1978]

     if err != nil {
    -    return err
    +    return fmt.Errorf("failed to reset auto-increment value: %w", err)
     }
     
    Suggestion importance[1-10]: 6

    Why: Wrapping errors with additional context using fmt.Errorf is a best practice that aids in error traceability. This suggestion is correctly applied to the error handling in the code.

    6

    @mergify mergify bot merged commit c558ed4 into matrixorigin:main Jun 4, 2024
    16 of 18 checks passed
    @jensenojs jensenojs deleted the cherry-pick-16594 branch June 4, 2024 09:29
    XuPeng-SH pushed a commit to XuPeng-SH/matrixone that referenced this pull request Jun 4, 2024
    * GC needs to consume all the mo_snapshot tables (matrixorigin#16539)
    
    Each tenant of the current mo has a mo_snapshot table to store snapshot information. GC needs to consume all mo_snapshot tables.
    
    Approved by: @XuPeng-SH
    
    * append log for upgrade and sqlExecutoer (matrixorigin#16575)
    
    append log for upgrader and sqlExecutor
    
    Approved by: @daviszhen, @badboynt1, @zhangxu19830126, @m-schen
    
    * [enhancement] proxy: filter CNs that are not in working state. (matrixorigin#16558)
    
    1. filter CNs that are not in working state.
    2. add some logs for migration
    
    Approved by: @zhangxu19830126
    
    * fix lock service ut (matrixorigin#16517)
    
    fix lock service ut
    
    Approved by: @zhangxu19830126
    
    * Add cost of GC Check (matrixorigin#16470)
    
    To avoid List() operations on oss, tke or s3, you need to add the Cost interface.
    
    Approved by: @reusee, @XuPeng-SH
    
    * optimize explain info for tp/ap query (matrixorigin#16578)
    
    optimize explain info for tp/ap query
    
    Approved by: @daviszhen, @ouyuanning, @aunjgr
    
    * Bvt disable trace (matrixorigin#16581)
    
    aim to exclude the `system,system_metrics` part case.
    changes:
    1. move `cases/table/system_table_cases` system,system_metrics part into individule case file.
    
    Approved by: @heni02
    
    * remove log print from automaxprocs (matrixorigin#16546)
    
    remove log print from automaxprocs
    
    Approved by: @triump2020, @m-schen, @ouyuanning, @aunjgr, @zhangxu19830126
    
    * rmTag15901 (matrixorigin#16585)
    
    rm 15901
    
    Approved by: @heni02
    
    * remove some MustStrCol&MustBytesCol (matrixorigin#16361)
    
    Remove some unnecessary MustStrCol, MustBytesCol calls.
    
    Approved by: @daviszhen, @reusee, @m-schen, @aunjgr, @XuPeng-SH
    
    * add bvt tag (matrixorigin#16589)
    
    add bvt tag
    
    Approved by: @heni02, @aressu1985
    
    * fix a bug that cause load performance regression issue (matrixorigin#16600)
    
    fix a bug that cause load performance regression issue
    
    Approved by: @m-schen
    
    * add case for restore pub_sub (matrixorigin#16602)
    
    add case for restore pub_sub
    
    Approved by: @heni02
    
    * add shard service kernel (matrixorigin#16565)
    
    Add shardservice kernel.
    
    Approved by: @reusee, @m-schen, @daviszhen, @XuPeng-SH, @volgariver6, @badboynt1, @ouyuanning, @triump2020, @w-zr, @sukki37, @aunjgr, @fengttt
    
    * [BugFix]: Use L2DistanceSq instead of L2Distance during IndexScan (matrixorigin#16366)
    
    During `KNN Select` and `Mapping Entries to Centroids via CROSS_JOIN_L2`, we can make use of L2DistanceSq instead of L2Distance, as it avoids `Sqrt()`. We can see the improvement in QPS for SIFT128 from 90 to 100. However, for GIST960, the QPS did not change much.
    
    L2DistanceSq is suitable only when there is a comparison (ie ORDER BY), and when the absolute value (ie actual L2Distance) is not required.
    - In the case of `CROSS JOIN L2` we find the nearest centroid for the Entry using `L2DistanceSq`. `CROSS JOIN L2` is used in both INSERT and CREATE INDEX.
    - In the case of `KNN SELECT`, our query has ORDER BY L2_DISTANCE(...), which can make use of `L2DistanceSq` as the L2Distance value is not explicitly required.
    
    **NOTE:** L2DistanceSq is not suitable in Kmenas++ for Centroid Computation, as it will impact the centroids picked.
    
    Approved by: @heni02, @m-schen, @aunjgr, @badboynt1
    
    * add sharding metrics (matrixorigin#16606)
    
    add sharding metrics
    
    Approved by: @aptend
    
    * fix data race (matrixorigin#16608)
    
    fix data race
    
    Approved by: @reusee
    
    * Refactor reshape (matrixorigin#15879)
    
    Reshape objects block by block.
    
    Approved by: @XuPeng-SH
    
    * refactor system variables to support account isolation (matrixorigin#16551)
    
    - system variable now is account isolated
    - table `mo_mysql_compatibility_mode` only saves delta info between account's and cluster's default system variable values
    - always use session variable except `show global variables`
    
    Approved by: @daviszhen, @aunjgr, @aressu1985
    
    * fix merge
    
    * [cherry-pick-16594] : fix moc3399 (matrixorigin#16611)
    
    When truncate table, if the table does not have any auto-incr col, there is no need to call the Reset interface of increment_service
    
    Approved by: @ouyuanning
    
    * bump go to 1.22.3, fix make compose and optimize ut script (matrixorigin#16604)
    
    1. bump go version from 1.21.5 to 1.22.3
    2. fix `make compose` to make it work
    3. `make ut` will read `UT_WORKDIR` env variable to store report, it will be `$HOME` if `UT_WORKDIR` is empty
    
    Approved by: @zhangxu19830126, @sukki37
    
    * remove isMerge from build operator (matrixorigin#16622)
    
    remove isMerge from build operator
    
    Approved by: @m-schen
    
    ---------
    
    Co-authored-by: GreatRiver <2552853833@qq.com>
    Co-authored-by: qingxinhome <70939751+qingxinhome@users.noreply.github.com>
    Co-authored-by: LiuBo <g.user.lb@gmail.com>
    Co-authored-by: iamlinjunhong <49111204+iamlinjunhong@users.noreply.github.com>
    Co-authored-by: nitao <badboynt@126.com>
    Co-authored-by: Jackson <xzxiong@yeah.net>
    Co-authored-by: Ariznawlll <ariznawl@163.com>
    Co-authored-by: Wei Ziran <weiziran125@gmail.com>
    Co-authored-by: YANGGMM <www.yangzhao123@gmail.com>
    Co-authored-by: fagongzi <zhangxu19830126@gmail.com>
    Co-authored-by: Arjun Sunil Kumar <arjunsk@users.noreply.github.com>
    Co-authored-by: Kai Cao <ck89119@users.noreply.github.com>
    Co-authored-by: Jensen <jensenojs@qq.com>
    Co-authored-by: brown <endeavorjia@gmail.com>
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    Bug fix kind/bug Something isn't working Review effort [1-5]: 2 size/S Denotes a PR that changes [10,99] lines
    Projects
    None yet
    Development

    Successfully merging this pull request may close these issues.

    3 participants