summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Petrunia <psergey@askmonty.org>2018-05-10 20:21:09 +0300
committerSergei Petrunia <psergey@askmonty.org>2018-05-10 20:21:09 +0300
commit83cdccdb1a941c2885e4b0dc6cdc55ccc97a6ffa (patch)
treeb9653625b7e3819b7314f36ad4a0a2478337f86c
parent69b46aac9f81ff7bb1cd05696e46312130400d6c (diff)
parentffb48234df38630aeb3c34d72aba1473348c7076 (diff)
downloadmariadb-git-83cdccdb1a941c2885e4b0dc6cdc55ccc97a6ffa.tar.gz
Merge branch 'bb-10.2-mariarocks' into 10.2
-rw-r--r--storage/rocksdb/ha_rocksdb.cc24
-rw-r--r--storage/rocksdb/ha_rocksdb.h4
-rw-r--r--storage/rocksdb/mysql-test/rocksdb/include/bulk_load_unsorted.inc1
-rw-r--r--storage/rocksdb/mysql-test/rocksdb/t/rocksdb_checksums-master.opt1
4 files changed, 28 insertions, 2 deletions
diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc
index baada708c61..46d963860a2 100644
--- a/storage/rocksdb/ha_rocksdb.cc
+++ b/storage/rocksdb/ha_rocksdb.cc
@@ -7141,13 +7141,18 @@ int rdb_normalize_tablename(const std::string &tablename,
std::string *const strbuf) {
DBUG_ASSERT(strbuf != nullptr);
- if (tablename.size() < 2 || tablename[0] != '.' || tablename[1] != FN_LIBCHAR) {
+ if (tablename.size() < 2 || tablename[0] != '.' ||
+ (tablename[1] != FN_LIBCHAR && tablename[1] != FN_LIBCHAR2)) {
DBUG_ASSERT(0); // We were not passed table name?
return HA_ERR_ROCKSDB_INVALID_TABLE;
}
size_t pos = tablename.find_first_of(FN_LIBCHAR, 2);
if (pos == std::string::npos) {
+ pos = tablename.find_first_of(FN_LIBCHAR2, 2);
+ }
+
+ if (pos == std::string::npos) {
DBUG_ASSERT(0); // We were not passed table name?
return HA_ERR_ROCKSDB_INVALID_TABLE;
}
@@ -7925,6 +7930,15 @@ int ha_rocksdb::prepare_range_scan(const key_range *start_key,
const key_range *end_key)
{
range_key_part= table->key_info[active_index].key_part;
+
+ if (start_key)
+ {
+ m_save_start_range= *start_key;
+ m_start_range= &m_save_start_range;
+ }
+ else
+ m_start_range= NULL;
+
set_end_range(end_key);
return 0;
}
@@ -8054,8 +8068,12 @@ int ha_rocksdb::index_read_map_impl(uchar *const buf, const uchar *const key,
packed_size);
uint end_key_packed_size = 0;
+ const key_range *cur_end_key= end_key;
+ if (find_flag == HA_READ_PREFIX_LAST_OR_PREV)
+ cur_end_key= m_start_range;
+
const uint eq_cond_len =
- calc_eq_cond_len(kd, find_flag, slice, bytes_changed_by_succ, end_key,
+ calc_eq_cond_len(kd, find_flag, slice, bytes_changed_by_succ, cur_end_key,
&end_key_packed_size);
bool use_all_keys = false;
@@ -9996,6 +10014,7 @@ int ha_rocksdb::index_init(uint idx, bool sorted) {
DBUG_ASSERT(tx != nullptr);
setup_read_decoders();
+ m_start_range= NULL;
if (!m_keyread_only) {
m_key_descr_arr[idx]->get_lookup_bitmap(table, &m_lookup_bitmap);
@@ -10024,6 +10043,7 @@ int ha_rocksdb::index_end() {
active_index = MAX_KEY;
in_range_check_pushed_down = FALSE;
+ m_start_range= NULL;
DBUG_RETURN(HA_EXIT_SUCCESS);
}
diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h
index 0b008a64390..6083dd73020 100644
--- a/storage/rocksdb/ha_rocksdb.h
+++ b/storage/rocksdb/ha_rocksdb.h
@@ -493,6 +493,10 @@ class ha_rocksdb : public my_core::handler {
/* Iterator used for range scans and for full table/index scans */
rocksdb::Iterator *m_scan_it;
+
+ /* Same as handler::end_key but for start. Reverse-ordered scans need it */
+ key_range m_save_start_range;
+ const key_range *m_start_range;
/* Whether m_scan_it was created with skip_bloom=true */
bool m_scan_it_skips_bloom;
diff --git a/storage/rocksdb/mysql-test/rocksdb/include/bulk_load_unsorted.inc b/storage/rocksdb/mysql-test/rocksdb/include/bulk_load_unsorted.inc
index 4a3158e814c..151ec0ccf14 100644
--- a/storage/rocksdb/mysql-test/rocksdb/include/bulk_load_unsorted.inc
+++ b/storage/rocksdb/mysql-test/rocksdb/include/bulk_load_unsorted.inc
@@ -83,6 +83,7 @@ eval CREATE TABLE t3(a INT, b INT, PRIMARY KEY(a) COMMENT "$pk_cf")
perl;
my $fn = $ENV{'ROCKSDB_INFILE'};
open(my $fh, '>', $fn) || die "perl open($fn): $!";
+binmode $fh;
my $max = 5000000;
my $sign = 1;
for (my $ii = 0; $ii < $max; $ii++)
diff --git a/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_checksums-master.opt b/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_checksums-master.opt
index 792e3808f1e..320c48e5563 100644
--- a/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_checksums-master.opt
+++ b/storage/rocksdb/mysql-test/rocksdb/t/rocksdb_checksums-master.opt
@@ -1,2 +1,3 @@
--rocksdb_debug_optimizer_n_rows=1000
--rocksdb_records_in_range=50
+--log_warnings=3