Repository navigation
Conversation
…and scan bugs pin the fallback library build, the installer fallback and the ci matrix to the v10.1.0 tag. 5.1.0 relies on 10.1.0 detaching iterators when a transaction is reset or freed, and still writes format 10, so databases move freely between 5.0.0 and 5.1.0. cmake changes for the mariadb foundry. the plugin now includes cpack itself when built outside the server source tree, as mariadb asked, since mariadb_add_plugin no longer does it for projects that add several plugins, while inside the server tree it leaves cpack to the server. the fallback library build enables each compression backend only when its library and header are present, so a builder without zstd, lz4 or snappy gets an uncompressed engine instead of a failed build. max over a primary key behind an equality prefix returned null because the backward seek started from the bare prefix and stopped one entry early. the pk part is now padded to its full length first. adds tidesdb_minmax_prefix. bulk statements no longer reset the connection transaction mid statement, which under 10.1.0 ended the source scan of an insert into select or an alter copy early and committed it short with no error. each batch now continues in a fresh transaction and the committed ones are freed when the transaction ends. a clean transaction whose statement will reach the batch threshold moves to read committed up front, so concurrent bulk loaders no longer conflict. the scan iterator is freed at the end of every statement. keeping it let another connection that picked up the handler from the table cache free it while the owner was committing, which crashed the server under concurrent load. unique secondary indexes now hold across concurrent snapshot transactions. each unique value also writes a sentinel keyed by table, index and value into the reserved __tidesdb_uniq column family, so two writers of one value conflict at commit. adds tidesdb_unique_concurrent. a row that fails to decrypt now fails the statement instead of reading back as zeroed columns, and an in place index build meeting one stops. adds tidesdb_encryption_bad_key. the equality ranges of an in list reuse one iterator per statement instead of opening a bounded one per value. adds tidesdb_eq_range_reuse. transient locked results from the library are retried briefly in the wrappers instead of reaching the client as lock wait timeouts. tidesdb_max_open_sstables defaults to 0, which uses the library default of 1024. new status counters, tidesdb_commit_conflicts and the tidesdb_stmt counters by cause. the galera suite config regains the line disabling ssl for state transfers, and the manual was checked against the code throughout and corrected where it was wrong.
…rimary key lookup with no row at or below its target landed on a table meta key and was stepped forward to the table's first row, which mariadb 11.4 discarded by checking the prefix itself but 13 returns as the answer. a backward lookup that does not land on a data key now finds no row, and a prefix last read verifies the prefix on both the primary key and secondary index paths. tidesdb_encryption_bad_key reads every row by key instead of one, since the row envelope carries no integrity check and a wrong key can decrypt a single row to garbage that passes the cipher's padding check about one time in 256.
…g columns of a composite primary key seeked to the first key at or after the prefix and returned it without checking it carried the prefix, so a prefix with no rows read back the first row of the next one. this gave a wrong count or max on any server and failed ci on mariadb 13, which plans that max as a primary key lookup. the read now reports not found when the row does not match, and tidesdb_minmax_prefix adds lookups of missing prefixes.
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
…and scan bugs
pin the fallback library build, the installer fallback and the ci matrix to the v10.1.0 tag. 5.1.0 relies on 10.1.0 detaching iterators when a transaction is reset or freed, and still writes format 10, so databases move freely between 5.0.0 and 5.1.0.
cmake changes for the mariadb foundry. the plugin now includes cpack itself when built outside the server source tree, as mariadb asked, since mariadb_add_plugin no longer does it for projects that add several plugins, while inside the server tree it leaves cpack to the server. the fallback library build enables each compression backend only when its library and header are present, so a builder without zstd, lz4 or snappy gets an uncompressed engine instead of a failed build.
max over a primary key behind an equality prefix returned null because the backward seek started from the bare prefix and stopped one entry early. the pk part is now padded to its full length first. adds tidesdb_minmax_prefix.
bulk statements no longer reset the connection transaction mid statement, which under 10.1.0 ended the source scan of an insert into select or an alter copy early and committed it short with no error. each batch now continues in a fresh transaction and the committed ones are freed when the transaction ends. a clean transaction whose statement will reach the batch threshold moves to read committed up front, so concurrent bulk loaders no longer conflict.
the scan iterator is freed at the end of every statement. keeping it let another connection that picked up the handler from the table cache free it while the owner was committing, which crashed the server under concurrent load.
unique secondary indexes now hold across concurrent snapshot transactions. each unique value also writes a sentinel keyed by table, index and value into the reserved __tidesdb_uniq column family, so two writers of one value conflict at commit. adds tidesdb_unique_concurrent.
a row that fails to decrypt now fails the statement instead of reading back as zeroed columns, and an in place index build meeting one stops. adds tidesdb_encryption_bad_key.
the equality ranges of an in list reuse one iterator per statement instead of opening a bounded one per value. adds tidesdb_eq_range_reuse.
transient locked results from the library are retried briefly in the wrappers instead of reaching the client as lock wait timeouts. tidesdb_max_open_sstables defaults to 0, which uses the library default of 1024. new status counters, tidesdb_commit_conflicts and the tidesdb_stmt counters by cause.
the galera suite config regains the line disabling ssl for state transfers, and the manual was checked against the code throughout and corrected where it was wrong.