Skip to content

1.42.17

Compare
Choose a tag to compare
@github-actions github-actions released this 30 Aug 01:02

Merged PRs

dolt

  • 8311: [kvexec] fix more lookup bugs related to schema/projection inconsistencies
    We were using the full table schema to index a covering index KV pair. The fix has to be sensitive to covering, non-covering, and keyless tables, which required extra tests on the GMS side to check all cases.
    fixes: #8308
    re: dolthub/go-mysql-server#2646
  • 8303: Perf: Optimize SQL transaction commits in binlog replication applier
    The binlog replication applier process is responsible for applying the replicated updates from a MySQL source to the Dolt replica. Previously, when committing SQL transactions after applying a change, the applier would attempt to commit on all known databases. This worked when the number of databases was small, but when the server is handling hundreds of databases, it adds noticeable and unnecessary delay. This change switches to use the dirty tracking data of the session to more efficiently commit to only the databases that have had changes applied.

    Performance Comparison

    The old SQL transaction commit logic scaled exponentially, while the new logic scales linearly.
    Num Databases Code Path Replication Time (s)
    100 Old 11.02
    300 Old 144.34
    500 Old 633.44
    100 New 6.79
    300 New 20.51
    500 New 36.04
  • 8294: Feature: Data conflict resolution during interactive rebase
    When data conflicts occur during an interactive rebase, customers can now use Dolt's conflict resolution tools to resolve the conflicts and continue the rebase operation. Note that schema conflicts are not supported yet.
    Example:
    > select * from dolt_rebase;
    +--------------+--------+----------------------------------+----------------------------+
    | rebase_order | action | commit_hash                      | commit_message             |
    +--------------+--------+----------------------------------+----------------------------+
    | 1.00         | drop   | iumpo2t0hd6drcn11jo8osdack1jmafp | inserting row 1 on branch1 |
    | 2.00         | pick   | us2uaji20dj77cnf1i2l698itr5392se | updating row 1 on branch1  |
    +--------------+--------+----------------------------------+----------------------------+
    > call dolt_rebase('--continue');
    data conflict detected while rebasing commit us2uaji20dj77cnf1i2l698itr5392se (updating row 1 on branch1).
    Resolve the conflicts and remove them from the dolt_conflicts_<table> tables, then continue the rebase by calling dolt_rebase('--continue')
    > select * from dolt_conflicts_t;
    +----------------------------------+---------+---------+--------+--------+---------------+----------+----------+-----------------+------------------------+
    | from_root_ish                    | base_pk | base_c1 | our_pk | our_c1 | our_diff_type | their_pk | their_c1 | their_diff_type | dolt_conflict_id       |
    +----------------------------------+---------+---------+--------+--------+---------------+----------+----------+-----------------+------------------------+
    | us2uaji20dj77cnf1i2l698itr5392se | 1       | one     | NULL   | NULL   | removed       | 1        | uno      | modified        | B1dLxGtGIlHRKJo88tigpw |
    +----------------------------------+---------+---------+--------+--------+---------------+----------+----------+-----------------+------------------------+
    > call dolt_conflicts_resolve('--theirs', 't');
    +--------+
    | status |
    +--------+
    | 0      |
    +--------+
    > call dolt_add('t');
    > call dolt_rebase('--continue');
    +--------+-----------------------------------------------------+
    | status | message                                             |
    +--------+-----------------------------------------------------+
    | 0      | Successfully rebased and updated refs/heads/branch1 |
    +--------+-----------------------------------------------------+
    Customer issue: #7820

go-mysql-server

  • 2644: Fix Integration Workflow
    This makes a few changes to how the integration workflow is handled:
    • main is now merged into this PR before testing. Previously, we would just use the PR as-is, which created a situation where the main branch included changes that the PR had not yet merged in. This created an issue as Dolt and DoltgreSQL would expect some changes to be present that were not yet merged into the PR, causing compilation errors. By merging main, we bypass this. In addition, the workflow will automatically pass if a merge conflict is detected. I think this is fine, since conflicts must be resolved before the PR can be merged anyway. This does mean that some errors may not be caught for as long as merge conflicts against main exist.
    • We only pulled comments, and the PR description does not count as a comment. This made it seem a bit inconsistent with how PR detection was handled. This has now been added, and we're now doing a basic string search instead of using a JSON parser, as concatenating the comments and description does not result in a valid JSON object.
    • Workflow should automatically run when a comment is added, modified, or deleted. This was already supposed to happen, but the event structure differed between a comment and push in a subtle way, causing the workflow to immediately error and for the UI to continue displaying the previous run. This made it seem as though the workflow did not respond to comment updates.
    • Additional logging messages have been added, so it's easier to debug if something goes wrong in the future.
  • 2641: Correctly handle indexes on virtual columns
    Fixes #8276
    Lots of small behaviors around virtual columns were not working correctly:
    • Adding an index on a virtual column triggered a table rebuild even when this wasn't necessary
    • Rebuilding a table that contained virtual columns could lead to incorrect results
    • Inserting into a table with a virtual column could update indexes incorrectly
    • Adding a generated column to the start of a table could lead to incorrect results
      This PR adds tests for these cases and fixes them by tweaking the logic for projections on tables with generated columns.

Closed Issues

  • 8308: Empty result set from query with INNER JOIN + WHERE

Performance

Read Tests MySQL Dolt Multiple
covering_index_scan 2.07 0.65 0.3
groupby_scan 13.7 16.71 1.2
index_join 1.37 2.66 1.9
index_join_scan 1.3 2.11 1.6
index_scan 34.95 54.83 1.6
oltp_point_select 0.18 0.3 1.7
oltp_read_only 3.49 5.77 1.7
select_random_points 0.34 0.67 2.0
select_random_ranges 0.39 0.69 1.8
table_scan 34.95 54.83 1.6
types_table_scan 75.82 144.97 1.9
reads_mean_multiplier 1.6
Write Tests MySQL Dolt Multiple
oltp_delete_insert 8.13 5.99 0.7
oltp_insert 3.82 2.97 0.8
oltp_read_write 8.58 11.87 1.4
oltp_update_index 3.89 3.02 0.8
oltp_update_non_index 3.89 2.97 0.8
oltp_write_only 5.37 6.09 1.1
types_delete_insert 7.7 6.43 0.8
writes_mean_multiplier 0.9
TPC-C TPS Tests MySQL Dolt Multiple
tpcc-scale-factor-1 98.27 39.08 2.5
tpcc_tps_multiplier 2.5
Overall Mean Multiple 1.67