1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00
commit 184a4a2d82f4f6f3cbcb1015bcdb32bebe73315c
Author: Abhinav Sharma <abhinavsharma@fb.com>
Date:   Thu Sep 14 11:40:08 2017 -0700

    Bump rocksdb submodule

    Summary:
    Bump rocksdb to include the fix for rocksdb.trx_info_rpl

    The bug was introduced in: https://github.com/facebook/rocksdb/pull/2850
    Fixed in: https://github.com/facebook/rocksdb/pull/2881

    update-submodule: rocksdb

    Reviewed By: lth

    Differential Revision: D5834658

    fbshipit-source-id: d1551bf
This commit is contained in:
Sergei Petrunia
2017-09-15 10:04:49 +00:00
parent 43d5edf97c
commit 3fae64b196
107 changed files with 8419 additions and 412 deletions

View File

@@ -106,6 +106,12 @@ IF (NOT "$ENV{WITH_ZSTD}" STREQUAL "")
ADD_DEFINITIONS(-DZSTD) ADD_DEFINITIONS(-DZSTD)
ENDIF() ENDIF()
IF (NOT "$ENV{WITH_TBB}" STREQUAL "")
SET(rocksdb_static_libs ${rocksdb_static_libs}
$ENV{WITH_TBB}/libtbb${PIC_EXT}.a)
ADD_DEFINITIONS(-DTBB)
ENDIF()
CHECK_INCLUDE_FILES(zlib.h HAVE_ZLIB_H) CHECK_INCLUDE_FILES(zlib.h HAVE_ZLIB_H)
IF (HAVE_ZLIB_H) IF (HAVE_ZLIB_H)

File diff suppressed because it is too large Load Diff

View File

