start_time + kSecondsPerRecording * (i + 1));
}
}
+ ASSERT_EQ(kNumKeys, i);
ASSERT_OK(iter->status());
}
}
}
ASSERT_OK(iter->status());
+ ASSERT_EQ(-1, i);
}
// Reopen the DB and disable the seqno to time recording, data with user
// specified write time can still get a write time before it's flushed.
options.preserve_internal_time_seconds = 0;
- DestroyAndReopen(options);
+ Reopen(options);
ASSERT_OK(TimedPut(Key(kKeyWithWriteTime), rnd.RandomString(100),
kUserSpecifiedWriteTime));
{
}
}
ASSERT_OK(iter->status());
+ ASSERT_EQ(kNumKeys, i);
}
// Backward iteration
}
}
ASSERT_OK(iter->status());
+ ASSERT_EQ(-1, i);
}
// Reopen the DB and disable the seqno to time recording. Data retrieved from
// SST files still have write time available.
options.preserve_internal_time_seconds = 0;
- DestroyAndReopen(options);
+ Reopen(options);
dbfull()->TEST_WaitForPeriodicTaskRun(
[&] { mock_clock_->MockSleepForSeconds(kSecondsPerRecording); });
start_time + kSecondsPerRecording * (i + 1));
}
}
+ ASSERT_EQ(kNumKeys, i);
ASSERT_OK(iter->status());
}
VerifyKeyAndWriteTime(iter.get(), Key(i), 0);
}
ASSERT_OK(iter->status());
+ ASSERT_EQ(kNumKeys, i);
}
Close();
}
#include "db/write_batch_internal.h"
#include "file/filename.h"
#include "rocksdb/cache.h"
+#include "rocksdb/comparator.h"
#include "rocksdb/experimental.h"
#include "rocksdb/file_checksum.h"
#include "rocksdb/filter_policy.h"
const std::string LDBCommand::ARG_DUMP_UNCOMPRESSED_BLOBS =
"dump_uncompressed_blobs";
const std::string LDBCommand::ARG_READ_TIMESTAMP = "read_timestamp";
+const std::string LDBCommand::ARG_GET_WRITE_UNIX_TIME = "get_write_unix_time";
const char* LDBCommand::DELIM = " ==> ";
ScanCommand::ScanCommand(const std::vector<std::string>& /*params*/,
const std::map<std::string, std::string>& options,
const std::vector<std::string>& flags)
- : LDBCommand(options, flags, true,
- BuildCmdLineOptions(
- {ARG_TTL, ARG_NO_VALUE, ARG_HEX, ARG_KEY_HEX, ARG_TO,
- ARG_VALUE_HEX, ARG_FROM, ARG_TIMESTAMP, ARG_MAX_KEYS,
- ARG_TTL_START, ARG_TTL_END, ARG_READ_TIMESTAMP})),
+ : LDBCommand(
+ options, flags, true,
+ BuildCmdLineOptions({ARG_TTL, ARG_NO_VALUE, ARG_HEX, ARG_KEY_HEX,
+ ARG_TO, ARG_VALUE_HEX, ARG_FROM, ARG_TIMESTAMP,
+ ARG_MAX_KEYS, ARG_TTL_START, ARG_TTL_END,
+ ARG_READ_TIMESTAMP, ARG_GET_WRITE_UNIX_TIME})),
start_key_specified_(false),
end_key_specified_(false),
max_keys_scanned_(-1),
ARG_MAX_KEYS + " has a value out-of-range");
}
}
+ get_write_unix_time_ = IsFlagPresent(flags_, ARG_GET_WRITE_UNIX_TIME);
}
void ScanCommand::Help(std::string& ret) {
ret.append(" [--" + ARG_TTL_END + "=<N>:- is exclusive]");
ret.append(" [--" + ARG_NO_VALUE + "]");
ret.append(" [--" + ARG_READ_TIMESTAMP + "=<uint64_ts>] ");
+ ret.append(" [--" + ARG_GET_WRITE_UNIX_TIME + "]");
ret.append("\n");
}
fprintf(stdout, "%s\n", str.c_str());
}
+ if (get_write_unix_time_) {
+ std::string write_unix_time;
+ uint64_t write_time_int = std::numeric_limits<uint64_t>::max();
+ Status s =
+ it->GetProperty("rocksdb.iterator.write-time", &write_unix_time);
+ if (s.ok()) {
+ s = DecodeU64Ts(write_unix_time, &write_time_int);
+ }
+ if (!s.ok()) {
+ fprintf(stdout, " Failed to get write unix time: %s\n",
+ s.ToString().c_str());
+ } else {
+ fprintf(stdout, " write unix time: %s\n",
+ std::to_string(write_time_int).c_str());
+ }
+ }
num_keys_scanned++;
if (max_keys_scanned_ >= 0 && num_keys_scanned >= max_keys_scanned_) {
break;