@@ -295,7 +295,7 @@ int Rdb_iterator_base::next_with_direction(bool move_forward, bool skip_next) {
295295 }
296296
297297 // Record is not visible due to TTL, move to next record.
298- if (m_pkd.has_ttl () && rdb_should_hide_ttl_rec (m_kd, value, tx)) {
298+ if (m_pkd.has_ttl () && rdb_should_hide_ttl_rec (m_kd, & value, tx)) {
299299 continue ;
300300 }
301301
@@ -357,10 +357,29 @@ int Rdb_iterator_base::seek(enum ha_rkey_function find_flag,
357357 return rc;
358358}
359359
360+ int Rdb_iterator_base::convert_get_status (myrocks::Rdb_transaction &tx,
361+ const rocksdb::Status &s,
362+ rocksdb::PinnableSlice *value,
363+ bool skip_ttl_check) const {
364+ int rc = HA_EXIT_SUCCESS;
365+ if (!s.IsNotFound () && !s.ok ()) {
366+ return rdb_tx_set_status_error (tx, s, m_kd, m_tbl_def);
367+ }
368+
369+ const bool hide_ttl_rec =
370+ !skip_ttl_check && m_kd.has_ttl () &&
371+ rdb_should_hide_ttl_rec (m_kd, s.IsNotFound () ? nullptr : value, &tx);
372+
373+ if (hide_ttl_rec || s.IsNotFound ()) {
374+ return HA_ERR_KEY_NOT_FOUND;
375+ }
376+
377+ return rc;
378+ }
379+
360380int Rdb_iterator_base::get (const rocksdb::Slice *key,
361381 rocksdb::PinnableSlice *value, Rdb_lock_type type,
362382 bool skip_ttl_check, bool skip_wait) {
363- int rc = HA_EXIT_SUCCESS;
364383 Rdb_transaction *const tx = get_tx_from_thd (m_thd);
365384 rocksdb::Status s;
366385 if (type == RDB_LOCK_NONE) {
@@ -374,20 +393,7 @@ int Rdb_iterator_base::get(const rocksdb::Slice *key,
374393 " rocksdb_return_status_corrupted" ,
375394 { s = rocksdb::Status::Corruption (); });
376395
377- if (!s.IsNotFound () && !s.ok ()) {
378- return rdb_tx_set_status_error (tx, s, m_kd, m_tbl_def);
379- }
380-
381- if (s.IsNotFound ()) {
382- return HA_ERR_KEY_NOT_FOUND;
383- }
384-
385- if (!skip_ttl_check && m_kd.has_ttl () &&
386- rdb_should_hide_ttl_rec (m_kd, *value, tx)) {
387- return HA_ERR_KEY_NOT_FOUND;
388- }
389-
390- return rc;
396+ return convert_get_status (*tx, s, value, skip_ttl_check);
391397}
392398
393399Rdb_iterator_partial::Rdb_iterator_partial (THD *thd, const Rdb_key_def &kd,
@@ -657,7 +663,7 @@ int Rdb_iterator_partial::materialize_prefix() {
657663 return HA_EXIT_SUCCESS;
658664 } else if (!s.IsNotFound ()) {
659665 thd_proc_info (m_thd, old_proc_info);
660- return rdb_tx_set_status_error (tx, s, m_kd, m_tbl_def);
666+ return rdb_tx_set_status_error (* tx, s, m_kd, m_tbl_def);
661667 }
662668
663669 rocksdb::WriteOptions options;
@@ -669,7 +675,7 @@ int Rdb_iterator_partial::materialize_prefix() {
669675 // Write sentinel key with empty value.
670676 s = wb->Put (m_kd.get_cf (), cur_prefix_key, rocksdb::Slice ());
671677 if (!s.ok ()) {
672- rc = rdb_tx_set_status_error (tx, s, m_kd, m_tbl_def);
678+ rc = rdb_tx_set_status_error (* tx, s, m_kd, m_tbl_def);
673679 rdb_tx_release_lock (tx, m_kd, cur_prefix_key, true /* force */ );
674680 thd_proc_info (m_thd, old_proc_info);
675681 return rc;
@@ -711,7 +717,7 @@ int Rdb_iterator_partial::materialize_prefix() {
711717 rocksdb::Slice ((const char *)m_sk_tails.ptr (),
712718 m_sk_tails.get_current_pos ()));
713719 if (!s.ok ()) {
714- rc = rdb_tx_set_status_error (tx, s, m_kd, m_tbl_def);
720+ rc = rdb_tx_set_status_error (* tx, s, m_kd, m_tbl_def);
715721 goto exit;
716722 }
717723
@@ -724,7 +730,7 @@ int Rdb_iterator_partial::materialize_prefix() {
724730
725731 s = rdb_get_rocksdb_db ()->Write (options, optimize, wb.get ());
726732 if (!s.ok ()) {
727- rc = rdb_tx_set_status_error (tx, s, m_kd, m_tbl_def);
733+ rc = rdb_tx_set_status_error (* tx, s, m_kd, m_tbl_def);
728734 goto exit;
729735 }
730736
0 commit comments