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

[enhancement] proxy: filter CNs that are not in working state. #16558

Merged
merged 4 commits into from
Jun 3, 2024

Conversation

volgariver6
Copy link
Contributor

@volgariver6 volgariver6 commented May 31, 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 #16357

What this PR does / why we need it:

  1. filter CNs that are not in working state.
  2. add some logs for migration

PR Type

Enhancement, Other


Description

  • Added logging for connection migration from server, including details such as server address, tenant, username, connection ID, database, and number of prepared statements.
  • Filtered out CN services that are not in a working state in the collectTunnels function.
  • Added logging for building new server connections, including previous server address and errors if connection building fails.

Changes walkthrough 📝

Relevant files
Enhancement
conn_migration.go
Add logging for connection migration details.                       

pkg/proxy/conn_migration.go

  • Added logging for connection migration from server.
  • Included details such as server address, tenant, username, connection
    ID, database, and number of prepared statements.
  • +9/-0     
    rebalancer.go
    Filter out non-working CN services in rebalancer.               

    pkg/proxy/rebalancer.go

  • Filtered out CN services that are not in a working state.
  • Updated the collectTunnels function to include this filtering.
  • +6/-0     
    tunnel.go
    Add logging for new server connection attempts.                   

    pkg/proxy/tunnel.go

  • Added logging for building new server connections.
  • Logged previous server address and errors if connection building
    fails.
  • +7/-1     

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

    Copy link

    PR Review 🔍

    ⏱️ Estimated effort to review [1-5]

    2, because the changes are straightforward and localized to specific functions within the codebase. The modifications include adding logging statements and filtering logic, which are not complex but require validation to ensure they are correctly implemented and do not affect existing functionalities.

    🧪 Relevant tests

    No

    ⚡ Possible issues

    Logging Level: Ensure that the logging level (Info, Error) is appropriate for the scenarios described. Over-logging at a high level can clutter log files and obscure important information.

    Error Handling: In the new logging for error scenarios, ensure that the error handling is not changed or impacted negatively by the new log statements.

    🔒 Security concerns

    No

    Copy link

    PR Code Suggestions ✨

    CategorySuggestion                                                                                                                                    Score
    Security
    Mask or omit sensitive information in log statements to enhance security

    To avoid potential logging of sensitive information, consider masking or omitting
    sensitive data such as username and tenant in the log statement.

    pkg/proxy/conn_migration.go [58-64]

     c.log.Info("connection migrate from server", zap.String("server address", addr),
    -    zap.String("tenant", string(c.clientInfo.Tenant)),
    -    zap.String("username", c.clientInfo.username),
    +    zap.String("tenant", "****"),
    +    zap.String("username", "****"),
         zap.Uint32("conn ID", c.connID),
         zap.String("DB", r.DB),
         zap.Int("prepare stmt num", len(r.PrepareStmts)),
     )
     
    Suggestion importance[1-10]: 9

    Why: The suggestion correctly identifies a potential security risk by logging sensitive information and provides a solution to mask this data. This is crucial for protecting user privacy and security.

    9
    Possible bug
    Add a nil check for t.mu.serverConn to prevent potential nil pointer dereference

    To avoid potential nil pointer dereference, add a nil check for t.mu.serverConn before
    accessing its RemoteAddr method.

    pkg/proxy/tunnel.go [401-402]

    -prevAddr := t.mu.serverConn.RemoteAddr().String()
    +var prevAddr string
    +if t.mu.serverConn != nil {
    +    prevAddr = t.mu.serverConn.RemoteAddr().String()
    +}
     t.logger.Info("build connection with new server", zap.String("prev addr", prevAddr))
     
    Suggestion importance[1-10]: 8

    Why: Adding a nil check is a crucial improvement as it prevents a potential runtime error that could crash the application. This suggestion addresses a possible bug.

    8
    Maintainability
    Refactor repeated condition checks into a helper function to improve maintainability

    Instead of repeating the same condition to check WorkState, consider refactoring the code
    to use a helper function that encapsulates this logic, improving maintainability.

    pkg/proxy/rebalancer.go [168-170]

    -if s.WorkState != metadata.WorkState_Working {
    +if !isServiceWorking(s) {
         return
     }
     
    +...
    +
    +func isServiceWorking(s *metadata.CNService) bool {
    +    return s.WorkState == metadata.WorkState_Working
    +}
    +
    Suggestion importance[1-10]: 7

    Why: The suggestion to refactor repeated code into a helper function is valid and improves code maintainability. However, it's a moderate improvement as it mainly affects code readability and structure.

    7
    Enhancement
    Combine error message and context into a single log statement for better readability

    To enhance the readability and consistency of the error logging, consider combining the
    error message and context into a single log statement.

    pkg/proxy/tunnel.go [405-408]

    -t.logger.Error("failed to build connection with new server",
    -    zap.String("prev addr", prevAddr),
    -    zap.Error(err),
    -)
    +t.logger.Error("failed to build connection with new server", 
    +    zap.String("prev addr", prevAddr), 
    +    zap.Error(err))
     
    Suggestion importance[1-10]: 5

    Why: The suggestion improves the readability of the log statements, but the impact is relatively minor as it mainly affects the style and consistency of the logging.

    5

    @matrix-meow matrix-meow added the size/S Denotes a PR that changes [10,99] lines label May 31, 2024
    @mergify mergify bot merged commit e26237e into matrixorigin:main Jun 3, 2024
    17 of 18 checks passed
    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
    Projects
    None yet
    Development

    Successfully merging this pull request may close these issues.

    None yet

    3 participants