@@ -22,6 +22,7 @@
/* C++ standard header files */ /* C++ standard header files */
#include <set> #include <set>
#include <string> #include <string>
#include <unordered_map>
#include <unordered_set> #include <unordered_set>
#include <vector> #include <vector>
@@ -235,6 +236,12 @@ const char *const RDB_TTL_COL_QUALIFIER = "ttl_col";
*/ */
#define ROCKSDB_SIZEOF_TTL_RECORD sizeof(longlong) #define ROCKSDB_SIZEOF_TTL_RECORD sizeof(longlong)
/*
Maximum index prefix length in bytes.
*/
#define MAX_INDEX_COL_LEN_LARGE 3072
#define MAX_INDEX_COL_LEN_SMALL 767
/* /*
MyRocks specific error codes. NB! Please make sure that you will update MyRocks specific error codes. NB! Please make sure that you will update
HA_ERR_ROCKSDB_LAST when adding new ones. Also update the strings in HA_ERR_ROCKSDB_LAST when adding new ones. Also update the strings in
@@ -293,7 +300,14 @@ struct Rdb_table_handler {
/* Stores cumulative table statistics */ /* Stores cumulative table statistics */
my_io_perf_atomic_t m_io_perf_read; my_io_perf_atomic_t m_io_perf_read;
my_io_perf_atomic_t m_io_perf_write;
Rdb_atomic_perf_counters m_table_perf_context; Rdb_atomic_perf_counters m_table_perf_context;
/* Stores cached memtable estimate statistics */
std::atomic_uint m_mtcache_lock;
uint64_t m_mtcache_count;
uint64_t m_mtcache_size;
uint64_t m_mtcache_last_update;
}; };
class Rdb_key_def; class Rdb_key_def;
@@ -360,6 +374,8 @@ struct st_global_stats {
ib_counter_t<ulonglong, 64, RDB_INDEXER> system_rows[ROWS_MAX]; ib_counter_t<ulonglong, 64, RDB_INDEXER> system_rows[ROWS_MAX];
ib_counter_t<ulonglong, 64, RDB_INDEXER> queries[QUERIES_MAX]; ib_counter_t<ulonglong, 64, RDB_INDEXER> queries[QUERIES_MAX];
ib_counter_t<ulonglong, 64, RDB_INDEXER> covered_secondary_key_lookups;
}; };
/* Struct used for exporting status to MySQL */ /* Struct used for exporting status to MySQL */
@@ -379,6 +395,8 @@ struct st_export_stats {
ulonglong queries_point; ulonglong queries_point;
ulonglong queries_range; ulonglong queries_range;
ulonglong covered_secondary_key_lookups;
}; };
/* Struct used for exporting RocksDB memory status */ /* Struct used for exporting RocksDB memory status */
@@ -387,6 +405,27 @@ struct st_memory_stats {
ulonglong memtable_unflushed; ulonglong memtable_unflushed;
}; };
/* Struct used for exporting RocksDB IO stalls stats */
struct st_io_stall_stats {
ulonglong level0_slowdown;
ulonglong level0_slowdown_with_compaction;
ulonglong level0_numfiles;
ulonglong level0_numfiles_with_compaction;
ulonglong stop_for_pending_compaction_bytes;
ulonglong slowdown_for_pending_compaction_bytes;
ulonglong memtable_compaction;
ulonglong memtable_slowdown;
ulonglong total_stop;
ulonglong total_slowdown;
st_io_stall_stats()
: level0_slowdown(0), level0_slowdown_with_compaction(0),
level0_numfiles(0), level0_numfiles_with_compaction(0),
stop_for_pending_compaction_bytes(0),
slowdown_for_pending_compaction_bytes(0), memtable_compaction(0),
memtable_slowdown(0), total_stop(0), total_slowdown(0) {}
};
} // namespace myrocks } // namespace myrocks
#include "./rdb_buff.h" #include "./rdb_buff.h"
@@ -495,6 +534,12 @@ class ha_rocksdb : public my_core::handler {
Pointer to the original TTL timestamp value (8 bytes) during UPDATE. Pointer to the original TTL timestamp value (8 bytes) during UPDATE.
*/ */
char m_ttl_bytes[ROCKSDB_SIZEOF_TTL_RECORD]; char m_ttl_bytes[ROCKSDB_SIZEOF_TTL_RECORD];
/*
The TTL timestamp value can change if the explicit TTL column is
updated. If we detect this when updating the PK, we indicate it here so
we know we must always update any SK's.
*/
bool m_ttl_bytes_updated;
/* rowkey of the last record we've read, in StorageFormat. */ /* rowkey of the last record we've read, in StorageFormat. */
String m_last_rowkey; String m_last_rowkey;
@@ -541,7 +586,9 @@ class ha_rocksdb : public my_core::handler {
bool m_update_scope_is_valid; bool m_update_scope_is_valid;
/* SST information used for bulk loading the primary key */ /* SST information used for bulk loading the primary key */
std::shared_ptr<Rdb_sst_info> m_sst_info; std::unique_ptr<Rdb_sst_info> m_sst_info;
/* External merge sorts for bulk load: key ID -> merge sort instance */
std::unordered_map<GL_INDEX_ID, Rdb_index_merge> m_key_merge;
Rdb_transaction *m_bulk_load_tx; Rdb_transaction *m_bulk_load_tx;
/* Mutex to protect finalizing bulk load */ /* Mutex to protect finalizing bulk load */
mysql_mutex_t m_bulk_load_mutex; mysql_mutex_t m_bulk_load_mutex;
@@ -636,6 +683,13 @@ class ha_rocksdb : public my_core::handler {
/* Setup field_decoders based on type of scan and table->read_set */ /* Setup field_decoders based on type of scan and table->read_set */
void setup_read_decoders(); void setup_read_decoders();
/*
For the active index, indicates which columns must be covered for the
current lookup to be covered. If the bitmap field is null, that means this
index does not cover the current lookup for any record.
*/
MY_BITMAP m_lookup_bitmap = {nullptr, 0, 0, nullptr, nullptr};
/* /*
Number of bytes in on-disk (storage) record format that are used for Number of bytes in on-disk (storage) record format that are used for
storing SQL NULL flags. storing SQL NULL flags.
@@ -854,11 +908,7 @@ public:
DBUG_RETURN(MAX_REF_PARTS); DBUG_RETURN(MAX_REF_PARTS);
} }
uint max_supported_key_part_length() const override { uint max_supported_key_part_length() const override;
DBUG_ENTER_FUNC();
DBUG_RETURN(2048);
}
/** @brief /** @brief
unireg.cc will call this to make sure that the storage engine can handle unireg.cc will call this to make sure that the storage engine can handle
@@ -1040,9 +1090,13 @@ private:
rocksdb::Slice *const packed_rec) rocksdb::Slice *const packed_rec)
MY_ATTRIBUTE((__nonnull__)); MY_ATTRIBUTE((__nonnull__));
bool should_hide_ttl_rec(const rocksdb::Slice &ttl_rec_val, bool should_hide_ttl_rec(const Rdb_key_def &kd,
const rocksdb::Slice &ttl_rec_val,
const int64_t curr_ts) const int64_t curr_ts)
MY_ATTRIBUTE((__warn_unused_result__)); MY_ATTRIBUTE((__warn_unused_result__));
void rocksdb_skip_expired_records(const Rdb_key_def &kd,
rocksdb::Iterator *const iter,
bool seek_backward);
int index_first_intern(uchar *buf) int index_first_intern(uchar *buf)
MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); MY_ATTRIBUTE((__nonnull__, __warn_unused_result__));
@@ -1076,8 +1130,10 @@ private:
struct unique_sk_buf_info *sk_info) struct unique_sk_buf_info *sk_info)
MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); MY_ATTRIBUTE((__nonnull__, __warn_unused_result__));
int bulk_load_key(Rdb_transaction *const tx, const Rdb_key_def &kd, int bulk_load_key(Rdb_transaction *const tx, const Rdb_key_def &kd,
const rocksdb::Slice &key, const rocksdb::Slice &value) const rocksdb::Slice &key, const rocksdb::Slice &value,
bool sort)
MY_ATTRIBUTE((__nonnull__, __warn_unused_result__)); MY_ATTRIBUTE((__nonnull__, __warn_unused_result__));
void update_bytes_written(ulonglong bytes_written);
int update_pk(const Rdb_key_def &kd, const struct update_row_info &row_info, int update_pk(const Rdb_key_def &kd, const struct update_row_info &row_info,
const bool &pk_changed) MY_ATTRIBUTE((__warn_unused_result__)); const bool &pk_changed) MY_ATTRIBUTE((__warn_unused_result__));
int update_sk(const TABLE *const table_arg, const Rdb_key_def &kd, int update_sk(const TABLE *const table_arg, const Rdb_key_def &kd,

View File

@@ -76,6 +76,7 @@ bool rdb_is_ttl_read_filtering_enabled();
int rdb_dbug_set_ttl_rec_ts(); int rdb_dbug_set_ttl_rec_ts();
int rdb_dbug_set_ttl_snapshot_ts(); int rdb_dbug_set_ttl_snapshot_ts();
int rdb_dbug_set_ttl_read_filter_ts(); int rdb_dbug_set_ttl_read_filter_ts();
bool rdb_dbug_set_ttl_ignore_pk();
#endif #endif
enum operation_type : int; enum operation_type : int;

View File

@@ -0,0 +1,21 @@
#
# A helper include file for prefix index index-only query tests
#
# Parameters:
# $prefix_index_check_title - title of the test
# $prefix_index_check_query - test query
# $prefix_index_check_read_avoided_delta - expected change of
# 'rocksdb_covered_secondary_key_lookups' status variable
# value after running the query
--let $show_count_statement = show status like 'rocksdb_covered_secondary_key_lookups'
--echo # $prefix_index_check_title
--let $base_count = query_get_value($show_count_statement, Value, 1)
--eval $prefix_index_check_query
--let $count = query_get_value($show_count_statement, Value, 1)
--let $assert_text= $prefix_index_check_title: $prefix_index_check_read_avoided_delta rocksdb_covered_secondary_key_lookups
--let $assert_cond= $count - $base_count = $prefix_index_check_read_avoided_delta
--source include/assert.inc

View File

@@ -5,3 +5,4 @@ sql-mode=NO_ENGINE_SUBSTITUTION
explicit-defaults-for-timestamp=1 explicit-defaults-for-timestamp=1
rocksdb_lock_wait_timeout=1 rocksdb_lock_wait_timeout=1
rocksdb_strict_collation_check=0 rocksdb_strict_collation_check=0
rocksdb_force_compute_memtable_stats_cachetime=0

View File

@@ -4,20 +4,20 @@ CREATE DATABASE mysqlslap;
USE mysqlslap; USE mysqlslap;
CREATE TABLE t1(id BIGINT AUTO_INCREMENT, value BIGINT, PRIMARY KEY(id)) ENGINE=rocksdb; CREATE TABLE t1(id BIGINT AUTO_INCREMENT, value BIGINT, PRIMARY KEY(id)) ENGINE=rocksdb;
# 2PC enabled, MyRocks durability enabled # 2PC enabled, MyRocks durability enabled
SET GLOBAL rocksdb_enable_2pc=0; SET GLOBAL rocksdb_enable_2pc=1;
SET GLOBAL rocksdb_flush_log_at_trx_commit=1; SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
## 2PC + durability + single thread ## 2PC + durability + single thread
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs'; select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
select case when variable_value-@c = 1000 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_wal_group_syncs'; select case when variable_value-@c = 1000 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
case when variable_value-@c = 1000 then 'true' else 'false' end case when variable_value-@c = 1000 then 'true' else 'false' end
false true
## 2PC + durability + group commit ## 2PC + durability + group commit
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs'; select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
select case when variable_value-@c > 0 and variable_value-@c < 10000 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_wal_group_syncs'; select case when variable_value-@c > 0 and variable_value-@c < 10000 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
case when variable_value-@c > 0 and variable_value-@c < 10000 then 'true' else 'false' end case when variable_value-@c > 0 and variable_value-@c < 10000 then 'true' else 'false' end
false true
# 2PC enabled, MyRocks durability disabled # 2PC enabled, MyRocks durability disabled
SET GLOBAL rocksdb_enable_2pc=0; SET GLOBAL rocksdb_enable_2pc=1;
SET GLOBAL rocksdb_flush_log_at_trx_commit=0; SET GLOBAL rocksdb_flush_log_at_trx_commit=0;
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs'; select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
select case when variable_value-@c = 0 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_wal_group_syncs'; select case when variable_value-@c = 0 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
@@ -28,16 +28,16 @@ select case when variable_value-@c = 0 then 'true' else 'false' end from informa
case when variable_value-@c = 0 then 'true' else 'false' end case when variable_value-@c = 0 then 'true' else 'false' end
true true
# 2PC disabled, MyRocks durability enabled # 2PC disabled, MyRocks durability enabled
SET GLOBAL rocksdb_enable_2pc=1; SET GLOBAL rocksdb_enable_2pc=0;
SET GLOBAL rocksdb_flush_log_at_trx_commit=1; SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs'; select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
select case when variable_value-@c = 0 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_wal_group_syncs'; select case when variable_value-@c = 0 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
case when variable_value-@c = 0 then 'true' else 'false' end case when variable_value-@c = 0 then 'true' else 'false' end
false true
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs'; select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
select case when variable_value-@c = 0 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_wal_group_syncs'; select case when variable_value-@c = 0 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
case when variable_value-@c = 0 then 'true' else 'false' end case when variable_value-@c = 0 then 'true' else 'false' end
false true
SET GLOBAL rocksdb_enable_2pc=1; SET GLOBAL rocksdb_enable_2pc=1;
SET GLOBAL rocksdb_flush_log_at_trx_commit=1; SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
DROP TABLE t1; DROP TABLE t1;

View File

@@ -284,12 +284,16 @@ DROP TABLE t1;
set global rocksdb_bulk_load=1; set global rocksdb_bulk_load=1;
# Establish connection con1 (user=root) # Establish connection con1 (user=root)
# Switch to connection con1 # Switch to connection con1
show global variables like 'rocksdb_bulk_load'; show global variables like 'rocksdb_bulk_load%';
Variable_name Value Variable_name Value
rocksdb_bulk_load ON rocksdb_bulk_load ON
show session variables like 'rocksdb_bulk_load'; rocksdb_bulk_load_allow_unsorted OFF
rocksdb_bulk_load_size 1000
show session variables like 'rocksdb_bulk_load%';
Variable_name Value Variable_name Value
rocksdb_bulk_load ON rocksdb_bulk_load ON
rocksdb_bulk_load_allow_unsorted OFF
rocksdb_bulk_load_size 1000
CREATE TABLE t1 (i INT, j INT, PRIMARY KEY (i)) ENGINE = ROCKSDB; CREATE TABLE t1 (i INT, j INT, PRIMARY KEY (i)) ENGINE = ROCKSDB;
INSERT INTO t1 VALUES (1,1); INSERT INTO t1 VALUES (1,1);
# Disconnecting on con1 # Disconnecting on con1
@@ -327,10 +331,11 @@ SET @prior_rocksdb_strict_collation_check= @@rocksdb_strict_collation_check;
SET @prior_rocksdb_merge_buf_size = @@rocksdb_merge_buf_size; SET @prior_rocksdb_merge_buf_size = @@rocksdb_merge_buf_size;
SET global rocksdb_strict_collation_check = off; SET global rocksdb_strict_collation_check = off;
SET session rocksdb_merge_combine_read_size = 566; SET session rocksdb_merge_combine_read_size = 566;
SET session rocksdb_merge_buf_size = 336; SET session rocksdb_merge_buf_size = 340;
show variables like '%rocksdb_bulk_load%'; show variables like 'rocksdb_bulk_load%';
Variable_name Value Variable_name Value
rocksdb_bulk_load OFF rocksdb_bulk_load OFF
rocksdb_bulk_load_allow_unsorted OFF
rocksdb_bulk_load_size 1000 rocksdb_bulk_load_size 1000
CREATE TABLE t1 (a VARCHAR(80)) ENGINE=RocksDB; CREATE TABLE t1 (a VARCHAR(80)) ENGINE=RocksDB;
INSERT INTO t1 (a) VALUES (REPEAT("a", 80)); INSERT INTO t1 (a) VALUES (REPEAT("a", 80));

View File

@@ -16,4 +16,30 @@ INSERT INTO t1 VALUES(20);
INSERT INTO t1 VALUES(21); INSERT INTO t1 VALUES(21);
SET rocksdb_bulk_load=0; SET rocksdb_bulk_load=0;
ERROR HY000: Lost connection to MySQL server during query ERROR HY000: Lost connection to MySQL server during query
TRUNCATE TABLE t1;
SET rocksdb_bulk_load_allow_unsorted=1;
SET rocksdb_bulk_load=1;
INSERT INTO t1 VALUES(100);
INSERT INTO t1 VALUES(101);
INSERT INTO t1 VALUES(99);
SET rocksdb_bulk_load=0;
SELECT * FROM t1;
pk
99
100
101
TRUNCATE TABLE t1;
SET rocksdb_bulk_load=1;
INSERT INTO t1 VALUES(201);
INSERT INTO t1 VALUES(200);
INSERT INTO t1 VALUES(202);
INSERT INTO t1 VALUES(201);
ERROR 23000: Failed to insert the record: the key already exists
SET rocksdb_bulk_load=0;
SELECT * FROM t1;
pk
200
201
202
SET rocksdb_bulk_load_allow_unsorted=DEFAULT;
DROP TABLE t1; DROP TABLE t1;

View File

@@ -0,0 +1,101 @@
DROP TABLE IF EXISTS t1;
SET rocksdb_bulk_load_size=3;
SET rocksdb_bulk_load_allow_unsorted=1;
CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1");
SET rocksdb_bulk_load=1;
SELECT * FROM t1;
a b
SET rocksdb_bulk_load=0;
SELECT * FROM t1;
a b
-3 5
-1 3
2 0
4 -2
6 -4
DROP TABLE t1;
CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1", KEY(b));
SET rocksdb_bulk_load=1;
SELECT * FROM t1;
a b
6 -4
4 -2
2 0
-1 3
-3 5
SET rocksdb_bulk_load=0;
DROP TABLE t1;
CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1");
CREATE TABLE t2(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1");
SET rocksdb_bulk_load=1;
INSERT INTO t1 VALUES (1,1);
INSERT INTO t2 VALUES (1,1);
SELECT * FROM t1;
a b
1 1
INSERT INTO t1 VALUES (2,2);
SELECT * FROM t2;
a b
1 1
SELECT * FROM t1;
a b
1 1
SET rocksdb_bulk_load=0;
SELECT * FROM t1;
a b
1 1
2 2
DROP TABLE t1, t2;
CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1");
CREATE TABLE t2(a INT, b INT, PRIMARY KEY(b) COMMENT "cf1");
CREATE TABLE t3(a INT, b INT, PRIMARY KEY(a) COMMENT "cf1")
PARTITION BY KEY() PARTITIONS 4;
set session transaction isolation level repeatable read;
select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS';
STAT_TYPE VALUE
DB_NUM_SNAPSHOTS 0
start transaction with consistent snapshot;
select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS';
STAT_TYPE VALUE
DB_NUM_SNAPSHOTS 1
set rocksdb_bulk_load=1;
set rocksdb_bulk_load_size=100000;
LOAD DATA INFILE <input_file> INTO TABLE t1;
LOAD DATA INFILE <input_file> INTO TABLE t2;
LOAD DATA INFILE <input_file> INTO TABLE t3;
set rocksdb_bulk_load=0;
SHOW TABLE STATUS WHERE name LIKE 't%';
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
t1 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
t2 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
t3 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
ANALYZE TABLE t1, t2, t3;
Table Op Msg_type Msg_text
test.t1 analyze status OK
test.t2 analyze status OK
test.t3 analyze status OK
SHOW TABLE STATUS WHERE name LIKE 't%';
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
t1 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
t2 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
t3 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
select count(a) from t1;
count(a)
5000000
select count(b) from t1;
count(b)
5000000
select count(a) from t2;
count(a)
5000000
select count(b) from t2;
count(b)
5000000
select count(a) from t3;
count(a)
5000000
select count(b) from t3;
count(b)
5000000
DROP TABLE t1, t2, t3;
SET rocksdb_bulk_load_allow_unsorted=0;

View File

@@ -0,0 +1,4 @@
SET rocksdb_bulk_load=1;
SET rocksdb_bulk_load_allow_unsorted=1;
ERROR HY000: Error when executing command SET: Cannot change this setting while bulk load is enabled
SET rocksdb_bulk_load=0;

View File

@@ -0,0 +1,10 @@
DROP TABLE IF EXISTS stats_test_table;
CREATE TABLE stats_test_table (a INT, b INT, PRIMARY KEY (a)) ENGINE=ROCKSDB;
SET GLOBAL rocksdb_perf_context_level=3;
INSERT INTO stats_test_table VALUES (7,1);
INSERT INTO stats_test_table VALUES (2,2);
SELECT io_write_bytes > 0 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_NAME = "stats_test_table";
io_write_bytes > 0
1
DROP TABLE stats_test_table;
SET GLOBAL rocksdb_perf_context_level=DEFAULT;

View File

@@ -5,7 +5,7 @@ connection con1;
CREATE TABLE t1 (a INT, pk INT AUTO_INCREMENT PRIMARY KEY) ENGINE=ROCKSDB; CREATE TABLE t1 (a INT, pk INT AUTO_INCREMENT PRIMARY KEY) ENGINE=ROCKSDB;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
START TRANSACTION WITH CONSISTENT SNAPSHOT; START TRANSACTION WITH CONSISTENT SNAPSHOT;
ERROR: 1938 ERROR: 12048
connection con2; connection con2;
select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS'; select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS';
STAT_TYPE VALUE STAT_TYPE VALUE
@@ -18,7 +18,7 @@ STAT_TYPE VALUE
DB_NUM_SNAPSHOTS 0 DB_NUM_SNAPSHOTS 0
connection con1; connection con1;
START TRANSACTION WITH CONSISTENT SNAPSHOT; START TRANSACTION WITH CONSISTENT SNAPSHOT;
ERROR: 1938 ERROR: 12048
connection con2; connection con2;
INSERT INTO t1 (a) VALUES (1); INSERT INTO t1 (a) VALUES (1);
connection con1; connection con1;
@@ -69,7 +69,7 @@ id value value2
5 5 5 5 5 5
6 6 6 6 6 6
START TRANSACTION WITH CONSISTENT SNAPSHOT; START TRANSACTION WITH CONSISTENT SNAPSHOT;
ERROR: 1938 ERROR: 12048
connection con2; connection con2;
INSERT INTO r1 values (7,7,7); INSERT INTO r1 values (7,7,7);
connection con1; connection con1;
@@ -107,12 +107,12 @@ id value value2
7 7 7 7 7 7
8 8 8 8 8 8
START TRANSACTION WITH CONSISTENT SNAPSHOT; START TRANSACTION WITH CONSISTENT SNAPSHOT;
ERROR: 1938 ERROR: 12048
connection con2; connection con2;
INSERT INTO r1 values (9,9,9); INSERT INTO r1 values (9,9,9);
connection con1; connection con1;
START TRANSACTION WITH CONSISTENT SNAPSHOT; START TRANSACTION WITH CONSISTENT SNAPSHOT;
ERROR: 1938 ERROR: 12048
connection con2; connection con2;
INSERT INTO r1 values (10,10,10); INSERT INTO r1 values (10,10,10);
connection con1; connection con1;
@@ -129,7 +129,7 @@ id value value2
9 9 9 9 9 9
10 10 10 10 10 10
START TRANSACTION WITH CONSISTENT SNAPSHOT; START TRANSACTION WITH CONSISTENT SNAPSHOT;
ERROR: 1938 ERROR: 12048
INSERT INTO r1 values (11,11,11); INSERT INTO r1 values (11,11,11);
ERROR: 0 ERROR: 0
SELECT * FROM r1; SELECT * FROM r1;

View File

@@ -125,7 +125,7 @@ id value value2
START TRANSACTION WITH CONSISTENT SNAPSHOT; START TRANSACTION WITH CONSISTENT SNAPSHOT;
ERROR: 0 ERROR: 0
INSERT INTO r1 values (11,11,11); INSERT INTO r1 values (11,11,11);
ERROR: 1935 ERROR: 12045
SELECT * FROM r1; SELECT * FROM r1;
id value value2 id value value2
1 1 1 1 1 1

View File

@@ -0,0 +1,73 @@
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
id INT,
fake_id INT,
bigfield VARCHAR(4096),
PRIMARY KEY (id),
KEY bf (bigfield(32)),
KEY fid (fake_id, bigfield(32))
) ENGINE=rocksdb;
INSERT INTO t1 VALUES (1, 1001, REPEAT('a', 1)),
(8, 1008, REPEAT('b', 8)),
(24, 1024, REPEAT('c', 24)),
(31, 1031, REPEAT('d', 31)),
(32, 1032, REPEAT('x', 32)),
(33, 1033, REPEAT('y', 33)),
(128, 1128, REPEAT('z', 128));
SELECT * FROM t1;
id fake_id bigfield
1 1001 a
8 1008 bbbbbbbb
24 1024 cccccccccccccccccccccccc
31 1031 ddddddddddddddddddddddddddddddd
32 1032 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
33 1033 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
128 1128 zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
# Eligible for optimization, access via fake_id only
SELECT id, bigfield FROM t1 FORCE INDEX(fid) WHERE fake_id = 1031;
id bigfield
31 ddddddddddddddddddddddddddddddd
include/assert.inc [Eligible for optimization, access via fake_id only: 2 rocksdb_covered_secondary_key_lookups]
# Not eligible for optimization, access via fake_id of big row.
SELECT id, bigfield FROM t1 FORCE INDEX(fid) WHERE fake_id = 1033;
id bigfield
33 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
include/assert.inc [Not eligible for optimization, access via fake_id of big row.: 0 rocksdb_covered_secondary_key_lookups]
DROP TABLE t1;
set session debug= '+d,MYROCKS_NO_COVERED_BITMAP_FORMAT';
CREATE TABLE t1 (
id INT,
fake_id INT,
bigfield VARCHAR(4096),
PRIMARY KEY (id),
KEY bf (bigfield(32)),
KEY fid (fake_id, bigfield(32))
) ENGINE=rocksdb;
set session debug= '-d,MYROCKS_NO_COVERED_BITMAP_FORMAT';
INSERT INTO t1 VALUES (1, 1001, REPEAT('a', 1)),
(8, 1008, REPEAT('b', 8)),
(24, 1024, REPEAT('c', 24)),
(31, 1031, REPEAT('d', 31)),
(32, 1032, REPEAT('x', 32)),
(33, 1033, REPEAT('y', 33)),
(128, 1128, REPEAT('z', 128));
SELECT * FROM t1;
id fake_id bigfield
1 1001 a
8 1008 bbbbbbbb
24 1024 cccccccccccccccccccccccc
31 1031 ddddddddddddddddddddddddddddddd
32 1032 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
33 1033 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
128 1128 zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
# No longer eligible for optimization since no covered bitmap was stored.
SELECT id, bigfield FROM t1 FORCE INDEX(fid) WHERE fake_id = 1031;
id bigfield
31 ddddddddddddddddddddddddddddddd
include/assert.inc [No longer eligible for optimization since no covered bitmap was stored.: 0 rocksdb_covered_secondary_key_lookups]
# Not eligible for optimization.
SELECT id, bigfield FROM t1 FORCE INDEX(fid) WHERE fake_id = 1033;
id bigfield
33 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
include/assert.inc [Not eligible for optimization.: 0 rocksdb_covered_secondary_key_lookups]
DROP TABLE t1;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,490 @@
set @prior_lock_wait_timeout = @@rocksdb_lock_wait_timeout;
set @prior_deadlock_detect = @@rocksdb_deadlock_detect;
set @prior_max_latest_deadlocks = @@rocksdb_max_latest_deadlocks;
set global rocksdb_deadlock_detect = on;
set global rocksdb_lock_wait_timeout = 10000;
# Clears deadlock buffer of any prior deadlocks.
set global rocksdb_max_latest_deadlocks = 0;
set global rocksdb_max_latest_deadlocks = @prior_max_latest_deadlocks;
create table t (i int primary key) engine=rocksdb;
insert into t values (1), (2), (3);
show engine rocksdb transaction status;
Type Name Status
rocksdb
============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================
---------
SNAPSHOTS
---------
LIST OF SNAPSHOTS FOR EACH SESSION:
----------LATEST DETECTED DEADLOCKS----------
-----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
=========================================
Deadlock #1
begin;
select * from t where i=1 for update;
i
1
begin;
select * from t where i=2 for update;
i
2
select * from t where i=2 for update;
select * from t where i=1 for update;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
rollback;
i
2
rollback;
show engine rocksdb transaction status;
Type Name Status
rocksdb
============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================
---------
SNAPSHOTS
---------
LIST OF SNAPSHOTS FOR EACH SESSION:
----------LATEST DETECTED DEADLOCKS----------
*** DEADLOCK PATH
=========================================
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
---------------WAITING FOR---------------
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
---------------WAITING FOR---------------
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
--------TXN_ID GOT DEADLOCK---------
-----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
=========================================
Deadlock #2
begin;
select * from t where i=1 for update;
i
1
begin;
select * from t where i=2 for update;
i
2
select * from t where i=2 for update;
select * from t where i=1 for update;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
rollback;
i
2
rollback;
show engine rocksdb transaction status;
Type Name Status
rocksdb
============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================
---------
SNAPSHOTS
---------
LIST OF SNAPSHOTS FOR EACH SESSION:
----------LATEST DETECTED DEADLOCKS----------
*** DEADLOCK PATH
=========================================
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
---------------WAITING FOR---------------
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
---------------WAITING FOR---------------
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
--------TXN_ID GOT DEADLOCK---------
*** DEADLOCK PATH
=========================================
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
---------------WAITING FOR---------------
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
---------------WAITING FOR---------------
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
--------TXN_ID GOT DEADLOCK---------
-----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
=========================================
set global rocksdb_max_latest_deadlocks = 10;
Deadlock #3
begin;
select * from t where i=1 for update;
i
1
begin;
select * from t where i=2 for update;
i
2
select * from t where i=2 for update;
select * from t where i=1 for update;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
rollback;
i
2
rollback;
show engine rocksdb transaction status;
Type Name Status
rocksdb
============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================
---------
SNAPSHOTS
---------
LIST OF SNAPSHOTS FOR EACH SESSION:
----------LATEST DETECTED DEADLOCKS----------
*** DEADLOCK PATH
=========================================
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
---------------WAITING FOR---------------
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
---------------WAITING FOR---------------
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
--------TXN_ID GOT DEADLOCK---------
*** DEADLOCK PATH
=========================================
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
---------------WAITING FOR---------------
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
---------------WAITING FOR---------------
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
--------TXN_ID GOT DEADLOCK---------
*** DEADLOCK PATH
=========================================
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
---------------WAITING FOR---------------
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
---------------WAITING FOR---------------
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
--------TXN_ID GOT DEADLOCK---------
-----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
=========================================
set global rocksdb_max_latest_deadlocks = 1;
show engine rocksdb transaction status;
Type Name Status
rocksdb
============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================
---------
SNAPSHOTS
---------
LIST OF SNAPSHOTS FOR EACH SESSION:
----------LATEST DETECTED DEADLOCKS----------
*** DEADLOCK PATH
=========================================
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
---------------WAITING FOR---------------
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
---------------WAITING FOR---------------
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
--------TXN_ID GOT DEADLOCK---------
-----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
=========================================
set rocksdb_deadlock_detect_depth = 2;
Deadlock #4
begin;
select * from t where i=1 for update;
i
1
begin;
select * from t where i=2 for update;
i
2
begin;
select * from t where i=3 for update;
i
3
select * from t where i=2 for update;
select * from t where i=3 for update;
select * from t where i=1 for update;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
rollback;
i
3
rollback;
i
2
rollback;
set global rocksdb_max_latest_deadlocks = 5;
show engine rocksdb transaction status;
Type Name Status
rocksdb
============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================
---------
SNAPSHOTS
---------
LIST OF SNAPSHOTS FOR EACH SESSION:
----------LATEST DETECTED DEADLOCKS----------
-------DEADLOCK EXCEEDED MAX DEPTH-------
-----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
=========================================
Deadlock #5
begin;
select * from t where i=1 for update;
i
1
begin;
select * from t where i=2 for update;
i
2
begin;
select * from t where i=3 lock in share mode;
i
3
select * from t where i=100 for update;
i
select * from t where i=101 for update;
i
select * from t where i=2 for update;
select * from t where i=3 lock in share mode;
i
3
select * from t where i=200 for update;
i
select * from t where i=201 for update;
i
select * from t where i=1 lock in share mode;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
rollback;
i
2
rollback;
rollback;
show engine rocksdb transaction status;
Type Name Status
rocksdb
============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================
---------
SNAPSHOTS
---------
LIST OF SNAPSHOTS FOR EACH SESSION:
----------LATEST DETECTED DEADLOCKS----------
*** DEADLOCK PATH
=========================================
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
---------------WAITING FOR---------------
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: SHARED
INDEX NAME: PRIMARY
TABLE NAME: test.t
---------------WAITING FOR---------------
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: PRIMARY
TABLE NAME: test.t
--------TXN_ID GOT DEADLOCK---------
-------DEADLOCK EXCEEDED MAX DEPTH-------
-----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
=========================================
set global rocksdb_lock_wait_timeout = @prior_lock_wait_timeout;
set global rocksdb_deadlock_detect = @prior_deadlock_detect;
drop table t;
show engine rocksdb transaction status;
Type Name Status
rocksdb
============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================
---------
SNAPSHOTS
---------
LIST OF SNAPSHOTS FOR EACH SESSION:
----------LATEST DETECTED DEADLOCKS----------
*** DEADLOCK PATH
=========================================
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: NOT FOUND; IDX_ID
TABLE NAME: NOT FOUND; IDX_ID
---------------WAITING FOR---------------
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: SHARED
INDEX NAME: NOT FOUND; IDX_ID
TABLE NAME: NOT FOUND; IDX_ID
---------------WAITING FOR---------------
TXN_ID
COLUMN FAMILY NAME: default
KEY
LOCK TYPE: EXCLUSIVE
INDEX NAME: NOT FOUND; IDX_ID
TABLE NAME: NOT FOUND; IDX_ID
--------TXN_ID GOT DEADLOCK---------
-------DEADLOCK EXCEEDED MAX DEPTH-------
-----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
=========================================
set global rocksdb_max_latest_deadlocks = 0;
# Clears deadlock buffer of any existent deadlocks.
set global rocksdb_max_latest_deadlocks = @prior_max_latest_deadlocks;
show engine rocksdb transaction status;
Type Name Status
rocksdb
============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================
---------
SNAPSHOTS
---------
LIST OF SNAPSHOTS FOR EACH SESSION:
----------LATEST DETECTED DEADLOCKS----------
-----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
=========================================

View File

@@ -3,6 +3,9 @@ DROP TABLE IF EXISTS t2;
DROP TABLE IF EXISTS t3; DROP TABLE IF EXISTS t3;
DROP TABLE IF EXISTS t4; DROP TABLE IF EXISTS t4;
DROP TABLE IF EXISTS t5; DROP TABLE IF EXISTS t5;
call mtr.add_suppression("Column family 'cf1' not found");
call mtr.add_suppression("Column family 'rev:cf2' not found");
call mtr.add_suppression("LibRocksDB");
set global rocksdb_compact_cf = 'cf1'; set global rocksdb_compact_cf = 'cf1';
set global rocksdb_compact_cf = 'rev:cf2'; set global rocksdb_compact_cf = 'rev:cf2';
set global rocksdb_signal_drop_index_thread = 1; set global rocksdb_signal_drop_index_thread = 1;

View File

@@ -3,6 +3,8 @@ DROP TABLE IF EXISTS t2;
DROP TABLE IF EXISTS t3; DROP TABLE IF EXISTS t3;
DROP TABLE IF EXISTS t4; DROP TABLE IF EXISTS t4;
DROP TABLE IF EXISTS t5; DROP TABLE IF EXISTS t5;
call mtr.add_suppression("Column family 'cf1' not found");
call mtr.add_suppression("Column family 'rev:cf2' not found");
set global rocksdb_compact_cf = 'cf1'; set global rocksdb_compact_cf = 'cf1';
set global rocksdb_compact_cf = 'rev:cf2'; set global rocksdb_compact_cf = 'rev:cf2';
set global rocksdb_signal_drop_index_thread = 1; set global rocksdb_signal_drop_index_thread = 1;

View File

@@ -1,4 +1,6 @@
DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t1;
call mtr.add_suppression("Column family 'cf1' not found");
call mtr.add_suppression("Column family 'rev:cf2' not found");
set global rocksdb_compact_cf = 'cf1'; set global rocksdb_compact_cf = 'cf1';
set global rocksdb_compact_cf = 'rev:cf2'; set global rocksdb_compact_cf = 'rev:cf2';
set global rocksdb_signal_drop_index_thread = 1; set global rocksdb_signal_drop_index_thread = 1;

View File

@@ -178,16 +178,20 @@ id1 id2 id3
9 17 9 9 17 9
DROP TABLE t1; DROP TABLE t1;
DROP TABLE t2; DROP TABLE t2;
set global rocksdb_large_prefix=1;
CREATE TABLE t1 (id1 varchar(128) CHARACTER SET latin1 COLLATE latin1_bin, CREATE TABLE t1 (id1 varchar(128) CHARACTER SET latin1 COLLATE latin1_bin,
id2 varchar(256) CHARACTER SET utf8 COLLATE utf8_bin, id2 varchar(256) CHARACTER SET utf8 COLLATE utf8_bin,
id3 varchar(200) CHARACTER SET latin1 COLLATE latin1_swedish_ci, id3 varchar(200) CHARACTER SET latin1 COLLATE latin1_swedish_ci,
PRIMARY KEY (id1, id2, id3), PRIMARY KEY (id1, id2, id3),
UNIQUE KEY (id3, id1)) ENGINE=ROCKSDB; UNIQUE KEY (id3, id1)) ENGINE=ROCKSDB;
set global rocksdb_large_prefix=DEFAULT;
set global rocksdb_large_prefix=1;
CREATE TABLE t2 (id1 varchar(128) CHARACTER SET latin1 COLLATE latin1_bin, CREATE TABLE t2 (id1 varchar(128) CHARACTER SET latin1 COLLATE latin1_bin,
id2 varchar(256) CHARACTER SET utf8 COLLATE utf8_bin, id2 varchar(256) CHARACTER SET utf8 COLLATE utf8_bin,
id3 varchar(200) CHARACTER SET latin1 COLLATE latin1_swedish_ci, id3 varchar(200) CHARACTER SET latin1 COLLATE latin1_swedish_ci,
PRIMARY KEY (id1, id2, id3), PRIMARY KEY (id1, id2, id3),
UNIQUE KEY (id3, id1) COMMENT 'rev:cf') ENGINE=ROCKSDB; UNIQUE KEY (id3, id1) COMMENT 'rev:cf') ENGINE=ROCKSDB;
set global rocksdb_large_prefix=DEFAULT;
INSERT INTO t1 VALUES (1, 1, 1) ON DUPLICATE KEY UPDATE id2 = 9; INSERT INTO t1 VALUES (1, 1, 1) ON DUPLICATE KEY UPDATE id2 = 9;
SELECT * FROM t1 WHERE id1 = 1; SELECT * FROM t1 WHERE id1 = 1;
id1 id2 id3 id1 id2 id3

View File

@@ -0,0 +1,80 @@
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
id INT,
fake_id INT,
bigfield VARCHAR(4096),
PRIMARY KEY (id),
KEY bf (bigfield(32)),
KEY fid (fake_id, bigfield(32))
) ENGINE=rocksdb;
INSERT INTO t1 VALUES (1, 1001, REPEAT('a', 1)),
(8, 1008, REPEAT('b', 8)),
(24, 1024, REPEAT('c', 24)),
(31, 1031, REPEAT('d', 31)),
(32, 1032, REPEAT('x', 32)),
(33, 1033, REPEAT('y', 33)),
(128, 1128, REPEAT('z', 128));
SELECT * FROM t1;
id fake_id bigfield
1 1001 a
8 1008 bbbbbbbb
24 1024 cccccccccccccccccccccccc
31 1031 ddddddddddddddddddddddddddddddd
32 1032 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
33 1033 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
128 1128 zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
# Baseline sanity check
no-op query
no-op query
include/assert.inc [Baseline sanity check: 0 rocksdb_covered_secondary_key_lookups]
# Eligible for optimization.
id bigfield
31 ddddddddddddddddddddddddddddddd
include/assert.inc [Eligible for optimization.: 2 rocksdb_covered_secondary_key_lookups]
# Eligible for optimization, access via fake_id only
id bigfield
31 ddddddddddddddddddddddddddddddd
include/assert.inc [Eligible for optimization, access via fake_id only: 2 rocksdb_covered_secondary_key_lookups]
# Not eligible for optimization, access via fake_id of big row.
id bigfield
33 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
include/assert.inc [Not eligible for optimization, access via fake_id of big row.: 0 rocksdb_covered_secondary_key_lookups]
# Eligible for optimization.
id bigfield
32 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
include/assert.inc [Eligible for optimization.: 1 rocksdb_covered_secondary_key_lookups]
# Not eligible for optimization.
id bigfield
33 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
include/assert.inc [Not eligible for optimization.: 0 rocksdb_covered_secondary_key_lookups]
# Eligible for optimization.
id bigfield
8 bbbbbbbb
include/assert.inc [Eligible for optimization.: 2 rocksdb_covered_secondary_key_lookups]
# Eligible for optimization.
id bigfield
24 cccccccccccccccccccccccc
include/assert.inc [Eligible for optimization.: 2 rocksdb_covered_secondary_key_lookups]
# Not eligible for optimization.
id bigfield
128 zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
include/assert.inc [Not eligible for optimization.: 0 rocksdb_covered_secondary_key_lookups]
#
# Test that multi-byte charsets are handled correctly
#
# Charset record obviously shorter than the prefix
a b
1 a
include/assert.inc [Charset record obviously shorter than the prefix: 2 rocksdb_covered_secondary_key_lookups]
# Charset record shorter than prefix
a b
2 cc
include/assert.inc [Charset record shorter than prefix: 2 rocksdb_covered_secondary_key_lookups]
# Charset record with glyphs shorter than prefix
a b
3 ŽŽ
include/assert.inc [Charset record with glyphs shorter than prefix: 1 rocksdb_covered_secondary_key_lookups]
# Charset record longer than prefix
a b
4 žžžž
include/assert.inc [Charset record longer than prefix: 0 rocksdb_covered_secondary_key_lookups]

View File

@@ -9,9 +9,9 @@ KEY (x)) ENGINE = ROCKSDB;
SELECT TABLE_SCHEMA,TABLE_NAME,PARTITION_NAME,INDEX_NAME,INDEX_TYPE,KV_FORMAT_VERSION,CF FROM INFORMATION_SCHEMA.ROCKSDB_DDL WHERE TABLE_NAME like 'is_ddl_t%'; SELECT TABLE_SCHEMA,TABLE_NAME,PARTITION_NAME,INDEX_NAME,INDEX_TYPE,KV_FORMAT_VERSION,CF FROM INFORMATION_SCHEMA.ROCKSDB_DDL WHERE TABLE_NAME like 'is_ddl_t%';
TABLE_SCHEMA TABLE_NAME PARTITION_NAME INDEX_NAME INDEX_TYPE KV_FORMAT_VERSION CF TABLE_SCHEMA TABLE_NAME PARTITION_NAME INDEX_NAME INDEX_TYPE KV_FORMAT_VERSION CF
test is_ddl_t2 NULL PRIMARY 1 13 zy_cf test is_ddl_t2 NULL PRIMARY 1 13 zy_cf
test is_ddl_t2 NULL x 2 12 default test is_ddl_t2 NULL x 2 13 default
test is_ddl_t1 NULL PRIMARY 1 13 default test is_ddl_t1 NULL PRIMARY 1 13 default
test is_ddl_t1 NULL j 2 12 default test is_ddl_t1 NULL j 2 13 default
test is_ddl_t1 NULL k 2 12 kl_cf test is_ddl_t1 NULL k 2 13 kl_cf
DROP TABLE is_ddl_t1; DROP TABLE is_ddl_t1;
DROP TABLE is_ddl_t2; DROP TABLE is_ddl_t2;

View File

@@ -40,6 +40,33 @@ t1 0 PRIMARY 1 pk A # NULL NULL LSMTREE
t1 1 a 1 a A # NULL NULL YES LSMTREE simple index on a t1 1 a 1 a A # NULL NULL YES LSMTREE simple index on a
ALTER TABLE t1 DROP KEY a; ALTER TABLE t1 DROP KEY a;
DROP TABLE t1; DROP TABLE t1;
set global rocksdb_large_prefix=0;
CREATE TABLE t1 (
a BLOB(1024),
KEY (a(767))
) ENGINE=rocksdb;
DROP TABLE t1;
CREATE TABLE t1 (
a BLOB(1024),
KEY (a(768))
) ENGINE=rocksdb;
Warnings:
Warning 1071 Specified key was too long; max key length is 767 bytes
DROP TABLE t1;
set global rocksdb_large_prefix=1;
CREATE TABLE t1 (
a BLOB(4096),
KEY (a(3072))
) ENGINE=rocksdb;
DROP TABLE t1;
CREATE TABLE t1 (
a BLOB(4096),
KEY (a(3073))
) ENGINE=rocksdb;
Warnings:
Warning 1071 Specified key was too long; max key length is 3072 bytes
DROP TABLE t1;
set global rocksdb_large_prefix=DEFAULT;
# #
# Issue #376: MyRocks: ORDER BY optimizer is unable to use the index extension # Issue #376: MyRocks: ORDER BY optimizer is unable to use the index extension
# #

View File

@@ -46,3 +46,26 @@ SHOW KEYS IN t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
t1 0 PRIMARY 1 b A # NULL NULL LSMTREE t1 0 PRIMARY 1 b A # NULL NULL LSMTREE
DROP TABLE t1; DROP TABLE t1;
set global rocksdb_large_prefix=0;
CREATE TABLE t1 (
a BLOB(1024),
PRIMARY KEY (a(767))
) ENGINE=rocksdb;
DROP TABLE t1;
CREATE TABLE t1 (
a BLOB(1024),
PRIMARY KEY (a(768))
) ENGINE=rocksdb;
ERROR 42000: Specified key was too long; max key length is 767 bytes
set global rocksdb_large_prefix=1;
CREATE TABLE t1 (
a BLOB(4096),
PRIMARY KEY (a(3072))
) ENGINE=rocksdb;
DROP TABLE t1;
CREATE TABLE t1 (
a BLOB(4096),
PRIMARY KEY (a(3073))
) ENGINE=rocksdb;
ERROR 42000: Specified key was too long; max key length is 3072 bytes
set global rocksdb_large_prefix=DEFAULT;

View File

@@ -40,3 +40,30 @@ t1 0 PRIMARY 1 pk A # NULL NULL LSMTREE
t1 1 a 1 a A # NULL NULL YES LSMTREE simple index on a t1 1 a 1 a A # NULL NULL YES LSMTREE simple index on a
ALTER TABLE t1 DROP KEY a; ALTER TABLE t1 DROP KEY a;
DROP TABLE t1; DROP TABLE t1;
set global rocksdb_large_prefix=0;
CREATE TABLE t1 (
a BLOB(1024),
KEY (a(767))
) ENGINE=rocksdb;
DROP TABLE t1;
CREATE TABLE t1 (
a BLOB(1024),
KEY (a(768))
) ENGINE=rocksdb;
Warnings:
Warning 1071 Specified key was too long; max key length is 767 bytes
DROP TABLE t1;
set global rocksdb_large_prefix=1;
CREATE TABLE t1 (
a BLOB(4096),
KEY (a(3072))
) ENGINE=rocksdb;
DROP TABLE t1;
CREATE TABLE t1 (
a BLOB(4096),
KEY (a(3073))
) ENGINE=rocksdb;
Warnings:
Warning 1071 Specified key was too long; max key length is 3072 bytes
DROP TABLE t1;
set global rocksdb_large_prefix=DEFAULT;

View File

@@ -40,3 +40,30 @@ t1 0 PRIMARY 1 pk A # NULL NULL LSMTREE
t1 1 a 1 a A # NULL NULL YES LSMTREE simple index on a t1 1 a 1 a A # NULL NULL YES LSMTREE simple index on a
ALTER TABLE t1 DROP KEY a; ALTER TABLE t1 DROP KEY a;
DROP TABLE t1; DROP TABLE t1;
set global rocksdb_large_prefix=0;
CREATE TABLE t1 (
a BLOB(1024),
KEY (a(767))
) ENGINE=rocksdb;
DROP TABLE t1;
CREATE TABLE t1 (
a BLOB(1024),
KEY (a(768))
) ENGINE=rocksdb;
Warnings:
Warning 1071 Specified key was too long; max key length is 767 bytes
DROP TABLE t1;
set global rocksdb_large_prefix=1;
CREATE TABLE t1 (
a BLOB(4096),
KEY (a(3072))
) ENGINE=rocksdb;
DROP TABLE t1;
CREATE TABLE t1 (
a BLOB(4096),
KEY (a(3073))
) ENGINE=rocksdb;
Warnings:
Warning 1071 Specified key was too long; max key length is 3072 bytes
DROP TABLE t1;
set global rocksdb_large_prefix=DEFAULT;

View File

@@ -17,7 +17,7 @@ id val1 val2
2 2 2 2 2 2
SHOW ENGINE rocksdb TRANSACTION STATUS; SHOW ENGINE rocksdb TRANSACTION STATUS;
Type Name Status Type Name Status
SNAPSHOTS rocksdb rocksdb
============================================================ ============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================ ============================================================
@@ -25,6 +25,7 @@ TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
SNAPSHOTS SNAPSHOTS
--------- ---------
LIST OF SNAPSHOTS FOR EACH SESSION: LIST OF SNAPSHOTS FOR EACH SESSION:
----------LATEST DETECTED DEADLOCKS----------
----------------------------------------- -----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT END OF ROCKSDB TRANSACTION MONITOR OUTPUT
========================================= =========================================
@@ -48,7 +49,7 @@ id val1 val2
DELETE FROM t1 WHERE id=30; DELETE FROM t1 WHERE id=30;
SHOW ENGINE rocksdb TRANSACTION STATUS; SHOW ENGINE rocksdb TRANSACTION STATUS;
Type Name Status Type Name Status
SNAPSHOTS rocksdb rocksdb
============================================================ ============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================ ============================================================
@@ -61,6 +62,7 @@ MySQL thread id TID, OS thread handle PTR, query id QID localhost root ACTION
SHOW ENGINE rocksdb TRANSACTION STATUS SHOW ENGINE rocksdb TRANSACTION STATUS
lock count 8, write count 4 lock count 8, write count 4
insert count 2, update count 1, delete count 1 insert count 2, update count 1, delete count 1
----------LATEST DETECTED DEADLOCKS----------
----------------------------------------- -----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT END OF ROCKSDB TRANSACTION MONITOR OUTPUT
========================================= =========================================
@@ -68,7 +70,7 @@ END OF ROCKSDB TRANSACTION MONITOR OUTPUT
ROLLBACK; ROLLBACK;
SHOW ENGINE rocksdb TRANSACTION STATUS; SHOW ENGINE rocksdb TRANSACTION STATUS;
Type Name Status Type Name Status
SNAPSHOTS rocksdb rocksdb
============================================================ ============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================ ============================================================
@@ -76,6 +78,7 @@ TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
SNAPSHOTS SNAPSHOTS
--------- ---------
LIST OF SNAPSHOTS FOR EACH SESSION: LIST OF SNAPSHOTS FOR EACH SESSION:
----------LATEST DETECTED DEADLOCKS----------
----------------------------------------- -----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT END OF ROCKSDB TRANSACTION MONITOR OUTPUT
========================================= =========================================
@@ -84,7 +87,7 @@ START TRANSACTION;
INSERT INTO t1 VALUES(40,40,40); INSERT INTO t1 VALUES(40,40,40);
SHOW ENGINE rocksdb TRANSACTION STATUS; SHOW ENGINE rocksdb TRANSACTION STATUS;
Type Name Status Type Name Status
SNAPSHOTS rocksdb rocksdb
============================================================ ============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================ ============================================================
@@ -97,6 +100,7 @@ MySQL thread id TID, OS thread handle PTR, query id QID localhost root ACTION
SHOW ENGINE rocksdb TRANSACTION STATUS SHOW ENGINE rocksdb TRANSACTION STATUS
lock count 2, write count 1 lock count 2, write count 1
insert count 1, update count 0, delete count 0 insert count 1, update count 0, delete count 0
----------LATEST DETECTED DEADLOCKS----------
----------------------------------------- -----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT END OF ROCKSDB TRANSACTION MONITOR OUTPUT
========================================= =========================================
@@ -104,7 +108,7 @@ END OF ROCKSDB TRANSACTION MONITOR OUTPUT
COMMIT; COMMIT;
SHOW ENGINE rocksdb TRANSACTION STATUS; SHOW ENGINE rocksdb TRANSACTION STATUS;
Type Name Status Type Name Status
SNAPSHOTS rocksdb rocksdb
============================================================ ============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================ ============================================================
@@ -112,6 +116,7 @@ TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
SNAPSHOTS SNAPSHOTS
--------- ---------
LIST OF SNAPSHOTS FOR EACH SESSION: LIST OF SNAPSHOTS FOR EACH SESSION:
----------LATEST DETECTED DEADLOCKS----------
----------------------------------------- -----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT END OF ROCKSDB TRANSACTION MONITOR OUTPUT
========================================= =========================================
@@ -133,7 +138,7 @@ UPDATE t2 SET value=3 WHERE id2=2;
DELETE FROM t2 WHERE id1=10; DELETE FROM t2 WHERE id1=10;
SHOW ENGINE rocksdb TRANSACTION STATUS; SHOW ENGINE rocksdb TRANSACTION STATUS;
Type Name Status Type Name Status
SNAPSHOTS rocksdb rocksdb
============================================================ ============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================ ============================================================
@@ -146,6 +151,7 @@ MySQL thread id TID, OS thread handle PTR, query id QID localhost root ACTION
SHOW ENGINE rocksdb TRANSACTION STATUS SHOW ENGINE rocksdb TRANSACTION STATUS
lock count 9, write count 7 lock count 9, write count 7
insert count 2, update count 1, delete count 1 insert count 2, update count 1, delete count 1
----------LATEST DETECTED DEADLOCKS----------
----------------------------------------- -----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT END OF ROCKSDB TRANSACTION MONITOR OUTPUT
========================================= =========================================

View File

@@ -0,0 +1,37 @@
DROP TABLE IF EXISTS T1;
CREATE TABLE T1 (
P1 VARCHAR(64), P2 VARCHAR(64), P3 VARCHAR(64), P4 VARCHAR(64),
S1 VARCHAR(64), S2 VARCHAR(64), S3 VARCHAR(64), S4 VARCHAR(64),
S5 VARCHAR(64), S6 VARCHAR(64), S7 VARCHAR(64), S8 VARCHAR(64),
S9 VARCHAR(64), S10 VARCHAR(64), S11 VARCHAR(64), S12 VARCHAR(64),
S13 VARCHAR(64), S14 VARCHAR(64), S15 VARCHAR(64), S16 VARCHAR(64),
PRIMARY KEY (P1(8), P2(8), P3(8), P4(8)),
KEY SK (S1(8), S2(8), S3(8), S4(8),
S5(8), S6(8), S7(8), S8(8),
S9(8), S10(8), S11(8), S12(8),
S13(8), S14(8), S15(8), S16(8))
) ENGINE=rocksdb;
INSERT INTO T1 VALUES ('1', '2', '3', '4',
'5', '6', '7', '8',
'9', '10', '11', '12',
'13', '14', '15', '16',
'17', '18', '19', '20');
SELECT * FROM T1;
P1 P2 P3 P4 S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 S13 S14 S15 S16
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
# Not eligible for optimization, shorter than prefix length.
SELECT P4, S2 FROM T1 FORCE INDEX(SK) WHERE S1='5';
P4 S2
4 6
include/assert.inc [Not eligible for optimization, shorter than prefix length.: 0 rocksdb_covered_secondary_key_lookups]
DELETE FROM T1;
INSERT INTO T1 VALUES ('100000000', '200000000', '300000000', '400000000',
'500000000', '600000000', '700000000', '800000000',
'900000000', '100000000', '110000000', '120000000',
'130000000', '140000000', '150000000', '160000000',
'170000000', '180000000', '190000000', '200000000');
# Not eligible for optimization, longer than prefix length.
SELECT P4, S2 FROM T1 FORCE INDEX(SK) WHERE S1='5';
P4 S2
include/assert.inc [Not eligible for optimization, longer than prefix length.: 0 rocksdb_covered_secondary_key_lookups]
DROP TABLE T1;

View File

@@ -868,6 +868,7 @@ rocksdb_block_restart_interval 16
rocksdb_block_size 4096 rocksdb_block_size 4096
rocksdb_block_size_deviation 10 rocksdb_block_size_deviation 10
rocksdb_bulk_load OFF rocksdb_bulk_load OFF
rocksdb_bulk_load_allow_unsorted OFF
rocksdb_bulk_load_size 1000 rocksdb_bulk_load_size 1000
rocksdb_bytes_per_sync 0 rocksdb_bytes_per_sync 0
rocksdb_cache_index_and_filter_blocks ON rocksdb_cache_index_and_filter_blocks ON
@@ -880,13 +881,16 @@ rocksdb_compaction_sequential_deletes 0
rocksdb_compaction_sequential_deletes_count_sd OFF rocksdb_compaction_sequential_deletes_count_sd OFF
rocksdb_compaction_sequential_deletes_file_size 0 rocksdb_compaction_sequential_deletes_file_size 0
rocksdb_compaction_sequential_deletes_window 0 rocksdb_compaction_sequential_deletes_window 0
rocksdb_concurrent_prepare ON
rocksdb_create_checkpoint rocksdb_create_checkpoint
rocksdb_create_if_missing ON rocksdb_create_if_missing ON
rocksdb_create_missing_column_families OFF rocksdb_create_missing_column_families OFF
rocksdb_datadir ./.rocksdb rocksdb_datadir ./.rocksdb
rocksdb_db_write_buffer_size 0 rocksdb_db_write_buffer_size 0
rocksdb_deadlock_detect OFF rocksdb_deadlock_detect OFF
rocksdb_deadlock_detect_depth 50
rocksdb_debug_optimizer_no_zero_cardinality ON rocksdb_debug_optimizer_no_zero_cardinality ON
rocksdb_debug_ttl_ignore_pk OFF
rocksdb_debug_ttl_read_filter_ts 0 rocksdb_debug_ttl_read_filter_ts 0
rocksdb_debug_ttl_rec_ts 0 rocksdb_debug_ttl_rec_ts 0
rocksdb_debug_ttl_snapshot_ts 0 rocksdb_debug_ttl_snapshot_ts 0
@@ -903,6 +907,7 @@ rocksdb_error_if_exists OFF
rocksdb_flush_log_at_trx_commit 1 rocksdb_flush_log_at_trx_commit 1
rocksdb_flush_memtable_on_analyze ON rocksdb_flush_memtable_on_analyze ON
rocksdb_force_compute_memtable_stats ON rocksdb_force_compute_memtable_stats ON
rocksdb_force_compute_memtable_stats_cachetime 0
rocksdb_force_flush_memtable_and_lzero_now OFF rocksdb_force_flush_memtable_and_lzero_now OFF
rocksdb_force_flush_memtable_now OFF rocksdb_force_flush_memtable_now OFF
rocksdb_force_index_records_in_range 0 rocksdb_force_index_records_in_range 0
@@ -912,12 +917,15 @@ rocksdb_info_log_level error_level
rocksdb_io_write_timeout 0 rocksdb_io_write_timeout 0
rocksdb_is_fd_close_on_exec ON rocksdb_is_fd_close_on_exec ON
rocksdb_keep_log_file_num 1000 rocksdb_keep_log_file_num 1000
rocksdb_large_prefix OFF
rocksdb_lock_scanned_rows OFF rocksdb_lock_scanned_rows OFF
rocksdb_lock_wait_timeout 1 rocksdb_lock_wait_timeout 1
rocksdb_log_file_time_to_roll 0 rocksdb_log_file_time_to_roll 0
rocksdb_manifest_preallocation_size 4194304 rocksdb_manifest_preallocation_size 4194304
rocksdb_manual_wal_flush ON
rocksdb_master_skip_tx_api OFF rocksdb_master_skip_tx_api OFF
rocksdb_max_background_jobs 2 rocksdb_max_background_jobs 2
rocksdb_max_latest_deadlocks 5
rocksdb_max_log_file_size 0 rocksdb_max_log_file_size 0
rocksdb_max_manifest_file_size 18446744073709551615 rocksdb_max_manifest_file_size 18446744073709551615
rocksdb_max_open_files -1 rocksdb_max_open_files -1
@@ -926,6 +934,7 @@ rocksdb_max_subcompactions 1
rocksdb_max_total_wal_size 0 rocksdb_max_total_wal_size 0
rocksdb_merge_buf_size 67108864 rocksdb_merge_buf_size 67108864
rocksdb_merge_combine_read_size 1073741824 rocksdb_merge_combine_read_size 1073741824
rocksdb_merge_tmp_file_removal_delay_ms 0
rocksdb_new_table_reader_for_compaction_inputs OFF rocksdb_new_table_reader_for_compaction_inputs OFF
rocksdb_no_block_cache OFF rocksdb_no_block_cache OFF
rocksdb_override_cf_options rocksdb_override_cf_options
@@ -942,6 +951,7 @@ rocksdb_records_in_range 50
rocksdb_reset_stats OFF rocksdb_reset_stats OFF
rocksdb_seconds_between_stat_computes 3600 rocksdb_seconds_between_stat_computes 3600
rocksdb_signal_drop_index_thread OFF rocksdb_signal_drop_index_thread OFF
rocksdb_sim_cache_size 0
rocksdb_skip_bloom_filter_on_read OFF rocksdb_skip_bloom_filter_on_read OFF
rocksdb_skip_fill_cache OFF rocksdb_skip_fill_cache OFF
rocksdb_skip_unique_check_tables .* rocksdb_skip_unique_check_tables .*
@@ -957,6 +967,7 @@ rocksdb_trace_sst_api OFF
rocksdb_unsafe_for_binlog OFF rocksdb_unsafe_for_binlog OFF
rocksdb_update_cf_options rocksdb_update_cf_options
rocksdb_use_adaptive_mutex OFF rocksdb_use_adaptive_mutex OFF
rocksdb_use_clock_cache OFF
rocksdb_use_direct_io_for_flush_and_compaction OFF rocksdb_use_direct_io_for_flush_and_compaction OFF
rocksdb_use_direct_reads OFF rocksdb_use_direct_reads OFF
rocksdb_use_fsync OFF rocksdb_use_fsync OFF
@@ -1444,6 +1455,7 @@ rocksdb_memtable_total #
rocksdb_memtable_unflushed # rocksdb_memtable_unflushed #
rocksdb_queries_point # rocksdb_queries_point #
rocksdb_queries_range # rocksdb_queries_range #
rocksdb_covered_secondary_key_lookups #
rocksdb_block_cache_add # rocksdb_block_cache_add #
rocksdb_block_cache_data_hit # rocksdb_block_cache_data_hit #
rocksdb_block_cache_data_miss # rocksdb_block_cache_data_miss #
@@ -1496,6 +1508,16 @@ rocksdb_number_superversion_cleanups #
rocksdb_number_superversion_releases # rocksdb_number_superversion_releases #
rocksdb_rate_limit_delay_millis # rocksdb_rate_limit_delay_millis #
rocksdb_snapshot_conflict_errors # rocksdb_snapshot_conflict_errors #
rocksdb_stall_l0_file_count_limit_slowdowns #
rocksdb_stall_locked_l0_file_count_limit_slowdowns #
rocksdb_stall_l0_file_count_limit_stops #
rocksdb_stall_locked_l0_file_count_limit_stops #
rocksdb_stall_pending_compaction_limit_stops #
rocksdb_stall_pending_compaction_limit_slowdowns #
rocksdb_stall_memtable_limit_stops #
rocksdb_stall_memtable_limit_slowdowns #
rocksdb_stall_total_stops #
rocksdb_stall_total_slowdowns #
rocksdb_stall_micros # rocksdb_stall_micros #
rocksdb_wal_bytes # rocksdb_wal_bytes #
rocksdb_wal_group_syncs # rocksdb_wal_group_syncs #
@@ -1520,6 +1542,7 @@ ROCKSDB_MEMTABLE_TOTAL
ROCKSDB_MEMTABLE_UNFLUSHED ROCKSDB_MEMTABLE_UNFLUSHED
ROCKSDB_QUERIES_POINT ROCKSDB_QUERIES_POINT
ROCKSDB_QUERIES_RANGE ROCKSDB_QUERIES_RANGE
ROCKSDB_COVERED_SECONDARY_KEY_LOOKUPS
ROCKSDB_BLOCK_CACHE_ADD ROCKSDB_BLOCK_CACHE_ADD
ROCKSDB_BLOCK_CACHE_DATA_HIT ROCKSDB_BLOCK_CACHE_DATA_HIT
ROCKSDB_BLOCK_CACHE_DATA_MISS ROCKSDB_BLOCK_CACHE_DATA_MISS
@@ -1572,6 +1595,16 @@ ROCKSDB_NUMBER_SUPERVERSION_CLEANUPS
ROCKSDB_NUMBER_SUPERVERSION_RELEASES ROCKSDB_NUMBER_SUPERVERSION_RELEASES
ROCKSDB_RATE_LIMIT_DELAY_MILLIS ROCKSDB_RATE_LIMIT_DELAY_MILLIS
ROCKSDB_SNAPSHOT_CONFLICT_ERRORS ROCKSDB_SNAPSHOT_CONFLICT_ERRORS
ROCKSDB_STALL_L0_FILE_COUNT_LIMIT_SLOWDOWNS
ROCKSDB_STALL_LOCKED_L0_FILE_COUNT_LIMIT_SLOWDOWNS
ROCKSDB_STALL_L0_FILE_COUNT_LIMIT_STOPS
ROCKSDB_STALL_LOCKED_L0_FILE_COUNT_LIMIT_STOPS
ROCKSDB_STALL_PENDING_COMPACTION_LIMIT_STOPS
ROCKSDB_STALL_PENDING_COMPACTION_LIMIT_SLOWDOWNS
ROCKSDB_STALL_MEMTABLE_LIMIT_STOPS
ROCKSDB_STALL_MEMTABLE_LIMIT_SLOWDOWNS
ROCKSDB_STALL_TOTAL_STOPS
ROCKSDB_STALL_TOTAL_SLOWDOWNS
ROCKSDB_STALL_MICROS ROCKSDB_STALL_MICROS
ROCKSDB_WAL_BYTES ROCKSDB_WAL_BYTES
ROCKSDB_WAL_GROUP_SYNCS ROCKSDB_WAL_GROUP_SYNCS
@@ -1598,6 +1631,7 @@ ROCKSDB_MEMTABLE_TOTAL
ROCKSDB_MEMTABLE_UNFLUSHED ROCKSDB_MEMTABLE_UNFLUSHED
ROCKSDB_QUERIES_POINT ROCKSDB_QUERIES_POINT
ROCKSDB_QUERIES_RANGE ROCKSDB_QUERIES_RANGE
ROCKSDB_COVERED_SECONDARY_KEY_LOOKUPS
ROCKSDB_BLOCK_CACHE_ADD ROCKSDB_BLOCK_CACHE_ADD
ROCKSDB_BLOCK_CACHE_DATA_HIT ROCKSDB_BLOCK_CACHE_DATA_HIT
ROCKSDB_BLOCK_CACHE_DATA_MISS ROCKSDB_BLOCK_CACHE_DATA_MISS
@@ -1650,6 +1684,16 @@ ROCKSDB_NUMBER_SUPERVERSION_CLEANUPS
ROCKSDB_NUMBER_SUPERVERSION_RELEASES ROCKSDB_NUMBER_SUPERVERSION_RELEASES
ROCKSDB_RATE_LIMIT_DELAY_MILLIS ROCKSDB_RATE_LIMIT_DELAY_MILLIS
ROCKSDB_SNAPSHOT_CONFLICT_ERRORS ROCKSDB_SNAPSHOT_CONFLICT_ERRORS
ROCKSDB_STALL_L0_FILE_COUNT_LIMIT_SLOWDOWNS
ROCKSDB_STALL_LOCKED_L0_FILE_COUNT_LIMIT_SLOWDOWNS
ROCKSDB_STALL_L0_FILE_COUNT_LIMIT_STOPS
ROCKSDB_STALL_LOCKED_L0_FILE_COUNT_LIMIT_STOPS
ROCKSDB_STALL_PENDING_COMPACTION_LIMIT_STOPS
ROCKSDB_STALL_PENDING_COMPACTION_LIMIT_SLOWDOWNS
ROCKSDB_STALL_MEMTABLE_LIMIT_STOPS
ROCKSDB_STALL_MEMTABLE_LIMIT_SLOWDOWNS
ROCKSDB_STALL_TOTAL_STOPS
ROCKSDB_STALL_TOTAL_SLOWDOWNS
ROCKSDB_STALL_MICROS ROCKSDB_STALL_MICROS
ROCKSDB_WAL_BYTES ROCKSDB_WAL_BYTES
ROCKSDB_WAL_GROUP_SYNCS ROCKSDB_WAL_GROUP_SYNCS
@@ -2149,7 +2193,9 @@ SET @old_mode = @@sql_mode;
SET sql_mode = 'strict_all_tables'; SET sql_mode = 'strict_all_tables';
create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(c, b(255))) engine=rocksdb; create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(c, b(255))) engine=rocksdb;
drop table t1; drop table t1;
set global rocksdb_large_prefix=1;
create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(b(1255))) engine=rocksdb; create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(b(1255))) engine=rocksdb;
set global rocksdb_large_prefix=0;
insert into t1 values (1, '1abcde', '1abcde'), (2, '2abcde', '2abcde'), (3, '3abcde', '3abcde'); insert into t1 values (1, '1abcde', '1abcde'), (2, '2abcde', '2abcde'), (3, '3abcde', '3abcde');
select * from t1; select * from t1;
a b c a b c
@@ -2170,7 +2216,7 @@ a b c
3 3abcde 3abcde 3 3abcde 3abcde
drop table t1; drop table t1;
create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(b(2255))) engine=rocksdb; create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(b(2255))) engine=rocksdb;
ERROR 42000: Specified key was too long; max key length is 2048 bytes ERROR 42000: Specified key was too long; max key length is 767 bytes
SET sql_mode = @old_mode; SET sql_mode = @old_mode;
drop table t0; drop table t0;
# #

View File

@@ -7,17 +7,8 @@ CREATE TABLE t2 (j INT, PRIMARY KEY (j) COMMENT 'rev:cf_t2') ENGINE = ROCKSDB;
CREATE TABLE t3 (k INT, PRIMARY KEY (k) COMMENT 'cf_t1') ENGINE = ROCKSDB; CREATE TABLE t3 (k INT, PRIMARY KEY (k) COMMENT 'cf_t1') ENGINE = ROCKSDB;
CREATE TABLE t4 (l INT, PRIMARY KEY (l) COMMENT 'cf_t4') ENGINE = ROCKSDB CREATE TABLE t4 (l INT, PRIMARY KEY (l) COMMENT 'cf_t4') ENGINE = ROCKSDB
PARTITION BY KEY(l) PARTITIONS 4; PARTITION BY KEY(l) PARTITIONS 4;
SET GLOBAL rocksdb_force_flush_memtable_now=1; SET @save.rocksdb_max_background_jobs= @@global.rocksdb_max_background_jobs;
SHOW ENGINE rocksdb STATUS; SET GLOBAL rocksdb_max_background_jobs= 1;
Type Name Status
STATISTICS # #
DBSTATS # #
CF_COMPACTION # #
CF_COMPACTION # #
CF_COMPACTION # #
CF_COMPACTION # #
MEMORY_STATS # #
BG_THREADS # #
INSERT INTO t1 VALUES (1), (2), (3); INSERT INTO t1 VALUES (1), (2), (3);
SELECT COUNT(*) FROM t1; SELECT COUNT(*) FROM t1;
COUNT(*) COUNT(*)
@@ -30,6 +21,19 @@ INSERT INTO t4 VALUES (1), (2), (3), (4), (5);
SELECT COUNT(*) FROM t4; SELECT COUNT(*) FROM t4;
COUNT(*) COUNT(*)
5 5
SET GLOBAL rocksdb_force_flush_memtable_now=1;
SET GLOBAL rocksdb_compact_cf="cf_t1";
SHOW ENGINE rocksdb STATUS;
Type Name Status
STATISTICS # #
DBSTATS # #
CF_COMPACTION # #
CF_COMPACTION # #
CF_COMPACTION # #
CF_COMPACTION # #
MEMORY_STATS # #
BG_THREADS # #
BG_THREADS # #
SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CFSTATS; SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CFSTATS;
CF_NAME STAT_TYPE VALUE CF_NAME STAT_TYPE VALUE
__system__ NUM_IMMUTABLE_MEM_TABLE # __system__ NUM_IMMUTABLE_MEM_TABLE #
@@ -356,7 +360,7 @@ Type Name Status
SHOW ENGINE ALL MUTEX; SHOW ENGINE ALL MUTEX;
SHOW ENGINE rocksdb TRANSACTION STATUS; SHOW ENGINE rocksdb TRANSACTION STATUS;
Type Name Status Type Name Status
SNAPSHOTS rocksdb rocksdb
============================================================ ============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================ ============================================================
@@ -364,6 +368,7 @@ TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
SNAPSHOTS SNAPSHOTS
--------- ---------
LIST OF SNAPSHOTS FOR EACH SESSION: LIST OF SNAPSHOTS FOR EACH SESSION:
----------LATEST DETECTED DEADLOCKS----------
----------------------------------------- -----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT END OF ROCKSDB TRANSACTION MONITOR OUTPUT
========================================= =========================================
@@ -371,7 +376,7 @@ END OF ROCKSDB TRANSACTION MONITOR OUTPUT
START TRANSACTION WITH CONSISTENT SNAPSHOT; START TRANSACTION WITH CONSISTENT SNAPSHOT;
SHOW ENGINE rocksdb TRANSACTION STATUS; SHOW ENGINE rocksdb TRANSACTION STATUS;
Type Name Status Type Name Status
SNAPSHOTS rocksdb rocksdb
============================================================ ============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================ ============================================================
@@ -384,8 +389,10 @@ MySQL thread id TID, OS thread handle PTR, query id QID localhost root ACTION
SHOW ENGINE rocksdb TRANSACTION STATUS SHOW ENGINE rocksdb TRANSACTION STATUS
lock count 0, write count 0 lock count 0, write count 0
insert count 0, update count 0, delete count 0 insert count 0, update count 0, delete count 0
----------LATEST DETECTED DEADLOCKS----------
----------------------------------------- -----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT END OF ROCKSDB TRANSACTION MONITOR OUTPUT
========================================= =========================================
ROLLBACK; ROLLBACK;
SET GLOBAL rocksdb_max_background_jobs= @save.rocksdb_max_background_jobs;

View File

@@ -0,0 +1,4 @@
CREATE TABLE t1 (pk int primary key) ENGINE=ROCKSDB;
set session debug="+d,gen_sql_table_name";
rename table t1 to t2;
set session debug= "-d,gen_sql_table_name";

View File

@@ -1,4 +1,6 @@
DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t1;
call mtr.add_suppression("Column family 'cf1' not found");
call mtr.add_suppression("Column family 'rev:cf2' not found");
set global rocksdb_compact_cf = 'cf1'; set global rocksdb_compact_cf = 'cf1';
set global rocksdb_compact_cf = 'rev:cf2'; set global rocksdb_compact_cf = 'rev:cf2';
set global rocksdb_signal_drop_index_thread = 1; set global rocksdb_signal_drop_index_thread = 1;

View File

@@ -337,9 +337,7 @@ b INT
) ENGINE=rocksdb ) ENGINE=rocksdb
COMMENT='ttl_duration=100;'; COMMENT='ttl_duration=100;';
ALTER TABLE t1 DROP PRIMARY KEY; ALTER TABLE t1 DROP PRIMARY KEY;
ERROR HY000: TTL support is currently disabled when table has secondary indexes or hidden PK. ERROR HY000: TTL support is currently disabled when table has a hidden PK.
ALTER TABLE t1 ADD INDEX kb(b), ALGORITHM=INPLACE;
ERROR HY000: TTL support is currently disabled when table has secondary indexes or hidden PK.
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 ( CREATE TABLE t1 (
a INT PRIMARY KEY, a INT PRIMARY KEY,

View File

@@ -0,0 +1,709 @@
CREATE TABLE t1 (
`a` binary(8) NOT NULL,
`b` varbinary(64) NOT NULL,
`c` varbinary(256) NOT NULL,
`ts` bigint(20) UNSIGNED NOT NULL,
`value` mediumblob NOT NULL,
PRIMARY KEY (`b`,`a`,`c`)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values ('a', 'b', 'c', UNIX_TIMESTAMP(), 'd');
INSERT INTO t1 values ('d', 'e', 'f', UNIX_TIMESTAMP(), 'g');
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*) FROM t1;
COUNT(*)
2
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
SELECT COUNT(*) FROM t1;
COUNT(*)
2
DROP TABLE t1;
CREATE TABLE t1 (
`a` binary(8) NOT NULL,
`b` varbinary(64) NOT NULL,
`c` varbinary(256) NOT NULL,
`ts` bigint(20) UNSIGNED NOT NULL,
`value` mediumblob NOT NULL,
PRIMARY KEY (`b`,`a`,`c`),
KEY kb (`b`)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values ('a', 'b', 'c', UNIX_TIMESTAMP(), 'd');
INSERT INTO t1 values ('d', 'e', 'f', UNIX_TIMESTAMP(), 'g');
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
2
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
0
DROP TABLE t1;
CREATE TABLE t1 (
a bigint(20) NOT NULL,
b int NOT NULL,
ts bigint(20) UNSIGNED NOT NULL,
c int NOT NULL,
PRIMARY KEY (a),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, 3, UNIX_TIMESTAMP(), 5);
INSERT INTO t1 values (2, 4, UNIX_TIMESTAMP(), 6);
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
2
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
0
DROP TABLE t1;
CREATE TABLE t1 (
a bigint(20) NOT NULL,
b int NOT NULL,
c int NOT NULL,
ts bigint(20) UNSIGNED NOT NULL,
PRIMARY KEY (a,c),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, 3, 5, UNIX_TIMESTAMP());
INSERT INTO t1 values (2, 4, 6, UNIX_TIMESTAMP());
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
2
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
0
DROP TABLE t1;
CREATE TABLE t1 (
a bigint(20) NOT NULL,
b int,
c int,
ts bigint(20) UNSIGNED NOT NULL,
PRIMARY KEY (a),
KEY kbc (b, c)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, NULL, NULL, UNIX_TIMESTAMP());
INSERT INTO t1 values (2, NULL, NULL, UNIX_TIMESTAMP());
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
2
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
0
DROP TABLE t1;
CREATE TABLE t1 (
`a` binary(8) NOT NULL,
`b` varbinary(64),
`c` varbinary(256),
`ts` bigint(20) UNSIGNED NOT NULL,
`value` mediumblob NOT NULL,
PRIMARY KEY (`a`),
KEY kbc (`b`, `c`)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values ('a', NULL, 'bc', UNIX_TIMESTAMP(), 'd');
INSERT INTO t1 values ('d', 'efghijk', NULL, UNIX_TIMESTAMP(), 'l');
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
2
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
0
DROP TABLE t1;
CREATE TABLE t1 (
a bigint(20) NOT NULL,
b int NOT NULL,
c int NOT NULL,
PRIMARY KEY (a),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, 3, 5);
INSERT INTO t1 values (2, 4, 6);
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
2
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
0
DROP TABLE t1;
CREATE TABLE t1 (
a int,
ts bigint(20) UNSIGNED NOT NULL,
PRIMARY KEY (a, ts),
KEY kt (ts)
) ENGINE=rocksdb
COMMENT='ttl_duration=5;ttl_col=ts;';
INSERT INTO t1 values (1, UNIX_TIMESTAMP());
INSERT INTO t1 values (2, UNIX_TIMESTAMP());
SELECT COUNT(*) FROM t1 FORCE INDEX(kt);
COUNT(*)
2
set global rocksdb_debug_ttl_snapshot_ts = -10;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX(kt);
COUNT(*)
2
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_debug_ttl_snapshot_ts = 10;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
set global rocksdb_debug_ttl_ignore_pk=0;
SELECT COUNT(*) FROM t1 FORCE INDEX(kt);
COUNT(*)
0
DROP TABLE t1;
CREATE TABLE t1 (
a bigint(20) NOT NULL,
b int NOT NULL,
ts bigint(20) UNSIGNED NOT NULL,
c int NOT NULL,
PRIMARY KEY (a, ts),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, 3, UNIX_TIMESTAMP(), 5);
INSERT INTO t1 values (2, 4, UNIX_TIMESTAMP(), 6);
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
2
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
SELECT COUNT(*) FROM t1;
COUNT(*)
0
DROP TABLE t1;
CREATE TABLE t1 (
`a` binary(8) NOT NULL,
`b` varbinary(64),
`c` varbinary(256),
`ts` bigint(20) UNSIGNED NOT NULL,
`value` mediumblob NOT NULL,
PRIMARY KEY (`a`, `ts`),
KEY kb (`b`)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values ('a', NULL, 'bc', UNIX_TIMESTAMP(), 'd');
INSERT INTO t1 values ('de', 'fghijk', NULL, UNIX_TIMESTAMP(), 'l');
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*) FROM t1;
COUNT(*)
2
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
SELECT COUNT(*) FROM t1;
COUNT(*)
0
DROP TABLE t1;
CREATE TABLE t1 (
a INT NOT NULL,
b varbinary(64) NOT NULL,
c varbinary(256) NOT NULL,
ts bigint(20) UNSIGNED NOT NULL,
value mediumblob NOT NULL,
PRIMARY KEY (b,a,c),
KEY kb (b)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
COMMENT='ttl_duration=10;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -300;
INSERT INTO t1 values (1, 'b', 'c', UNIX_TIMESTAMP(), 'd');
INSERT INTO t1 values (2, 'e', 'f', UNIX_TIMESTAMP(), 'g');
set global rocksdb_debug_ttl_rec_ts = 300;
INSERT INTO t1 values (3, 'i', 'j', UNIX_TIMESTAMP(), 'k');
INSERT INTO t1 values (4, 'm', 'n', UNIX_TIMESTAMP(), 'o');
set global rocksdb_debug_ttl_rec_ts = 0;
set global rocksdb_debug_ttl_snapshot_ts = -3600;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
SELECT a FROM t1 FORCE INDEX (kb);
a
1
2
3
4
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
SELECT a FROM t1 FORCE INDEX (kb);
a
3
4
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_debug_ttl_snapshot_ts = 3600;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
set global rocksdb_debug_ttl_ignore_pk=0;
SELECT a FROM t1 FORCE INDEX (kb);
a
DROP TABLE t1;
CREATE TABLE t1 (
a bigint(20) UNSIGNED NOT NULL,
b int NOT NULL,
c int NOT NULL,
ts bigint(20),
PRIMARY KEY (a,c),
KEY (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;ttl_col=ts;';
ERROR HY000: TTL column (ts) in MyRocks must be an unsigned non-null 64-bit integer, exist inside the table, and have an accompanying ttl duration.
CREATE TABLE t1 (
a bigint(20) UNSIGNED NOT NULL,
b int NOT NULL,
c int NOT NULL,
ts int,
PRIMARY KEY (a,c),
KEY (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;ttl_col=ts;';
ERROR HY000: TTL column (ts) in MyRocks must be an unsigned non-null 64-bit integer, exist inside the table, and have an accompanying ttl duration.
CREATE TABLE t1 (
a bigint(20) UNSIGNED NOT NULL,
b int NOT NULL,
c int NOT NULL,
PRIMARY KEY (a,c),
KEY (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=abc;';
ERROR HY000: TTL duration (abc) in MyRocks must be an unsigned non-null 64-bit integer.
CREATE TABLE t1 (
a bigint(20) UNSIGNED NOT NULL,
b int NOT NULL,
c int NOT NULL,
PRIMARY KEY (a,c),
KEY (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;ttl_col=abc;';
ERROR HY000: TTL column (abc) in MyRocks must be an unsigned non-null 64-bit integer, exist inside the table, and have an accompanying ttl duration.
CREATE TABLE t1 (
a bigint(20) UNSIGNED NOT NULL,
b int NOT NULL,
c int NOT NULL,
PRIMARY KEY (a,c),
KEY (b)
) ENGINE=rocksdb
COMMENT='ttl_col=abc;';
ERROR HY000: TTL column (abc) in MyRocks must be an unsigned non-null 64-bit integer, exist inside the table, and have an accompanying ttl duration.
CREATE TABLE t1 (
a bigint(20) NOT NULL,
b int NOT NULL,
PRIMARY KEY (a),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=500;';
INSERT INTO t1 values (1, 1);
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
1
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
1
DROP TABLE t1;
CREATE TABLE t1 (
a INT PRIMARY KEY,
b INT NOT NULL,
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=100;';
INSERT INTO t1 values (1, 1);
SELECT * FROM t1 FORCE INDEX (kb);
a b
1 1
set global rocksdb_debug_ttl_rec_ts = -300;
ALTER TABLE t1 COMMENT = 'ttl_duration=1';
set global rocksdb_debug_ttl_rec_ts = 0;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) NOT NULL,
`b` int(11) NOT NULL,
PRIMARY KEY (`a`),
KEY `kb` (`b`)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 COMMENT='ttl_duration=1'
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
0
DROP TABLE t1;
CREATE TABLE t1 (
a INT PRIMARY KEY,
b INT,
KEY (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=100;';
ALTER TABLE t1 DROP PRIMARY KEY;
ERROR HY000: TTL support is currently disabled when table has a hidden PK.
DROP TABLE t1;
CREATE TABLE t1 (
a INT PRIMARY KEY,
b INT,
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=5;';
INSERT INTO t1 VALUES (1,1);
INSERT INTO t1 VALUES (2,2);
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(b);
set global rocksdb_debug_ttl_snapshot_ts = -3600;
set global rocksdb_force_flush_memtable_now=1;
set @@global.rocksdb_compact_cf = 'default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
2
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_debug_ttl_snapshot_ts = 3600;
set @@global.rocksdb_compact_cf = 'default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
set global rocksdb_debug_ttl_ignore_pk=0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
0
DROP TABLE t1;
CREATE TABLE t1 (
a bigint(20) UNSIGNED NOT NULL,
b int,
PRIMARY KEY (a,b),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='asdadfasdfsadfadf ;ttl_duration=1; asfasdfasdfadfa';
INSERT INTO t1 values (UNIX_TIMESTAMP(), 1);
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
1
set global rocksdb_debug_ttl_snapshot_ts = 3600;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
0
ALTER TABLE t1 COMMENT = 'adsf;;ttl_duration=5;asfasdfa;ttl_col=a;asdfasdf;';
set global rocksdb_debug_ttl_rec_ts = 300;
INSERT INTO t1 values (UNIX_TIMESTAMP(), 2);
set global rocksdb_debug_ttl_rec_ts = 0;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
1
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_debug_ttl_snapshot_ts = 3600;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
set global rocksdb_debug_ttl_ignore_pk=0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
0
DROP TABLE t1;
CREATE TABLE t1 (
a bigint(20) NOT NULL,
b int NOT NULL,
PRIMARY KEY (a),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=5;';
set global rocksdb_debug_ttl_rec_ts = -300;
INSERT INTO t1 values (1, 0);
INSERT INTO t1 values (3, 0);
INSERT INTO t1 values (5, 0);
set global rocksdb_debug_ttl_rec_ts = 300;
INSERT INTO t1 values (7, 0);
INSERT INTO t1 values (9, 0);
set global rocksdb_debug_ttl_rec_ts = 0;
UPDATE t1 SET a=a+1;
SELECT * FROM t1 FORCE INDEX (kb);
a b
10 0
2 0
4 0
6 0
8 0
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
SELECT * FROM t1;
a b
10 0
8 0
DROP TABLE t1;
CREATE TABLE t1 (
a INT,
b bigint(20) UNSIGNED NOT NULL,
PRIMARY KEY (a),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=5;ttl_col=b;';
set global rocksdb_debug_ttl_rec_ts = -300;
INSERT INTO t1 values (1, UNIX_TIMESTAMP());
INSERT INTO t1 values (3, UNIX_TIMESTAMP());
INSERT INTO t1 values (5, UNIX_TIMESTAMP());
INSERT INTO t1 values (7, UNIX_TIMESTAMP());
set global rocksdb_debug_ttl_rec_ts = 300;
UPDATE t1 SET b=(UNIX_TIMESTAMP()+1) WHERE a < 4;
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT a FROM t1 FORCE INDEX (kb);
a
1
3
5
7
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
SELECT a FROM t1 FORCE INDEX (kb);
a
1
3
DROP TABLE t1;
CREATE TABLE t1 (
a bigint(20) NOT NULL,
b int NOT NULL,
PRIMARY KEY (a),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, 1);
INSERT INTO t1 values (2, 1);
INSERT INTO t1 values (3, 1);
set global rocksdb_debug_ttl_rec_ts = 0;
set global rocksdb_enable_ttl=0;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_rows_expired';
set global rocksdb_enable_ttl=1;
set global rocksdb_compact_cf='default';
select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_expired';
variable_value-@c
6
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
0
DROP TABLE t1;
CREATE TABLE t1 (
a bigint(20) NOT NULL,
b int NOT NULL,
PRIMARY KEY (a),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=100;';
INSERT INTO t1 values (1, 1);
INSERT INTO t1 values (2, 2);
INSERT INTO t1 values (3, 3);
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_rows_expired';
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_expired';
variable_value-@c
0
DROP TABLE t1;
CREATE TABLE t1 (
a INT,
b bigint(20) UNSIGNED NOT NULL,
PRIMARY KEY (a, b),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=5;ttl_col=b;';
set global rocksdb_debug_ttl_rec_ts = -300;
INSERT INTO t1 values (1, UNIX_TIMESTAMP());
INSERT INTO t1 values (3, UNIX_TIMESTAMP());
INSERT INTO t1 values (5, UNIX_TIMESTAMP());
INSERT INTO t1 values (7, UNIX_TIMESTAMP());
set global rocksdb_debug_ttl_rec_ts = 300;
UPDATE t1 SET b=(UNIX_TIMESTAMP()+1) WHERE a < 4;
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT a FROM t1 FORCE INDEX (kb);
a
1
3
5
7
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
SELECT a FROM t1 FORCE INDEX (kb);
a
1
3
DROP TABLE t1;
CREATE TABLE t1 (
a INT,
b bigint(20) UNSIGNED NOT NULL,
PRIMARY KEY (a, b)
) ENGINE=rocksdb
COMMENT='ttl_duration=5;ttl_col=b;';
set global rocksdb_debug_ttl_rec_ts = -300;
INSERT INTO t1 values (1, UNIX_TIMESTAMP());
INSERT INTO t1 values (3, UNIX_TIMESTAMP());
INSERT INTO t1 values (5, UNIX_TIMESTAMP());
INSERT INTO t1 values (7, UNIX_TIMESTAMP());
set global rocksdb_debug_ttl_rec_ts = 300;
UPDATE t1 SET b=(UNIX_TIMESTAMP()+1) WHERE a < 4;
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT a FROM t1;
a
1
3
5
7
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
SELECT a FROM t1;
a
1
3
DROP TABLE t1;
CREATE TABLE t1 (
`a` binary(8) NOT NULL,
`b` varbinary(64) NOT NULL,
`c` varbinary(256) NOT NULL,
`ts` bigint(20) UNSIGNED NOT NULL,
`value` mediumblob NOT NULL,
PRIMARY KEY (`b`,`a`,`c`)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values ('a', 'b', 'c', UNIX_TIMESTAMP(), 'd');
INSERT INTO t1 values ('d', 'e', 'f', UNIX_TIMESTAMP(), 'g');
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*);
COUNT(*)
1
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
SELECT COUNT(*);
COUNT(*)
1
CREATE INDEX kb on t1 (b);
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
0
DROP TABLE t1;
CREATE TABLE t1 (
`a` binary(8) NOT NULL,
`b` varbinary(64) NOT NULL,
`c` varbinary(256) NOT NULL,
`value` mediumblob NOT NULL,
PRIMARY KEY (`b`,`a`,`c`)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
COMMENT='ttl_duration=1';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values ('a', 'b', 'c', 'd');
INSERT INTO t1 values ('d', 'e', 'f', 'g');
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*);
COUNT(*)
1
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
SELECT COUNT(*);
COUNT(*)
1
CREATE INDEX kb on t1 (b);
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
0
DROP TABLE t1;
CREATE TABLE t1 (
`a` binary(8) NOT NULL,
`b` varbinary(64) NOT NULL,
`c` varbinary(256) NOT NULL,
`ts` bigint(20) UNSIGNED NOT NULL,
`value` mediumblob NOT NULL,
PRIMARY KEY (`b`,`a`,`c`, `ts`)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values ('a', 'b', 'c', UNIX_TIMESTAMP(), 'd');
INSERT INTO t1 values ('d', 'e', 'f', UNIX_TIMESTAMP(), 'g');
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*);
COUNT(*)
1
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
SELECT COUNT(*);
COUNT(*)
1
CREATE INDEX kb on t1 (b);
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
COUNT(*)
0
DROP TABLE t1;

View File

@@ -0,0 +1,494 @@
CREATE TABLE t1 (
a int PRIMARY KEY,
b int NOT NULL,
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, 1);
INSERT INTO t1 values (2, 2);
set global rocksdb_debug_ttl_rec_ts = 0;
set global rocksdb_force_flush_memtable_now=1;
SELECT * FROM t1 FORCE INDEX (PRIMARY);
a b
SELECT * FROM t1 FORCE INDEX (kb);
a b
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_rows_expired';
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_expired';
variable_value-@c
2
DROP TABLE t1;
CREATE TABLE t1 (
a int PRIMARY KEY,
b BIGINT UNSIGNED NOT NULL,
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=10;';
set global rocksdb_debug_ttl_rec_ts = -300;
INSERT INTO t1 values (1, UNIX_TIMESTAMP());
set global rocksdb_debug_ttl_rec_ts = 300;
INSERT INTO t1 values (2, UNIX_TIMESTAMP());
INSERT INTO t1 values (3, UNIX_TIMESTAMP());
set global rocksdb_debug_ttl_rec_ts = 0;
set global rocksdb_force_flush_memtable_now=1;
# 1 should be hidden
SELECT a FROM t1 FORCE INDEX (PRIMARY);
a
2
3
SELECT a FROM t1 FORCE INDEX (kb);
a
2
3
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
# none should be hidden yet, compaction runs but records aren't expired
SELECT a FROM t1 FORCE INDEX (PRIMARY);
a
2
3
SELECT a FROM t1 FORCE INDEX (kb);
a
2
3
# all should be hidden now, even though compaction hasn't run again
set global rocksdb_debug_ttl_read_filter_ts = -310;
SELECT a FROM t1 FORCE INDEX (PRIMARY);
a
SELECT a FROM t1 FORCE INDEX (kb);
a
set global rocksdb_debug_ttl_read_filter_ts = 0;
DROP TABLE t1;
CREATE TABLE t1 (
a int PRIMARY KEY,
b int NOT NULL,
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, 1);
INSERT INTO t1 values (3, 3);
INSERT INTO t1 values (5, 5);
INSERT INTO t1 values (7, 7);
set global rocksdb_debug_ttl_rec_ts = 0;
# should return nothing.
SELECT * FROM t1 FORCE INDEX (PRIMARY);
a b
SELECT * FROM t1 FORCE INDEX (kb);
a b
set global rocksdb_enable_ttl_read_filtering=0;
# should return everything
SELECT * FROM t1 FORCE INDEX (PRIMARY);
a b
1 1
3 3
5 5
7 7
SELECT * FROM t1 FORCE INDEX (kb);
a b
1 1
3 3
5 5
7 7
set global rocksdb_enable_ttl_read_filtering=1;
# should return nothing.
SELECT * FROM t1 FORCE INDEX (PRIMARY);
a b
SELECT * FROM t1 FORCE INDEX (kb);
a b
DROP TABLE t1;
# Read filtering index scan tests (None of these queries should return any results)
CREATE TABLE t1 (
a int,
b int,
c int,
PRIMARY KEY (a,b,c),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (0,0,0);
INSERT INTO t1 values (0,0,1);
INSERT INTO t1 values (0,1,0);
INSERT INTO t1 values (0,1,1);
INSERT INTO t1 values (1,1,2);
INSERT INTO t1 values (1,2,1);
INSERT INTO t1 values (1,2,2);
INSERT INTO t1 values (1,2,3);
set global rocksdb_debug_ttl_rec_ts = 0;
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_rows_expired';
set global rocksdb_force_flush_memtable_now=1;
SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE a=1 AND b=2 AND c=2;
a b c
SELECT * FROM t1 FORCE INDEX (kb) WHERE a=1 AND b=2 AND c=2;
a b c
SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE a = 1;
a b c
SELECT * FROM t1 FORCE INDEX (kb) WHERE a = 1;
a b c
SELECT max(a) FROM t1 FORCE INDEX (PRIMARY) WHERE a < 3;
max(a)
NULL
SELECT max(a) FROM t1 FORCE INDEX (kb) WHERE a < 3;
max(a)
NULL
SELECT max(a) FROM t1 FORCE INDEX (PRIMARY) WHERE a < 2 AND b = 1 AND c < 3;
max(a)
NULL
SELECT max(a) FROM t1 FORCE INDEX (kb) WHERE a < 2 AND b = 1 AND c < 3;
max(a)
NULL
SELECT min(a) FROM t1 FORCE INDEX (PRIMARY) WHERE a >= 1;
min(a)
NULL
SELECT min(a) FROM t1 FORCE INDEX (kb) WHERE a >= 1;
min(a)
NULL
SELECT min(a) FROM t1 FORCE INDEX (PRIMARY) WHERE a > 1;
min(a)
NULL
SELECT min(a) FROM t1 FORCE INDEX (kb) WHERE a > 1;
min(a)
NULL
SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE a=1 and b in (1) order by c desc;
a b c
SELECT * FROM t1 FORCE INDEX (kb) WHERE a=1 and b in (1) order by c desc;
a b c
SELECT max(a) FROM t1 FORCE INDEX (PRIMARY) WHERE a <=10;
max(a)
NULL
SELECT max(a) FROM t1 FORCE INDEX (kb) WHERE a <=10;
max(a)
NULL
SELECT a FROM t1 FORCE INDEX (PRIMARY) WHERE a > 0 and a <= 2;
a
SELECT a FROM t1 FORCE INDEX (kb) WHERE a > 0 and a <= 2;
a
select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_expired';
variable_value-@c
0
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_expired';
variable_value-@c
8
DROP TABLE t1;
# Attempt to update expired value, should filter out
set global rocksdb_force_flush_memtable_now=1;
CREATE TABLE t1 (
a int PRIMARY KEY
) ENGINE=rocksdb
COMMENT='ttl_duration=1;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1);
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT * FROM t1 FORCE INDEX (PRIMARY);
a
SELECT * FROM t1;
a
# No error is thrown here, under the hood index_next_with_direction is
# filtering out the record from being seen in the first place.
UPDATE t1 set a = 1;
DROP TABLE t1;
# Ensure no rows can disappear in the middle of long-running transactions
# Also ensure repeatable-read works as expected
CREATE TABLE t1 (
a int PRIMARY KEY,
b int NOT NULL,
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=5;';
INSERT INTO t1 values (1, 1);
# Creating Snapshot (start transaction)
BEGIN;
# Nothing filtered out here
SELECT * FROM t1 FORCE INDEX (PRIMARY);
a b
1 1
SELECT * FROM t1 FORCE INDEX (kb);
a b
1 1
SELECT * FROM t1 FORCE INDEX (PRIMARY);
a b
1 1
SELECT * FROM t1 FORCE INDEX (kb);
a b
1 1
# Switching to connection 2
# compaction doesn't do anything since con1 snapshot is still open
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
# read filtered out, because on a different connection, on
# this connection the records have 'expired' already so they are filtered out
# even though they have not yet been removed by compaction
SELECT * FROM t1 FORCE INDEX (PRIMARY);
a b
SELECT * FROM t1 FORCE INDEX (kb);
a b
# Switching to connection 1
SELECT * FROM t1 FORCE INDEX (PRIMARY);
a b
1 1
SELECT * FROM t1 FORCE INDEX (kb);
a b
1 1
UPDATE t1 set a = a + 1;
SELECT * FROM t1 FORCE INDEX (PRIMARY);
a b
2 1
SELECT * FROM t1 FORCE INDEX (kb);
a b
2 1
COMMIT;
SELECT * FROM t1 FORCE INDEX (PRIMARY);
a b
SELECT * FROM t1 FORCE INDEX (kb);
a b
DROP TABLE t1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
CREATE TABLE t1 (
a int PRIMARY KEY,
b int NOT NULL,
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;';
# On Connection 1
# Creating Snapshot (start transaction)
BEGIN;
SELECT * FROM t1 FORCE INDEX (kb);
a b
# On Connection 2
set global rocksdb_debug_ttl_rec_ts = -2;
INSERT INTO t1 values (1, 1);
INSERT INTO t1 values (3, 3);
INSERT INTO t1 values (5, 5);
INSERT INTO t1 values (7, 7);
set global rocksdb_debug_ttl_rec_ts = 0;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
# On Connection 1
SELECT * FROM t1 FORCE INDEX (PRIMARY);
a b
SELECT * FROM t1 FORCE INDEX (kb);
a b
# On Connection 2
SELECT * FROM t1 FORCE INDEX (PRIMARY);
a b
SELECT * FROM t1 FORCE INDEX (kb);
a b
set global rocksdb_enable_ttl_read_filtering=0;
SELECT * FROM t1 FORCE INDEX (PRIMARY);
a b
1 1
3 3
5 5
7 7
SELECT * FROM t1 FORCE INDEX (kb);
a b
1 1
3 3
5 5
7 7
set global rocksdb_enable_ttl_read_filtering=1;
DROP TABLE t1;
CREATE TABLE t1 (
a int,
b int,
ts bigint(20) UNSIGNED NOT NULL,
PRIMARY KEY (a),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = 100;
INSERT INTO t1 VALUES (1, 1, UNIX_TIMESTAMP());
INSERT INTO t1 VALUES (2, 2, UNIX_TIMESTAMP());
INSERT INTO t1 VALUES (3, 3, UNIX_TIMESTAMP());
INSERT INTO t1 VALUES (4, 4, UNIX_TIMESTAMP());
INSERT INTO t1 VALUES (5, 5, UNIX_TIMESTAMP());
INSERT INTO t1 VALUES (6, 6, UNIX_TIMESTAMP());
INSERT INTO t1 VALUES (7, 7, UNIX_TIMESTAMP());
INSERT INTO t1 VALUES (8, 8, UNIX_TIMESTAMP());
INSERT INTO t1 VALUES (9, 9, UNIX_TIMESTAMP());
INSERT INTO t1 VALUES (10, 10, UNIX_TIMESTAMP());
set global rocksdb_debug_ttl_rec_ts = 0;
set global rocksdb_force_flush_memtable_now=1;
# None are expired
SELECT a, b FROM t1 FORCE INDEX (kb);
a b
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
set global rocksdb_debug_ttl_rec_ts = -100;
UPDATE t1 SET ts=(UNIX_TIMESTAMP()+1) WHERE a IN (4, 7);
set global rocksdb_debug_ttl_rec_ts = 0;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
# 4 and 7 should be gone
SELECT a, b FROM t1 FORCE INDEX (kb);
a b
1 1
2 2
3 3
5 5
6 6
8 8
9 9
10 10
DROP TABLE t1;
CREATE TABLE t1 (
c1 INT,
c2 INT,
name VARCHAR(25) NOT NULL,
PRIMARY KEY (c1, c2),
KEY kc2 (c2)
) ENGINE=ROCKSDB
COMMENT='ttl_duration=1;';
set global rocksdb_debug_ttl_rec_ts = -1200;
INSERT INTO t1 values (1,1,'a');
INSERT INTO t1 values (2,2,'b');
set global rocksdb_debug_ttl_rec_ts = 1200;
INSERT INTO t1 values (3,3,'c');
INSERT INTO t1 values (4,4,'d');
set global rocksdb_debug_ttl_rec_ts = -1200;
INSERT INTO t1 values (5,5,'e');
INSERT INTO t1 values (6,6,'f');
set global rocksdb_debug_ttl_rec_ts = 1200;
INSERT INTO t1 values (7,7,'g');
INSERT INTO t1 values (8,8,'h');
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT * FROM t1 FORCE INDEX (PRIMARY);
c1 c2 name
3 3 c
4 4 d
7 7 g
8 8 h
SELECT * FROM t1 FORCE INDEX (kc2);
c1 c2 name
3 3 c
4 4 d
7 7 g
8 8 h
SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE c1 > 5;
c1 c2 name
7 7 g
8 8 h
SELECT * FROM t1 FORCE INDEX (kc2) WHERE c2 > 5;
c1 c2 name
7 7 g
8 8 h
SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE 3 < c1 AND c1 < 6;
c1 c2 name
4 4 d
SELECT * FROM t1 FORCE INDEX (kc2) WHERE 3 < c2 AND c2 < 6;
c1 c2 name
4 4 d
DROP TABLE t1;
CREATE TABLE t1 (
a int,
b int,
PRIMARY KEY (a),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1800;';
set global rocksdb_debug_ttl_rec_ts = 0;
INSERT INTO t1 values (1,1);
INSERT INTO t1 values (2,2);
INSERT INTO t1 values (7,7);
INSERT INTO t1 values (10,10);
INSERT INTO t1 values (11,11);
INSERT INTO t1 values (12,12);
set global rocksdb_debug_ttl_rec_ts = 450;
INSERT INTO t1 values (3,3);
INSERT INTO t1 values (4,4);
INSERT INTO t1 values (8,8);
INSERT INTO t1 values (16,16);
INSERT INTO t1 values (17,17);
INSERT INTO t1 values (18,18);
set global rocksdb_debug_ttl_rec_ts = 900;
INSERT INTO t1 values (5,5);
INSERT INTO t1 values (6,6);
INSERT INTO t1 values (9,9);
INSERT INTO t1 values (13,13);
INSERT INTO t1 values (14,14);
INSERT INTO t1 values (15,15);
set global rocksdb_debug_ttl_rec_ts = 0;
# Should see everything
SELECT * FROM t1;
a b
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
# Should have no records from the first group
set global rocksdb_debug_ttl_read_filter_ts = -1800;
SELECT * FROM t1;
a b
3 3
4 4
5 5
6 6
8 8
9 9
13 13
14 14
15 15
16 16
17 17
18 18
SELECT * FROM t1 FORCE INDEX (kb) WHERE a > 5 AND a < 15;
a b
6 6
8 8
9 9
13 13
14 14
# Should only have records from the last group
set global rocksdb_debug_ttl_read_filter_ts = -1800 - 450;
SELECT * FROM t1;
a b
5 5
6 6
9 9
13 13
14 14
15 15
SELECT * FROM t1 FORCE INDEX (kb) WHERE a < 10;
a b
5 5
6 6
9 9
# Should be empty
set global rocksdb_debug_ttl_read_filter_ts = -1800 - 900;
SELECT * FROM t1;
a b
set global rocksdb_debug_ttl_read_filter_ts = 0;
DROP TABLE t1;

View File

@@ -0,0 +1,82 @@
CREATE TABLE t1 (
a int NOT NULL,
b int NOT NULL,
c int NOT NULL,
PRIMARY KEY (a),
KEY kb (b) COMMENT 'kb',
KEY kc (c) COMMENT 'kc'
) ENGINE=ROCKSDB
COMMENT='ttl_duration=1';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, 1, 1);
INSERT INTO t1 values (2, 2, 2);
set global rocksdb_debug_ttl_rec_ts = 100;
INSERT INTO t1 values (3, 3, 3);
set global rocksdb_debug_ttl_rec_ts = 0;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='kb';
SELECT * FROM t1 FORCE INDEX (PRIMARY);
a b c
3 3 3
SELECT * FROM t1 FORCE INDEX (kb);
a b c
3 3 3
SELECT * FROM t1 FORCE INDEX (kc);
a b c
3 3 3
DROP TABLE t1;
CREATE TABLE t1 (
a int NOT NULL,
b int NOT NULL,
c int NOT NULL,
PRIMARY KEY (a),
KEY kb (b) COMMENT 'kb',
KEY kc (c) COMMENT 'kc'
) ENGINE=ROCKSDB
COMMENT='ttl_duration=1';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, 1, 1);
INSERT INTO t1 values (2, 2, 2);
set global rocksdb_debug_ttl_rec_ts = 100;
INSERT INTO t1 values (3, 3, 3);
set global rocksdb_debug_ttl_rec_ts = 0;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
SELECT * FROM t1 FORCE INDEX (PRIMARY);
a b c
3 3 3
SELECT * FROM t1 FORCE INDEX (kb);
a b c
3 3 3
SELECT * FROM t1 FORCE INDEX (kc);
a b c
3 3 3
DROP TABLE t1;
CREATE TABLE t1 (
a int NOT NULL,
b int NOT NULL,
c int NOT NULL,
PRIMARY KEY (a),
KEY kb (b) COMMENT 'kb',
KEY kc (c) COMMENT 'kc'
) ENGINE=ROCKSDB
COMMENT='ttl_duration=1';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, 1, 1);
INSERT INTO t1 values (2, 2, 2);
set global rocksdb_debug_ttl_rec_ts = 100;
INSERT INTO t1 values (3, 3, 3);
set global rocksdb_debug_ttl_rec_ts = 0;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_compact_cf='kb';
SELECT * FROM t1 FORCE INDEX (PRIMARY);
a b c
3 3 3
SELECT * FROM t1 FORCE INDEX (kb);
a b c
3 3 3
SELECT * FROM t1 FORCE INDEX (kc);
a b c
3 3 3
DROP TABLE t1;

View File

@@ -0,0 +1,389 @@
CREATE TABLE t1 (
c1 INT,
c2 INT,
PRIMARY KEY (`c1`),
KEY kc2 (`c2`)
) ENGINE=ROCKSDB
COMMENT="custom_p0_ttl_duration=1;"
PARTITION BY LIST(c1) (
PARTITION custom_p0 VALUES IN (1, 4, 7),
PARTITION custom_p1 VALUES IN (2, 5, 8),
PARTITION custom_p2 VALUES IN (3, 6, 9)
);
set global rocksdb_debug_ttl_rec_ts = -3600;
INSERT INTO t1 values (1, 1);
INSERT INTO t1 values (2, 2);
INSERT INTO t1 values (3, 3);
INSERT INTO t1 values (4, 4);
INSERT INTO t1 values (5, 5);
INSERT INTO t1 values (6, 6);
INSERT INTO t1 values (7, 7);
INSERT INTO t1 values (8, 8);
INSERT INTO t1 values (9, 9);
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT * FROM t1 FORCE INDEX (PRIMARY);
c1 c2
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
SELECT * FROM t1 FORCE INDEX (kc2);
c1 c2
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
SELECT * FROM t1 FORCE INDEX (PRIMARY);
c1 c2
2 2
3 3
5 5
6 6
8 8
9 9
SELECT * FROM t1 FORCE INDEX (kc2);
c1 c2
2 2
3 3
5 5
6 6
8 8
9 9
DROP TABLE t1;
CREATE TABLE t1 (
c1 INT,
c2 INT,
name VARCHAR(25) NOT NULL,
PRIMARY KEY (`c1`, `c2`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=my_custom_cf;custom_p2_cfname=baz',
KEY kc2 (`c2`)
) ENGINE=ROCKSDB
COMMENT="custom_p0_ttl_duration=1;custom_p1_ttl_duration=7;"
PARTITION BY LIST(c1) (
PARTITION custom_p0 VALUES IN (1, 4, 7),
PARTITION custom_p1 VALUES IN (2, 5, 8),
PARTITION custom_p2 VALUES IN (3, 6, 9)
);
set global rocksdb_debug_ttl_rec_ts = -1200;
INSERT INTO t1 values (1,1,'a');
INSERT INTO t1 values (4,4,'aaaa');
INSERT INTO t1 values (7,7,'aaaaaaa');
set global rocksdb_debug_ttl_rec_ts = 1200;
INSERT INTO t1 values (2,2,'aa');
INSERT INTO t1 values (3,3,'aaa');
INSERT INTO t1 values (5,5,'aaaaa');
INSERT INTO t1 values (6,6,'aaaaaa');
INSERT INTO t1 values (8,8,'aaaaaaaa');
INSERT INTO t1 values (9,9,'aaaaaaaaa');
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT * FROM t1 FORCE INDEX (PRIMARY);
c1 c2 name
1 1 a
2 2 aa
3 3 aaa
4 4 aaaa
5 5 aaaaa
6 6 aaaaaa
7 7 aaaaaaa
8 8 aaaaaaaa
9 9 aaaaaaaaa
SELECT * FROM t1 FORCE INDEX (kc2);
c1 c2 name
1 1 a
2 2 aa
3 3 aaa
4 4 aaaa
5 5 aaaaa
6 6 aaaaaa
7 7 aaaaaaa
8 8 aaaaaaaa
9 9 aaaaaaaaa
set global rocksdb_force_flush_memtable_now=1;
set @@global.rocksdb_compact_cf = 'foo';
set @@global.rocksdb_compact_cf = 'my_custom_cf';
set @@global.rocksdb_compact_cf = 'default';
SELECT * FROM t1 FORCE INDEX (PRIMARY);
c1 c2 name
2 2 aa
3 3 aaa
5 5 aaaaa
6 6 aaaaaa
8 8 aaaaaaaa
9 9 aaaaaaaaa
SELECT * FROM t1 FORCE INDEX (kc2);
c1 c2 name
2 2 aa
3 3 aaa
5 5 aaaaa
6 6 aaaaaa
8 8 aaaaaaaa
9 9 aaaaaaaaa
set global rocksdb_debug_ttl_snapshot_ts = 3600;
set @@global.rocksdb_compact_cf = 'foo';
SELECT * FROM t1 FORCE INDEX (PRIMARY);
c1 c2 name
2 2 aa
3 3 aaa
5 5 aaaaa
6 6 aaaaaa
8 8 aaaaaaaa
9 9 aaaaaaaaa
SELECT * FROM t1 FORCE INDEX (kc2);
c1 c2 name
2 2 aa
3 3 aaa
5 5 aaaaa
6 6 aaaaaa
8 8 aaaaaaaa
9 9 aaaaaaaaa
set @@global.rocksdb_compact_cf = 'my_custom_cf';
set @@global.rocksdb_compact_cf = 'default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
SELECT * FROM t1 FORCE INDEX (PRIMARY);
c1 c2 name
3 3 aaa
6 6 aaaaaa
9 9 aaaaaaaaa
SELECT * FROM t1 FORCE INDEX (kc2);
c1 c2 name
3 3 aaa
6 6 aaaaaa
9 9 aaaaaaaaa
DROP TABLE t1;
CREATE TABLE t1 (
c1 INT,
c2 INT,
name VARCHAR(25) NOT NULL,
event DATE,
PRIMARY KEY (`c1`, `c2`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;',
KEY kc2 (c2)
) ENGINE=ROCKSDB
COMMENT="custom_p0_ttl_duration=9999;custom_p2_ttl_duration=5;"
PARTITION BY LIST(c1) (
PARTITION custom_p0 VALUES IN (1, 2, 3),
PARTITION custom_p1 VALUES IN (4, 5, 6),
PARTITION custom_p2 VALUES IN (7, 8, 9)
);
INSERT INTO t1 VALUES (1, 1, "one", null);
INSERT INTO t1 VALUES (2, 2, "two", null);
INSERT INTO t1 VALUES (3, 3, "three", null);
INSERT INTO t1 VALUES (4, 4, "four", null);
INSERT INTO t1 VALUES (5, 5, "five", null);
INSERT INTO t1 VALUES (6, 6, "six", null);
INSERT INTO t1 VALUES (7, 7, "seven", null);
INSERT INTO t1 VALUES (8, 8, "eight", null);
INSERT INTO t1 VALUES (9, 9, "nine", null);
SELECT * FROM t1 FORCE INDEX (PRIMARY);
c1 c2 name event
1 1 one NULL
2 2 two NULL
3 3 three NULL
4 4 four NULL
5 5 five NULL
6 6 six NULL
7 7 seven NULL
8 8 eight NULL
9 9 nine NULL
SELECT * FROM t1 FORCE INDEX (kc2);
c1 c2 name event
1 1 one NULL
2 2 two NULL
3 3 three NULL
4 4 four NULL
5 5 five NULL
6 6 six NULL
7 7 seven NULL
8 8 eight NULL
9 9 nine NULL
set global rocksdb_debug_ttl_rec_ts = 600;
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(`c2`,`c1`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;';
set global rocksdb_debug_ttl_rec_ts = 0;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` int(11) NOT NULL DEFAULT '0',
`c2` int(11) NOT NULL DEFAULT '0',
`name` varchar(25) NOT NULL,
`event` date DEFAULT NULL,
PRIMARY KEY (`c2`,`c1`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;',
KEY `kc2` (`c2`)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 COMMENT='custom_p0_ttl_duration=9999;custom_p2_ttl_duration=5;'
/*!50100 PARTITION BY LIST (c1)
(PARTITION custom_p0 VALUES IN (1,2,3) ENGINE = ROCKSDB,
PARTITION custom_p1 VALUES IN (4,5,6) ENGINE = ROCKSDB,
PARTITION custom_p2 VALUES IN (7,8,9) ENGINE = ROCKSDB) */
set global rocksdb_debug_ttl_snapshot_ts = 100;
set global rocksdb_force_flush_memtable_now=1;
set @@global.rocksdb_compact_cf = 'baz';
set @@global.rocksdb_compact_cf = 'default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
SELECT * FROM t1 FORCE INDEX (PRIMARY);
c1 c2 name event
1 1 one NULL
2 2 two NULL
3 3 three NULL
4 4 four NULL
5 5 five NULL
6 6 six NULL
7 7 seven NULL
8 8 eight NULL
9 9 nine NULL
SELECT * FROM t1 FORCE INDEX (kc2);
c1 c2 name event
1 1 one NULL
2 2 two NULL
3 3 three NULL
4 4 four NULL
5 5 five NULL
6 6 six NULL
7 7 seven NULL
8 8 eight NULL
9 9 nine NULL
set global rocksdb_debug_ttl_snapshot_ts = 1200;
set @@global.rocksdb_compact_cf = 'foo';
set @@global.rocksdb_compact_cf = 'baz';
set @@global.rocksdb_compact_cf = 'default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
SELECT * FROM t1 FORCE INDEX (PRIMARY);
c1 c2 name event
1 1 one NULL
2 2 two NULL
3 3 three NULL
4 4 four NULL
5 5 five NULL
6 6 six NULL
SELECT * FROM t1 FORCE INDEX (kc2);
c1 c2 name event
1 1 one NULL
2 2 two NULL
3 3 three NULL
4 4 four NULL
5 5 five NULL
6 6 six NULL
DROP TABLE t1;
CREATE TABLE t1 (
c1 BIGINT,
c2 BIGINT UNSIGNED NOT NULL,
name VARCHAR(25) NOT NULL,
event DATE,
PRIMARY KEY (`c1`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;',
KEY kc2 (`c2`)
) ENGINE=ROCKSDB
COMMENT="ttl_duration=1;custom_p1_ttl_duration=100;custom_p1_ttl_col=c2;custom_p2_ttl_duration=5000;"
PARTITION BY LIST(c1) (
PARTITION custom_p0 VALUES IN (1, 2, 3),
PARTITION custom_p1 VALUES IN (4, 5, 6),
PARTITION custom_p2 VALUES IN (7, 8, 9)
);
set global rocksdb_debug_ttl_rec_ts = -300;
INSERT INTO t1 VALUES (1, UNIX_TIMESTAMP(), "one", null);
INSERT INTO t1 VALUES (2, UNIX_TIMESTAMP(), "two", null);
INSERT INTO t1 VALUES (3, UNIX_TIMESTAMP(), "three", null);
set global rocksdb_debug_ttl_rec_ts = 0;
INSERT INTO t1 VALUES (4, UNIX_TIMESTAMP(), "four", null);
INSERT INTO t1 VALUES (5, UNIX_TIMESTAMP(), "five", null);
INSERT INTO t1 VALUES (6, UNIX_TIMESTAMP(), "six", null);
INSERT INTO t1 VALUES (7, UNIX_TIMESTAMP(), "seven", null);
INSERT INTO t1 VALUES (8, UNIX_TIMESTAMP(), "eight", null);
INSERT INTO t1 VALUES (9, UNIX_TIMESTAMP(), "nine", null);
set global rocksdb_force_flush_memtable_now=1;
set @@global.rocksdb_compact_cf = 'foo';
set @@global.rocksdb_compact_cf = 'baz';
set @@global.rocksdb_compact_cf = 'bar';
set @@global.rocksdb_compact_cf = 'default';
SELECT c1 FROM t1 FORCE INDEX (PRIMARY);
c1
4
5
6
7
8
9
SELECT c1 FROM t1 FORCE INDEX (kc2);
c1
4
5
6
7
8
9
set global rocksdb_debug_ttl_snapshot_ts = 600;
set @@global.rocksdb_compact_cf = 'bar';
set @@global.rocksdb_compact_cf = 'default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
SELECT c1 FROM t1 FORCE INDEX (PRIMARY);
c1
7
8
9
SELECT c1 FROM t1 FORCE INDEX (kc2);
c1
7
8
9
DROP TABLE t1;
CREATE TABLE t1 (
c1 INT,
c2 INT,
PRIMARY KEY (`c1`) COMMENT 'custom_p0_cfname=foo;'
) ENGINE=ROCKSDB
COMMENT="custom_p0_ttl_duration=1;"
PARTITION BY LIST(c1) (
PARTITION custom_p0 VALUES IN (1, 4, 7),
PARTITION custom_p1 VALUES IN (2, 5, 8),
PARTITION custom_p2 VALUES IN (3, 6, 9)
);
set global rocksdb_debug_ttl_rec_ts = -3600;
INSERT INTO t1 values (1, 1);
INSERT INTO t1 values (4, 4);
INSERT INTO t1 values (7, 7);
set global rocksdb_debug_ttl_rec_ts = 0;
INSERT INTO t1 values (2, 2);
INSERT INTO t1 values (3, 3);
INSERT INTO t1 values (5, 5);
INSERT INTO t1 values (6, 6);
INSERT INTO t1 values (8, 8);
INSERT INTO t1 values (9, 9);
SELECT * FROM t1;
c1 c2
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
CREATE INDEX kc2 on t1 (c2);
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='foo';
set global rocksdb_compact_cf='default';
SELECT * FROM t1 FORCE INDEX (PRIMARY);
c1 c2
2 2
3 3
5 5
6 6
8 8
9 9
SELECT * FROM t1 FORCE INDEX (kc2);
c1 c2
2 2
3 3
5 5
6 6
8 8
9 9
DROP TABLE t1;

View File

@@ -2,35 +2,26 @@ SET GLOBAL rocksdb_write_disable_wal=false;
SET GLOBAL rocksdb_write_ignore_missing_column_families=true; SET GLOBAL rocksdb_write_ignore_missing_column_families=true;
create table aaa (id int primary key, i int) engine rocksdb; create table aaa (id int primary key, i int) engine rocksdb;
set @save_rocksdb_flush_log_at_trx_commit=@@global.rocksdb_flush_log_at_trx_commit; set @save_rocksdb_flush_log_at_trx_commit=@@global.rocksdb_flush_log_at_trx_commit;
SET GLOBAL rocksdb_flush_log_at_trx_commit=0; SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
select variable_value into @a from information_schema.global_status where variable_name='rocksdb_wal_synced'; select variable_value into @a from information_schema.global_status where variable_name='rocksdb_wal_synced';
insert aaa(id, i) values(1,1); insert aaa(id, i) values(1,1);
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced'; select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
variable_value-@a variable_value-@a
0 1
insert aaa(id, i) values(2,1); insert aaa(id, i) values(2,1);
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced'; select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
variable_value-@a variable_value-@a
0 2
insert aaa(id, i) values(3,1); insert aaa(id, i) values(3,1);
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced'; select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
variable_value-@a variable_value-@a
0
SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
insert aaa(id, i) values(4,1);
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
variable_value-@a
1
insert aaa(id, i) values(5,1);
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
variable_value-@a
2
insert aaa(id, i) values(6,1);
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
variable_value-@a
3 3
SET GLOBAL rocksdb_flush_log_at_trx_commit=0;
select variable_value into @a from information_schema.global_status where variable_name='rocksdb_wal_synced';
insert aaa(id, i) values(4,1);
SET GLOBAL rocksdb_flush_log_at_trx_commit=2; SET GLOBAL rocksdb_flush_log_at_trx_commit=2;
insert aaa(id, i) values(7,1); select variable_value into @a from information_schema.global_status where variable_name='rocksdb_wal_synced';
insert aaa(id, i) values(5,1);
truncate table aaa; truncate table aaa;
drop table aaa; drop table aaa;
set @@global.rocksdb_flush_log_at_trx_commit=@save_rocksdb_flush_log_at_trx_commit; set @@global.rocksdb_flush_log_at_trx_commit=@save_rocksdb_flush_log_at_trx_commit;

View File

@@ -13,7 +13,7 @@ USE mysqlslap;
CREATE TABLE t1(id BIGINT AUTO_INCREMENT, value BIGINT, PRIMARY KEY(id)) ENGINE=rocksdb; CREATE TABLE t1(id BIGINT AUTO_INCREMENT, value BIGINT, PRIMARY KEY(id)) ENGINE=rocksdb;
--echo # 2PC enabled, MyRocks durability enabled --echo # 2PC enabled, MyRocks durability enabled
SET GLOBAL rocksdb_enable_2pc=0; SET GLOBAL rocksdb_enable_2pc=1;
SET GLOBAL rocksdb_flush_log_at_trx_commit=1; SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
--echo ## 2PC + durability + single thread --echo ## 2PC + durability + single thread
@@ -28,7 +28,7 @@ select case when variable_value-@c > 0 and variable_value-@c < 10000 then 'true'
--echo # 2PC enabled, MyRocks durability disabled --echo # 2PC enabled, MyRocks durability disabled
SET GLOBAL rocksdb_enable_2pc=0; SET GLOBAL rocksdb_enable_2pc=1;
SET GLOBAL rocksdb_flush_log_at_trx_commit=0; SET GLOBAL rocksdb_flush_log_at_trx_commit=0;
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs'; select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';
@@ -41,7 +41,7 @@ select case when variable_value-@c = 0 then 'true' else 'false' end from informa
--echo # 2PC disabled, MyRocks durability enabled --echo # 2PC disabled, MyRocks durability enabled
SET GLOBAL rocksdb_enable_2pc=1; SET GLOBAL rocksdb_enable_2pc=0;
SET GLOBAL rocksdb_flush_log_at_trx_commit=1; SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs'; select variable_value into @c from information_schema.global_status where variable_name='rocksdb_wal_group_syncs';

View File

@@ -186,8 +186,8 @@ connect (con1,localhost,root,,);
--echo # Switch to connection con1 --echo # Switch to connection con1
connection con1; connection con1;
show global variables like 'rocksdb_bulk_load'; show global variables like 'rocksdb_bulk_load%';
show session variables like 'rocksdb_bulk_load'; show session variables like 'rocksdb_bulk_load%';
CREATE TABLE t1 (i INT, j INT, PRIMARY KEY (i)) ENGINE = ROCKSDB; CREATE TABLE t1 (i INT, j INT, PRIMARY KEY (i)) ENGINE = ROCKSDB;
@@ -255,9 +255,9 @@ SET @prior_rocksdb_merge_buf_size = @@rocksdb_merge_buf_size;
SET global rocksdb_strict_collation_check = off; SET global rocksdb_strict_collation_check = off;
SET session rocksdb_merge_combine_read_size = 566; SET session rocksdb_merge_combine_read_size = 566;
SET session rocksdb_merge_buf_size = 336; SET session rocksdb_merge_buf_size = 340;
show variables like '%rocksdb_bulk_load%'; show variables like 'rocksdb_bulk_load%';
CREATE TABLE t1 (a VARCHAR(80)) ENGINE=RocksDB; CREATE TABLE t1 (a VARCHAR(80)) ENGINE=RocksDB;
INSERT INTO t1 (a) VALUES (REPEAT("a", 80)); INSERT INTO t1 (a) VALUES (REPEAT("a", 80));
INSERT INTO t1 (a) VALUES (REPEAT("a", 80)); INSERT INTO t1 (a) VALUES (REPEAT("a", 80));

View File

@@ -1,5 +1,6 @@
--source include/have_rocksdb.inc --source include/have_rocksdb.inc
### Bulk load ###
CREATE TABLE t1(pk INT, PRIMARY KEY(pk)); CREATE TABLE t1(pk INT, PRIMARY KEY(pk));
# Make sure we get an error with out of order keys during bulk load # Make sure we get an error with out of order keys during bulk load
@@ -36,4 +37,29 @@ SET rocksdb_bulk_load=0;
--enable_reconnect --enable_reconnect
--source include/wait_until_connected_again.inc --source include/wait_until_connected_again.inc
TRUNCATE TABLE t1;
### Bulk load with unsorted PKs ###
SET rocksdb_bulk_load_allow_unsorted=1;
# We should not get an error with out of order PKs
SET rocksdb_bulk_load=1;
INSERT INTO t1 VALUES(100);
INSERT INTO t1 VALUES(101);
INSERT INTO t1 VALUES(99);
SET rocksdb_bulk_load=0;
SELECT * FROM t1;
TRUNCATE TABLE t1;
# We should get an error with duplicate PKs in the same bulk load
SET rocksdb_bulk_load=1;
INSERT INTO t1 VALUES(201);
INSERT INTO t1 VALUES(200);
INSERT INTO t1 VALUES(202);
--error ER_DUP_ENTRY
INSERT INTO t1 VALUES(201);
SET rocksdb_bulk_load=0;
SELECT * FROM t1;
SET rocksdb_bulk_load_allow_unsorted=DEFAULT;
DROP TABLE t1; DROP TABLE t1;

View File

@@ -0,0 +1,136 @@
--source include/have_rocksdb.inc
--let pk_cf=cf1
--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings
SET rocksdb_bulk_load_size=3;
SET rocksdb_bulk_load_allow_unsorted=1;
### Test individual INSERTs ###
# A table with only a PK won't have rows until the bulk load is finished
eval CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf");
SET rocksdb_bulk_load=1;
--disable_query_log
let $sign = 1;
let $max = 5;
let $i = 1;
while ($i <= $max) {
let $a = 1 + $sign * $i;
let $b = 1 - $sign * $i;
let $sign = -$sign;
let $insert = INSERT INTO t1 VALUES ($a, $b);
eval $insert;
inc $i;
}
--enable_query_log
SELECT * FROM t1;
SET rocksdb_bulk_load=0;
SELECT * FROM t1;
DROP TABLE t1;
# A table with a PK and a SK shows rows immediately
eval CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf", KEY(b));
SET rocksdb_bulk_load=1;
--disable_query_log
let $sign = 1;
let $max = 5;
let $i = 1;
while ($i <= $max) {
let $a = 1 + $sign * $i;
let $b = 1 - $sign * $i;
let $sign = -$sign;
let $insert = INSERT INTO t1 VALUES ($a, $b);
eval $insert;
inc $i;
}
--enable_query_log
SELECT * FROM t1;
SET rocksdb_bulk_load=0;
DROP TABLE t1;
# Inserting into another table finishes bulk load to the previous table
eval CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf");
eval CREATE TABLE t2(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf");
SET rocksdb_bulk_load=1;
INSERT INTO t1 VALUES (1,1);
INSERT INTO t2 VALUES (1,1);
SELECT * FROM t1;
INSERT INTO t1 VALUES (2,2);
SELECT * FROM t2;
SELECT * FROM t1;
SET rocksdb_bulk_load=0;
SELECT * FROM t1;
DROP TABLE t1, t2;
### Test bulk load from a file ###
eval CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf");
eval CREATE TABLE t2(a INT, b INT, PRIMARY KEY(b) COMMENT "$pk_cf");
eval CREATE TABLE t3(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf")
PARTITION BY KEY() PARTITIONS 4;
--let $file = `SELECT CONCAT(@@datadir, "test_loadfile.txt")`
# Create a text file with data to import into the table.
# PK and SK are not in any order
--let ROCKSDB_INFILE = $file
perl;
my $fn = $ENV{'ROCKSDB_INFILE'};
open(my $fh, '>', $fn) || die "perl open($fn): $!";
my $max = 5000000;
my $sign = 1;
for (my $ii = 0; $ii < $max; $ii++)
{
my $a = 1 + $sign * $ii;
my $b = 1 - $sign * $ii;
print $fh "$a\t$b\n";
}
close($fh);
EOF
--file_exists $file
# Make sure a snapshot held by another user doesn't block the bulk load
connect (other,localhost,root,,);
set session transaction isolation level repeatable read;
select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS';
start transaction with consistent snapshot;
select * from information_schema.rocksdb_dbstats where stat_type='DB_NUM_SNAPSHOTS';
connection default;
set rocksdb_bulk_load=1;
set rocksdb_bulk_load_size=100000;
--disable_query_log
--echo LOAD DATA INFILE <input_file> INTO TABLE t1;
eval LOAD DATA INFILE '$file' INTO TABLE t1;
--echo LOAD DATA INFILE <input_file> INTO TABLE t2;
eval LOAD DATA INFILE '$file' INTO TABLE t2;
--echo LOAD DATA INFILE <input_file> INTO TABLE t3;
eval LOAD DATA INFILE '$file' INTO TABLE t3;
--enable_query_log
set rocksdb_bulk_load=0;
--remove_file $file
# Make sure row count index stats are correct
--replace_column 6 # 7 # 8 # 9 #
SHOW TABLE STATUS WHERE name LIKE 't%';
ANALYZE TABLE t1, t2, t3;
--replace_column 6 # 7 # 8 # 9 #
SHOW TABLE STATUS WHERE name LIKE 't%';
# Make sure all the data is there.
select count(a) from t1;
select count(b) from t1;
select count(a) from t2;
select count(b) from t2;
select count(a) from t3;
select count(b) from t3;
DROP TABLE t1, t2, t3;
SET rocksdb_bulk_load_allow_unsorted=0;

View File

@@ -0,0 +1,8 @@
--source include/have_rocksdb.inc
--source include/have_nodebug.inc
# Cannot change unsorted input preference during bulk load
SET rocksdb_bulk_load=1;
--error ER_ERROR_WHEN_EXECUTING_COMMAND
SET rocksdb_bulk_load_allow_unsorted=1;
SET rocksdb_bulk_load=0;

View File

@@ -0,0 +1,22 @@
--source include/have_rocksdb.inc
--disable_warnings
DROP TABLE IF EXISTS stats_test_table;
--enable_warnings
# Create the table
CREATE TABLE stats_test_table (a INT, b INT, PRIMARY KEY (a)) ENGINE=ROCKSDB;
# Ensure appropriate perf_context_level is set
SET GLOBAL rocksdb_perf_context_level=3;
# Insert some values
INSERT INTO stats_test_table VALUES (7,1);
INSERT INTO stats_test_table VALUES (2,2);
# Verify the bytes written are updated in the table stats
SELECT io_write_bytes > 0 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_NAME = "stats_test_table";
# Cleanup
DROP TABLE stats_test_table;
SET GLOBAL rocksdb_perf_context_level=DEFAULT;

View File

@@ -0,0 +1,79 @@
# Disable until covered unpack_info format enabled in prod
--source include/have_debug.inc
--source include/have_nodebug.inc
--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings
#
# Normal case
#
CREATE TABLE t1 (
id INT,
fake_id INT,
bigfield VARCHAR(4096),
PRIMARY KEY (id),
KEY bf (bigfield(32)),
KEY fid (fake_id, bigfield(32))
) ENGINE=rocksdb;
INSERT INTO t1 VALUES (1, 1001, REPEAT('a', 1)),
(8, 1008, REPEAT('b', 8)),
(24, 1024, REPEAT('c', 24)),
(31, 1031, REPEAT('d', 31)),
(32, 1032, REPEAT('x', 32)),
(33, 1033, REPEAT('y', 33)),
(128, 1128, REPEAT('z', 128));
SELECT * FROM t1;
--let $prefix_index_check_title= Eligible for optimization, access via fake_id only
--let $prefix_index_check_read_avoided_delta= 2
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(fid) WHERE fake_id = 1031
--source suite/rocksdb/include/prefix_index_only_query_check.inc
--let $prefix_index_check_title= Not eligible for optimization, access via fake_id of big row.
--let $prefix_index_check_read_avoided_delta= 0
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(fid) WHERE fake_id = 1033
--source suite/rocksdb/include/prefix_index_only_query_check.inc
DROP TABLE t1;
#
# Create same table with older format to test compatibility
#
set session debug= '+d,MYROCKS_NO_COVERED_BITMAP_FORMAT';
CREATE TABLE t1 (
id INT,
fake_id INT,
bigfield VARCHAR(4096),
PRIMARY KEY (id),
KEY bf (bigfield(32)),
KEY fid (fake_id, bigfield(32))
) ENGINE=rocksdb;
set session debug= '-d,MYROCKS_NO_COVERED_BITMAP_FORMAT';
INSERT INTO t1 VALUES (1, 1001, REPEAT('a', 1)),
(8, 1008, REPEAT('b', 8)),
(24, 1024, REPEAT('c', 24)),
(31, 1031, REPEAT('d', 31)),
(32, 1032, REPEAT('x', 32)),
(33, 1033, REPEAT('y', 33)),
(128, 1128, REPEAT('z', 128));
SELECT * FROM t1;
--let $prefix_index_check_title= No longer eligible for optimization since no covered bitmap was stored.
--let $prefix_index_check_read_avoided_delta= 0
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(fid) WHERE fake_id = 1031
--source suite/rocksdb/include/prefix_index_only_query_check.inc
--let $prefix_index_check_title= Not eligible for optimization.
--let $prefix_index_check_read_avoided_delta= 0
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(fid) WHERE fake_id = 1033
--source suite/rocksdb/include/prefix_index_only_query_check.inc
DROP TABLE t1;

View File

@@ -0,0 +1,18 @@
# Test high priority DDL
# There are two modes of high priority DDL:
# 1. Through the system variable high_priority_ddl
# 2. Through syntax: CREATE/ALTER/DROP/OPTIMIZE HIGH_PRIORITY ...
--source include/have_rocksdb.inc
--echo ##
--echo ## Using the system variable high_priority_ddl"
--echo ##
--let $use_sys_var = 1;
--source include/ddl_high_priority.inc
--echo ##
--echo ## Using HIGH_PRIORITY syntax
--echo ##
--let $use_sys_var = 0;
--source include/ddl_high_priority.inc

View File

@@ -0,0 +1,153 @@
set @prior_lock_wait_timeout = @@rocksdb_lock_wait_timeout;
set @prior_deadlock_detect = @@rocksdb_deadlock_detect;
set @prior_max_latest_deadlocks = @@rocksdb_max_latest_deadlocks;
set global rocksdb_deadlock_detect = on;
set global rocksdb_lock_wait_timeout = 10000;
--echo # Clears deadlock buffer of any prior deadlocks.
set global rocksdb_max_latest_deadlocks = 0;
set global rocksdb_max_latest_deadlocks = @prior_max_latest_deadlocks;
let $engine = rocksdb;
--source include/count_sessions.inc
connect (con1,localhost,root,,);
let $con1= `SELECT CONNECTION_ID()`;
connect (con2,localhost,root,,);
let $con2= `SELECT CONNECTION_ID()`;
connect (con3,localhost,root,,);
let $con3= `SELECT CONNECTION_ID()`;
connection default;
eval create table t (i int primary key) engine=$engine;
insert into t values (1), (2), (3);
--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/TIMESTAMP/ /WAITING KEY: [0-9a-f]{16}/KEY/ /TRANSACTIONID: [0-9]*/TXN_ID/
show engine rocksdb transaction status;
echo Deadlock #1;
--source include/simple_deadlock.inc
connection default;
--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/TIMESTAMP/ /WAITING KEY: [0-9a-f]{16}/KEY/ /TRANSACTIONID: [0-9]*/TXN_ID/
show engine rocksdb transaction status;
echo Deadlock #2;
--source include/simple_deadlock.inc
connection default;
--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/TIMESTAMP/ /WAITING KEY: [0-9a-f]{16}/KEY/ /TRANSACTIONID: [0-9]*/TXN_ID/
show engine rocksdb transaction status;
set global rocksdb_max_latest_deadlocks = 10;
echo Deadlock #3;
--source include/simple_deadlock.inc
connection default;
--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/TIMESTAMP/ /WAITING KEY: [0-9a-f]{16}/KEY/ /TRANSACTIONID: [0-9]*/TXN_ID/
show engine rocksdb transaction status;
set global rocksdb_max_latest_deadlocks = 1;
--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/TIMESTAMP/ /WAITING KEY: [0-9a-f]{16}/KEY/ /TRANSACTIONID: [0-9]*/TXN_ID/
show engine rocksdb transaction status;
connection con3;
set rocksdb_deadlock_detect_depth = 2;
echo Deadlock #4;
connection con1;
begin;
select * from t where i=1 for update;
connection con2;
begin;
select * from t where i=2 for update;
connection con3;
begin;
select * from t where i=3 for update;
connection con1;
send select * from t where i=2 for update;
connection con2;
let $wait_condition = select count(*) = 1 from information_schema.rocksdb_trx
where thread_id = $con1 and waiting_key != "";
--source include/wait_condition.inc
send select * from t where i=3 for update;
connection con3;
let $wait_condition = select count(*) = 1 from information_schema.rocksdb_trx
where thread_id = $con2 and waiting_key != "";
--source include/wait_condition.inc
--error ER_LOCK_DEADLOCK
select * from t where i=1 for update;
rollback;
connection con2;
reap;
rollback;
connection con1;
reap;
rollback;
connection default;
set global rocksdb_max_latest_deadlocks = 5;
--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/TIMESTAMP/ /WAITING KEY: [0-9a-f]{16}/KEY/ /TRANSACTIONID: [0-9]*/TXN_ID/
show engine rocksdb transaction status;
echo Deadlock #5;
connection con1;
begin;
select * from t where i=1 for update;
connection con2;
begin;
select * from t where i=2 for update;
connection con3;
begin;
select * from t where i=3 lock in share mode;
connection con1;
select * from t where i=100 for update;
select * from t where i=101 for update;
send select * from t where i=2 for update;
connection con2;
let $wait_condition = select count(*) = 1 from information_schema.rocksdb_trx
where thread_id = $con1 and waiting_key != "";
--source include/wait_condition.inc
select * from t where i=3 lock in share mode;
select * from t where i=200 for update;
select * from t where i=201 for update;
--error ER_LOCK_DEADLOCK
select * from t where i=1 lock in share mode;
rollback;
connection con1;
reap;
rollback;
connection con3;
rollback;
connection default;
--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/TIMESTAMP/ /WAITING KEY: [0-9a-f]{16}/KEY/ /TRANSACTIONID: [0-9]*/TXN_ID/
show engine rocksdb transaction status;
disconnect con1;
disconnect con2;
disconnect con3;
set global rocksdb_lock_wait_timeout = @prior_lock_wait_timeout;
set global rocksdb_deadlock_detect = @prior_deadlock_detect;
drop table t;
--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/TIMESTAMP/ /WAITING KEY: [0-9a-f]{16}/KEY/ /TRANSACTIONID: [0-9]*/TXN_ID/ /INDEX_ID: [0-9a-f]*/IDX_ID/
show engine rocksdb transaction status;
set global rocksdb_max_latest_deadlocks = 0;
--echo # Clears deadlock buffer of any existent deadlocks.
set global rocksdb_max_latest_deadlocks = @prior_max_latest_deadlocks;
--replace_regex /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/TIMESTAMP/ /WAITING KEY: [0-9a-f]{16}/KEY/ /TRANSACTIONID: [0-9]*/TXN_ID/ /INDEX_ID: [0-9a-f]*/IDX_ID/
show engine rocksdb transaction status;
--source include/wait_until_count_sessions.inc

View File

@@ -1,4 +1,3 @@
--rocksdb_max_subcompactions=1 --rocksdb_max_subcompactions=1
--rocksdb_info_log_level=info_level
--rocksdb_default_cf_options=write_buffer_size=512k;target_file_size_base=512k;level0_file_num_compaction_trigger=2;level0_slowdown_writes_trigger=-1;level0_stop_writes_trigger=1000;max_bytes_for_level_base=1m --rocksdb_default_cf_options=write_buffer_size=512k;target_file_size_base=512k;level0_file_num_compaction_trigger=2;level0_slowdown_writes_trigger=-1;level0_stop_writes_trigger=1000;max_bytes_for_level_base=1m

View File

@@ -8,12 +8,15 @@ DROP TABLE IF EXISTS t4;
DROP TABLE IF EXISTS t5; DROP TABLE IF EXISTS t5;
--enable_warnings --enable_warnings
call mtr.add_suppression("Column family 'cf1' not found");
call mtr.add_suppression("Column family 'rev:cf2' not found");
call mtr.add_suppression("LibRocksDB");
# Start from clean slate # Start from clean slate
set global rocksdb_compact_cf = 'cf1'; set global rocksdb_compact_cf = 'cf1';
set global rocksdb_compact_cf = 'rev:cf2'; set global rocksdb_compact_cf = 'rev:cf2';
set global rocksdb_signal_drop_index_thread = 1; set global rocksdb_signal_drop_index_thread = 1;
--source include/restart_mysqld.inc --source include/restart_mysqld.inc
--exec truncate --size=0 $MYSQLTEST_VARDIR/log/mysqld.1.err
CREATE TABLE t1 ( CREATE TABLE t1 (
a int not null, a int not null,

View File

@@ -8,12 +8,14 @@ DROP TABLE IF EXISTS t4;
DROP TABLE IF EXISTS t5; DROP TABLE IF EXISTS t5;
--enable_warnings --enable_warnings
call mtr.add_suppression("Column family 'cf1' not found");
call mtr.add_suppression("Column family 'rev:cf2' not found");
# Start from clean slate # Start from clean slate
set global rocksdb_compact_cf = 'cf1'; set global rocksdb_compact_cf = 'cf1';
set global rocksdb_compact_cf = 'rev:cf2'; set global rocksdb_compact_cf = 'rev:cf2';
set global rocksdb_signal_drop_index_thread = 1; set global rocksdb_signal_drop_index_thread = 1;
--source include/restart_mysqld.inc --source include/restart_mysqld.inc
--exec truncate --size=0 $MYSQLTEST_VARDIR/log/mysqld.1.err
CREATE TABLE t1 ( CREATE TABLE t1 (
a int not null, a int not null,

View File

@@ -4,12 +4,14 @@
DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t1;
--enable_warnings --enable_warnings
call mtr.add_suppression("Column family 'cf1' not found");
call mtr.add_suppression("Column family 'rev:cf2' not found");
# Start from clean slate # Start from clean slate
set global rocksdb_compact_cf = 'cf1'; set global rocksdb_compact_cf = 'cf1';
set global rocksdb_compact_cf = 'rev:cf2'; set global rocksdb_compact_cf = 'rev:cf2';
set global rocksdb_signal_drop_index_thread = 1; set global rocksdb_signal_drop_index_thread = 1;
--source include/restart_mysqld.inc --source include/restart_mysqld.inc
--exec truncate --size=0 $MYSQLTEST_VARDIR/log/mysqld.1.err
CREATE TABLE t1 ( CREATE TABLE t1 (
a int not null, a int not null,

View File

@@ -22,17 +22,21 @@ CREATE TABLE t2 (id1 INT, id2 INT, id3 INT,
DROP TABLE t1; DROP TABLE t1;
DROP TABLE t2; DROP TABLE t2;
set global rocksdb_large_prefix=1;
CREATE TABLE t1 (id1 varchar(128) CHARACTER SET latin1 COLLATE latin1_bin, CREATE TABLE t1 (id1 varchar(128) CHARACTER SET latin1 COLLATE latin1_bin,
id2 varchar(256) CHARACTER SET utf8 COLLATE utf8_bin, id2 varchar(256) CHARACTER SET utf8 COLLATE utf8_bin,
id3 varchar(200) CHARACTER SET latin1 COLLATE latin1_swedish_ci, id3 varchar(200) CHARACTER SET latin1 COLLATE latin1_swedish_ci,
PRIMARY KEY (id1, id2, id3), PRIMARY KEY (id1, id2, id3),
UNIQUE KEY (id3, id1)) ENGINE=ROCKSDB; UNIQUE KEY (id3, id1)) ENGINE=ROCKSDB;
set global rocksdb_large_prefix=DEFAULT;
set global rocksdb_large_prefix=1;
CREATE TABLE t2 (id1 varchar(128) CHARACTER SET latin1 COLLATE latin1_bin, CREATE TABLE t2 (id1 varchar(128) CHARACTER SET latin1 COLLATE latin1_bin,
id2 varchar(256) CHARACTER SET utf8 COLLATE utf8_bin, id2 varchar(256) CHARACTER SET utf8 COLLATE utf8_bin,
id3 varchar(200) CHARACTER SET latin1 COLLATE latin1_swedish_ci, id3 varchar(200) CHARACTER SET latin1 COLLATE latin1_swedish_ci,
PRIMARY KEY (id1, id2, id3), PRIMARY KEY (id1, id2, id3),
UNIQUE KEY (id3, id1) COMMENT 'rev:cf') ENGINE=ROCKSDB; UNIQUE KEY (id3, id1) COMMENT 'rev:cf') ENGINE=ROCKSDB;
set global rocksdb_large_prefix=DEFAULT;
--source suite/rocksdb/include/dup_key_update.inc --source suite/rocksdb/include/dup_key_update.inc

View File

@@ -0,0 +1,120 @@
# Disable until covered unpack_info format enabled in prod
--source include/have_debug.inc
--source include/have_nodebug.inc
--source include/have_rocksdb.inc
--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings
CREATE TABLE t1 (
id INT,
fake_id INT,
bigfield VARCHAR(4096),
PRIMARY KEY (id),
KEY bf (bigfield(32)),
KEY fid (fake_id, bigfield(32))
) ENGINE=rocksdb;
INSERT INTO t1 VALUES (1, 1001, REPEAT('a', 1)),
(8, 1008, REPEAT('b', 8)),
(24, 1024, REPEAT('c', 24)),
(31, 1031, REPEAT('d', 31)),
(32, 1032, REPEAT('x', 32)),
(33, 1033, REPEAT('y', 33)),
(128, 1128, REPEAT('z', 128));
SELECT * FROM t1;
--disable_query_log
--let $prefix_index_check_title= Baseline sanity check
--let $prefix_index_check_read_avoided_delta= 0
--let $prefix_index_check_query= SELECT "no-op query"
--source suite/rocksdb/include/prefix_index_only_query_check.inc
--let $prefix_index_check_title= Eligible for optimization.
--let $prefix_index_check_read_avoided_delta= 2
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(bf) WHERE bigfield = REPEAT('d', 31)
--source suite/rocksdb/include/prefix_index_only_query_check.inc
--let $prefix_index_check_title= Eligible for optimization, access via fake_id only
--let $prefix_index_check_read_avoided_delta= 2
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(fid) WHERE fake_id = 1031
--source suite/rocksdb/include/prefix_index_only_query_check.inc
--let $prefix_index_check_title= Not eligible for optimization, access via fake_id of big row.
--let $prefix_index_check_read_avoided_delta= 0
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(fid) WHERE fake_id = 1033
--source suite/rocksdb/include/prefix_index_only_query_check.inc
# The secondary_index_read call isn't covered because the next record in the
# index has a bigfield value of length 33, so only one of two lookups are
# covered here.
--let $prefix_index_check_title= Eligible for optimization.
--let $prefix_index_check_read_avoided_delta= 1
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(bf) WHERE bigfield = REPEAT('x', 32)
--source suite/rocksdb/include/prefix_index_only_query_check.inc
--let $prefix_index_check_title= Not eligible for optimization.
--let $prefix_index_check_read_avoided_delta= 0
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(bf) WHERE bigfield = REPEAT('y', 33)
--source suite/rocksdb/include/prefix_index_only_query_check.inc
--let $prefix_index_check_title= Eligible for optimization.
--let $prefix_index_check_read_avoided_delta= 2
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(bf) WHERE bigfield = REPEAT('b', 8)
--source suite/rocksdb/include/prefix_index_only_query_check.inc
--let $prefix_index_check_title= Eligible for optimization.
--let $prefix_index_check_read_avoided_delta= 2
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(bf) WHERE bigfield = REPEAT('c', 24)
--source suite/rocksdb/include/prefix_index_only_query_check.inc
--let $prefix_index_check_title= Not eligible for optimization.
--let $prefix_index_check_read_avoided_delta= 0
--let $prefix_index_check_query= SELECT id, bigfield FROM t1 FORCE INDEX(bf) WHERE bigfield = REPEAT('z', 128)
--source suite/rocksdb/include/prefix_index_only_query_check.inc
DROP TABLE t1;
--echo #
--echo # Test that multi-byte charsets are handled correctly
--echo #
SET NAMES utf8;
CREATE TABLE t1 (
a INT PRIMARY KEY,
b VARCHAR(30) CHARACTER SET utf8 collate utf8_bin,
KEY k (b(2))
) ENGINE=rocksdb;
INSERT INTO t1 VALUES
(1, 'a'),
(2, 'cc'),
(3, 'ŽŽ'),
(4, 'žžžž');
--let $prefix_index_check_title= Charset record obviously shorter than the prefix
--let $prefix_index_check_query= SELECT * FROM t1 FORCE INDEX(k) WHERE b = "a"
--let $prefix_index_check_read_avoided_delta= 2
--source suite/rocksdb/include/prefix_index_only_query_check.inc
--let $prefix_index_check_title= Charset record shorter than prefix
--let $prefix_index_check_query= SELECT * FROM t1 FORCE INDEX(k) WHERE b = "cc"
--let $prefix_index_check_read_avoided_delta= 2
--source suite/rocksdb/include/prefix_index_only_query_check.inc
--let $prefix_index_check_title= Charset record with glyphs shorter than prefix
--let $prefix_index_check_query= SELECT * FROM t1 FORCE INDEX(k) WHERE b = "ŽŽ"
--let $prefix_index_check_read_avoided_delta= 1
--source suite/rocksdb/include/prefix_index_only_query_check.inc
--let $prefix_index_check_title= Charset record longer than prefix
--let $prefix_index_check_query= SELECT * FROM t1 FORCE INDEX(k) WHERE b = "žžžž"
--let $prefix_index_check_read_avoided_delta= 0
--source suite/rocksdb/include/prefix_index_only_query_check.inc
DROP TABLE t1;

View File

@@ -119,3 +119,37 @@ DROP TABLE t1;
--enable_parsing --enable_parsing
#
# Test index prefix length limits.
#
set global rocksdb_large_prefix=0;
CREATE TABLE t1 (
a BLOB(1024),
KEY (a(767))
) ENGINE=rocksdb;
DROP TABLE t1;
# Should display warning
CREATE TABLE t1 (
a BLOB(1024),
KEY (a(768))
) ENGINE=rocksdb;
DROP TABLE t1;
set global rocksdb_large_prefix=1;
CREATE TABLE t1 (
a BLOB(4096),
KEY (a(3072))
) ENGINE=rocksdb;
DROP TABLE t1;
# Should display warning
CREATE TABLE t1 (
a BLOB(4096),
KEY (a(3073))
) ENGINE=rocksdb;
DROP TABLE t1;
set global rocksdb_large_prefix=DEFAULT;

View File

@@ -62,3 +62,35 @@ ALTER TABLE t1 ADD CONSTRAINT PRIMARY KEY pk (a);
SHOW KEYS IN t1; SHOW KEYS IN t1;
DROP TABLE t1; DROP TABLE t1;
#
# Test index prefix length limits.
#
set global rocksdb_large_prefix=0;
CREATE TABLE t1 (
a BLOB(1024),
PRIMARY KEY (a(767))
) ENGINE=rocksdb;
DROP TABLE t1;
--error ER_TOO_LONG_KEY
CREATE TABLE t1 (
a BLOB(1024),
PRIMARY KEY (a(768))
) ENGINE=rocksdb;
set global rocksdb_large_prefix=1;
CREATE TABLE t1 (
a BLOB(4096),
PRIMARY KEY (a(3072))
) ENGINE=rocksdb;
DROP TABLE t1;
--error ER_TOO_LONG_KEY
CREATE TABLE t1 (
a BLOB(4096),
PRIMARY KEY (a(3073))
) ENGINE=rocksdb;
set global rocksdb_large_prefix=DEFAULT;

View File

@@ -0,0 +1,49 @@
# Disable until covered unpack_info format enabled in prod
--source include/have_debug.inc
--source include/have_nodebug.inc
--source include/have_rocksdb.inc
--disable_warnings
DROP TABLE IF EXISTS T1;
--enable_warnings
CREATE TABLE T1 (
P1 VARCHAR(64), P2 VARCHAR(64), P3 VARCHAR(64), P4 VARCHAR(64),
S1 VARCHAR(64), S2 VARCHAR(64), S3 VARCHAR(64), S4 VARCHAR(64),
S5 VARCHAR(64), S6 VARCHAR(64), S7 VARCHAR(64), S8 VARCHAR(64),
S9 VARCHAR(64), S10 VARCHAR(64), S11 VARCHAR(64), S12 VARCHAR(64),
S13 VARCHAR(64), S14 VARCHAR(64), S15 VARCHAR(64), S16 VARCHAR(64),
PRIMARY KEY (P1(8), P2(8), P3(8), P4(8)),
KEY SK (S1(8), S2(8), S3(8), S4(8),
S5(8), S6(8), S7(8), S8(8),
S9(8), S10(8), S11(8), S12(8),
S13(8), S14(8), S15(8), S16(8))
) ENGINE=rocksdb;
INSERT INTO T1 VALUES ('1', '2', '3', '4',
'5', '6', '7', '8',
'9', '10', '11', '12',
'13', '14', '15', '16',
'17', '18', '19', '20');
SELECT * FROM T1;
--let $prefix_index_check_title= Not eligible for optimization, shorter than prefix length.
--let $prefix_index_check_read_avoided_delta= 0
--let $prefix_index_check_query= SELECT P4, S2 FROM T1 FORCE INDEX(SK) WHERE S1='5'
--source suite/rocksdb/include/prefix_index_only_query_check.inc
DELETE FROM T1;
INSERT INTO T1 VALUES ('100000000', '200000000', '300000000', '400000000',
'500000000', '600000000', '700000000', '800000000',
'900000000', '100000000', '110000000', '120000000',
'130000000', '140000000', '150000000', '160000000',
'170000000', '180000000', '190000000', '200000000');
--let $prefix_index_check_title= Not eligible for optimization, longer than prefix length.
--let $prefix_index_check_read_avoided_delta= 0
--let $prefix_index_check_query= SELECT P4, S2 FROM T1 FORCE INDEX(SK) WHERE S1='5'
--source suite/rocksdb/include/prefix_index_only_query_check.inc
DROP TABLE T1;

View File

@@ -1657,7 +1657,9 @@ SET @old_mode = @@sql_mode;
SET sql_mode = 'strict_all_tables'; SET sql_mode = 'strict_all_tables';
create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(c, b(255))) engine=rocksdb; create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(c, b(255))) engine=rocksdb;
drop table t1; drop table t1;
set global rocksdb_large_prefix=1;
create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(b(1255))) engine=rocksdb; create table t1 (a int, b text, c varchar(400), Primary Key(a), Key(b(1255))) engine=rocksdb;
set global rocksdb_large_prefix=0;
insert into t1 values (1, '1abcde', '1abcde'), (2, '2abcde', '2abcde'), (3, '3abcde', '3abcde'); insert into t1 values (1, '1abcde', '1abcde'), (2, '2abcde', '2abcde'), (3, '3abcde', '3abcde');
select * from t1; select * from t1;
--replace_column 9 # --replace_column 9 #

View File

@@ -23,10 +23,8 @@ CREATE TABLE t3 (k INT, PRIMARY KEY (k) COMMENT 'cf_t1') ENGINE = ROCKSDB;
CREATE TABLE t4 (l INT, PRIMARY KEY (l) COMMENT 'cf_t4') ENGINE = ROCKSDB CREATE TABLE t4 (l INT, PRIMARY KEY (l) COMMENT 'cf_t4') ENGINE = ROCKSDB
PARTITION BY KEY(l) PARTITIONS 4; PARTITION BY KEY(l) PARTITIONS 4;
SET GLOBAL rocksdb_force_flush_memtable_now=1; SET @save.rocksdb_max_background_jobs= @@global.rocksdb_max_background_jobs;
SET GLOBAL rocksdb_max_background_jobs= 1;
--replace_column 2 # 3 #
SHOW ENGINE rocksdb STATUS;
INSERT INTO t1 VALUES (1), (2), (3); INSERT INTO t1 VALUES (1), (2), (3);
SELECT COUNT(*) FROM t1; SELECT COUNT(*) FROM t1;
@@ -37,6 +35,11 @@ SELECT COUNT(*) FROM t2;
INSERT INTO t4 VALUES (1), (2), (3), (4), (5); INSERT INTO t4 VALUES (1), (2), (3), (4), (5);
SELECT COUNT(*) FROM t4; SELECT COUNT(*) FROM t4;
SET GLOBAL rocksdb_force_flush_memtable_now=1;
SET GLOBAL rocksdb_compact_cf="cf_t1";
--replace_column 2 # 3 #
SHOW ENGINE rocksdb STATUS;
# Fetch data from information schema as well # Fetch data from information schema as well
--replace_column 3 # --replace_column 3 #
SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CFSTATS; SELECT * FROM INFORMATION_SCHEMA.ROCKSDB_CFSTATS;
@@ -80,3 +83,5 @@ SHOW ENGINE rocksdb TRANSACTION STATUS;
ROLLBACK; ROLLBACK;
# Restore old values
SET GLOBAL rocksdb_max_background_jobs= @save.rocksdb_max_background_jobs;

View File

@@ -0,0 +1,39 @@
--source include/have_rocksdb.inc
--source include/have_debug.inc
# Write file to make mysql-test-run.pl expect the "crash", but don't restart the
# server until it is told to
--let $_server_id= `SELECT @@server_id`
--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.$_server_id.expect
CREATE TABLE t1 (pk int primary key) ENGINE=ROCKSDB;
# Create a .frm file without a matching table
--exec cp $MYSQLTEST_VARDIR/mysqld.$_server_id/data/test/t1.frm $MYSQLTEST_VARDIR/mysqld.$_server_id/data/test/t1#sql-test.frm
# Restart the server with a .frm file exist but that table is not registered in RocksDB
--exec echo "wait" >$_expect_file_name
shutdown_server 10;
--exec echo "restart" >$_expect_file_name
--sleep 5
--enable_reconnect
--source include/wait_until_connected_again.inc
--disable_reconnect
# This will append '#sql-test' to the end of new name
set session debug="+d,gen_sql_table_name";
rename table t1 to t2;
set session debug= "-d,gen_sql_table_name";
# Remove the corresponding .frm files
--remove_files_wildcard $MYSQLTEST_VARDIR/mysqld.$_server_id/data/test *t1*.frm
--remove_files_wildcard $MYSQLTEST_VARDIR/mysqld.$_server_id/data/test *t2*.frm
# Restart the server with a table registered in RocksDB but does not have a .frm file
--exec echo "wait" >$_expect_file_name
shutdown_server 10;
--exec echo "restart" >$_expect_file_name
--sleep 5
--enable_reconnect
--source include/wait_until_connected_again.inc
--disable_reconnect

View File

@@ -279,7 +279,7 @@ SELECT a FROM t1;
DROP TABLE t1; DROP TABLE t1;
# TTL field with nullable ttl column (should fail) # TTL field with nullable ttl column (should fail)
--error 1948 --error ER_RDB_TTL_COL_FORMAT
CREATE TABLE t1 ( CREATE TABLE t1 (
a bigint(20) UNSIGNED NOT NULL, a bigint(20) UNSIGNED NOT NULL,
b int NOT NULL, b int NOT NULL,
@@ -290,7 +290,7 @@ CREATE TABLE t1 (
COMMENT='ttl_duration=1;ttl_col=ts;'; COMMENT='ttl_duration=1;ttl_col=ts;';
# TTL field with non 8-bit integer column (should fail) # TTL field with non 8-bit integer column (should fail)
--error 1948 --error ER_RDB_TTL_COL_FORMAT
CREATE TABLE t1 ( CREATE TABLE t1 (
a bigint(20) UNSIGNED NOT NULL, a bigint(20) UNSIGNED NOT NULL,
b int NOT NULL, b int NOT NULL,
@@ -301,7 +301,7 @@ CREATE TABLE t1 (
COMMENT='ttl_duration=1;ttl_col=ts;'; COMMENT='ttl_duration=1;ttl_col=ts;';
# TTL duration as some random garbage value # TTL duration as some random garbage value
--error 1949 --error ER_RDB_TTL_DURATION_FORMAT
CREATE TABLE t1 ( CREATE TABLE t1 (
a bigint(20) UNSIGNED NOT NULL, a bigint(20) UNSIGNED NOT NULL,
b int NOT NULL, b int NOT NULL,
@@ -311,7 +311,7 @@ CREATE TABLE t1 (
COMMENT='ttl_duration=abc;'; COMMENT='ttl_duration=abc;';
# TTL col is some column outside of the table # TTL col is some column outside of the table
--error 1948 --error ER_RDB_TTL_COL_FORMAT
CREATE TABLE t1 ( CREATE TABLE t1 (
a bigint(20) UNSIGNED NOT NULL, a bigint(20) UNSIGNED NOT NULL,
b int NOT NULL, b int NOT NULL,
@@ -321,7 +321,7 @@ CREATE TABLE t1 (
COMMENT='ttl_duration=1;ttl_col=abc;'; COMMENT='ttl_duration=1;ttl_col=abc;';
# TTL col must have accompanying duration # TTL col must have accompanying duration
--error 1948 --error ER_RDB_TTL_COL_FORMAT
CREATE TABLE t1 ( CREATE TABLE t1 (
a bigint(20) UNSIGNED NOT NULL, a bigint(20) UNSIGNED NOT NULL,
b int NOT NULL, b int NOT NULL,
@@ -372,10 +372,8 @@ CREATE TABLE t1 (
) ENGINE=rocksdb ) ENGINE=rocksdb
COMMENT='ttl_duration=100;'; COMMENT='ttl_duration=100;';
--error 1947 --error ER_RDB_TTL_UNSUPPORTED
ALTER TABLE t1 DROP PRIMARY KEY; ALTER TABLE t1 DROP PRIMARY KEY;
--error 1947
ALTER TABLE t1 ADD INDEX kb(b), ALGORITHM=INPLACE;
DROP TABLE t1; DROP TABLE t1;

View File

@@ -0,0 +1,2 @@
--rocksdb_enable_ttl_read_filtering=0
--rocksdb_default_cf_options=disable_auto_compactions=true

View File

@@ -0,0 +1,780 @@
--source include/have_debug.inc
--source include/have_rocksdb.inc
# Basic TTL test, pk ignored, no sk
CREATE TABLE t1 (
`a` binary(8) NOT NULL,
`b` varbinary(64) NOT NULL,
`c` varbinary(256) NOT NULL,
`ts` bigint(20) UNSIGNED NOT NULL,
`value` mediumblob NOT NULL,
PRIMARY KEY (`b`,`a`,`c`)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values ('a', 'b', 'c', UNIX_TIMESTAMP(), 'd');
INSERT INTO t1 values ('d', 'e', 'f', UNIX_TIMESTAMP(), 'g');
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*) FROM t1;
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
# no rows should be filtered
SELECT COUNT(*) FROM t1;
DROP TABLE t1;
# Basic TTL test
CREATE TABLE t1 (
`a` binary(8) NOT NULL,
`b` varbinary(64) NOT NULL,
`c` varbinary(256) NOT NULL,
`ts` bigint(20) UNSIGNED NOT NULL,
`value` mediumblob NOT NULL,
PRIMARY KEY (`b`,`a`,`c`),
KEY kb (`b`)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values ('a', 'b', 'c', UNIX_TIMESTAMP(), 'd');
INSERT INTO t1 values ('d', 'e', 'f', UNIX_TIMESTAMP(), 'g');
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
# should have filtered the rows out since ttl is passed in compaction filter
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
DROP TABLE t1;
# column before TTL in value
CREATE TABLE t1 (
a bigint(20) NOT NULL,
b int NOT NULL,
ts bigint(20) UNSIGNED NOT NULL,
c int NOT NULL,
PRIMARY KEY (a),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, 3, UNIX_TIMESTAMP(), 5);
INSERT INTO t1 values (2, 4, UNIX_TIMESTAMP(), 6);
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
# should have filtered the rows out since ttl is passed in compaction filter
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
DROP TABLE t1;
# multi-part PK w/ TTL
CREATE TABLE t1 (
a bigint(20) NOT NULL,
b int NOT NULL,
c int NOT NULL,
ts bigint(20) UNSIGNED NOT NULL,
PRIMARY KEY (a,c),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, 3, 5, UNIX_TIMESTAMP());
INSERT INTO t1 values (2, 4, 6, UNIX_TIMESTAMP());
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
# should have filtered the rows out since ttl is passed in compaction filter
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
DROP TABLE t1;
# nullable column(s) before TTL
CREATE TABLE t1 (
a bigint(20) NOT NULL,
b int,
c int,
ts bigint(20) UNSIGNED NOT NULL,
PRIMARY KEY (a),
KEY kbc (b, c)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, NULL, NULL, UNIX_TIMESTAMP());
INSERT INTO t1 values (2, NULL, NULL, UNIX_TIMESTAMP());
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
# should have filtered the rows out since ttl is passed in compaction filter
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
DROP TABLE t1;
# variable len columns + null column(s) before TTL
CREATE TABLE t1 (
`a` binary(8) NOT NULL,
`b` varbinary(64),
`c` varbinary(256),
`ts` bigint(20) UNSIGNED NOT NULL,
`value` mediumblob NOT NULL,
PRIMARY KEY (`a`),
KEY kbc (`b`, `c`)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values ('a', NULL, 'bc', UNIX_TIMESTAMP(), 'd');
INSERT INTO t1 values ('d', 'efghijk', NULL, UNIX_TIMESTAMP(), 'l');
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
# should have filtered the rows out since ttl is passed in compaction filter
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
DROP TABLE t1;
# TTL implicitly generated (no ttl column)
CREATE TABLE t1 (
a bigint(20) NOT NULL,
b int NOT NULL,
c int NOT NULL,
PRIMARY KEY (a),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, 3, 5);
INSERT INTO t1 values (2, 4, 6);
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
# should have filtered the rows out since ttl is passed in compaction filter
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
DROP TABLE t1;
# TTL field as the PK
CREATE TABLE t1 (
a int,
ts bigint(20) UNSIGNED NOT NULL,
PRIMARY KEY (a, ts),
KEY kt (ts)
) ENGINE=rocksdb
COMMENT='ttl_duration=5;ttl_col=ts;';
INSERT INTO t1 values (1, UNIX_TIMESTAMP());
INSERT INTO t1 values (2, UNIX_TIMESTAMP());
SELECT COUNT(*) FROM t1 FORCE INDEX(kt);
set global rocksdb_debug_ttl_snapshot_ts = -10;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
# should all still be there..
SELECT COUNT(*) FROM t1 FORCE INDEX(kt);
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_debug_ttl_snapshot_ts = 10;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
set global rocksdb_debug_ttl_ignore_pk=0;
# should have filtered the rows out since ttl is passed in compaction filter
SELECT COUNT(*) FROM t1 FORCE INDEX(kt);
DROP TABLE t1;
# TTL field inside multi-part pk
CREATE TABLE t1 (
a bigint(20) NOT NULL,
b int NOT NULL,
ts bigint(20) UNSIGNED NOT NULL,
c int NOT NULL,
PRIMARY KEY (a, ts),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, 3, UNIX_TIMESTAMP(), 5);
INSERT INTO t1 values (2, 4, UNIX_TIMESTAMP(), 6);
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
# should have filtered the rows out since ttl is passed in compaction filter
SELECT COUNT(*) FROM t1;
DROP TABLE t1;
# TTL field inside key with variable length things..
CREATE TABLE t1 (
`a` binary(8) NOT NULL,
`b` varbinary(64),
`c` varbinary(256),
`ts` bigint(20) UNSIGNED NOT NULL,
`value` mediumblob NOT NULL,
PRIMARY KEY (`a`, `ts`),
KEY kb (`b`)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values ('a', NULL, 'bc', UNIX_TIMESTAMP(), 'd');
INSERT INTO t1 values ('de', 'fghijk', NULL, UNIX_TIMESTAMP(), 'l');
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*) FROM t1;
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
# should have filtered the rows out since ttl is passed in compaction filter
SELECT COUNT(*) FROM t1;
DROP TABLE t1;
# TTL test where you compact (values still exist), real_sleep, then compact again,
# values should now be gone.
CREATE TABLE t1 (
a INT NOT NULL,
b varbinary(64) NOT NULL,
c varbinary(256) NOT NULL,
ts bigint(20) UNSIGNED NOT NULL,
value mediumblob NOT NULL,
PRIMARY KEY (b,a,c),
KEY kb (b)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
COMMENT='ttl_duration=10;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -300;
INSERT INTO t1 values (1, 'b', 'c', UNIX_TIMESTAMP(), 'd');
INSERT INTO t1 values (2, 'e', 'f', UNIX_TIMESTAMP(), 'g');
set global rocksdb_debug_ttl_rec_ts = 300;
INSERT INTO t1 values (3, 'i', 'j', UNIX_TIMESTAMP(), 'k');
INSERT INTO t1 values (4, 'm', 'n', UNIX_TIMESTAMP(), 'o');
set global rocksdb_debug_ttl_rec_ts = 0;
# Nothing should get removed here.
set global rocksdb_debug_ttl_snapshot_ts = -3600;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
--sorted_result
SELECT a FROM t1 FORCE INDEX (kb);
# 1 and 2 should get removed here.
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
--sorted_result
SELECT a FROM t1 FORCE INDEX (kb);
# 3 and 4 should get removed here.
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_debug_ttl_snapshot_ts = 3600;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
set global rocksdb_debug_ttl_ignore_pk=0;
--sorted_result
SELECT a FROM t1 FORCE INDEX (kb);
DROP TABLE t1;
# TTL field with nullable ttl column (should fail)
--error ER_RDB_TTL_COL_FORMAT
CREATE TABLE t1 (
a bigint(20) UNSIGNED NOT NULL,
b int NOT NULL,
c int NOT NULL,
ts bigint(20),
PRIMARY KEY (a,c),
KEY (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;ttl_col=ts;';
# TTL field with non 8-bit integer column (should fail)
--error ER_RDB_TTL_COL_FORMAT
CREATE TABLE t1 (
a bigint(20) UNSIGNED NOT NULL,
b int NOT NULL,
c int NOT NULL,
ts int,
PRIMARY KEY (a,c),
KEY (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;ttl_col=ts;';
# TTL duration as some random garbage value
--error ER_RDB_TTL_DURATION_FORMAT
CREATE TABLE t1 (
a bigint(20) UNSIGNED NOT NULL,
b int NOT NULL,
c int NOT NULL,
PRIMARY KEY (a,c),
KEY (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=abc;';
# TTL col is some column outside of the table
--error ER_RDB_TTL_COL_FORMAT
CREATE TABLE t1 (
a bigint(20) UNSIGNED NOT NULL,
b int NOT NULL,
c int NOT NULL,
PRIMARY KEY (a,c),
KEY (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;ttl_col=abc;';
# TTL col must have accompanying duration
--error ER_RDB_TTL_COL_FORMAT
CREATE TABLE t1 (
a bigint(20) UNSIGNED NOT NULL,
b int NOT NULL,
c int NOT NULL,
PRIMARY KEY (a,c),
KEY (b)
) ENGINE=rocksdb
COMMENT='ttl_col=abc;';
# Make sure it doesn't filter out things early
CREATE TABLE t1 (
a bigint(20) NOT NULL,
b int NOT NULL,
PRIMARY KEY (a),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=500;';
INSERT INTO t1 values (1, 1);
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
DROP TABLE t1;
# Testing altering table comment with updated TTL duration
# This should trigger a rebuild of the table
CREATE TABLE t1 (
a INT PRIMARY KEY,
b INT NOT NULL,
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=100;';
INSERT INTO t1 values (1, 1);
SELECT * FROM t1 FORCE INDEX (kb);
set global rocksdb_debug_ttl_rec_ts = -300;
ALTER TABLE t1 COMMENT = 'ttl_duration=1';
set global rocksdb_debug_ttl_rec_ts = 0;
SHOW CREATE TABLE t1;
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
DROP TABLE t1;
# Tables with hidden PK disabled
CREATE TABLE t1 (
a INT PRIMARY KEY,
b INT,
KEY (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=100;';
--error ER_RDB_TTL_UNSUPPORTED
ALTER TABLE t1 DROP PRIMARY KEY;
DROP TABLE t1;
# Test replacing PK, ttl should still work after
CREATE TABLE t1 (
a INT PRIMARY KEY,
b INT,
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=5;';
INSERT INTO t1 VALUES (1,1);
INSERT INTO t1 VALUES (2,2);
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(b);
set global rocksdb_debug_ttl_snapshot_ts = -3600;
set global rocksdb_force_flush_memtable_now=1;
set @@global.rocksdb_compact_cf = 'default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
--sorted_result
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_debug_ttl_snapshot_ts = 3600;
set @@global.rocksdb_compact_cf = 'default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
set global rocksdb_debug_ttl_ignore_pk=0;
--sorted_result
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
DROP TABLE t1;
# Make sure table comment filled with other text before/after will work
# (basically, it needs semicolon before and after)
CREATE TABLE t1 (
a bigint(20) UNSIGNED NOT NULL,
b int,
PRIMARY KEY (a,b),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='asdadfasdfsadfadf ;ttl_duration=1; asfasdfasdfadfa';
INSERT INTO t1 values (UNIX_TIMESTAMP(), 1);
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
set global rocksdb_debug_ttl_snapshot_ts = 3600;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
ALTER TABLE t1 COMMENT = 'adsf;;ttl_duration=5;asfasdfa;ttl_col=a;asdfasdf;';
set global rocksdb_debug_ttl_rec_ts = 300;
INSERT INTO t1 values (UNIX_TIMESTAMP(), 2);
set global rocksdb_debug_ttl_rec_ts = 0;
set global rocksdb_force_flush_memtable_now=1;
# nothing removed here
set global rocksdb_compact_cf='default';
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
# all removed here
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_debug_ttl_snapshot_ts = 3600;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
set global rocksdb_debug_ttl_ignore_pk=0;
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
DROP TABLE t1;
# Test to make sure that TTL retains original timestamp during update
CREATE TABLE t1 (
a bigint(20) NOT NULL,
b int NOT NULL,
PRIMARY KEY (a),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=5;';
set global rocksdb_debug_ttl_rec_ts = -300;
INSERT INTO t1 values (1, 0);
INSERT INTO t1 values (3, 0);
INSERT INTO t1 values (5, 0);
set global rocksdb_debug_ttl_rec_ts = 300;
INSERT INTO t1 values (7, 0);
INSERT INTO t1 values (9, 0);
set global rocksdb_debug_ttl_rec_ts = 0;
UPDATE t1 SET a=a+1;
--sorted_result
SELECT * FROM t1 FORCE INDEX (kb);
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
# 1,3,5 should be dropped
--sorted_result
SELECT * FROM t1;
DROP TABLE t1;
# test behaviour on update with TTL column, TTL time can be updated here.
CREATE TABLE t1 (
a INT,
b bigint(20) UNSIGNED NOT NULL,
PRIMARY KEY (a),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=5;ttl_col=b;';
set global rocksdb_debug_ttl_rec_ts = -300;
INSERT INTO t1 values (1, UNIX_TIMESTAMP());
INSERT INTO t1 values (3, UNIX_TIMESTAMP());
INSERT INTO t1 values (5, UNIX_TIMESTAMP());
INSERT INTO t1 values (7, UNIX_TIMESTAMP());
set global rocksdb_debug_ttl_rec_ts = 300;
UPDATE t1 SET b=(UNIX_TIMESTAMP()+1) WHERE a < 4;
set global rocksdb_debug_ttl_rec_ts = 0;
--sorted_result
SELECT a FROM t1 FORCE INDEX (kb);
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
# 5 and 7 should be gone here
--sorted_result
SELECT a FROM t1 FORCE INDEX (kb);
DROP TABLE t1;
# Test rows expired stat variable and disable ttl variable
CREATE TABLE t1 (
a bigint(20) NOT NULL,
b int NOT NULL,
PRIMARY KEY (a),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, 1);
INSERT INTO t1 values (2, 1);
INSERT INTO t1 values (3, 1);
set global rocksdb_debug_ttl_rec_ts = 0;
set global rocksdb_enable_ttl=0;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_rows_expired';
set global rocksdb_enable_ttl=1;
set global rocksdb_compact_cf='default';
select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_expired';
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
DROP TABLE t1;
# Table with TTL won't increment rows expired when no records have been
# compacted
CREATE TABLE t1 (
a bigint(20) NOT NULL,
b int NOT NULL,
PRIMARY KEY (a),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=100;';
INSERT INTO t1 values (1, 1);
INSERT INTO t1 values (2, 2);
INSERT INTO t1 values (3, 3);
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_rows_expired';
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_expired';
DROP TABLE t1;
# Test update on TTL column in pk
CREATE TABLE t1 (
a INT,
b bigint(20) UNSIGNED NOT NULL,
PRIMARY KEY (a, b),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=5;ttl_col=b;';
set global rocksdb_debug_ttl_rec_ts = -300;
INSERT INTO t1 values (1, UNIX_TIMESTAMP());
INSERT INTO t1 values (3, UNIX_TIMESTAMP());
INSERT INTO t1 values (5, UNIX_TIMESTAMP());
INSERT INTO t1 values (7, UNIX_TIMESTAMP());
set global rocksdb_debug_ttl_rec_ts = 300;
UPDATE t1 SET b=(UNIX_TIMESTAMP()+1) WHERE a < 4;
set global rocksdb_debug_ttl_rec_ts = 0;
--sorted_result
SELECT a FROM t1 FORCE INDEX (kb);
set global rocksdb_debug_ttl_ignore_pk=1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk=0;
# 5 and 7 should be gone here
--sorted_result
SELECT a FROM t1 FORCE INDEX (kb);
DROP TABLE t1;
# test behaviour on update with TTL column, TTL time can be updated here.
CREATE TABLE t1 (
a INT,
b bigint(20) UNSIGNED NOT NULL,
PRIMARY KEY (a, b)
) ENGINE=rocksdb
COMMENT='ttl_duration=5;ttl_col=b;';
set global rocksdb_debug_ttl_rec_ts = -300;
INSERT INTO t1 values (1, UNIX_TIMESTAMP());
INSERT INTO t1 values (3, UNIX_TIMESTAMP());
INSERT INTO t1 values (5, UNIX_TIMESTAMP());
INSERT INTO t1 values (7, UNIX_TIMESTAMP());
set global rocksdb_debug_ttl_rec_ts = 300;
UPDATE t1 SET b=(UNIX_TIMESTAMP()+1) WHERE a < 4;
set global rocksdb_debug_ttl_rec_ts = 0;
--sorted_result
SELECT a FROM t1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
# 7 should be gone here
--sorted_result
SELECT a FROM t1;
DROP TABLE t1;
# Add index inplace
CREATE TABLE t1 (
`a` binary(8) NOT NULL,
`b` varbinary(64) NOT NULL,
`c` varbinary(256) NOT NULL,
`ts` bigint(20) UNSIGNED NOT NULL,
`value` mediumblob NOT NULL,
PRIMARY KEY (`b`,`a`,`c`)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values ('a', 'b', 'c', UNIX_TIMESTAMP(), 'd');
INSERT INTO t1 values ('d', 'e', 'f', UNIX_TIMESTAMP(), 'g');
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*);
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
# nothing filtered out
SELECT COUNT(*);
CREATE INDEX kb on t1 (b);
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
# should have filtered the rows out since ttl is passed in compaction filter
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
DROP TABLE t1;
# Add index inplace, implicit TTL
CREATE TABLE t1 (
`a` binary(8) NOT NULL,
`b` varbinary(64) NOT NULL,
`c` varbinary(256) NOT NULL,
`value` mediumblob NOT NULL,
PRIMARY KEY (`b`,`a`,`c`)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
COMMENT='ttl_duration=1';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values ('a', 'b', 'c', 'd');
INSERT INTO t1 values ('d', 'e', 'f', 'g');
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*);
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
# nothing filtered out
SELECT COUNT(*);
CREATE INDEX kb on t1 (b);
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
# should have filtered the rows out since ttl is passed in compaction filter
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
DROP TABLE t1;
# Add index inplace, TTL column in PK
CREATE TABLE t1 (
`a` binary(8) NOT NULL,
`b` varbinary(64) NOT NULL,
`c` varbinary(256) NOT NULL,
`ts` bigint(20) UNSIGNED NOT NULL,
`value` mediumblob NOT NULL,
PRIMARY KEY (`b`,`a`,`c`, `ts`)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values ('a', 'b', 'c', UNIX_TIMESTAMP(), 'd');
INSERT INTO t1 values ('d', 'e', 'f', UNIX_TIMESTAMP(), 'g');
set global rocksdb_debug_ttl_rec_ts = 0;
SELECT COUNT(*);
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
# nothing filtered out
SELECT COUNT(*);
CREATE INDEX kb on t1 (b);
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
# should have filtered the rows out since ttl is passed in compaction filter
SELECT COUNT(*) FROM t1 FORCE INDEX (kb);
DROP TABLE t1;

View File

@@ -0,0 +1 @@
--rocksdb_default_cf_options=disable_auto_compactions=true

View File

@@ -0,0 +1,500 @@
--source include/have_debug.inc
--source include/have_rocksdb.inc
# The purpose of read filtering for tables with TTL is to ensure that during a
# transaction a key which has expired already but not removed by compaction
# yet, is not returned to the user.
#
# Without this the user might be hit with problems such as disappearing rows
# within a transaction, etc, because the compaction filter ignores snapshots
# when filtering keys.
# Basic read filtering test
CREATE TABLE t1 (
a int PRIMARY KEY,
b int NOT NULL,
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, 1);
INSERT INTO t1 values (2, 2);
set global rocksdb_debug_ttl_rec_ts = 0;
set global rocksdb_force_flush_memtable_now=1;
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kb);
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_rows_expired';
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_expired';
DROP TABLE t1;
# Test that some rows are hidden but others aren't...
CREATE TABLE t1 (
a int PRIMARY KEY,
b BIGINT UNSIGNED NOT NULL,
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=10;';
set global rocksdb_debug_ttl_rec_ts = -300;
INSERT INTO t1 values (1, UNIX_TIMESTAMP());
set global rocksdb_debug_ttl_rec_ts = 300;
INSERT INTO t1 values (2, UNIX_TIMESTAMP());
INSERT INTO t1 values (3, UNIX_TIMESTAMP());
set global rocksdb_debug_ttl_rec_ts = 0;
set global rocksdb_force_flush_memtable_now=1;
--echo # 1 should be hidden
--sorted_result
SELECT a FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT a FROM t1 FORCE INDEX (kb);
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
--echo # none should be hidden yet, compaction runs but records aren't expired
--sorted_result
SELECT a FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT a FROM t1 FORCE INDEX (kb);
--echo # all should be hidden now, even though compaction hasn't run again
set global rocksdb_debug_ttl_read_filter_ts = -310;
--sorted_result
SELECT a FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT a FROM t1 FORCE INDEX (kb);
set global rocksdb_debug_ttl_read_filter_ts = 0;
DROP TABLE t1;
# Test the filtering code explicitly.
CREATE TABLE t1 (
a int PRIMARY KEY,
b int NOT NULL,
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, 1);
INSERT INTO t1 values (3, 3);
INSERT INTO t1 values (5, 5);
INSERT INTO t1 values (7, 7);
set global rocksdb_debug_ttl_rec_ts = 0;
--echo # should return nothing.
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kb);
# disable filtering
set global rocksdb_enable_ttl_read_filtering=0;
--echo # should return everything
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kb);
# enable filtering
set global rocksdb_enable_ttl_read_filtering=1;
--echo # should return nothing.
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kb);
DROP TABLE t1;
--echo # Read filtering index scan tests (None of these queries should return any results)
CREATE TABLE t1 (
a int,
b int,
c int,
PRIMARY KEY (a,b,c),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (0,0,0);
INSERT INTO t1 values (0,0,1);
INSERT INTO t1 values (0,1,0);
INSERT INTO t1 values (0,1,1);
INSERT INTO t1 values (1,1,2);
INSERT INTO t1 values (1,2,1);
INSERT INTO t1 values (1,2,2);
INSERT INTO t1 values (1,2,3);
set global rocksdb_debug_ttl_rec_ts = 0;
select variable_value into @c from information_schema.global_status where variable_name='rocksdb_rows_expired';
set global rocksdb_force_flush_memtable_now=1;
# HA_READ_KEY_EXACT, using full key
SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE a=1 AND b=2 AND c=2;
SELECT * FROM t1 FORCE INDEX (kb) WHERE a=1 AND b=2 AND c=2;
# HA_READ_KEY_EXACT, not using full key
SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE a = 1;
SELECT * FROM t1 FORCE INDEX (kb) WHERE a = 1;
# HA_READ_BEFORE_KEY, not using full key
SELECT max(a) FROM t1 FORCE INDEX (PRIMARY) WHERE a < 3;
SELECT max(a) FROM t1 FORCE INDEX (kb) WHERE a < 3;
# HA_READ_BEFORE_KEY, using full key
SELECT max(a) FROM t1 FORCE INDEX (PRIMARY) WHERE a < 2 AND b = 1 AND c < 3;
SELECT max(a) FROM t1 FORCE INDEX (kb) WHERE a < 2 AND b = 1 AND c < 3;
# HA_READ_KEY_OR_NEXT
SELECT min(a) FROM t1 FORCE INDEX (PRIMARY) WHERE a >= 1;
SELECT min(a) FROM t1 FORCE INDEX (kb) WHERE a >= 1;
# HA_READ_AFTER_KEY, /* Find next rec. after key-record */
SELECT min(a) FROM t1 FORCE INDEX (PRIMARY) WHERE a > 1;
SELECT min(a) FROM t1 FORCE INDEX (kb) WHERE a > 1;
# HA_READ_PREFIX_LAST, /* Last key with the same prefix */
SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE a=1 and b in (1) order by c desc;
SELECT * FROM t1 FORCE INDEX (kb) WHERE a=1 and b in (1) order by c desc;
# HA_READ_PREFIX_LAST_OR_PREV, /* Last or prev key with the same prefix */
SELECT max(a) FROM t1 FORCE INDEX (PRIMARY) WHERE a <=10;
SELECT max(a) FROM t1 FORCE INDEX (kb) WHERE a <=10;
# need to test read_range_first()
# calls into read_range_next() and uses compare_keys() to see if its out of
# range
SELECT a FROM t1 FORCE INDEX (PRIMARY) WHERE a > 0 and a <= 2;
SELECT a FROM t1 FORCE INDEX (kb) WHERE a > 0 and a <= 2;
select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_expired';
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
select variable_value-@c from information_schema.global_status where variable_name='rocksdb_rows_expired';
DROP TABLE t1;
--echo # Attempt to update expired value, should filter out
set global rocksdb_force_flush_memtable_now=1;
CREATE TABLE t1 (
a int PRIMARY KEY
) ENGINE=rocksdb
COMMENT='ttl_duration=1;';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1);
set global rocksdb_debug_ttl_rec_ts = 0;
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1;
--echo # No error is thrown here, under the hood index_next_with_direction is
--echo # filtering out the record from being seen in the first place.
UPDATE t1 set a = 1;
DROP TABLE t1;
--echo # Ensure no rows can disappear in the middle of long-running transactions
--echo # Also ensure repeatable-read works as expected
--source include/count_sessions.inc
connect (con1,localhost,root,,);
connect (con2,localhost,root,,);
CREATE TABLE t1 (
a int PRIMARY KEY,
b int NOT NULL,
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=5;';
INSERT INTO t1 values (1, 1);
connection con1;
--echo # Creating Snapshot (start transaction)
BEGIN;
# We need the below snippet in case establishing con1 took an arbitrary
# amount of time. See https://github.com/facebook/mysql-5.6/pull/617#discussion_r120525391.
--disable_query_log
--let $snapshot_size= `SELECT COUNT(*) FROM t1`
--let $i= 0
while ($snapshot_size != 1)
{
if ($i == 1000)
{
--die Your testing host is too slow for reasonable TTL testing
}
$i++;
ROLLBACK;
INSERT INTO t1 values (1,1);
BEGIN;
--let $snapshot_size= `SELECT COUNT(*) FROM t1`
}
--enable_query_log
--echo # Nothing filtered out here
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kb);
--sleep 5
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kb); # <= shouldn't be filtered out here
--echo # Switching to connection 2
connection con2;
--echo # compaction doesn't do anything since con1 snapshot is still open
set global rocksdb_debug_ttl_ignore_pk = 1;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_debug_ttl_ignore_pk = 0;
--echo # read filtered out, because on a different connection, on
--echo # this connection the records have 'expired' already so they are filtered out
--echo # even though they have not yet been removed by compaction
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kb);
--echo # Switching to connection 1
connection con1;
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kb); # <= shouldn't be filtered out here
UPDATE t1 set a = a + 1;
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kb); # <= shouldn't be filtered out here
COMMIT;
--sorted_result # <= filtered out here because time has passed.
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kb);
DROP TABLE t1;
disconnect con1;
disconnect con2;
#transaction 1, create a snapshot and select * => returns nothing.
#transaction 2, insert into table, flush
#transaction 1, select * => returns nothing, but the snapshot should prevent the compaction code from removing the rows, no matter what the ttl duration is.
#transaction 2, select * -> sees nothing, disable filter, select * -> sees everything, enable filter, select * -> sees nothing.
connect (con1,localhost,root,,);
connect (con2,localhost,root,,);
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
CREATE TABLE t1 (
a int PRIMARY KEY,
b int NOT NULL,
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;';
--echo # On Connection 1
connection con1;
--echo # Creating Snapshot (start transaction)
BEGIN;
--sorted_result
SELECT * FROM t1 FORCE INDEX (kb);
# Sleep 5 secs after creating snapshot, this ensures any records created after
# this can't be removed by compaction until this snapshot is released.
--sleep 5
--echo # On Connection 2
connection con2;
set global rocksdb_debug_ttl_rec_ts = -2;
INSERT INTO t1 values (1, 1);
INSERT INTO t1 values (3, 3);
INSERT INTO t1 values (5, 5);
INSERT INTO t1 values (7, 7);
set global rocksdb_debug_ttl_rec_ts = 0;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
--echo # On Connection 1
connection con1;
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kb);
--echo # On Connection 2
connection con2;
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kb);
set global rocksdb_enable_ttl_read_filtering=0;
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kb);
set global rocksdb_enable_ttl_read_filtering=1;
disconnect con2;
disconnect con1;
connection default;
DROP TABLE t1;
# Wait till we reached the initial number of concurrent sessions
--source include/wait_until_count_sessions.inc
# Test that index_next_with_direction skips records properly
CREATE TABLE t1 (
a int,
b int,
ts bigint(20) UNSIGNED NOT NULL,
PRIMARY KEY (a),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1;ttl_col=ts;';
set global rocksdb_debug_ttl_rec_ts = 100;
INSERT INTO t1 VALUES (1, 1, UNIX_TIMESTAMP());
INSERT INTO t1 VALUES (2, 2, UNIX_TIMESTAMP());
INSERT INTO t1 VALUES (3, 3, UNIX_TIMESTAMP());
INSERT INTO t1 VALUES (4, 4, UNIX_TIMESTAMP());
INSERT INTO t1 VALUES (5, 5, UNIX_TIMESTAMP());
INSERT INTO t1 VALUES (6, 6, UNIX_TIMESTAMP());
INSERT INTO t1 VALUES (7, 7, UNIX_TIMESTAMP());
INSERT INTO t1 VALUES (8, 8, UNIX_TIMESTAMP());
INSERT INTO t1 VALUES (9, 9, UNIX_TIMESTAMP());
INSERT INTO t1 VALUES (10, 10, UNIX_TIMESTAMP());
set global rocksdb_debug_ttl_rec_ts = 0;
set global rocksdb_force_flush_memtable_now=1;
--echo # None are expired
SELECT a, b FROM t1 FORCE INDEX (kb);
set global rocksdb_debug_ttl_rec_ts = -100;
UPDATE t1 SET ts=(UNIX_TIMESTAMP()+1) WHERE a IN (4, 7);
set global rocksdb_debug_ttl_rec_ts = 0;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
--echo # 4 and 7 should be gone
SELECT a, b FROM t1 FORCE INDEX (kb);
DROP TABLE t1;
# Test range scans with various conditionals
CREATE TABLE t1 (
c1 INT,
c2 INT,
name VARCHAR(25) NOT NULL,
PRIMARY KEY (c1, c2),
KEY kc2 (c2)
) ENGINE=ROCKSDB
COMMENT='ttl_duration=1;';
set global rocksdb_debug_ttl_rec_ts = -1200;
INSERT INTO t1 values (1,1,'a');
INSERT INTO t1 values (2,2,'b');
set global rocksdb_debug_ttl_rec_ts = 1200;
INSERT INTO t1 values (3,3,'c');
INSERT INTO t1 values (4,4,'d');
set global rocksdb_debug_ttl_rec_ts = -1200;
INSERT INTO t1 values (5,5,'e');
INSERT INTO t1 values (6,6,'f');
set global rocksdb_debug_ttl_rec_ts = 1200;
INSERT INTO t1 values (7,7,'g');
INSERT INTO t1 values (8,8,'h');
set global rocksdb_debug_ttl_rec_ts = 0;
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kc2);
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE c1 > 5;
--sorted_result
SELECT * FROM t1 FORCE INDEX (kc2) WHERE c2 > 5;
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY) WHERE 3 < c1 AND c1 < 6;
--sorted_result
SELECT * FROM t1 FORCE INDEX (kc2) WHERE 3 < c2 AND c2 < 6;
DROP TABLE t1;
# Test range scans with varying expirations
CREATE TABLE t1 (
a int,
b int,
PRIMARY KEY (a),
KEY kb (b)
) ENGINE=rocksdb
COMMENT='ttl_duration=1800;';
set global rocksdb_debug_ttl_rec_ts = 0;
INSERT INTO t1 values (1,1);
INSERT INTO t1 values (2,2);
INSERT INTO t1 values (7,7);
INSERT INTO t1 values (10,10);
INSERT INTO t1 values (11,11);
INSERT INTO t1 values (12,12);
set global rocksdb_debug_ttl_rec_ts = 450;
INSERT INTO t1 values (3,3);
INSERT INTO t1 values (4,4);
INSERT INTO t1 values (8,8);
INSERT INTO t1 values (16,16);
INSERT INTO t1 values (17,17);
INSERT INTO t1 values (18,18);
set global rocksdb_debug_ttl_rec_ts = 900;
INSERT INTO t1 values (5,5);
INSERT INTO t1 values (6,6);
INSERT INTO t1 values (9,9);
INSERT INTO t1 values (13,13);
INSERT INTO t1 values (14,14);
INSERT INTO t1 values (15,15);
set global rocksdb_debug_ttl_rec_ts = 0;
--echo # Should see everything
SELECT * FROM t1;
--echo # Should have no records from the first group
set global rocksdb_debug_ttl_read_filter_ts = -1800;
SELECT * FROM t1;
SELECT * FROM t1 FORCE INDEX (kb) WHERE a > 5 AND a < 15;
--echo # Should only have records from the last group
set global rocksdb_debug_ttl_read_filter_ts = -1800 - 450;
SELECT * FROM t1;
SELECT * FROM t1 FORCE INDEX (kb) WHERE a < 10;
--echo # Should be empty
set global rocksdb_debug_ttl_read_filter_ts = -1800 - 900;
SELECT * FROM t1;
set global rocksdb_debug_ttl_read_filter_ts = 0;
DROP TABLE t1;

View File

@@ -0,0 +1,87 @@
--source include/have_debug.inc
--source include/have_rocksdb.inc
# Multiple indexes, trigger compaction on sk and check consistency
CREATE TABLE t1 (
a int NOT NULL,
b int NOT NULL,
c int NOT NULL,
PRIMARY KEY (a),
KEY kb (b) COMMENT 'kb',
KEY kc (c) COMMENT 'kc'
) ENGINE=ROCKSDB
COMMENT='ttl_duration=1';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, 1, 1);
INSERT INTO t1 values (2, 2, 2);
set global rocksdb_debug_ttl_rec_ts = 100;
INSERT INTO t1 values (3, 3, 3);
set global rocksdb_debug_ttl_rec_ts = 0;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='kb';
# Results should be consistent
SELECT * FROM t1 FORCE INDEX (PRIMARY);
SELECT * FROM t1 FORCE INDEX (kb);
SELECT * FROM t1 FORCE INDEX (kc);
DROP TABLE t1;
# Trigger compaction on pk and check consistency
CREATE TABLE t1 (
a int NOT NULL,
b int NOT NULL,
c int NOT NULL,
PRIMARY KEY (a),
KEY kb (b) COMMENT 'kb',
KEY kc (c) COMMENT 'kc'
) ENGINE=ROCKSDB
COMMENT='ttl_duration=1';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, 1, 1);
INSERT INTO t1 values (2, 2, 2);
set global rocksdb_debug_ttl_rec_ts = 100;
INSERT INTO t1 values (3, 3, 3);
set global rocksdb_debug_ttl_rec_ts = 0;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
# Results should be consistent
SELECT * FROM t1 FORCE INDEX (PRIMARY);
SELECT * FROM t1 FORCE INDEX (kb);
SELECT * FROM t1 FORCE INDEX (kc);
DROP TABLE t1;
# Trigger compaction on pk and sk and check consistency
CREATE TABLE t1 (
a int NOT NULL,
b int NOT NULL,
c int NOT NULL,
PRIMARY KEY (a),
KEY kb (b) COMMENT 'kb',
KEY kc (c) COMMENT 'kc'
) ENGINE=ROCKSDB
COMMENT='ttl_duration=1';
set global rocksdb_debug_ttl_rec_ts = -100;
INSERT INTO t1 values (1, 1, 1);
INSERT INTO t1 values (2, 2, 2);
set global rocksdb_debug_ttl_rec_ts = 100;
INSERT INTO t1 values (3, 3, 3);
set global rocksdb_debug_ttl_rec_ts = 0;
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
set global rocksdb_compact_cf='kb';
# Results should be consistent
SELECT * FROM t1 FORCE INDEX (PRIMARY);
SELECT * FROM t1 FORCE INDEX (kb);
SELECT * FROM t1 FORCE INDEX (kc);
DROP TABLE t1;

View File

@@ -0,0 +1 @@
--rocksdb_enable_ttl_read_filtering=0

View File

@@ -0,0 +1,300 @@
--source include/have_debug.inc
--source include/have_rocksdb.inc
--source include/have_partition.inc
#
# Create a table with multiple partitions, but in the comment don't specify
# that per-partition based column families (CF) should be created. Expect that
# default CF will be used and new one won't be created.
#
# In addition, specify TTL on one of the partitions. Insert a few things
# inside all the partitions, verify after compaction that the rows inside the
# partition with TTL has disappeared.
#
# Add secondary keys to all tables to test compatibility.
#
CREATE TABLE t1 (
c1 INT,
c2 INT,
PRIMARY KEY (`c1`),
KEY kc2 (`c2`)
) ENGINE=ROCKSDB
COMMENT="custom_p0_ttl_duration=1;"
PARTITION BY LIST(c1) (
PARTITION custom_p0 VALUES IN (1, 4, 7),
PARTITION custom_p1 VALUES IN (2, 5, 8),
PARTITION custom_p2 VALUES IN (3, 6, 9)
);
set global rocksdb_debug_ttl_rec_ts = -3600;
INSERT INTO t1 values (1, 1);
INSERT INTO t1 values (2, 2);
INSERT INTO t1 values (3, 3);
INSERT INTO t1 values (4, 4);
INSERT INTO t1 values (5, 5);
INSERT INTO t1 values (6, 6);
INSERT INTO t1 values (7, 7);
INSERT INTO t1 values (8, 8);
INSERT INTO t1 values (9, 9);
set global rocksdb_debug_ttl_rec_ts = 0;
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kc2);
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='default';
# 1,4, and 7 should be gone
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kc2);
DROP TABLE t1;
#
# Create a table with multiple partitions and request for separate CF to be
# created per every partition. As a result we expect three different CF-s to be
# created.
#
# In addition, specify TTL on some of the partitions. Insert a few things
# inside all the partitions, verify after compaction that the rows inside the
# partition with TTL has disappeared.
#
CREATE TABLE t1 (
c1 INT,
c2 INT,
name VARCHAR(25) NOT NULL,
PRIMARY KEY (`c1`, `c2`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=my_custom_cf;custom_p2_cfname=baz',
KEY kc2 (`c2`)
) ENGINE=ROCKSDB
COMMENT="custom_p0_ttl_duration=1;custom_p1_ttl_duration=7;"
PARTITION BY LIST(c1) (
PARTITION custom_p0 VALUES IN (1, 4, 7),
PARTITION custom_p1 VALUES IN (2, 5, 8),
PARTITION custom_p2 VALUES IN (3, 6, 9)
);
set global rocksdb_debug_ttl_rec_ts = -1200;
INSERT INTO t1 values (1,1,'a');
INSERT INTO t1 values (4,4,'aaaa');
INSERT INTO t1 values (7,7,'aaaaaaa');
set global rocksdb_debug_ttl_rec_ts = 1200;
INSERT INTO t1 values (2,2,'aa');
INSERT INTO t1 values (3,3,'aaa');
INSERT INTO t1 values (5,5,'aaaaa');
INSERT INTO t1 values (6,6,'aaaaaa');
INSERT INTO t1 values (8,8,'aaaaaaaa');
INSERT INTO t1 values (9,9,'aaaaaaaaa');
set global rocksdb_debug_ttl_rec_ts = 0;
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kc2);
set global rocksdb_force_flush_memtable_now=1;
set @@global.rocksdb_compact_cf = 'foo';
set @@global.rocksdb_compact_cf = 'my_custom_cf';
set @@global.rocksdb_compact_cf = 'default';
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kc2);
set global rocksdb_debug_ttl_snapshot_ts = 3600;
set @@global.rocksdb_compact_cf = 'foo';
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kc2);
# Now 2,5,8 should be removed (this verifies that TTL is only operating on the
# particular CF.
set @@global.rocksdb_compact_cf = 'my_custom_cf';
set @@global.rocksdb_compact_cf = 'default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kc2);
DROP TABLE t1;
#
# Create a table with CF-s/TTL per partition and verify that ALTER TABLE + DROP
# PRIMARY, ADD PRIMARY work for that scenario and data is persisted/filtered as
# expected.
#
CREATE TABLE t1 (
c1 INT,
c2 INT,
name VARCHAR(25) NOT NULL,
event DATE,
PRIMARY KEY (`c1`, `c2`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;',
KEY kc2 (c2)
) ENGINE=ROCKSDB
COMMENT="custom_p0_ttl_duration=9999;custom_p2_ttl_duration=5;"
PARTITION BY LIST(c1) (
PARTITION custom_p0 VALUES IN (1, 2, 3),
PARTITION custom_p1 VALUES IN (4, 5, 6),
PARTITION custom_p2 VALUES IN (7, 8, 9)
);
INSERT INTO t1 VALUES (1, 1, "one", null);
INSERT INTO t1 VALUES (2, 2, "two", null);
INSERT INTO t1 VALUES (3, 3, "three", null);
INSERT INTO t1 VALUES (4, 4, "four", null);
INSERT INTO t1 VALUES (5, 5, "five", null);
INSERT INTO t1 VALUES (6, 6, "six", null);
INSERT INTO t1 VALUES (7, 7, "seven", null);
INSERT INTO t1 VALUES (8, 8, "eight", null);
INSERT INTO t1 VALUES (9, 9, "nine", null);
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kc2);
# TTL should be reset after alter table
set global rocksdb_debug_ttl_rec_ts = 600;
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(`c2`,`c1`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;';
set global rocksdb_debug_ttl_rec_ts = 0;
SHOW CREATE TABLE t1;
# ...so nothing should be gone here
set global rocksdb_debug_ttl_snapshot_ts = 100;
set global rocksdb_force_flush_memtable_now=1;
set @@global.rocksdb_compact_cf = 'baz';
# Filter out expired secondary keys too
set @@global.rocksdb_compact_cf = 'default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kc2);
set global rocksdb_debug_ttl_snapshot_ts = 1200;
set @@global.rocksdb_compact_cf = 'foo';
set @@global.rocksdb_compact_cf = 'baz';
# Filter out expired secondary keys too
set @@global.rocksdb_compact_cf = 'default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kc2);
DROP TABLE t1;
#
# Create a table with non-partitioned TTL duration, with partitioned TTL
# columns
#
# In this case the same TTL duration will be applied across different TTL
# columns in different partitions, except for in p2 where we override the ttl
# duration.
#
CREATE TABLE t1 (
c1 BIGINT,
c2 BIGINT UNSIGNED NOT NULL,
name VARCHAR(25) NOT NULL,
event DATE,
PRIMARY KEY (`c1`) COMMENT 'custom_p0_cfname=foo;custom_p1_cfname=bar;custom_p2_cfname=baz;',
KEY kc2 (`c2`)
) ENGINE=ROCKSDB
COMMENT="ttl_duration=1;custom_p1_ttl_duration=100;custom_p1_ttl_col=c2;custom_p2_ttl_duration=5000;"
PARTITION BY LIST(c1) (
PARTITION custom_p0 VALUES IN (1, 2, 3),
PARTITION custom_p1 VALUES IN (4, 5, 6),
PARTITION custom_p2 VALUES IN (7, 8, 9)
);
set global rocksdb_debug_ttl_rec_ts = -300;
INSERT INTO t1 VALUES (1, UNIX_TIMESTAMP(), "one", null);
INSERT INTO t1 VALUES (2, UNIX_TIMESTAMP(), "two", null);
INSERT INTO t1 VALUES (3, UNIX_TIMESTAMP(), "three", null);
set global rocksdb_debug_ttl_rec_ts = 0;
INSERT INTO t1 VALUES (4, UNIX_TIMESTAMP(), "four", null);
INSERT INTO t1 VALUES (5, UNIX_TIMESTAMP(), "five", null);
INSERT INTO t1 VALUES (6, UNIX_TIMESTAMP(), "six", null);
INSERT INTO t1 VALUES (7, UNIX_TIMESTAMP(), "seven", null);
INSERT INTO t1 VALUES (8, UNIX_TIMESTAMP(), "eight", null);
INSERT INTO t1 VALUES (9, UNIX_TIMESTAMP(), "nine", null);
set global rocksdb_force_flush_memtable_now=1;
set @@global.rocksdb_compact_cf = 'foo';
set @@global.rocksdb_compact_cf = 'baz';
set @@global.rocksdb_compact_cf = 'bar';
# Filter out expired secondary keys too
set @@global.rocksdb_compact_cf = 'default';
# here we expect only 1,2,3 to be gone, ttl implicit.
--sorted_result
SELECT c1 FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT c1 FROM t1 FORCE INDEX (kc2);
# here we expect only 4,5,6 to be gone, ttl based on column c2.
set global rocksdb_debug_ttl_snapshot_ts = 600;
set @@global.rocksdb_compact_cf = 'bar';
# Filter out expired secondary keys too
set @@global.rocksdb_compact_cf = 'default';
set global rocksdb_debug_ttl_snapshot_ts = 0;
--sorted_result
SELECT c1 FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT c1 FROM t1 FORCE INDEX (kc2);
# at this point only 7,8,9 should be left..
DROP TABLE t1;
#
# Add index inplace
#
CREATE TABLE t1 (
c1 INT,
c2 INT,
PRIMARY KEY (`c1`) COMMENT 'custom_p0_cfname=foo;'
) ENGINE=ROCKSDB
COMMENT="custom_p0_ttl_duration=1;"
PARTITION BY LIST(c1) (
PARTITION custom_p0 VALUES IN (1, 4, 7),
PARTITION custom_p1 VALUES IN (2, 5, 8),
PARTITION custom_p2 VALUES IN (3, 6, 9)
);
set global rocksdb_debug_ttl_rec_ts = -3600;
INSERT INTO t1 values (1, 1);
INSERT INTO t1 values (4, 4);
INSERT INTO t1 values (7, 7);
set global rocksdb_debug_ttl_rec_ts = 0;
INSERT INTO t1 values (2, 2);
INSERT INTO t1 values (3, 3);
INSERT INTO t1 values (5, 5);
INSERT INTO t1 values (6, 6);
INSERT INTO t1 values (8, 8);
INSERT INTO t1 values (9, 9);
# Nothing filtered out
--sorted_result
SELECT * FROM t1;
CREATE INDEX kc2 on t1 (c2);
set global rocksdb_force_flush_memtable_now=1;
set global rocksdb_compact_cf='foo';
set global rocksdb_compact_cf='default';
# 1,4, and 7 should be gone
--sorted_result
SELECT * FROM t1 FORCE INDEX (PRIMARY);
--sorted_result
SELECT * FROM t1 FORCE INDEX (kc2);
DROP TABLE t1;

View File

@@ -6,8 +6,8 @@ SET GLOBAL rocksdb_write_ignore_missing_column_families=true;
create table aaa (id int primary key, i int) engine rocksdb; create table aaa (id int primary key, i int) engine rocksdb;
set @save_rocksdb_flush_log_at_trx_commit=@@global.rocksdb_flush_log_at_trx_commit; set @save_rocksdb_flush_log_at_trx_commit=@@global.rocksdb_flush_log_at_trx_commit;
SET GLOBAL rocksdb_flush_log_at_trx_commit=0; SET GLOBAL rocksdb_flush_log_at_trx_commit=1;
--exec sleep 30 --exec sleep 5
select variable_value into @a from information_schema.global_status where variable_name='rocksdb_wal_synced'; select variable_value into @a from information_schema.global_status where variable_name='rocksdb_wal_synced';
insert aaa(id, i) values(1,1); insert aaa(id, i) values(1,1);
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced'; select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
@@ -16,19 +16,22 @@ select variable_value-@a from information_schema.global_status where variable_na
insert aaa(id, i) values(3,1); insert aaa(id, i) values(3,1);
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced'; select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
SET GLOBAL rocksdb_flush_log_at_trx_commit=1; SET GLOBAL rocksdb_flush_log_at_trx_commit=0;
--exec sleep 5
select variable_value into @a from information_schema.global_status where variable_name='rocksdb_wal_synced';
insert aaa(id, i) values(4,1); insert aaa(id, i) values(4,1);
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
insert aaa(id, i) values(5,1);
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
insert aaa(id, i) values(6,1);
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_wal_synced';
SET GLOBAL rocksdb_flush_log_at_trx_commit=2;
insert aaa(id, i) values(7,1);
let $status_var=rocksdb_wal_synced; let $status_var=rocksdb_wal_synced;
let $status_var_value=`select @a+4`; let $status_var_value=`select @a+1`;
source include/wait_for_status_var.inc;
SET GLOBAL rocksdb_flush_log_at_trx_commit=2;
--exec sleep 5
select variable_value into @a from information_schema.global_status where variable_name='rocksdb_wal_synced';
insert aaa(id, i) values(5,1);
let $status_var=rocksdb_wal_synced;
let $status_var_value=`select @a+1`;
source include/wait_for_status_var.inc; source include/wait_for_status_var.inc;
truncate table aaa; truncate table aaa;

View File

@@ -1,4 +1,5 @@
DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t1;
SET GLOBAL MAX_BINLOG_SIZE = 4096;
SET GLOBAL ROCKSDB_ENABLE_2PC = ON; SET GLOBAL ROCKSDB_ENABLE_2PC = ON;
create table t1 (a int primary key, b int, c varchar(255)) engine=rocksdb; create table t1 (a int primary key, b int, c varchar(255)) engine=rocksdb;
'con1' 'con1'
@@ -7,12 +8,10 @@ SET DEBUG_SYNC='rocksdb.prepared SIGNAL parked WAIT_FOR go';
insert into t1 values (1, 1, "iamtheogthealphaandomega");; insert into t1 values (1, 1, "iamtheogthealphaandomega");;
'con2' 'con2'
insert into t1 values (2, 1, "i_am_just_here_to_trigger_a_flush"); insert into t1 values (2, 1, "i_am_just_here_to_trigger_a_flush");
SET GLOBAL ROCKSDB_ENABLE_2PC = OFF; SET GLOBAL ROCKSDB_FLUSH_LOG_AT_TRX_COMMIT = 0;
SET GLOBAL ROCKSDB_WRITE_SYNC = OFF;
SET GLOBAL SYNC_BINLOG = 0; SET GLOBAL SYNC_BINLOG = 0;
SET DEBUG_SYNC='now WAIT_FOR parked'; SET DEBUG_SYNC='now WAIT_FOR parked';
SET GLOBAL ROCKSDB_ENABLE_2PC = ON; SET GLOBAL ROCKSDB_FLUSH_LOG_AT_TRX_COMMIT = 2;
SET GLOBAL ROCKSDB_WRITE_SYNC = ON;
SET GLOBAL SYNC_BINLOG = 1; SET GLOBAL SYNC_BINLOG = 1;
insert into t1 values (1000000, 1, "i_am_just_here_to_trigger_a_flush"); insert into t1 values (1000000, 1, "i_am_just_here_to_trigger_a_flush");
SET DEBUG_SYNC='now SIGNAL go'; SET DEBUG_SYNC='now SIGNAL go';
@@ -23,5 +22,5 @@ a b c
1 1 iamtheogthealphaandomega 1 1 iamtheogthealphaandomega
select count(*) from t1; select count(*) from t1;
count(*) count(*)
1000000 4096
drop table t1; drop table t1;

View File

@@ -0,0 +1,39 @@
include/master-slave.inc
Warnings:
Note #### Sending passwords in plain text without SSL/TLS is extremely insecure.
Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information.
[connection master]
include/rpl_connect.inc [creating slave_block]
drop table if exists t1;
create table t1 (i int);
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`i` int(11) DEFAULT NULL
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
insert into t1 values (1), (2), (3);
connection slave
select * from t1;
i
1
2
3
connection slave_block
lock tables t1 read;
connection master;
create high_priority index idx1 on t1 (i);
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`i` int(11) DEFAULT NULL,
KEY `idx1` (`i`)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
connection slave;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`i` int(11) DEFAULT NULL,
KEY `idx1` (`i`)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
drop table t1;
include/rpl_end.inc

View File

@@ -3,6 +3,11 @@
--source include/have_debug.inc --source include/have_debug.inc
--source include/have_debug_sync.inc --source include/have_debug_sync.inc
--source include/big_test.inc --source include/big_test.inc
# The test involves a crash which does not seem to be handled well with
# mysql-test/lib/My/SafeProcess/my_safe_process under valgrind as it hangs
# forever. The test did not mean to verify the memory leaks so not much
# coverage should be missed by not running it under valgrind.
--source include/not_valgrind.inc
--exec echo > $MYSQLTEST_VARDIR/log/mysqld.1.err --exec echo > $MYSQLTEST_VARDIR/log/mysqld.1.err
@@ -10,16 +15,18 @@
DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t1;
--enable_warnings --enable_warnings
# Set it to the minimum so that we can make the binlog rotate with a few inserts
SET GLOBAL MAX_BINLOG_SIZE = 4096;
SET GLOBAL ROCKSDB_ENABLE_2PC = ON; SET GLOBAL ROCKSDB_ENABLE_2PC = ON;
create table t1 (a int primary key, b int, c varchar(255)) engine=rocksdb; create table t1 (a int primary key, b int, c varchar(255)) engine=rocksdb;
connect (con1, localhost, root,,); connect (con1, localhost, root,,);
connect (con2, localhost, root,,); connect (con2, localhost, root,,);
# On connection one we insert a row and pause after commit marker is written to WAL. # On connection one we insert a row and pause after prepare marker is written to
# Connection two then inserts many rows. After connection two # WAL. Connection two then inserts many rows to rotate the binlog. After
# completes connection one continues only to crash before commit but after # connection two completes, connection one continues only to crash before commit
# binlog write. On crash recovery we see that connection one's value # but after binlog write. On crash recovery we see that connection one's value
# has been recovered and commited # has been recovered and commited
connection con1; connection con1;
--echo 'con1' --echo 'con1'
@@ -35,14 +42,14 @@ insert into t1 values (2, 1, "i_am_just_here_to_trigger_a_flush");
# Disable 2PC and syncing for faster inserting of dummy rows # Disable 2PC and syncing for faster inserting of dummy rows
# These rows only purpose is to rotate the binlog # These rows only purpose is to rotate the binlog
SET GLOBAL ROCKSDB_ENABLE_2PC = OFF; SET GLOBAL ROCKSDB_FLUSH_LOG_AT_TRX_COMMIT = 0;
SET GLOBAL ROCKSDB_WRITE_SYNC = OFF;
SET GLOBAL SYNC_BINLOG = 0; SET GLOBAL SYNC_BINLOG = 0;
SET DEBUG_SYNC='now WAIT_FOR parked'; SET DEBUG_SYNC='now WAIT_FOR parked';
--disable_query_log --disable_query_log
--let $pk= 3 --let $pk= 3
while ($pk < 1000000) { # binlog size is 4096 bytes so with that many insertion it will definitely rotate
while ($pk < 4096) {
eval insert into t1 values ($pk, 1, "foobardatagoesheresothatmorelogsrollwhichiswhatwewant"); eval insert into t1 values ($pk, 1, "foobardatagoesheresothatmorelogsrollwhichiswhatwewant");
--inc $pk --inc $pk
} }
@@ -50,18 +57,16 @@ while ($pk < 1000000) {
# re-enable 2PC an syncing then write to trigger a flush # re-enable 2PC an syncing then write to trigger a flush
# before we trigger the crash to simulate full-durability # before we trigger the crash to simulate full-durability
SET GLOBAL ROCKSDB_ENABLE_2PC = ON; SET GLOBAL ROCKSDB_FLUSH_LOG_AT_TRX_COMMIT = 2;
SET GLOBAL ROCKSDB_WRITE_SYNC = ON;
SET GLOBAL SYNC_BINLOG = 1; SET GLOBAL SYNC_BINLOG = 1;
insert into t1 values (1000000, 1, "i_am_just_here_to_trigger_a_flush"); insert into t1 values (1000000, 1, "i_am_just_here_to_trigger_a_flush");
SET DEBUG_SYNC='now SIGNAL go'; SET DEBUG_SYNC='now SIGNAL go';
--source include/wait_until_disconnected.inc
--enable_reconnect --enable_reconnect
--source include/wait_until_connected_again.inc --source include/wait_until_connected_again.inc
--disable_reconnect
--exec sleep 60
--exec python suite/rocksdb/t/check_log_for_xa.py $MYSQLTEST_VARDIR/log/mysqld.1.err commit,prepare,rollback --exec python suite/rocksdb/t/check_log_for_xa.py $MYSQLTEST_VARDIR/log/mysqld.1.err commit,prepare,rollback

View File

@@ -0,0 +1,2 @@
--source include/have_rocksdb.inc
--source include/rpl_ddl_high_priority.inc

View File

@@ -0,0 +1,4 @@
!include include/default_my.cnf
[server]
rocksdb_force_compute_memtable_stats_cachetime=0

View File

@@ -0,0 +1,100 @@
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO valid_values VALUES(1);
INSERT INTO valid_values VALUES(0);
INSERT INTO valid_values VALUES('on');
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO invalid_values VALUES('\'aaa\'');
INSERT INTO invalid_values VALUES('\'bbb\'');
SET @start_global_value = @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
SELECT @start_global_value;
@start_global_value
0
SET @start_session_value = @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
SELECT @start_session_value;
@start_session_value
0
'# Setting to valid values in global scope#'
"Trying to set variable @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED to 1"
SET @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = 1;
SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
@@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
1
"Setting the global scope variable back to default"
SET @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = DEFAULT;
SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
@@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
0
"Trying to set variable @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED to 0"
SET @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = 0;
SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
@@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
0
"Setting the global scope variable back to default"
SET @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = DEFAULT;
SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
@@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
0
"Trying to set variable @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED to on"
SET @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = on;
SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
@@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
1
"Setting the global scope variable back to default"
SET @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = DEFAULT;
SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
@@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
0
'# Setting to valid values in session scope#'
"Trying to set variable @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED to 1"
SET @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = 1;
SELECT @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
@@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
1
"Setting the session scope variable back to default"
SET @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = DEFAULT;
SELECT @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
@@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
0
"Trying to set variable @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED to 0"
SET @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = 0;
SELECT @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
@@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
0
"Setting the session scope variable back to default"
SET @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = DEFAULT;
SELECT @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
@@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
0
"Trying to set variable @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED to on"
SET @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = on;
SELECT @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
@@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
1
"Setting the session scope variable back to default"
SET @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = DEFAULT;
SELECT @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
@@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
0
'# Testing with invalid values in global scope #'
"Trying to set variable @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED to 'aaa'"
SET @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = 'aaa';
Got one of the listed errors
SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
@@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
0
"Trying to set variable @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED to 'bbb'"
SET @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = 'bbb';
Got one of the listed errors
SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
@@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
0
SET @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = @start_global_value;
SELECT @@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
@@global.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
0
SET @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED = @start_session_value;
SELECT @@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED;
@@session.ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
0
DROP TABLE valid_values;
DROP TABLE invalid_values;

View File

@@ -0,0 +1,14 @@
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO valid_values VALUES(1);
INSERT INTO valid_values VALUES(1024);
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO invalid_values VALUES('\'aaa\'');
SET @start_global_value = @@global.ROCKSDB_CONCURRENT_PREPARE;
SELECT @start_global_value;
@start_global_value
1
"Trying to set variable @@global.ROCKSDB_CONCURRENT_PREPARE to 444. It should fail because it is readonly."
SET @@global.ROCKSDB_CONCURRENT_PREPARE = 444;
ERROR HY000: Variable 'rocksdb_concurrent_prepare' is a read only variable
DROP TABLE valid_values;
DROP TABLE invalid_values;

View File

@@ -0,0 +1,79 @@
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO valid_values VALUES(100);
INSERT INTO valid_values VALUES(2);
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO invalid_values VALUES('\'aaa\'');
INSERT INTO invalid_values VALUES('\'123\'');
SET @start_global_value = @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH;
SELECT @start_global_value;
@start_global_value
50
SET @start_session_value = @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH;
SELECT @start_session_value;
@start_session_value
50
'# Setting to valid values in global scope#'
"Trying to set variable @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH to 100"
SET @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH = 100;
SELECT @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH;
@@global.ROCKSDB_DEADLOCK_DETECT_DEPTH
100
"Setting the global scope variable back to default"
SET @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH = DEFAULT;
SELECT @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH;
@@global.ROCKSDB_DEADLOCK_DETECT_DEPTH
50
"Trying to set variable @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH to 2"
SET @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH = 2;
SELECT @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH;
@@global.ROCKSDB_DEADLOCK_DETECT_DEPTH
2
"Setting the global scope variable back to default"
SET @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH = DEFAULT;
SELECT @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH;
@@global.ROCKSDB_DEADLOCK_DETECT_DEPTH
50
'# Setting to valid values in session scope#'
"Trying to set variable @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH to 100"
SET @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH = 100;
SELECT @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH;
@@session.ROCKSDB_DEADLOCK_DETECT_DEPTH
100
"Setting the session scope variable back to default"
SET @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH = DEFAULT;
SELECT @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH;
@@session.ROCKSDB_DEADLOCK_DETECT_DEPTH
50
"Trying to set variable @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH to 2"
SET @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH = 2;
SELECT @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH;
@@session.ROCKSDB_DEADLOCK_DETECT_DEPTH
2
"Setting the session scope variable back to default"
SET @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH = DEFAULT;
SELECT @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH;
@@session.ROCKSDB_DEADLOCK_DETECT_DEPTH
50
'# Testing with invalid values in global scope #'
"Trying to set variable @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH to 'aaa'"
SET @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH = 'aaa';
Got one of the listed errors
SELECT @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH;
@@global.ROCKSDB_DEADLOCK_DETECT_DEPTH
50
"Trying to set variable @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH to '123'"
SET @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH = '123';
Got one of the listed errors
SELECT @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH;
@@global.ROCKSDB_DEADLOCK_DETECT_DEPTH
50
SET @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH = @start_global_value;
SELECT @@global.ROCKSDB_DEADLOCK_DETECT_DEPTH;
@@global.ROCKSDB_DEADLOCK_DETECT_DEPTH
50
SET @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH = @start_session_value;
SELECT @@session.ROCKSDB_DEADLOCK_DETECT_DEPTH;
@@session.ROCKSDB_DEADLOCK_DETECT_DEPTH
50
DROP TABLE valid_values;
DROP TABLE invalid_values;

View File

@@ -0,0 +1,64 @@
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO valid_values VALUES(1);
INSERT INTO valid_values VALUES(0);
INSERT INTO valid_values VALUES('on');
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO invalid_values VALUES('\'aaa\'');
INSERT INTO invalid_values VALUES('\'bbb\'');
SET @start_global_value = @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK;
SELECT @start_global_value;
@start_global_value
0
'# Setting to valid values in global scope#'
"Trying to set variable @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK to 1"
SET @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK = 1;
SELECT @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK;
@@global.ROCKSDB_DEBUG_TTL_IGNORE_PK
1
"Setting the global scope variable back to default"
SET @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK = DEFAULT;
SELECT @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK;
@@global.ROCKSDB_DEBUG_TTL_IGNORE_PK
0
"Trying to set variable @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK to 0"
SET @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK = 0;
SELECT @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK;
@@global.ROCKSDB_DEBUG_TTL_IGNORE_PK
0
"Setting the global scope variable back to default"
SET @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK = DEFAULT;
SELECT @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK;
@@global.ROCKSDB_DEBUG_TTL_IGNORE_PK
0
"Trying to set variable @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK to on"
SET @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK = on;
SELECT @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK;
@@global.ROCKSDB_DEBUG_TTL_IGNORE_PK
1
"Setting the global scope variable back to default"
SET @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK = DEFAULT;
SELECT @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK;
@@global.ROCKSDB_DEBUG_TTL_IGNORE_PK
0
"Trying to set variable @@session.ROCKSDB_DEBUG_TTL_IGNORE_PK to 444. It should fail because it is not session."
SET @@session.ROCKSDB_DEBUG_TTL_IGNORE_PK = 444;
ERROR HY000: Variable 'rocksdb_debug_ttl_ignore_pk' is a GLOBAL variable and should be set with SET GLOBAL
'# Testing with invalid values in global scope #'
"Trying to set variable @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK to 'aaa'"
SET @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK = 'aaa';
Got one of the listed errors
SELECT @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK;
@@global.ROCKSDB_DEBUG_TTL_IGNORE_PK
0
"Trying to set variable @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK to 'bbb'"
SET @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK = 'bbb';
Got one of the listed errors
SELECT @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK;
@@global.ROCKSDB_DEBUG_TTL_IGNORE_PK
0
SET @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK = @start_global_value;
SELECT @@global.ROCKSDB_DEBUG_TTL_IGNORE_PK;
@@global.ROCKSDB_DEBUG_TTL_IGNORE_PK
0
DROP TABLE valid_values;
DROP TABLE invalid_values;

View File

@@ -1,7 +1,7 @@
DROP TABLE IF EXISTS t; DROP TABLE IF EXISTS t;
CREATE TABLE t (a INT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb; CREATE TABLE t (a INT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb;
INSERT INTO t (a,b) VALUES (1,'bar'),(2,'foo'); INSERT INTO t (a,b) VALUES (1,'bar'),(2,'foo');
SET @ORIG_PAUSE_BACKGROUND_WORK = @@rocksdb_force_compute_memtable_stats; SET @ORIG_FORCE_COMPUTE_MEMTABLE_STATS = @@rocksdb_force_compute_memtable_stats;
set global rocksdb_force_flush_memtable_now = true; set global rocksdb_force_flush_memtable_now = true;
INSERT INTO t (a,b) VALUES (3,'dead'),(4,'beef'),(5,'a'),(6,'bbb'),(7,'c'),(8,'d'); INSERT INTO t (a,b) VALUES (3,'dead'),(4,'beef'),(5,'a'),(6,'bbb'),(7,'c'),(8,'d');
set global rocksdb_force_compute_memtable_stats=0; set global rocksdb_force_compute_memtable_stats=0;
@@ -12,4 +12,4 @@ select case when @ROWS_INCLUDE_MEMTABLE-@ROWS_EXCLUDE_MEMTABLE > 0 then 'true' e
case when @ROWS_INCLUDE_MEMTABLE-@ROWS_EXCLUDE_MEMTABLE > 0 then 'true' else 'false' end case when @ROWS_INCLUDE_MEMTABLE-@ROWS_EXCLUDE_MEMTABLE > 0 then 'true' else 'false' end
true true
DROP TABLE t; DROP TABLE t;
set global rocksdb_force_compute_memtable_stats = @ORIG_PAUSE_BACKGROUND_WORK; set global rocksdb_force_compute_memtable_stats = @ORIG_FORCE_COMPUTE_MEMTABLE_STATS;

View File

@@ -0,0 +1,68 @@
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO valid_values VALUES(0);
INSERT INTO valid_values VALUES(1);
INSERT INTO valid_values VALUES(1024);
INSERT INTO valid_values VALUES(1024 * 1024 * 1024);
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO invalid_values VALUES('\'aaa\'');
SET @start_global_value = @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
SELECT @start_global_value;
@start_global_value
0
'# Setting to valid values in global scope#'
"Trying to set variable @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME to 0"
SET @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = 0;
SELECT @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
@@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
0
"Setting the global scope variable back to default"
SET @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = DEFAULT;
SELECT @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
@@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
60000000
"Trying to set variable @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME to 1"
SET @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = 1;
SELECT @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
@@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
1
"Setting the global scope variable back to default"
SET @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = DEFAULT;
SELECT @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
@@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
60000000
"Trying to set variable @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME to 1024"
SET @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = 1024;
SELECT @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
@@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
1024
"Setting the global scope variable back to default"
SET @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = DEFAULT;
SELECT @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
@@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
60000000
"Trying to set variable @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME to 1073741824"
SET @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = 1073741824;
SELECT @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
@@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
1073741824
"Setting the global scope variable back to default"
SET @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = DEFAULT;
SELECT @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
@@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
60000000
"Trying to set variable @@session.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME to 444. It should fail because it is not session."
SET @@session.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = 444;
ERROR HY000: Variable 'rocksdb_force_compute_memtable_stats_cachetime' is a GLOBAL variable and should be set with SET GLOBAL
'# Testing with invalid values in global scope #'
"Trying to set variable @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME to 'aaa'"
SET @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = 'aaa';
Got one of the listed errors
SELECT @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
@@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
60000000
SET @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME = @start_global_value;
SELECT @@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME;
@@global.ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
0
DROP TABLE valid_values;
DROP TABLE invalid_values;

View File

@@ -0,0 +1,64 @@
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO valid_values VALUES(1);
INSERT INTO valid_values VALUES(0);
INSERT INTO valid_values VALUES('on');
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO invalid_values VALUES('\'aaa\'');
INSERT INTO invalid_values VALUES('\'bbb\'');
SET @start_global_value = @@global.ROCKSDB_LARGE_PREFIX;
SELECT @start_global_value;
@start_global_value
0
'# Setting to valid values in global scope#'
"Trying to set variable @@global.ROCKSDB_LARGE_PREFIX to 1"
SET @@global.ROCKSDB_LARGE_PREFIX = 1;
SELECT @@global.ROCKSDB_LARGE_PREFIX;
@@global.ROCKSDB_LARGE_PREFIX
1
"Setting the global scope variable back to default"
SET @@global.ROCKSDB_LARGE_PREFIX = DEFAULT;
SELECT @@global.ROCKSDB_LARGE_PREFIX;
@@global.ROCKSDB_LARGE_PREFIX
0
"Trying to set variable @@global.ROCKSDB_LARGE_PREFIX to 0"
SET @@global.ROCKSDB_LARGE_PREFIX = 0;
SELECT @@global.ROCKSDB_LARGE_PREFIX;
@@global.ROCKSDB_LARGE_PREFIX
0
"Setting the global scope variable back to default"
SET @@global.ROCKSDB_LARGE_PREFIX = DEFAULT;
SELECT @@global.ROCKSDB_LARGE_PREFIX;
@@global.ROCKSDB_LARGE_PREFIX
0
"Trying to set variable @@global.ROCKSDB_LARGE_PREFIX to on"
SET @@global.ROCKSDB_LARGE_PREFIX = on;
SELECT @@global.ROCKSDB_LARGE_PREFIX;
@@global.ROCKSDB_LARGE_PREFIX
1
"Setting the global scope variable back to default"
SET @@global.ROCKSDB_LARGE_PREFIX = DEFAULT;
SELECT @@global.ROCKSDB_LARGE_PREFIX;
@@global.ROCKSDB_LARGE_PREFIX
0
"Trying to set variable @@session.ROCKSDB_LARGE_PREFIX to 444. It should fail because it is not session."
SET @@session.ROCKSDB_LARGE_PREFIX = 444;
ERROR HY000: Variable 'rocksdb_large_prefix' is a GLOBAL variable and should be set with SET GLOBAL
'# Testing with invalid values in global scope #'
"Trying to set variable @@global.ROCKSDB_LARGE_PREFIX to 'aaa'"
SET @@global.ROCKSDB_LARGE_PREFIX = 'aaa';
Got one of the listed errors
SELECT @@global.ROCKSDB_LARGE_PREFIX;
@@global.ROCKSDB_LARGE_PREFIX
0
"Trying to set variable @@global.ROCKSDB_LARGE_PREFIX to 'bbb'"
SET @@global.ROCKSDB_LARGE_PREFIX = 'bbb';
Got one of the listed errors
SELECT @@global.ROCKSDB_LARGE_PREFIX;
@@global.ROCKSDB_LARGE_PREFIX
0
SET @@global.ROCKSDB_LARGE_PREFIX = @start_global_value;
SELECT @@global.ROCKSDB_LARGE_PREFIX;
@@global.ROCKSDB_LARGE_PREFIX
0
DROP TABLE valid_values;
DROP TABLE invalid_values;

View File

@@ -0,0 +1,14 @@
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO valid_values VALUES(1);
INSERT INTO valid_values VALUES(1024);
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO invalid_values VALUES('\'aaa\'');
SET @start_global_value = @@global.ROCKSDB_MANUAL_WAL_FLUSH;
SELECT @start_global_value;
@start_global_value
1
"Trying to set variable @@global.ROCKSDB_MANUAL_WAL_FLUSH to 444. It should fail because it is readonly."
SET @@global.ROCKSDB_MANUAL_WAL_FLUSH = 444;
ERROR HY000: Variable 'rocksdb_manual_wal_flush' is a read only variable
DROP TABLE valid_values;
DROP TABLE invalid_values;

View File

@@ -0,0 +1,53 @@
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO valid_values VALUES(100);
INSERT INTO valid_values VALUES(1);
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO invalid_values VALUES('\'aaa\'');
INSERT INTO invalid_values VALUES('\'123\'');
SET @start_global_value = @@global.ROCKSDB_MAX_LATEST_DEADLOCKS;
SELECT @start_global_value;
@start_global_value
5
'# Setting to valid values in global scope#'
"Trying to set variable @@global.ROCKSDB_MAX_LATEST_DEADLOCKS to 100"
SET @@global.ROCKSDB_MAX_LATEST_DEADLOCKS = 100;
SELECT @@global.ROCKSDB_MAX_LATEST_DEADLOCKS;
@@global.ROCKSDB_MAX_LATEST_DEADLOCKS
100
"Setting the global scope variable back to default"
SET @@global.ROCKSDB_MAX_LATEST_DEADLOCKS = DEFAULT;
SELECT @@global.ROCKSDB_MAX_LATEST_DEADLOCKS;
@@global.ROCKSDB_MAX_LATEST_DEADLOCKS
5
"Trying to set variable @@global.ROCKSDB_MAX_LATEST_DEADLOCKS to 1"
SET @@global.ROCKSDB_MAX_LATEST_DEADLOCKS = 1;
SELECT @@global.ROCKSDB_MAX_LATEST_DEADLOCKS;
@@global.ROCKSDB_MAX_LATEST_DEADLOCKS
1
"Setting the global scope variable back to default"
SET @@global.ROCKSDB_MAX_LATEST_DEADLOCKS = DEFAULT;
SELECT @@global.ROCKSDB_MAX_LATEST_DEADLOCKS;
@@global.ROCKSDB_MAX_LATEST_DEADLOCKS
5
"Trying to set variable @@session.ROCKSDB_MAX_LATEST_DEADLOCKS to 444. It should fail because it is not session."
SET @@session.ROCKSDB_MAX_LATEST_DEADLOCKS = 444;
ERROR HY000: Variable 'rocksdb_max_latest_deadlocks' is a GLOBAL variable and should be set with SET GLOBAL
'# Testing with invalid values in global scope #'
"Trying to set variable @@global.ROCKSDB_MAX_LATEST_DEADLOCKS to 'aaa'"
SET @@global.ROCKSDB_MAX_LATEST_DEADLOCKS = 'aaa';
Got one of the listed errors
SELECT @@global.ROCKSDB_MAX_LATEST_DEADLOCKS;
@@global.ROCKSDB_MAX_LATEST_DEADLOCKS
5
"Trying to set variable @@global.ROCKSDB_MAX_LATEST_DEADLOCKS to '123'"
SET @@global.ROCKSDB_MAX_LATEST_DEADLOCKS = '123';
Got one of the listed errors
SELECT @@global.ROCKSDB_MAX_LATEST_DEADLOCKS;
@@global.ROCKSDB_MAX_LATEST_DEADLOCKS
5
SET @@global.ROCKSDB_MAX_LATEST_DEADLOCKS = @start_global_value;
SELECT @@global.ROCKSDB_MAX_LATEST_DEADLOCKS;
@@global.ROCKSDB_MAX_LATEST_DEADLOCKS
5
DROP TABLE valid_values;
DROP TABLE invalid_values;

View File

@@ -0,0 +1,93 @@
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO valid_values VALUES(1);
INSERT INTO valid_values VALUES(0);
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO invalid_values VALUES('\'aaa\'');
INSERT INTO invalid_values VALUES('\'bbb\'');
INSERT INTO invalid_values VALUES('on');
SET @start_global_value = @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
SELECT @start_global_value;
@start_global_value
0
SET @start_session_value = @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
SELECT @start_session_value;
@start_session_value
0
'# Setting to valid values in global scope#'
"Trying to set variable @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS to 1"
SET @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = 1;
SELECT @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
@@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
1
"Setting the global scope variable back to default"
SET @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = DEFAULT;
SELECT @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
@@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
0
"Trying to set variable @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS to 0"
SET @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = 0;
SELECT @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
@@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
0
"Setting the global scope variable back to default"
SET @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = DEFAULT;
SELECT @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
@@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
0
'# Setting to valid values in session scope#'
"Trying to set variable @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS to 1"
SET @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = 1;
SELECT @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
@@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
1
"Setting the session scope variable back to default"
SET @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = DEFAULT;
SELECT @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
@@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
0
"Trying to set variable @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS to 0"
SET @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = 0;
SELECT @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
@@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
0
"Setting the session scope variable back to default"
SET @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = DEFAULT;
SELECT @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
@@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
0
'# Testing with invalid values in global scope #'
"Trying to set variable @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS to 'aaa'"
SET @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = 'aaa';
Got one of the listed errors
SELECT @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
@@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
0
"Trying to set variable @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS to 'bbb'"
SET @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = 'bbb';
Got one of the listed errors
SELECT @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
@@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
0
"Trying to set variable @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS to on"
SET @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = on;
Got one of the listed errors
SELECT @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
@@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
0
SET @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = @start_global_value;
SELECT @@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
@@global.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
0
SET @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS = @start_session_value;
SELECT @@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS;
@@session.ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
0
DROP TABLE valid_values;
DROP TABLE invalid_values;
set session rocksdb_merge_buf_size=250;
set session rocksdb_merge_combine_read_size=1000;
set session rocksdb_merge_tmp_file_removal_delay_ms=1000;
CREATE TABLE t1 (i INT, j INT, PRIMARY KEY (i)) ENGINE = ROCKSDB;
ALTER TABLE t1 ADD INDEX kj(j), ALGORITHM=INPLACE;
include/assert.inc [Alter should have taken at least 10 seconds]
DROP TABLE t1;

View File

@@ -0,0 +1,7 @@
SET @start_global_value = @@global.ROCKSDB_SIM_CACHE_SIZE;
SELECT @start_global_value;
@start_global_value
0
"Trying to set variable @@global.ROCKSDB_SIM_CACHE_SIZE to 444. It should fail because it is readonly."
SET @@global.ROCKSDB_SIM_CACHE_SIZE = 444;
ERROR HY000: Variable 'rocksdb_sim_cache_size' is a read only variable

View File

@@ -0,0 +1,19 @@
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO valid_values VALUES(1);
INSERT INTO valid_values VALUES(0);
INSERT INTO valid_values VALUES('on');
INSERT INTO valid_values VALUES('off');
INSERT INTO valid_values VALUES('true');
INSERT INTO valid_values VALUES('false');
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO invalid_values VALUES('\'aaa\'');
INSERT INTO invalid_values VALUES('\'bbb\'');
SET @start_global_value = @@global.ROCKSDB_USE_CLOCK_CACHE;
SELECT @start_global_value;
@start_global_value
0
"Trying to set variable @@global.ROCKSDB_USE_CLOCK_CACHE to 444. It should fail because it is readonly."
SET @@global.ROCKSDB_USE_CLOCK_CACHE = 444;
ERROR HY000: Variable 'rocksdb_use_clock_cache' is a read only variable
DROP TABLE valid_values;
DROP TABLE invalid_values;

View File

@@ -0,0 +1,18 @@
--source include/have_rocksdb.inc
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO valid_values VALUES(1);
INSERT INTO valid_values VALUES(0);
INSERT INTO valid_values VALUES('on');
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO invalid_values VALUES('\'aaa\'');
INSERT INTO invalid_values VALUES('\'bbb\'');
--let $sys_var=ROCKSDB_BULK_LOAD_ALLOW_UNSORTED
--let $read_only=0
--let $session=1
--source ../include/rocksdb_sys_var.inc
DROP TABLE valid_values;
DROP TABLE invalid_values;

View File

@@ -0,0 +1,16 @@
--source include/have_rocksdb.inc
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO valid_values VALUES(1);
INSERT INTO valid_values VALUES(1024);
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO invalid_values VALUES('\'aaa\'');
--let $sys_var=ROCKSDB_CONCURRENT_PREPARE
--let $read_only=1
--let $session=0
--source ../include/rocksdb_sys_var.inc
DROP TABLE valid_values;
DROP TABLE invalid_values;

View File

@@ -0,0 +1,17 @@
--source include/have_rocksdb.inc
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO valid_values VALUES(100);
INSERT INTO valid_values VALUES(2);
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO invalid_values VALUES('\'aaa\'');
INSERT INTO invalid_values VALUES('\'123\'');
--let $sys_var=ROCKSDB_DEADLOCK_DETECT_DEPTH
--let $read_only=0
--let $session=1
--source ../include/rocksdb_sys_var.inc
DROP TABLE valid_values;
DROP TABLE invalid_values;

View File

@@ -0,0 +1,18 @@
--source include/have_rocksdb.inc
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO valid_values VALUES(1);
INSERT INTO valid_values VALUES(0);
INSERT INTO valid_values VALUES('on');
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO invalid_values VALUES('\'aaa\'');
INSERT INTO invalid_values VALUES('\'bbb\'');
--let $sys_var=ROCKSDB_DEBUG_TTL_IGNORE_PK
--let $read_only=0
--let $session=0
--source ../include/rocksdb_sys_var.inc
DROP TABLE valid_values;
DROP TABLE invalid_values;

View File

@@ -6,7 +6,7 @@ DROP TABLE IF EXISTS t;
CREATE TABLE t (a INT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb; CREATE TABLE t (a INT PRIMARY KEY, b CHAR(8)) ENGINE=rocksdb;
INSERT INTO t (a,b) VALUES (1,'bar'),(2,'foo'); INSERT INTO t (a,b) VALUES (1,'bar'),(2,'foo');
SET @ORIG_PAUSE_BACKGROUND_WORK = @@rocksdb_force_compute_memtable_stats; SET @ORIG_FORCE_COMPUTE_MEMTABLE_STATS = @@rocksdb_force_compute_memtable_stats;
set global rocksdb_force_flush_memtable_now = true; set global rocksdb_force_flush_memtable_now = true;
INSERT INTO t (a,b) VALUES (3,'dead'),(4,'beef'),(5,'a'),(6,'bbb'),(7,'c'),(8,'d'); INSERT INTO t (a,b) VALUES (3,'dead'),(4,'beef'),(5,'a'),(6,'bbb'),(7,'c'),(8,'d');
@@ -20,4 +20,4 @@ SELECT TABLE_ROWS INTO @ROWS_INCLUDE_MEMTABLE FROM information_schema.TABLES WHE
select case when @ROWS_INCLUDE_MEMTABLE-@ROWS_EXCLUDE_MEMTABLE > 0 then 'true' else 'false' end; select case when @ROWS_INCLUDE_MEMTABLE-@ROWS_EXCLUDE_MEMTABLE > 0 then 'true' else 'false' end;
DROP TABLE t; DROP TABLE t;
set global rocksdb_force_compute_memtable_stats = @ORIG_PAUSE_BACKGROUND_WORK; set global rocksdb_force_compute_memtable_stats = @ORIG_FORCE_COMPUTE_MEMTABLE_STATS;

View File

@@ -0,0 +1,18 @@
--source include/have_rocksdb.inc
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO valid_values VALUES(0);
INSERT INTO valid_values VALUES(1);
INSERT INTO valid_values VALUES(1024);
INSERT INTO valid_values VALUES(1024 * 1024 * 1024);
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO invalid_values VALUES('\'aaa\'');
--let $sys_var=ROCKSDB_FORCE_COMPUTE_MEMTABLE_STATS_CACHETIME
--let $read_only=0
--let $session=0
--source ../include/rocksdb_sys_var.inc
DROP TABLE valid_values;
DROP TABLE invalid_values;

View File

@@ -0,0 +1,18 @@
--source include/have_rocksdb.inc
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO valid_values VALUES(1);
INSERT INTO valid_values VALUES(0);
INSERT INTO valid_values VALUES('on');
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO invalid_values VALUES('\'aaa\'');
INSERT INTO invalid_values VALUES('\'bbb\'');
--let $sys_var=ROCKSDB_LARGE_PREFIX
--let $read_only=0
--let $session=0
--source ../include/rocksdb_sys_var.inc
DROP TABLE valid_values;
DROP TABLE invalid_values;

View File

@@ -0,0 +1,16 @@
--source include/have_rocksdb.inc
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO valid_values VALUES(1);
INSERT INTO valid_values VALUES(1024);
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO invalid_values VALUES('\'aaa\'');
--let $sys_var=ROCKSDB_MANUAL_WAL_FLUSH
--let $read_only=1
--let $session=0
--source ../include/rocksdb_sys_var.inc
DROP TABLE valid_values;
DROP TABLE invalid_values;

View File

@@ -0,0 +1,17 @@
--source include/have_rocksdb.inc
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO valid_values VALUES(100);
INSERT INTO valid_values VALUES(1);
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO invalid_values VALUES('\'aaa\'');
INSERT INTO invalid_values VALUES('\'123\'');
--let $sys_var=ROCKSDB_MAX_LATEST_DEADLOCKS
--let $read_only=0
--let $session=0
--source ../include/rocksdb_sys_var.inc
DROP TABLE valid_values;
DROP TABLE invalid_values;

View File

@@ -0,0 +1,49 @@
--source include/have_rocksdb.inc
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO valid_values VALUES(1);
INSERT INTO valid_values VALUES(0);
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO invalid_values VALUES('\'aaa\'');
INSERT INTO invalid_values VALUES('\'bbb\'');
INSERT INTO invalid_values VALUES('on');
--let $sys_var=ROCKSDB_MERGE_TMP_FILE_REMOVAL_DELAY_MS
--let $read_only=0
--let $session=1
--source ../include/rocksdb_sys_var.inc
DROP TABLE valid_values;
DROP TABLE invalid_values;
set session rocksdb_merge_buf_size=250;
set session rocksdb_merge_combine_read_size=1000;
set session rocksdb_merge_tmp_file_removal_delay_ms=1000;
CREATE TABLE t1 (i INT, j INT, PRIMARY KEY (i)) ENGINE = ROCKSDB;
--disable_query_log
let $max = 100;
let $i = 1;
while ($i <= $max) {
let $insert = INSERT INTO t1 VALUES ($i, FLOOR(RAND() * 100));
inc $i;
eval $insert;
}
--enable_query_log
let $start= `SELECT UNIX_TIMESTAMP()`;
# this should take a lot longer than normal because each deleted merge file
# will sleep for 1 secs. There should be about 13 buffers.
# So it should take at least 13 secs
ALTER TABLE t1 ADD INDEX kj(j), ALGORITHM=INPLACE;
let $stop_exec= `SELECT UNIX_TIMESTAMP()`;
let $time_diff= `SELECT ($stop_exec - $start)`;
let $assert_text= Alter should have taken at least 10 seconds;
let $assert_cond= $time_diff >= 10;
source include/assert.inc;
DROP TABLE t1;

View File

@@ -0,0 +1,6 @@
--source include/have_rocksdb.inc
--let $sys_var=ROCKSDB_SIM_CACHE_SIZE
--let $read_only=1
--let $session=0
--source ../include/rocksdb_sys_var.inc

View File

@@ -0,0 +1,21 @@
--source include/have_rocksdb.inc
CREATE TABLE valid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO valid_values VALUES(1);
INSERT INTO valid_values VALUES(0);
INSERT INTO valid_values VALUES('on');
INSERT INTO valid_values VALUES('off');
INSERT INTO valid_values VALUES('true');
INSERT INTO valid_values VALUES('false');
CREATE TABLE invalid_values (value varchar(255)) ENGINE=myisam;
INSERT INTO invalid_values VALUES('\'aaa\'');
INSERT INTO invalid_values VALUES('\'bbb\'');
--let $sys_var=ROCKSDB_USE_CLOCK_CACHE
--let $read_only=1
--let $session=0
--source ../include/rocksdb_sys_var.inc
DROP TABLE valid_values;
DROP TABLE invalid_values;

View File

@@ -359,6 +359,22 @@ public:
DBUG_ASSERT(pos < get_current_pos() && (pos + 1) < get_current_pos()); DBUG_ASSERT(pos < get_current_pos() && (pos + 1) < get_current_pos());
rdb_netbuf_store_uint16(m_data.data() + pos, new_val); rdb_netbuf_store_uint16(m_data.data() + pos, new_val);
} }
void truncate(const size_t &pos) {
DBUG_ASSERT(0 <= pos && pos < m_data.size());
m_data.resize(pos);
}
void allocate(const size_t &len, const uchar &val = 0) {
DBUG_ASSERT(len > 0);
m_data.resize(m_data.size() + len, val);
}
/*
An awful hack to deallocate the buffer without relying on the deconstructor.
This is needed to suppress valgrind errors in rocksdb.partition
*/
void free() { std::vector<uchar>().swap(m_data); }
}; };
/* /*

View File

@@ -138,6 +138,14 @@ public:
gl_index_id.cf_id, gl_index_id.index_id); gl_index_id.cf_id, gl_index_id.index_id);
} }
#ifndef NDEBUG
if (rdb_dbug_set_ttl_ignore_pk() &&
index_info.m_index_type == Rdb_key_def::INDEX_TYPE_PRIMARY) {
*ttl_duration = 0;
return;
}
#endif
*ttl_duration = index_info.m_ttl_duration; *ttl_duration = index_info.m_ttl_duration;
if (Rdb_key_def::has_index_flag(index_info.m_index_flags, if (Rdb_key_def::has_index_flag(index_info.m_index_flags,
Rdb_key_def::TTL_FLAG)) { Rdb_key_def::TTL_FLAG)) {

Some files were not shown because too many files have changed in this diff Show More