Commit f2952485 authored by Sergei Petrunia's avatar Sergei Petrunia

Merge MyRocks merge tree into bb-10.2-mariarocks, unfinished.

It compiles on Linux but fails a lot of tests still
parents 488f46f3 43d5edf9
...@@ -7455,3 +7455,70 @@ ER_SLAVE_SAME_ID ...@@ -7455,3 +7455,70 @@ ER_SLAVE_SAME_ID
eng "A slave with the same server_uuid/server_id as this slave has connected to the master" eng "A slave with the same server_uuid/server_id as this slave has connected to the master"
ER_FLASHBACK_NOT_SUPPORTED ER_FLASHBACK_NOT_SUPPORTED
eng "Flashback does not support %s %s" eng "Flashback does not support %s %s"
# MARIAROCKS-TODO: Should we add RocksDB error messages here or use some other
# solution?
ER_KEYS_OUT_OF_ORDER
eng "Keys are out order during bulk load"
ER_OVERLAPPING_KEYS
eng "Bulk load rows overlap existing rows"
ER_REQUIRE_ROW_BINLOG_FORMAT
eng "Can't execute updates on master with binlog_format != ROW."
ER_ISOLATION_MODE_NOT_SUPPORTED
eng "MyRocks supports only READ COMMITTED and REPEATABLE READ isolation levels. Please change from current isolation level %s"
ER_ON_DUPLICATE_DISABLED
eng "When unique checking is disabled in MyRocks, INSERT,UPDATE,LOAD statements with clauses that update or replace the key (i.e. INSERT ON DUPLICATE KEY UPDATE, REPLACE) are not allowed. Query: %s"
ER_UPDATES_WITH_CONSISTENT_SNAPSHOT
eng "Can't execute updates when you started a transaction with START TRANSACTION WITH CONSISTENT [ROCKSDB] SNAPSHOT."
ER_ROLLBACK_ONLY
eng "This transaction was rolled back and cannot be committed. Only supported operation is to roll it back, so all pending changes will be discarded. Please restart another transaction."
ER_ROLLBACK_TO_SAVEPOINT
eng "MyRocks currently does not support ROLLBACK TO SAVEPOINT if modifying rows."
ER_ISOLATION_LEVEL_WITH_CONSISTENT_SNAPSHOT
eng "Only REPEATABLE READ isolation level is supported for START TRANSACTION WITH CONSISTENT SNAPSHOT in RocksDB Storage Engine."
ER_UNSUPPORTED_COLLATION
eng "Unsupported collation on string indexed column %s.%s Use binary collation (%s)."
ER_METADATA_INCONSISTENCY
eng "Table '%s' does not exist, but metadata information exists inside MyRocks. This is a sign of data inconsistency. Please check if '%s.frm' exists, and try to restore it if it does not exist."
ER_KEY_CREATE_DURING_ALTER
eng "MyRocks failed creating new key definitions during alter."
ER_SK_POPULATE_DURING_ALTER
eng "MyRocks failed populating secondary key during alter."
ER_CF_DIFFERENT
eng "Column family ('%s') flag (%d) is different from an existing flag (%d). Assign a new CF flag, or do not change existing CF flag."
ER_RDB_STATUS_GENERAL
eng "Status error %d received from RocksDB: %s"
ER_RDB_STATUS_MSG
eng "%s, Status error %d received from RocksDB: %s"
ER_NET_OK_PACKET_TOO_LARGE
eng "OK packet too large"
ER_RDB_TTL_UNSUPPORTED
eng "TTL support is currently disabled when table has secondary indexes or hidden PK."
ER_RDB_TTL_COL_FORMAT
eng "TTL column (%s) in MyRocks must be an unsigned non-null 64-bit integer, exist inside the table, and have an accompanying ttl duration."
ER_RDB_TTL_DURATION_FORMAT
eng "TTL duration (%s) in MyRocks must be an unsigned non-null 64-bit integer."
ER_PER_INDEX_CF_DEPRECATED
eng "The per-index column family option has been deprecated"
...@@ -16,6 +16,11 @@ IF (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/rocksdb/Makefile") ...@@ -16,6 +16,11 @@ IF (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/rocksdb/Makefile")
SKIP_ROCKSDB_PLUGIN("Missing Makefile in rocksdb directory. Try \"git submodule update\".") SKIP_ROCKSDB_PLUGIN("Missing Makefile in rocksdb directory. Try \"git submodule update\".")
ENDIF() ENDIF()
CHECK_FUNCTION_EXISTS(sched_getcpu HAVE_SCHED_GETCPU)
IF(HAVE_SCHED_GETCPU)
ADD_DEFINITIONS(-DHAVE_SCHED_GETCPU=1 -DROCKSDB_SCHED_GETCPU_PRESENT)
ENDIF()
# We've had our builders hang during the build process. This prevents MariaRocks # We've had our builders hang during the build process. This prevents MariaRocks
# to be built on 32 bit intel OS kernels. # to be built on 32 bit intel OS kernels.
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "i[36]86") IF(CMAKE_SYSTEM_PROCESSOR MATCHES "i[36]86")
...@@ -106,6 +111,19 @@ IF(HAVE_FALLOCATE) ...@@ -106,6 +111,19 @@ IF(HAVE_FALLOCATE)
ADD_DEFINITIONS(-DROCKSDB_FALLOCATE_PRESENT) ADD_DEFINITIONS(-DROCKSDB_FALLOCATE_PRESENT)
ENDIF() ENDIF()
CHECK_CXX_SOURCE_COMPILES("
#if defined(_MSC_VER) && !defined(__thread)
#define __thread __declspec(thread)
#endif
int main() {
static __thread int tls;
}
" HAVE_THREAD_LOCAL)
if(HAVE_THREAD_LOCAL)
ADD_DEFINITIONS(-DROCKSDB_SUPPORT_THREAD_LOCAL)
endif()
INCLUDE(build_rocksdb.cmake) INCLUDE(build_rocksdb.cmake)
ADD_CONVENIENCE_LIBRARY(rocksdb_aux_lib ADD_CONVENIENCE_LIBRARY(rocksdb_aux_lib
...@@ -120,13 +138,16 @@ ADD_CONVENIENCE_LIBRARY(rocksdb_aux_lib ...@@ -120,13 +138,16 @@ ADD_CONVENIENCE_LIBRARY(rocksdb_aux_lib
rdb_perf_context.h rdb_perf_context.h
rdb_sst_info.cc rdb_sst_info.cc
rdb_sst_info.h rdb_sst_info.h
rdb_io_watchdog.cc rdb_io_watchdog.h
rdb_buff.h rdb_buff.h
rdb_mariadb_port.h rdb_mariadb_port.h
) )
ADD_DEPENDENCIES(rocksdb_aux_lib GenError) ADD_DEPENDENCIES(rocksdb_aux_lib GenError)
TARGET_LINK_LIBRARIES(rocksdb_aux_lib rocksdblib ${ZLIB_LIBRARY}) # MARIAROCKS-TODO: how to properly depend on -lrt ?
TARGET_LINK_LIBRARIES(rocksdb_aux_lib rocksdblib ${ZLIB_LIBRARY} -lrt)
TARGET_LINK_LIBRARIES(rocksdb rocksdb_aux_lib) TARGET_LINK_LIBRARIES(rocksdb rocksdb_aux_lib)
IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
...@@ -161,6 +182,8 @@ ENDIF() ...@@ -161,6 +182,8 @@ ENDIF()
# ADD_SUBDIRECTORY(unittest) # ADD_SUBDIRECTORY(unittest)
#ENDIF() #ENDIF()
SET(rocksdb_static_libs ${rocksdb_static_libs} "-lrt")
ADD_LIBRARY(rocksdb_tools STATIC ADD_LIBRARY(rocksdb_tools STATIC
rocksdb/tools/ldb_tool.cc rocksdb/tools/ldb_tool.cc
rocksdb/tools/ldb_cmd.cc rocksdb/tools/ldb_cmd.cc
......
== Summary == == Summary ==
This directory contains RocksDB-based Storage Engine (RDBSE) for MySQL = "MyRocks". This directory contains RocksDB-based Storage Engine (RDBSE) for MySQL,
also known as "MyRocks".
== Resources == == Resources ==
See https://github.com/facebook/mysql-5.6/wiki/Getting-Started-with-MyRocks https://github.com/facebook/mysql-5.6/wiki/Getting-Started-with-MyRocks
Facebook group: https://www.facebook.com/groups/mysqlonrocksdb/ https://www.facebook.com/groups/MyRocks/
== Coding Conventions == == Coding Conventions ==
The baseline for MyRocks coding conventions is the MySQL set, available at The baseline for MyRocks coding conventions for the code in storage/rocksdb/
is based on the default clang format with a few minor changes. The file
storage/rocksdb/.clang-format describes conventions and can be integrated
with Vim or Emacs as described here:
http://releases.llvm.org/3.6.0/tools/clang/docs/ClangFormat.html#vim-integration
All code outside of storage/rocksdb/ should conform to the MySQL coding
conventions:
http://dev.mysql.com/doc/internals/en/coding-guidelines.html. http://dev.mysql.com/doc/internals/en/coding-guidelines.html.
Several refinements: Several refinements:
...@@ -34,5 +42,9 @@ Several refinements: ...@@ -34,5 +42,9 @@ Several refinements:
"_vect" for a std::vector etc. "_vect" for a std::vector etc.
== Running Tests == == Running Tests ==
To run tests from rocksdb, rocksd_rpl or rocksdb_sys_vars packages, use the following parameters: To run tests from rocksdb, rocksdb_rpl or other rocksdb_* packages, use the
--mysqld=--default-storage-engine=rocksdb --mysqld=--skip-innodb --mysqld=--default-tmp-storage-engine=MyISAM --mysqld=--rocksdb following parameters:
\ No newline at end of file --default-storage-engine=rocksdb
--skip-innodb
--default-tmp-storage-engine=MyISAM
--rocksdb
...@@ -178,6 +178,7 @@ set(ROCKSDB_SOURCES ...@@ -178,6 +178,7 @@ set(ROCKSDB_SOURCES
db/internal_stats.cc db/internal_stats.cc
db/log_reader.cc db/log_reader.cc
db/log_writer.cc db/log_writer.cc
db/malloc_stats.cc
db/managed_iterator.cc db/managed_iterator.cc
db/memtable.cc db/memtable.cc
db/memtable_list.cc db/memtable_list.cc
...@@ -200,13 +201,14 @@ set(ROCKSDB_SOURCES ...@@ -200,13 +201,14 @@ set(ROCKSDB_SOURCES
env/env.cc env/env.cc
env/env_chroot.cc env/env_chroot.cc
env/env_hdfs.cc env/env_hdfs.cc
env/memenv.cc env/mock_env.cc
memtable/alloc_tracker.cc
memtable/hash_cuckoo_rep.cc memtable/hash_cuckoo_rep.cc
memtable/hash_linklist_rep.cc memtable/hash_linklist_rep.cc
memtable/hash_skiplist_rep.cc memtable/hash_skiplist_rep.cc
memtable/memtable_allocator.cc
memtable/skiplistrep.cc memtable/skiplistrep.cc
memtable/vectorrep.cc memtable/vectorrep.cc
memtable/write_buffer_manager.cc
monitoring/histogram.cc monitoring/histogram.cc
monitoring/histogram_windowing.cc monitoring/histogram_windowing.cc
monitoring/instrumented_mutex.cc monitoring/instrumented_mutex.cc
...@@ -216,6 +218,7 @@ set(ROCKSDB_SOURCES ...@@ -216,6 +218,7 @@ set(ROCKSDB_SOURCES
monitoring/statistics.cc monitoring/statistics.cc
monitoring/thread_status_impl.cc monitoring/thread_status_impl.cc
monitoring/thread_status_updater.cc monitoring/thread_status_updater.cc
monitoring/thread_status_updater_debug.cc
monitoring/thread_status_util.cc monitoring/thread_status_util.cc
monitoring/thread_status_util_debug.cc monitoring/thread_status_util_debug.cc
options/cf_options.cc options/cf_options.cc
...@@ -245,6 +248,7 @@ set(ROCKSDB_SOURCES ...@@ -245,6 +248,7 @@ set(ROCKSDB_SOURCES
table/iterator.cc table/iterator.cc
table/merging_iterator.cc table/merging_iterator.cc
table/meta_blocks.cc table/meta_blocks.cc
table/mock_table.cc
table/partitioned_filter_block.cc table/partitioned_filter_block.cc
table/persistent_cache_helper.cc table/persistent_cache_helper.cc
table/plain_table_builder.cc table/plain_table_builder.cc
...@@ -293,12 +297,20 @@ set(ROCKSDB_SOURCES ...@@ -293,12 +297,20 @@ set(ROCKSDB_SOURCES
util/xxhash.cc util/xxhash.cc
utilities/backupable/backupable_db.cc utilities/backupable/backupable_db.cc
utilities/blob_db/blob_db.cc utilities/blob_db/blob_db.cc
utilities/blob_db/blob_db_impl.cc
utilities/blob_db/blob_db_options_impl.cc
utilities/blob_db/blob_dump_tool.cc
utilities/blob_db/blob_file.cc
utilities/blob_db/blob_log_format.cc
utilities/blob_db/blob_log_reader.cc
utilities/blob_db/blob_log_writer.cc
utilities/checkpoint/checkpoint_impl.cc utilities/checkpoint/checkpoint_impl.cc
utilities/col_buf_decoder.cc utilities/col_buf_decoder.cc
utilities/col_buf_encoder.cc utilities/col_buf_encoder.cc
utilities/column_aware_encoding_util.cc utilities/column_aware_encoding_util.cc
utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc
utilities/date_tiered/date_tiered_db_impl.cc utilities/date_tiered/date_tiered_db_impl.cc
utilities/debug.cc
utilities/document/document_db.cc utilities/document/document_db.cc
utilities/document/json_document.cc utilities/document/json_document.cc
utilities/document/json_document_builder.cc utilities/document/json_document_builder.cc
......
This diff is collapsed.
This diff is collapsed.
...@@ -70,7 +70,18 @@ rocksdb::TransactionDB *rdb_get_rocksdb_db(); ...@@ -70,7 +70,18 @@ rocksdb::TransactionDB *rdb_get_rocksdb_db();
class Rdb_cf_manager; class Rdb_cf_manager;
Rdb_cf_manager &rdb_get_cf_manager(); Rdb_cf_manager &rdb_get_cf_manager();
rocksdb::BlockBasedTableOptions &rdb_get_table_options(); const rocksdb::BlockBasedTableOptions &rdb_get_table_options();
bool rdb_is_ttl_enabled();
bool rdb_is_ttl_read_filtering_enabled();
#ifndef NDEBUG
int rdb_dbug_set_ttl_rec_ts();
int rdb_dbug_set_ttl_snapshot_ts();
int rdb_dbug_set_ttl_read_filter_ts();
#endif
enum operation_type : int;
void rdb_update_global_stats(const operation_type &type, uint count,
bool is_system_table = false);
class Rdb_dict_manager; class Rdb_dict_manager;
Rdb_dict_manager *rdb_get_dict_manager(void) Rdb_dict_manager *rdb_get_dict_manager(void)
...@@ -83,5 +94,4 @@ Rdb_ddl_manager *rdb_get_ddl_manager(void) ...@@ -83,5 +94,4 @@ Rdb_ddl_manager *rdb_get_ddl_manager(void)
class Rdb_binlog_manager; class Rdb_binlog_manager;
Rdb_binlog_manager *rdb_get_binlog_manager(void) Rdb_binlog_manager *rdb_get_binlog_manager(void)
MY_ATTRIBUTE((__warn_unused_result__)); MY_ATTRIBUTE((__warn_unused_result__));
} // namespace myrocks } // namespace myrocks
...@@ -408,3 +408,46 @@ select 1300 < 1300 * 1.5 as "same"; ...@@ -408,3 +408,46 @@ select 1300 < 1300 * 1.5 as "same";
same same
1 1
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 (
a INT PRIMARY KEY,
b INT,
c INT,
KEY kbc(b,c)) ENGINE = ROCKSDB;
INSERT INTO t1 (a,b,c) VALUES (1,1,1);
INSERT INTO t1 (a,b,c) VALUES (2,2,2);
INSERT INTO t1 (a,b,c) VALUES (3,3,3);
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) NOT NULL,
`b` int(11) DEFAULT NULL,
`c` int(11) DEFAULT NULL,
PRIMARY KEY (`a`),
KEY `kbc` (`b`,`c`)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
ALTER TABLE t1 DROP INDEX kbc, ADD INDEX kbc(b,c), ALGORITHM=INPLACE;
ALTER TABLE t1 DROP INDEX kbc;
DROP TABLE t1;
CREATE TABLE t1 (
a INT PRIMARY KEY,
b varchar(10),
index kb(b(5))
) ENGINE = ROCKSDB charset utf8 collate utf8_bin;
INSERT INTO t1 (a,b) VALUES (1,'1111122222');
INSERT INTO t1 (a,b) VALUES (2,'2222233333');
INSERT INTO t1 (a,b) VALUES (3,'3333344444');
ALTER TABLE t1 DROP INDEX kb, ADD INDEX kb(b(8)), ALGORITHM=INPLACE;
SELECT * FROM t1 FORCE INDEX(kb);
a b
1 1111122222
2 2222233333
3 3333344444
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) NOT NULL,
`b` varchar(10) COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`a`),
KEY `kb` (`b`(8))
) ENGINE=ROCKSDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
DROP TABLE t1;
...@@ -79,11 +79,25 @@ INSERT INTO t1 (a, b) VALUES (1, 5); ...@@ -79,11 +79,25 @@ INSERT INTO t1 (a, b) VALUES (1, 5);
INSERT INTO t1 (a, b) VALUES (2, 6); INSERT INTO t1 (a, b) VALUES (2, 6);
INSERT INTO t1 (a, b) VALUES (3, 7); INSERT INTO t1 (a, b) VALUES (3, 7);
ALTER TABLE t1 ADD UNIQUE INDEX kb(b); ALTER TABLE t1 ADD UNIQUE INDEX kb(b);
ERROR HY000: Unique index support is disabled when the table has no primary key. INSERT INTO t1 (a, b) VALUES (4, 8);
INSERT INTO t1 (a, b) VALUES (5, 5);
ERROR 23000: Duplicate entry '5' for key 'kb'
SHOW CREATE TABLE t1; SHOW CREATE TABLE t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL, `a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL `b` int(11) DEFAULT NULL,
UNIQUE KEY `kb` (`b`)
) ENGINE=ROCKSDB DEFAULT CHARSET=latin1 ) ENGINE=ROCKSDB DEFAULT CHARSET=latin1
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 (
a INT PRIMARY KEY,
b INT,
c INT,
KEY kbc(b,c)) ENGINE = ROCKSDB;
INSERT INTO t1 (a,b,c) VALUES (1,1,1);
INSERT INTO t1 (a,b,c) VALUES (2,2,2);
INSERT INTO t1 (a,b,c) VALUES (3,2,2);
ALTER TABLE t1 DROP INDEX kbc, ADD UNIQUE INDEX kbc(b,c), ALGORITHM=INPLACE;
ERROR 23000: Duplicate entry '2-2' for key 'kbc'
DROP TABLE t1;
...@@ -229,7 +229,20 @@ Table Op Msg_type Msg_text ...@@ -229,7 +229,20 @@ Table Op Msg_type Msg_text
test.t1 check status OK test.t1 check status OK
DROP TABLE t1, t2; DROP TABLE t1, t2;
CREATE TABLE t1 (a INT, b CHAR(8), UNIQUE INDEX(a)) ENGINE=rocksdb; CREATE TABLE t1 (a INT, b CHAR(8), UNIQUE INDEX(a)) ENGINE=rocksdb;
ERROR HY000: Unique index support is disabled when the table has no primary key. INSERT INTO t1 (a,b) VALUES (1,'a'),(2,'b');
INSERT INTO t1 (a,b) VALUES (1,'c');
ERROR 23000: Duplicate entry '1' for key 'a'
SELECT * FROM t1;
a b
1 a
2 b
SELECT * FROM t1 WHERE a = 2;
a b
2 b
EXPLAIN SELECT * FROM t1 WHERE a = 2;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 const a a 5 const 1 NULL
DROP TABLE t1;
CREATE TABLE t1 (a INT, b CHAR(8)) ENGINE=rocksdb; CREATE TABLE t1 (a INT, b CHAR(8)) ENGINE=rocksdb;
SHOW CREATE TABLE t1; SHOW CREATE TABLE t1;
Table Create Table Table Create Table
......
DROP TABLE IF EXISTS t1, t2, t3; DROP TABLE IF EXISTS t1, t2, t3;
CREATE TABLE t1(pk CHAR(5) PRIMARY KEY, a char(30), b char(30), key(a)) COLLATE 'latin1_bin'; Data will be ordered in ascending order
CREATE TABLE t2(pk CHAR(5) PRIMARY KEY, a char(30), b char(30), key(a)) COLLATE 'latin1_bin'; CREATE TABLE t1(
CREATE TABLE t3(pk CHAR(5) PRIMARY KEY, a char(30), b char(30), key(a)) COLLATE 'latin1_bin' pk CHAR(5),
PARTITION BY KEY() PARTITIONS 4; a CHAR(30),
connect other,localhost,root,,; b CHAR(30),
PRIMARY KEY(pk) COMMENT "cf1",
KEY(a)
) COLLATE 'latin1_bin';
CREATE TABLE t2(
pk CHAR(5),
a CHAR(30),
b CHAR(30),
PRIMARY KEY(pk) COMMENT "cf1",
KEY(a)
) COLLATE 'latin1_bin';
CREATE TABLE t3(
pk CHAR(5),
a CHAR(30),
b CHAR(30),
PRIMARY KEY(pk) COMMENT "cf1",
KEY(a)
) COLLATE 'latin1_bin' PARTITION BY KEY() PARTITIONS 4;
set session transaction isolation level repeatable read; set session transaction isolation level repeatable read;
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
......
CREATE TABLE t1(pk INT, PRIMARY KEY(pk));
SET rocksdb_bulk_load=1;
INSERT INTO t1 VALUES(10);
INSERT INTO t1 VALUES(11);
INSERT INTO t1 VALUES(9);
ERROR HY000: Rows must be inserted in primary key order during bulk load operation
SET rocksdb_bulk_load=0;
SELECT * FROM t1;
pk
10
11
SET rocksdb_bulk_load=1;
INSERT INTO t1 VALUES(1);
INSERT INTO t1 VALUES(2);
INSERT INTO t1 VALUES(20);
INSERT INTO t1 VALUES(21);
SET rocksdb_bulk_load=0;
ERROR HY000: Lost connection to MySQL server during query
DROP TABLE t1;
DROP TABLE IF EXISTS t1, t2, t3;
Data will be ordered in ascending order
CREATE TABLE t1(
pk CHAR(5),
a CHAR(30),
b CHAR(30),
PRIMARY KEY(pk) COMMENT "rev:cf1",
KEY(a)
) COLLATE 'latin1_bin';
CREATE TABLE t2(
pk CHAR(5),
a CHAR(30),
b CHAR(30),
PRIMARY KEY(pk) COMMENT "rev:cf1",
KEY(a)
) COLLATE 'latin1_bin';
CREATE TABLE t3(
pk CHAR(5),
a CHAR(30),
b CHAR(30),
PRIMARY KEY(pk) COMMENT "rev:cf1",
KEY(a)
) COLLATE 'latin1_bin' 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_bin NULL
t2 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_bin NULL
t3 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_bin 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_bin NULL
t2 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_bin NULL
t3 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_bin NULL partitioned
select count(pk) from t1;
count(pk)
5000000
select count(a) from t1;
count(a)
5000000
select count(b) from t1;
count(b)
5000000
select count(pk) from t2;
count(pk)
5000000
select count(a) from t2;
count(a)
5000000
select count(b) from t2;
count(b)
5000000
select count(pk) from t3;
count(pk)
5000000
select count(a) from t3;
count(a)
5000000
select count(b) from t3;
count(b)
5000000
longfilenamethatvalidatesthatthiswillgetdeleted.bulk_load.tmp
test.bulk_load.tmp
DROP TABLE t1, t2, t3;
DROP TABLE IF EXISTS t1, t2, t3;
Data will be ordered in descending order
CREATE TABLE t1(
pk CHAR(5),
a CHAR(30),
b CHAR(30),
PRIMARY KEY(pk) COMMENT "rev:cf1",
KEY(a)
) COLLATE 'latin1_bin';
CREATE TABLE t2(
pk CHAR(5),
a CHAR(30),
b CHAR(30),
PRIMARY KEY(pk) COMMENT "rev:cf1",
KEY(a)
) COLLATE 'latin1_bin';
CREATE TABLE t3(
pk CHAR(5),
a CHAR(30),
b CHAR(30),
PRIMARY KEY(pk) COMMENT "rev:cf1",
KEY(a)
) COLLATE 'latin1_bin' 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_bin NULL
t2 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_bin NULL
t3 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_bin 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_bin NULL
t2 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_bin NULL
t3 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_bin NULL partitioned
select count(pk) from t1;
count(pk)
5000000
select count(a) from t1;
count(a)
5000000
select count(b) from t1;
count(b)
5000000
select count(pk) from t2;
count(pk)
5000000
select count(a) from t2;
count(a)
5000000
select count(b) from t2;
count(b)
5000000
select count(pk) from t3;
count(pk)
5000000
select count(a) from t3;
count(a)
5000000
select count(b) from t3;
count(b)
5000000
longfilenamethatvalidatesthatthiswillgetdeleted.bulk_load.tmp
test.bulk_load.tmp
DROP TABLE t1, t2, t3;
DROP TABLE IF EXISTS t1, t2, t3;
Data will be ordered in descending order
CREATE TABLE t1(
pk CHAR(5),
a CHAR(30),
b CHAR(30),
PRIMARY KEY(pk) COMMENT "cf1",
KEY(a)
) COLLATE 'latin1_bin';
CREATE TABLE t2(
pk CHAR(5),
a CHAR(30),
b CHAR(30),
PRIMARY KEY(pk) COMMENT "cf1",
KEY(a)
) COLLATE 'latin1_bin';
CREATE TABLE t3(
pk CHAR(5),
a CHAR(30),
b CHAR(30),
PRIMARY KEY(pk) COMMENT "cf1",
KEY(a)
) COLLATE 'latin1_bin' 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_bin NULL
t2 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_bin NULL
t3 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_bin 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_bin NULL
t2 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_bin NULL
t3 ROCKSDB 10 Fixed 5000000 # # # # 0 NULL NULL NULL NULL latin1_bin NULL partitioned
select count(pk) from t1;
count(pk)
5000000
select count(a) from t1;
count(a)
5000000
select count(b) from t1;
count(b)
5000000
select count(pk) from t2;
count(pk)
5000000
select count(a) from t2;
count(a)
5000000
select count(b) from t2;
count(b)
5000000
select count(pk) from t3;
count(pk)
5000000
select count(a) from t3;
count(a)
5000000
select count(b) from t3;
count(b)
5000000
longfilenamethatvalidatesthatthiswillgetdeleted.bulk_load.tmp
test.bulk_load.tmp
DROP TABLE t1, t2, t3;
...@@ -5,7 +5,7 @@ connection con1; ...@@ -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: 1105 ERROR: 1938
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 ...@@ -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: 1105 ERROR: 1938
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 ...@@ -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: 1105 ERROR: 1938
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 ...@@ -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: 1105 ERROR: 1938
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: 1105 ERROR: 1938
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 ...@@ -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: 1105 ERROR: 1938
INSERT INTO r1 values (11,11,11); INSERT INTO r1 values (11,11,11);
ERROR: 0 ERROR: 0
SELECT * FROM r1; SELECT * FROM r1;
......
...@@ -125,7 +125,7 @@ id value value2 ...@@ -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: 1105 ERROR: 1935
SELECT * FROM r1; SELECT * FROM r1;
id value value2 id value value2
1 1 1 1 1 1
......
...@@ -20,7 +20,7 @@ set @tmp1=@@rocksdb_verify_row_debug_checksums; ...@@ -20,7 +20,7 @@ set @tmp1=@@rocksdb_verify_row_debug_checksums;
set rocksdb_verify_row_debug_checksums=1; set rocksdb_verify_row_debug_checksums=1;
set session debug_dbug= "+d,myrocks_simulate_bad_row_read1"; set session debug_dbug= "+d,myrocks_simulate_bad_row_read1";
select * from t1 where pk=1; select * from t1 where pk=1;
ERROR HY000: Got error 122 "Internal (unspecified) error in handler" from storage engine ROCKSDB ERROR HY000: Got error 199 'Found data corruption.' from ROCKSDB
set session debug_dbug= "-d,myrocks_simulate_bad_row_read1"; set session debug_dbug= "-d,myrocks_simulate_bad_row_read1";
set rocksdb_verify_row_debug_checksums=@tmp1; set rocksdb_verify_row_debug_checksums=@tmp1;
select * from t1 where pk=1; select * from t1 where pk=1;
...@@ -28,11 +28,11 @@ pk col1 ...@@ -28,11 +28,11 @@ pk col1
1 1 1 1
set session debug_dbug= "+d,myrocks_simulate_bad_row_read2"; set session debug_dbug= "+d,myrocks_simulate_bad_row_read2";
select * from t1 where pk=1; select * from t1 where pk=1;
ERROR HY000: Got error 122 "Internal (unspecified) error in handler" from storage engine ROCKSDB ERROR HY000: Got error 199 'Found data corruption.' from ROCKSDB
set session debug_dbug= "-d,myrocks_simulate_bad_row_read2"; set session debug_dbug= "-d,myrocks_simulate_bad_row_read2";
set session debug_dbug= "+d,myrocks_simulate_bad_row_read3"; set session debug_dbug= "+d,myrocks_simulate_bad_row_read3";
select * from t1 where pk=1; select * from t1 where pk=1;
ERROR HY000: Got error 122 "Internal (unspecified) error in handler" from storage engine ROCKSDB ERROR HY000: Got error 199 'Found data corruption.' from ROCKSDB
set session debug_dbug= "-d,myrocks_simulate_bad_row_read3"; set session debug_dbug= "-d,myrocks_simulate_bad_row_read3";
insert into t1 values(4,'0123456789'); insert into t1 values(4,'0123456789');
select * from t1; select * from t1;
...@@ -56,7 +56,7 @@ pk col1 ...@@ -56,7 +56,7 @@ pk col1
ABCD 1 ABCD 1
set session debug_dbug= "+d,myrocks_simulate_bad_pk_read1"; set session debug_dbug= "+d,myrocks_simulate_bad_pk_read1";
select * from t2; select * from t2;
ERROR HY000: Got error 122 "Internal (unspecified) error in handler" from storage engine ROCKSDB ERROR HY000: Got error 199 'Found data corruption.' from ROCKSDB
set session debug_dbug= "-d,myrocks_simulate_bad_pk_read1"; set session debug_dbug= "-d,myrocks_simulate_bad_pk_read1";
drop table t2; drop table t2;
create table t2 ( create table t2 (
...@@ -69,6 +69,6 @@ pk col1 ...@@ -69,6 +69,6 @@ pk col1
ABCD 1 ABCD 1
set session debug_dbug= "+d,myrocks_simulate_bad_pk_read1"; set session debug_dbug= "+d,myrocks_simulate_bad_pk_read1";
select * from t2; select * from t2;
ERROR HY000: Got error 122 "Internal (unspecified) error in handler" from storage engine ROCKSDB ERROR HY000: Got error 199 'Found data corruption.' from ROCKSDB
set session debug_dbug= "-d,myrocks_simulate_bad_pk_read1"; set session debug_dbug= "-d,myrocks_simulate_bad_pk_read1";
drop table t2; drop table t2;
set @prior_lock_wait_timeout = @@rocksdb_lock_wait_timeout; set @prior_deadlock_detect = @@rocksdb_deadlock_detect; set global rocksdb_deadlock_detect = on; set global rocksdb_lock_wait_timeout = 100000;;
create table t (i int primary key) engine=rocksdb;
insert into t values (1), (2), (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;
select row_lock_deadlocks from information_schema.table_statistics where
table_name = "t";
row_lock_deadlocks
1
select row_lock_deadlocks from information_schema.table_statistics where
table_name = "t";
row_lock_deadlocks
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;
select row_lock_deadlocks from information_schema.table_statistics where
table_name = "t";
row_lock_deadlocks
2
select row_lock_deadlocks from information_schema.table_statistics where
table_name = "t";
row_lock_deadlocks
2
set global rocksdb_lock_wait_timeout = @prior_lock_wait_timeout; set global rocksdb_deadlock_detect = @prior_deadlock_detect;;
drop table t;
...@@ -54,20 +54,4 @@ drop table t5; ...@@ -54,20 +54,4 @@ drop table t5;
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;
Begin filtering dropped index+ 0
Begin filtering dropped index+ 1
Begin filtering dropped index+ 1
Begin filtering dropped index+ 1
Begin filtering dropped index+ 1
Begin filtering dropped index+ 1
Begin filtering dropped index+ 1
Begin filtering dropped index+ 1
Finished filtering dropped index+ 0
Finished filtering dropped index+ 1
Finished filtering dropped index+ 1
Finished filtering dropped index+ 1
Finished filtering dropped index+ 1
Finished filtering dropped index+ 1
Finished filtering dropped index+ 1
Finished filtering dropped index+ 1
drop table t1; drop table t1;
...@@ -47,9 +47,15 @@ primary key (a,b) comment 'cf1', ...@@ -47,9 +47,15 @@ primary key (a,b) comment 'cf1',
key (b) comment 'rev:cf2' key (b) comment 'rev:cf2'
) ENGINE=RocksDB; ) ENGINE=RocksDB;
DELETE FROM t5; DELETE FROM t5;
set @@global.rocksdb_compact_cf = 'cf1';
set @@global.rocksdb_compact_cf = 'rev:cf2';
set @@global.rocksdb_compact_cf = 'default';
drop table t1; drop table t1;
drop table t2; drop table t2;
drop table t3; drop table t3;
drop table t4; drop table t4;
drop table t5; drop table t5;
set @@global.rocksdb_compact_cf = 'cf1';
set @@global.rocksdb_compact_cf = 'rev:cf2';
set @@global.rocksdb_compact_cf = 'default';
Compacted Compacted
DROP TABLE IF EXISTS t1, t2; DROP TABLE IF EXISTS t1, t2;
CREATE TABLE t1 (b INT PRIMARY KEY); CREATE TABLE t1 (b INT PRIMARY KEY);
CREATE TABLE t2 (a INT NOT NULL, b INT NOT NULL, FOREIGN KEY (b) REFERENCES t1(b)); CREATE TABLE t2 (a INT NOT NULL, b INT NOT NULL, FOREIGN KEY (b) REFERENCES t1(b));
ERROR 42000: MyRocks does not currently support foreign key constraints ERROR 42000: This version of MySQL doesn't yet support 'FOREIGN KEY for the RocksDB storage engine'
CREATE TABLE t2 (a INT NOT NULL, bforeign INT NOT NULL); CREATE TABLE t2 (a INT NOT NULL, bforeign INT NOT NULL);
DROP TABLE t2; DROP TABLE t2;
CREATE TABLE t2 (a INT NOT NULL, foreignkey INT NOT NULL); CREATE TABLE t2 (a INT NOT NULL, foreignkey INT NOT NULL);
DROP TABLE t2; DROP TABLE t2;
CREATE TABLE t2 (a INT NOT NULL, bforeign INT not null, FOREIGN KEY (bforeign) REFERENCES t1(b)); CREATE TABLE t2 (a INT NOT NULL, bforeign INT not null, FOREIGN KEY (bforeign) REFERENCES t1(b));
ERROR 42000: MyRocks does not currently support foreign key constraints ERROR 42000: This version of MySQL doesn't yet support 'FOREIGN KEY for the RocksDB storage engine'
CREATE TABLE t2 (a INT NOT NULL, b INT NOT NULL); CREATE TABLE t2 (a INT NOT NULL, b INT NOT NULL);
ALTER TABLE t2 ADD FOREIGN KEY (b) REFERENCES t1(b); ALTER TABLE t2 ADD FOREIGN KEY (b) REFERENCES t1(b);
ERROR 42000: MyRocks does not currently support foreign key constraints ERROR 42000: This version of MySQL doesn't yet support 'FOREIGN KEY for the RocksDB storage engine'
DROP TABLE t2; DROP TABLE t2;
CREATE TABLE t2 (a INT NOT NULL); CREATE TABLE t2 (a INT NOT NULL);
ALTER TABLE t2 ADD bforeign INT NOT NULL; ALTER TABLE t2 ADD bforeign INT NOT NULL;
...@@ -20,6 +20,6 @@ ALTER TABLE t2 ADD foreignkey INT NOT NULL; ...@@ -20,6 +20,6 @@ ALTER TABLE t2 ADD foreignkey INT NOT NULL;
DROP TABLE t2; DROP TABLE t2;
CREATE TABLE t2 (a INT NOT NULL); CREATE TABLE t2 (a INT NOT NULL);
ALTER TABLE t2 ADD bforeign INT NOT NULL, ADD FOREIGN KEY (bforeign) REFERENCES t1(b); ALTER TABLE t2 ADD bforeign INT NOT NULL, ADD FOREIGN KEY (bforeign) REFERENCES t1(b);
ERROR 42000: MyRocks does not currently support foreign key constraints ERROR 42000: This version of MySQL doesn't yet support 'FOREIGN KEY for the RocksDB storage engine'
DROP TABLE t2; DROP TABLE t2;
DROP TABLE t1; DROP TABLE t1;
...@@ -483,7 +483,7 @@ delete from test where value = 20; ...@@ -483,7 +483,7 @@ delete from test where value = 20;
connection con1; connection con1;
commit; commit;
connection con2; connection con2;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction ERROR 40001: Deadlock found when trying to get lock; try restarting transaction (snapshot conflict)
select variable_value-@a from information_schema.global_status where variable_name='rocksdb_snapshot_conflict_errors'; select variable_value-@a from information_schema.global_status where variable_name='rocksdb_snapshot_conflict_errors';
variable_value-@a variable_value-@a
1 1
...@@ -511,7 +511,7 @@ update test set value = 12 where id = 1; ...@@ -511,7 +511,7 @@ update test set value = 12 where id = 1;
connection con1; connection con1;
commit; commit;
connection con2; connection con2;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction ERROR 40001: Deadlock found when trying to get lock; try restarting transaction (snapshot conflict)
commit; commit;
connection con1; connection con1;
truncate table test; truncate table test;
...@@ -582,7 +582,7 @@ update test set value = 18 where id = 2; ...@@ -582,7 +582,7 @@ update test set value = 18 where id = 2;
commit; commit;
connection con1; connection con1;
delete from test where value = 20; delete from test where value = 20;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction ERROR 40001: Deadlock found when trying to get lock; try restarting transaction (snapshot conflict)
commit; commit;
connection con1; connection con1;
truncate table test; truncate table test;
......
...@@ -8,9 +8,9 @@ PRIMARY KEY (z, y) COMMENT 'zy_cf', ...@@ -8,9 +8,9 @@ PRIMARY KEY (z, y) COMMENT 'zy_cf',
KEY (x)) ENGINE = ROCKSDB; 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_t1 NULL PRIMARY 1 11 default test is_ddl_t1 NULL PRIMARY 1 13 default
test is_ddl_t1 NULL j 2 11 default test is_ddl_t1 NULL j 2 12 default
test is_ddl_t1 NULL k 2 11 kl_cf test is_ddl_t1 NULL k 2 12 kl_cf
test is_ddl_t2 NULL PRIMARY 1 11 zy_cf test is_ddl_t2 NULL PRIMARY 1 11 zy_cf
test is_ddl_t2 NULL x 2 11 default test is_ddl_t2 NULL x 2 11 default
DROP TABLE is_ddl_t1; DROP TABLE is_ddl_t1;
......
CREATE TABLE t1
(
/* fields/keys for row retrieval tests */
key1 INT,
key2 INT,
key3 INT,
key4 INT,
/* make rows much bigger then keys */
filler1 CHAR(200),
KEY(key1),
KEY(key2)
) ENGINE=ROCKSDB;
CREATE TABLE t0 AS SELECT * FROM t1;
# Printing of many insert into t0 values (....) disabled.
# Printing of many insert into t1 select .... from t0 disabled.
# Printing of many insert into t1 (...) values (....) disabled.
SELECT COUNT(*) FROM t1;
COUNT(*)
7201
SET GLOBAL rocksdb_force_flush_memtable_now = 1;
EXPLAIN UPDATE t1 SET filler1='to be deleted' WHERE key1=100 AND key2=100;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 index_merge key1,key2 key1,key2 5,5 NULL # Using intersect(key1,key2); Using where
UPDATE t1 SET filler1='to be deleted' WHERE key1=100 and key2=100;
DROP TABLE t0, t1;
create table t1 (key1 int, key2 int, key3 int, key (key1), key (key2), key(key3)) engine=rocksdb;
insert into t1 values (1, 100, 100), (1, 200, 200), (1, 300, 300);
analyze table t1;
Table Op Msg_type Msg_text
test.t1 analyze status OK
set global rocksdb_force_flush_memtable_now=1;
explain select * from t1 where key1 = 1;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ref key1 key1 5 const # NULL
explain select key1,key2 from t1 where key1 = 1 or key2 = 1;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 index_merge key1,key2 key1,key2 5,5 NULL # Using union(key1,key2); Using where
select * from t1 where key1 = 1;
key1 key2 key3
1 100 100
1 200 200
1 300 300
select key1,key2 from t1 where key1 = 1 or key2 = 1;
key1 key2
1 100
1 200
1 300
drop table t1;
...@@ -39,12 +39,10 @@ a int, ...@@ -39,12 +39,10 @@ a int,
b int, b int,
c int, c int,
d int, d int,
e int,
PRIMARY KEY (a) COMMENT "cf_a", PRIMARY KEY (a) COMMENT "cf_a",
KEY (b) COMMENT "cf_b", KEY (b) COMMENT "cf_b",
KEY (c) COMMENT "cf_c", KEY (c) COMMENT "cf_c",
KEY (d) COMMENT "$per_index_cf", KEY (d) COMMENT "rev:cf_d") ENGINE=ROCKSDB;
KEY (e) COMMENT "rev:cf_d") ENGINE=ROCKSDB;
select * from INFORMATION_SCHEMA.ROCKSDB_GLOBAL_INFO where TYPE = 'CF_FLAGS'; select * from INFORMATION_SCHEMA.ROCKSDB_GLOBAL_INFO where TYPE = 'CF_FLAGS';
TYPE NAME VALUE TYPE NAME VALUE
CF_FLAGS 0 default [0] CF_FLAGS 0 default [0]
...@@ -52,8 +50,7 @@ CF_FLAGS 1 __system__ [0] ...@@ -52,8 +50,7 @@ CF_FLAGS 1 __system__ [0]
CF_FLAGS 2 cf_a [0] CF_FLAGS 2 cf_a [0]
CF_FLAGS 3 cf_b [0] CF_FLAGS 3 cf_b [0]
CF_FLAGS 4 cf_c [0] CF_FLAGS 4 cf_c [0]
CF_FLAGS 5 test.t2.d [2] CF_FLAGS 5 rev:cf_d [1]
CF_FLAGS 6 rev:cf_d [1]
CREATE TABLE t3 (a INT, PRIMARY KEY (a)) ENGINE=ROCKSDB; CREATE TABLE t3 (a INT, PRIMARY KEY (a)) ENGINE=ROCKSDB;
insert into t3 (a) values (1), (2), (3); insert into t3 (a) values (1), (2), (3);
SET @ORIG_ROCKSDB_PAUSE_BACKGROUND_WORK = @@GLOBAL.ROCKSDB_PAUSE_BACKGROUND_WORK; SET @ORIG_ROCKSDB_PAUSE_BACKGROUND_WORK = @@GLOBAL.ROCKSDB_PAUSE_BACKGROUND_WORK;
...@@ -69,7 +66,7 @@ SHOW GLOBAL VARIABLES LIKE 'ROCKSDB_PAUSE_BACKGROUND_WORK'; ...@@ -69,7 +66,7 @@ SHOW GLOBAL VARIABLES LIKE 'ROCKSDB_PAUSE_BACKGROUND_WORK';
Variable_name Value Variable_name Value
rocksdb_pause_background_work ON rocksdb_pause_background_work ON
DROP TABLE t3; DROP TABLE t3;
cf_id:0,index_id:268 cf_id:0,index_id:267
SET GLOBAL ROCKSDB_PAUSE_BACKGROUND_WORK=0; SET GLOBAL ROCKSDB_PAUSE_BACKGROUND_WORK=0;
SHOW GLOBAL VARIABLES LIKE 'ROCKSDB_PAUSE_BACKGROUND_WORK'; SHOW GLOBAL VARIABLES LIKE 'ROCKSDB_PAUSE_BACKGROUND_WORK';
Variable_name Value Variable_name Value
......
...@@ -32,6 +32,6 @@ update t1 set col2=123456 where pk=0; ...@@ -32,6 +32,6 @@ update t1 set col2=123456 where pk=0;
commit; commit;
connection default; connection default;
update t1 set col2=col2+1 where col1 < 10 limit 5; update t1 set col2=col2+1 where col1 < 10 limit 5;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction ERROR 40001: Deadlock found when trying to get lock; try restarting transaction (snapshot conflict)
disconnect con2; disconnect con2;
drop table t1, ten, one_k; drop table t1, ten, one_k;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
id INT,
val1 INT,
val2 INT,
PRIMARY KEY (id)
) ENGINE=rocksdb;
INSERT INTO t1 VALUES(1,1,1),(2,1,2);
SELECT * FROM t1;
id val1 val2
1 1 1
2 1 2
UPDATE t1 SET val1=2 WHERE id=2;
SELECT * FROM t1;
id val1 val2
1 1 1
2 2 2
SHOW ENGINE rocksdb TRANSACTION STATUS;
Type Name Status
SNAPSHOTS rocksdb
============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================
---------
SNAPSHOTS
---------
LIST OF SNAPSHOTS FOR EACH SESSION:
-----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
=========================================
SET AUTOCOMMIT=0;
START TRANSACTION;
INSERT INTO t1 VALUES(20,1,1),(30,30,30);
SELECT * FROM t1;
id val1 val2
1 1 1
2 2 2
20 1 1
30 30 30
UPDATE t1 SET val1=20, val2=20 WHERE id=20;
SELECT * FROM t1;
id val1 val2
1 1 1
2 2 2
20 20 20
30 30 30
DELETE FROM t1 WHERE id=30;
SHOW ENGINE rocksdb TRANSACTION STATUS;
Type Name Status
SNAPSHOTS rocksdb
============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================
---------
SNAPSHOTS
---------
LIST OF SNAPSHOTS FOR EACH SESSION:
---SNAPSHOT, ACTIVE NUM sec
MySQL thread id TID, OS thread handle PTR, query id QID localhost root ACTION
SHOW ENGINE rocksdb TRANSACTION STATUS
lock count 8, write count 4
insert count 2, update count 1, delete count 1
-----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
=========================================
ROLLBACK;
SHOW ENGINE rocksdb TRANSACTION STATUS;
Type Name Status
SNAPSHOTS rocksdb
============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================
---------
SNAPSHOTS
---------
LIST OF SNAPSHOTS FOR EACH SESSION:
-----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
=========================================
START TRANSACTION;
INSERT INTO t1 VALUES(40,40,40);
SHOW ENGINE rocksdb TRANSACTION STATUS;
Type Name Status
SNAPSHOTS rocksdb
============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================
---------
SNAPSHOTS
---------
LIST OF SNAPSHOTS FOR EACH SESSION:
---SNAPSHOT, ACTIVE NUM sec
MySQL thread id TID, OS thread handle PTR, query id QID localhost root ACTION
SHOW ENGINE rocksdb TRANSACTION STATUS
lock count 2, write count 1
insert count 1, update count 0, delete count 0
-----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
=========================================
COMMIT;
SHOW ENGINE rocksdb TRANSACTION STATUS;
Type Name Status
SNAPSHOTS rocksdb
============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================
---------
SNAPSHOTS
---------
LIST OF SNAPSHOTS FOR EACH SESSION:
-----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
=========================================
SET AUTOCOMMIT=1;
DROP TABLE t1;
DROP TABLE IF EXISTS t2;
CREATE TABLE t2 (
id1 INT,
id2 INT,
value INT,
PRIMARY KEY (id1),
KEY (id2)
) ENGINE=rocksdb;
SET AUTOCOMMIT=0;
START TRANSACTION;
INSERT INTO t2 VALUES(1,2,0),(10,20,30);
UPDATE t2 SET value=3 WHERE id2=2;
DELETE FROM t2 WHERE id1=10;
SHOW ENGINE rocksdb TRANSACTION STATUS;
Type Name Status
SNAPSHOTS rocksdb
============================================================
TIMESTAMP ROCKSDB TRANSACTION MONITOR OUTPUT
============================================================
---------
SNAPSHOTS
---------
LIST OF SNAPSHOTS FOR EACH SESSION:
---SNAPSHOT, ACTIVE NUM sec
MySQL thread id TID, OS thread handle PTR, query id QID localhost root ACTION
SHOW ENGINE rocksdb TRANSACTION STATUS
lock count 9, write count 7
insert count 2, update count 1, delete count 1
-----------------------------------------
END OF ROCKSDB TRANSACTION MONITOR OUTPUT
=========================================
ROLLBACK;
SET AUTOCOMMIT=1;
DROP TABLE t2;
CREATE TABLE t1 (pk BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT);
INSERT INTO t1 VALUES (5);
SHOW TABLE STATUS LIKE 't1';
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 # Fixed 1 # # # # # 6 NULL NULL NULL latin1_swedish_ci NULL
INSERT INTO t1 VALUES ('538647864786478647864');
Warnings:
Warning 1264 Out of range value for column 'pk' at row 1
SHOW TABLE STATUS LIKE 't1';
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 # Fixed 2 # # # # # 9223372036854775807 NULL NULL NULL latin1_swedish_ci NULL
INSERT INTO t1 VALUES ();
ERROR 23000: Duplicate entry '9223372036854775807' for key 'PRIMARY'
SELECT * FROM t1;
pk
5
9223372036854775807
SHOW TABLE STATUS LIKE 't1';
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 # Fixed 2 # # # # # 9223372036854775807 NULL NULL NULL latin1_swedish_ci NULL
DROP TABLE t1;
create table t (a int primary key) engine=rocksdb;
begin;
insert into t values (0);
set @@rocksdb_lock_wait_timeout=1;
select ROW_LOCK_WAIT_TIMEOUTS from information_schema.table_statistics where table_name="t";
ROW_LOCK_WAIT_TIMEOUTS
0
begin;
set @@rocksdb_lock_wait_timeout=1;
begin;
insert into t values(0);
ERROR HY000: Lock wait timeout exceeded; try restarting transaction: Timeout on index: test.t.PRIMARY
select ROW_LOCK_WAIT_TIMEOUTS from information_schema.table_statistics where table_name="t";
ROW_LOCK_WAIT_TIMEOUTS
1
select ROW_LOCK_WAIT_TIMEOUTS from information_schema.table_statistics where table_name="t";
ROW_LOCK_WAIT_TIMEOUTS
1
insert into t values(0);
ERROR HY000: Lock wait timeout exceeded; try restarting transaction: Timeout on index: test.t.PRIMARY
select ROW_LOCK_WAIT_TIMEOUTS from information_schema.table_statistics where table_name="t";
ROW_LOCK_WAIT_TIMEOUTS
2
select ROW_LOCK_WAIT_TIMEOUTS from information_schema.table_statistics where table_name="t";
ROW_LOCK_WAIT_TIMEOUTS
2
drop table t;
This diff is collapsed.
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (id1 BIGINT, id2 BIGINT, id3 BIGINT, id4 BIGINT, PRIMARY KEY (id1, id2, id3, id4) comment 'cf1') ENGINE=rocksdb collate latin1_bin;
set global rocksdb_force_flush_memtable_now = 1;
Original Prefix Extractor:
SELECT * FROM information_schema.rocksdb_cf_options WHERE option_type like '%prefix_extractor%';
CF_NAME OPTION_TYPE VALUE
__system__ PREFIX_EXTRACTOR rocksdb.CappedPrefix.24
cf1 PREFIX_EXTRACTOR rocksdb.CappedPrefix.24
default PREFIX_EXTRACTOR rocksdb.CappedPrefix.24
select variable_value into @u from information_schema.global_status where variable_name='rocksdb_bloom_filter_prefix_checked';
SELECT COUNT(*) FROM t1 WHERE id1=1 AND id2=1 AND id3=1;
COUNT(*)
1
select variable_value-@u from information_schema.global_status where variable_name='rocksdb_bloom_filter_prefix_checked';
variable_value-@u
1
Prefix Extractor (after override_cf_options set, should not be changed):
SELECT * FROM information_schema.rocksdb_cf_options WHERE option_type like '%prefix_extractor%';
CF_NAME OPTION_TYPE VALUE
__system__ PREFIX_EXTRACTOR rocksdb.CappedPrefix.24
cf1 PREFIX_EXTRACTOR rocksdb.CappedPrefix.24
default PREFIX_EXTRACTOR rocksdb.CappedPrefix.24
Restarting with new Prefix Extractor...
Changed Prefix Extractor (after restart):
SELECT * FROM information_schema.rocksdb_cf_options WHERE option_type like '%prefix_extractor%';
CF_NAME OPTION_TYPE VALUE
__system__ PREFIX_EXTRACTOR rocksdb.CappedPrefix.24
cf1 PREFIX_EXTRACTOR rocksdb.CappedPrefix.26
default PREFIX_EXTRACTOR rocksdb.CappedPrefix.24
select variable_value into @u from information_schema.global_status where variable_name='rocksdb_bloom_filter_prefix_checked';
SELECT COUNT(*) FROM t1 WHERE id1=1 AND id2=1 AND id3=1;
COUNT(*)
1
select variable_value-@u from information_schema.global_status where variable_name='rocksdb_bloom_filter_prefix_checked';
variable_value-@u
0
set global rocksdb_force_flush_memtable_now = 1;
select variable_value into @u from information_schema.global_status where variable_name='rocksdb_bloom_filter_prefix_checked';
SELECT COUNT(*) FROM t1 WHERE id1=1 AND id2=1 AND id3=1;
COUNT(*)
1
select variable_value-@u from information_schema.global_status where variable_name='rocksdb_bloom_filter_prefix_checked';
variable_value-@u
1
SELECT COUNT(*) FROM information_schema.rocksdb_index_file_map WHERE COLUMN_FAMILY != 1;
COUNT(*)
2
UPDATE t1 SET id1=1,id2 = 30,id3 = 30 WHERE id4 >= 0 AND id4 <=10;
set global rocksdb_force_flush_memtable_now = 1;
SELECT COUNT(*) FROM information_schema.rocksdb_index_file_map WHERE COLUMN_FAMILY != 1;
COUNT(*)
3
select variable_value into @u from information_schema.global_status where variable_name='rocksdb_bloom_filter_prefix_checked';
SELECT COUNT(*) FROM t1 WHERE id1=1 AND id2=1 AND id3=1;
COUNT(*)
0
select variable_value-@u from information_schema.global_status where variable_name='rocksdb_bloom_filter_prefix_checked';
variable_value-@u
2
set global rocksdb_compact_cf='cf1';
select variable_value into @u from information_schema.global_status where variable_name='rocksdb_bloom_filter_prefix_checked';
SELECT COUNT(*) FROM t1 WHERE id1=1 AND id2=30 AND id3=30;
COUNT(*)
11
select variable_value-@u from information_schema.global_status where variable_name='rocksdb_bloom_filter_prefix_checked';
variable_value-@u
1
DROP TABLE t1;
...@@ -875,8 +875,6 @@ rocksdb_advise_random_on_open ON ...@@ -875,8 +875,6 @@ rocksdb_advise_random_on_open ON
rocksdb_allow_concurrent_memtable_write OFF rocksdb_allow_concurrent_memtable_write OFF
rocksdb_allow_mmap_reads OFF rocksdb_allow_mmap_reads OFF
rocksdb_allow_mmap_writes OFF rocksdb_allow_mmap_writes OFF
rocksdb_background_sync OFF
rocksdb_base_background_compactions 1
rocksdb_blind_delete_primary_key OFF rocksdb_blind_delete_primary_key OFF
rocksdb_block_cache_size 536870912 rocksdb_block_cache_size 536870912
rocksdb_block_restart_interval 16 rocksdb_block_restart_interval 16
...@@ -902,22 +900,29 @@ rocksdb_datadir ./.rocksdb ...@@ -902,22 +900,29 @@ rocksdb_datadir ./.rocksdb
rocksdb_db_write_buffer_size 0 rocksdb_db_write_buffer_size 0
rocksdb_deadlock_detect OFF rocksdb_deadlock_detect OFF
rocksdb_debug_optimizer_no_zero_cardinality ON rocksdb_debug_optimizer_no_zero_cardinality ON
rocksdb_debug_ttl_read_filter_ts 0
rocksdb_debug_ttl_rec_ts 0
rocksdb_debug_ttl_snapshot_ts 0
rocksdb_default_cf_options rocksdb_default_cf_options
rocksdb_delayed_write_rate 16777216 rocksdb_delayed_write_rate 0
rocksdb_delete_obsolete_files_period_micros 21600000000 rocksdb_delete_obsolete_files_period_micros 21600000000
rocksdb_enable_2pc ON rocksdb_enable_2pc ON
rocksdb_enable_bulk_load_api ON rocksdb_enable_bulk_load_api ON
rocksdb_enable_thread_tracking OFF rocksdb_enable_thread_tracking ON
rocksdb_enable_ttl ON
rocksdb_enable_ttl_read_filtering ON
rocksdb_enable_write_thread_adaptive_yield OFF rocksdb_enable_write_thread_adaptive_yield OFF
rocksdb_error_if_exists OFF rocksdb_error_if_exists OFF
rocksdb_flush_log_at_trx_commit 0 rocksdb_flush_log_at_trx_commit 0
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_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
rocksdb_hash_index_allow_collision ON rocksdb_hash_index_allow_collision ON
rocksdb_index_type kBinarySearch rocksdb_index_type kBinarySearch
rocksdb_info_log_level error_level rocksdb_info_log_level error_level
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_lock_scanned_rows OFF rocksdb_lock_scanned_rows OFF
...@@ -925,8 +930,7 @@ rocksdb_lock_wait_timeout 1 ...@@ -925,8 +930,7 @@ 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_master_skip_tx_api OFF rocksdb_master_skip_tx_api OFF
rocksdb_max_background_compactions 1 rocksdb_max_background_jobs 2
rocksdb_max_background_flushes 1
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
...@@ -948,11 +952,13 @@ rocksdb_print_snapshot_conflict_queries OFF ...@@ -948,11 +952,13 @@ rocksdb_print_snapshot_conflict_queries OFF
rocksdb_rate_limiter_bytes_per_sec 0 rocksdb_rate_limiter_bytes_per_sec 0
rocksdb_read_free_rpl_tables rocksdb_read_free_rpl_tables
rocksdb_records_in_range 50 rocksdb_records_in_range 50
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_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 .*
rocksdb_sst_mgr_rate_bytes_per_sec 0
rocksdb_stats_dump_period_sec 600 rocksdb_stats_dump_period_sec 600
rocksdb_store_row_debug_checksums OFF rocksdb_store_row_debug_checksums OFF
rocksdb_strict_collation_check OFF rocksdb_strict_collation_check OFF
...@@ -962,9 +968,10 @@ rocksdb_table_stats_sampling_pct 10 ...@@ -962,9 +968,10 @@ rocksdb_table_stats_sampling_pct 10
rocksdb_tmpdir rocksdb_tmpdir
rocksdb_trace_sst_api OFF rocksdb_trace_sst_api OFF
rocksdb_unsafe_for_binlog OFF rocksdb_unsafe_for_binlog OFF
rocksdb_update_cf_options
rocksdb_use_adaptive_mutex OFF rocksdb_use_adaptive_mutex OFF
rocksdb_use_direct_io_for_flush_and_compaction OFF
rocksdb_use_direct_reads OFF rocksdb_use_direct_reads OFF
rocksdb_use_direct_writes OFF
rocksdb_use_fsync OFF rocksdb_use_fsync OFF
rocksdb_validate_tables 1 rocksdb_validate_tables 1
rocksdb_verify_row_debug_checksums OFF rocksdb_verify_row_debug_checksums OFF
...@@ -974,6 +981,7 @@ rocksdb_wal_recovery_mode 1 ...@@ -974,6 +981,7 @@ rocksdb_wal_recovery_mode 1
rocksdb_wal_size_limit_mb 0 rocksdb_wal_size_limit_mb 0
rocksdb_wal_ttl_seconds 0 rocksdb_wal_ttl_seconds 0
rocksdb_whole_key_filtering ON rocksdb_whole_key_filtering ON
rocksdb_write_batch_max_bytes 0
rocksdb_write_disable_wal OFF rocksdb_write_disable_wal OFF
rocksdb_write_ignore_missing_column_families OFF rocksdb_write_ignore_missing_column_families OFF
create table t47 (pk int primary key, col1 varchar(12)) engine=rocksdb; create table t47 (pk int primary key, col1 varchar(12)) engine=rocksdb;
...@@ -1332,7 +1340,7 @@ insert into t1 select (@a:=@a+1), 1234 from information_schema.session_variables ...@@ -1332,7 +1340,7 @@ insert into t1 select (@a:=@a+1), 1234 from information_schema.session_variables
set @tmp1= @@rocksdb_max_row_locks; set @tmp1= @@rocksdb_max_row_locks;
set rocksdb_max_row_locks= 20; set rocksdb_max_row_locks= 20;
update t1 set a=a+10; update t1 set a=a+10;
ERROR HY000: Got error 197 'Number of locks held reached @@rocksdb_max_row_locks.' from ROCKSDB ERROR HY000: Status error 10 received from RocksDB: Operation aborted: Failed to acquire lock due to max_num_locks limit
DROP TABLE t1; DROP TABLE t1;
# #
# Test AUTO_INCREMENT behavior problem, # Test AUTO_INCREMENT behavior problem,
...@@ -1443,15 +1451,16 @@ Rocksdb_rows_inserted # ...@@ -1443,15 +1451,16 @@ Rocksdb_rows_inserted #
Rocksdb_rows_read # Rocksdb_rows_read #
Rocksdb_rows_updated # Rocksdb_rows_updated #
Rocksdb_rows_deleted_blind # Rocksdb_rows_deleted_blind #
rocksdb_rows_expired #
Rocksdb_system_rows_deleted # Rocksdb_system_rows_deleted #
Rocksdb_system_rows_inserted # Rocksdb_system_rows_inserted #
Rocksdb_system_rows_read # Rocksdb_system_rows_read #
Rocksdb_system_rows_updated # Rocksdb_system_rows_updated #
Rocksdb_block_cache_add # Rocksdb_block_cache_add #
Rocksdb_block_cache_data_hit # rocksdb_memtable_total #
Rocksdb_block_cache_data_miss # rocksdb_memtable_unflushed #
Rocksdb_block_cache_filter_hit # rocksdb_queries_point #
Rocksdb_block_cache_filter_miss # rocksdb_queries_range #
Rocksdb_block_cache_hit # Rocksdb_block_cache_hit #
Rocksdb_block_cache_index_hit # Rocksdb_block_cache_index_hit #
Rocksdb_block_cache_index_miss # Rocksdb_block_cache_index_miss #
...@@ -1477,9 +1486,6 @@ Rocksdb_memtable_hit # ...@@ -1477,9 +1486,6 @@ Rocksdb_memtable_hit #
Rocksdb_memtable_miss # Rocksdb_memtable_miss #
Rocksdb_no_file_closes # Rocksdb_no_file_closes #
Rocksdb_no_file_errors # Rocksdb_no_file_errors #
Rocksdb_no_file_opens #
Rocksdb_num_iterators #
Rocksdb_number_block_not_compressed #
Rocksdb_number_deletes_filtered # Rocksdb_number_deletes_filtered #
Rocksdb_number_keys_read # Rocksdb_number_keys_read #
Rocksdb_number_keys_updated # Rocksdb_number_keys_updated #
...@@ -1507,6 +1513,7 @@ Rocksdb_write_other # ...@@ -1507,6 +1513,7 @@ Rocksdb_write_other #
Rocksdb_write_self # Rocksdb_write_self #
Rocksdb_write_timedout # Rocksdb_write_timedout #
Rocksdb_write_wal # Rocksdb_write_wal #
rocksdb_stall_micros #
select VARIABLE_NAME from INFORMATION_SCHEMA.global_status where VARIABLE_NAME LIKE 'rocksdb%'; select VARIABLE_NAME from INFORMATION_SCHEMA.global_status where VARIABLE_NAME LIKE 'rocksdb%';
VARIABLE_NAME VARIABLE_NAME
ROCKSDB_ROWS_DELETED ROCKSDB_ROWS_DELETED
...@@ -1514,10 +1521,15 @@ ROCKSDB_ROWS_INSERTED ...@@ -1514,10 +1521,15 @@ ROCKSDB_ROWS_INSERTED
ROCKSDB_ROWS_READ ROCKSDB_ROWS_READ
ROCKSDB_ROWS_UPDATED ROCKSDB_ROWS_UPDATED
ROCKSDB_ROWS_DELETED_BLIND ROCKSDB_ROWS_DELETED_BLIND
ROCKSDB_ROWS_EXPIRED
ROCKSDB_SYSTEM_ROWS_DELETED ROCKSDB_SYSTEM_ROWS_DELETED
ROCKSDB_SYSTEM_ROWS_INSERTED ROCKSDB_SYSTEM_ROWS_INSERTED
ROCKSDB_SYSTEM_ROWS_READ ROCKSDB_SYSTEM_ROWS_READ
ROCKSDB_SYSTEM_ROWS_UPDATED ROCKSDB_SYSTEM_ROWS_UPDATED
ROCKSDB_MEMTABLE_TOTAL
ROCKSDB_MEMTABLE_UNFLUSHED
ROCKSDB_QUERIES_POINT
ROCKSDB_QUERIES_RANGE
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
...@@ -1541,9 +1553,6 @@ ROCKSDB_COMPACTION_KEY_DROP_OBSOLETE ...@@ -1541,9 +1553,6 @@ ROCKSDB_COMPACTION_KEY_DROP_OBSOLETE
ROCKSDB_COMPACTION_KEY_DROP_USER ROCKSDB_COMPACTION_KEY_DROP_USER
ROCKSDB_FLUSH_WRITE_BYTES ROCKSDB_FLUSH_WRITE_BYTES
ROCKSDB_GETUPDATESSINCE_CALLS ROCKSDB_GETUPDATESSINCE_CALLS
ROCKSDB_L0_NUM_FILES_STALL_MICROS
ROCKSDB_L0_SLOWDOWN_MICROS
ROCKSDB_MEMTABLE_COMPACTION_MICROS
ROCKSDB_MEMTABLE_HIT ROCKSDB_MEMTABLE_HIT
ROCKSDB_MEMTABLE_MISS ROCKSDB_MEMTABLE_MISS
ROCKSDB_NO_FILE_CLOSES ROCKSDB_NO_FILE_CLOSES
...@@ -1571,6 +1580,7 @@ ROCKSDB_NUMBER_SUPERVERSION_CLEANUPS ...@@ -1571,6 +1580,7 @@ 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_MICROS
ROCKSDB_WAL_BYTES ROCKSDB_WAL_BYTES
ROCKSDB_WAL_GROUP_SYNCS ROCKSDB_WAL_GROUP_SYNCS
ROCKSDB_WAL_SYNCED ROCKSDB_WAL_SYNCED
...@@ -1587,10 +1597,15 @@ ROCKSDB_ROWS_INSERTED ...@@ -1587,10 +1597,15 @@ ROCKSDB_ROWS_INSERTED
ROCKSDB_ROWS_READ ROCKSDB_ROWS_READ
ROCKSDB_ROWS_UPDATED ROCKSDB_ROWS_UPDATED
ROCKSDB_ROWS_DELETED_BLIND ROCKSDB_ROWS_DELETED_BLIND
ROCKSDB_ROWS_EXPIRED
ROCKSDB_SYSTEM_ROWS_DELETED ROCKSDB_SYSTEM_ROWS_DELETED
ROCKSDB_SYSTEM_ROWS_INSERTED ROCKSDB_SYSTEM_ROWS_INSERTED
ROCKSDB_SYSTEM_ROWS_READ ROCKSDB_SYSTEM_ROWS_READ
ROCKSDB_SYSTEM_ROWS_UPDATED ROCKSDB_SYSTEM_ROWS_UPDATED
ROCKSDB_MEMTABLE_TOTAL
ROCKSDB_MEMTABLE_UNFLUSHED
ROCKSDB_QUERIES_POINT
ROCKSDB_QUERIES_RANGE
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
...@@ -1614,9 +1629,6 @@ ROCKSDB_COMPACTION_KEY_DROP_OBSOLETE ...@@ -1614,9 +1629,6 @@ ROCKSDB_COMPACTION_KEY_DROP_OBSOLETE
ROCKSDB_COMPACTION_KEY_DROP_USER ROCKSDB_COMPACTION_KEY_DROP_USER
ROCKSDB_FLUSH_WRITE_BYTES ROCKSDB_FLUSH_WRITE_BYTES
ROCKSDB_GETUPDATESSINCE_CALLS ROCKSDB_GETUPDATESSINCE_CALLS
ROCKSDB_L0_NUM_FILES_STALL_MICROS
ROCKSDB_L0_SLOWDOWN_MICROS
ROCKSDB_MEMTABLE_COMPACTION_MICROS
ROCKSDB_MEMTABLE_HIT ROCKSDB_MEMTABLE_HIT
ROCKSDB_MEMTABLE_MISS ROCKSDB_MEMTABLE_MISS
ROCKSDB_NO_FILE_CLOSES ROCKSDB_NO_FILE_CLOSES
...@@ -1644,6 +1656,7 @@ ROCKSDB_NUMBER_SUPERVERSION_CLEANUPS ...@@ -1644,6 +1656,7 @@ 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_MICROS
ROCKSDB_WAL_BYTES ROCKSDB_WAL_BYTES
ROCKSDB_WAL_GROUP_SYNCS ROCKSDB_WAL_GROUP_SYNCS
ROCKSDB_WAL_SYNCED ROCKSDB_WAL_SYNCED
...@@ -1752,6 +1765,7 @@ INSERT INTO t1 SET id=123, blob_col='' ON DUPLICATE KEY UPDATE bl ...@@ -1752,6 +1765,7 @@ INSERT INTO t1 SET id=123, blob_col='' ON DUPLICATE KEY UPDATE bl
DROP TABLE t1; DROP TABLE t1;
# #
# Issue #17: Automatic per-index column families # Issue #17: Automatic per-index column families
# (Now deprecated)
# #
create table t1 ( create table t1 (
id int not null, id int not null,
...@@ -1759,40 +1773,7 @@ key1 int, ...@@ -1759,40 +1773,7 @@ key1 int,
PRIMARY KEY (id), PRIMARY KEY (id),
index (key1) comment '$per_index_cf' index (key1) comment '$per_index_cf'
) engine=rocksdb; ) engine=rocksdb;
#Same CF ids with different CF flags ERROR HY000: The per-index column family option has been deprecated
create table t1_err (
id int not null,
key1 int,
PRIMARY KEY (id),
index (key1) comment 'test.t1.key1'
) engine=rocksdb;
ERROR HY000: Column family ('test.t1.key1') flag (0) is different from an existing flag (2). Assign a new CF flag, or do not change existing CF flag.
create table t1_err (
id int not null,
key1 int,
PRIMARY KEY (id),
index (key1) comment 'test.t1.key2'
) engine=rocksdb;
drop table t1_err;
# Unfortunately there is no way to check which column family everything goes to
insert into t1 values (1,1);
select * from t1;
id key1
1 1
# Check that ALTER and RENAME are disallowed
alter table t1 add col2 int;
ERROR 42000: This version of MariaDB doesn't yet support 'ALTER TABLE on table with per-index CF'
rename table t1 to t2;
ERROR 42000: This version of MariaDB doesn't yet support 'ALTER TABLE on table with per-index CF'
drop table t1;
# Check detection of typos in $per_index_cf
create table t1 (
id int not null,
key1 int,
PRIMARY KEY (id),
index (key1) comment '$per_idnex_cf'
)engine=rocksdb;
ERROR 42000: This version of MariaDB doesn't yet support 'column family name looks like a typo of $per_index_cf.'
# #
# Issue #22: SELECT ... FOR UPDATE takes a long time # Issue #22: SELECT ... FOR UPDATE takes a long time
# #
...@@ -2268,6 +2249,7 @@ INSERT INTO t1 VALUES(1, 2); ...@@ -2268,6 +2249,7 @@ INSERT INTO t1 VALUES(1, 2);
INSERT INTO t1 VALUES(1, 3); INSERT INTO t1 VALUES(1, 3);
SELECT * FROM t1; SELECT * FROM t1;
id value id value
1 3
REPLACE INTO t1 VALUES(4, 4); REPLACE INTO t1 VALUES(4, 4);
ERROR HY000: When unique checking is disabled in MyRocks, INSERT,UPDATE,LOAD statements with clauses that update or replace the key (i.e. INSERT ON DUPLICATE KEY UPDATE, REPLACE) are not allowed. Query: REPLACE INTO t1 VALUES(4, 4) ERROR HY000: When unique checking is disabled in MyRocks, INSERT,UPDATE,LOAD statements with clauses that update or replace the key (i.e. INSERT ON DUPLICATE KEY UPDATE, REPLACE) are not allowed. Query: REPLACE INTO t1 VALUES(4, 4)
INSERT INTO t1 VALUES(5, 5) ON DUPLICATE KEY UPDATE value=value+1; INSERT INTO t1 VALUES(5, 5) ON DUPLICATE KEY UPDATE value=value+1;
......
...@@ -348,6 +348,9 @@ ALTER TABLE t2 ADD KEY (`col3`, `col4`) COMMENT 'custom_p5_cfname=another_cf_for ...@@ -348,6 +348,9 @@ ALTER TABLE t2 ADD KEY (`col3`, `col4`) COMMENT 'custom_p5_cfname=another_cf_for
SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='another_cf_for_p5'; SELECT DISTINCT(cf_name) FROM information_schema.rocksdb_cfstats WHERE cf_name='another_cf_for_p5';
cf_name cf_name
another_cf_for_p5 another_cf_for_p5
ANALYZE TABLE t2;
Table Op Msg_type Msg_text
test.t2 analyze status OK
EXPLAIN PARTITIONS SELECT * FROM t2 WHERE col3 = 0x4 AND col2 = 0x34567; EXPLAIN PARTITIONS SELECT * FROM t2 WHERE col3 = 0x4 AND col2 = 0x34567;
id select_type table partitions type possible_keys key key_len ref rows Extra id select_type table partitions type possible_keys key key_len ref rows Extra
1 SIMPLE t2 custom_p2 ref col3 col3 258 const 1 Using where 1 SIMPLE t2 custom_p2 ref col3 col3 258 const 1 Using where
...@@ -407,3 +410,14 @@ cf_name ...@@ -407,3 +410,14 @@ cf_name
notsharedcf notsharedcf
DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t2; DROP TABLE IF EXISTS t2;
CREATE TABLE t1 (
a INT NOT NULL,
PRIMARY KEY (a) COMMENT 'p1_cfname=foo;'
) ENGINE=ROCKSDB
PARTITION BY LIST COLUMNS(a)
(PARTITION p1 VALUES IN (1) ENGINE = ROCKSDB);
INSERT INTO t1 values (1);
TRUNCATE TABLE t1;
SELECT * FROM t1;
a
DROP TABLE t1;
...@@ -57,7 +57,7 @@ UPDATE t1 SET value=30 WHERE id=3; ...@@ -57,7 +57,7 @@ UPDATE t1 SET value=30 WHERE id=3;
COMMIT; COMMIT;
connection con1; connection con1;
SELECT * FROM t1 WHERE id=3 FOR UPDATE; SELECT * FROM t1 WHERE id=3 FOR UPDATE;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction ERROR 40001: Deadlock found when trying to get lock; try restarting transaction (snapshot conflict)
ROLLBACK; ROLLBACK;
disconnect con1; disconnect con1;
connection default; connection default;
......
...@@ -94,7 +94,7 @@ drop table t1, t2; ...@@ -94,7 +94,7 @@ drop table t1, t2;
CREATE TABLE t1 (c1 INT NOT NULL, c2 CHAR(5)) PARTITION BY HASH(c1) PARTITIONS 4; CREATE TABLE t1 (c1 INT NOT NULL, c2 CHAR(5)) PARTITION BY HASH(c1) PARTITIONS 4;
INSERT INTO t1 VALUES(1,'a'); INSERT INTO t1 VALUES(1,'a');
RENAME TABLE t1 TO db3.t3; RENAME TABLE t1 TO db3.t3;
ERROR HY000: Error on rename of './test/t1' to './db3/t3' (errno: 122 "Internal (unspecified) error in handler") ERROR HY000: Error on rename of './test/t1' to './db3/t3' (errno: -1 - Unknown error -1)
SELECT * FROM t1; SELECT * FROM t1;
c1 c2 c1 c2
1 a 1 a
......
call mtr.add_suppression("Did not write failed "); call mtr.add_suppression("Did not write failed ");
call mtr.add_suppression("Can't open and lock privilege tables"); call mtr.add_suppression("Can't open and lock privilege tables");
call mtr.add_suppression("Attempt to delete the trigger file");
SET @ORIG_EVENT_SCHEDULER = @@EVENT_SCHEDULER; SET @ORIG_EVENT_SCHEDULER = @@EVENT_SCHEDULER;
CREATE TABLE mysql.user_temp LIKE mysql.user; CREATE TABLE mysql.user_temp LIKE mysql.user;
INSERT mysql.user_temp SELECT * FROM mysql.user; INSERT mysql.user_temp SELECT * FROM mysql.user;
......
...@@ -63,4 +63,24 @@ true ...@@ -63,4 +63,24 @@ true
select case when variable_value-@d < 10 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_number_sst_entry_delete'; select case when variable_value-@d < 10 then 'true' else 'false' end from information_schema.global_status where variable_name='rocksdb_number_sst_entry_delete';
case when variable_value-@d < 10 then 'true' else 'false' end case when variable_value-@d < 10 then 'true' else 'false' end
true true
DROP TABLE t1, t2, t3, t4, t5; CREATE TABLE t6 (
pk VARCHAR(64) COLLATE latin1_swedish_ci PRIMARY KEY
) ENGINE=RocksDB;
INSERT INTO t6 VALUES ('a');
SET GLOBAL rocksdb_force_flush_memtable_now=1;
SELECT * FROM t6;
pk
a
UPDATE t6 SET pk='A' WHERE pk='a';
SELECT * FROM t6;
pk
A
DELETE FROM t6 where pk='A';
SELECT should return nothing;
SELECT * FROM t6;
pk
SET GLOBAL rocksdb_force_flush_memtable_now=1;
SELECT should return nothing;
SELECT * FROM t6;
pk
DROP TABLE t1, t2, t3, t4, t5, t6;
This diff is collapsed.
This diff is collapsed.
--rocksdb_default_cf_options=write_buffer_size=256k;block_based_table_factory={filter_policy=bloomfilter:10:false;whole_key_filtering=0;};prefix_extractor=capped:20 --rocksdb_default_cf_options=write_buffer_size=256k;block_based_table_factory={filter_policy=bloomfilter:10:false;whole_key_filtering=0;};prefix_extractor=capped:20
--rocksdb_override_cf_options=cf_short_prefix={prefix_extractor=capped:4};cf_long_prefix={prefix_extractor=capped:240} --rocksdb_override_cf_options=cf_short_prefix={prefix_extractor=capped:4};rev:cf_short_prefix={prefix_extractor=capped:4};cf_long_prefix={prefix_extractor=capped:240};rev:cf_long_prefix={prefix_extractor=capped:240}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
--rocksdb_strict_collation_check=off --binlog_format=row --log-bin
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment