shared->Put(cf_idx, k, value_base, true /* pending */);
+ std::string ts;
+ if (FLAGS_user_timestamp_size > 0) {
+ ts = GetNowNanos();
+ }
+
if (FLAGS_use_merge) {
if (!FLAGS_use_txn) {
- s = db_->Merge(write_opts, cfh, key, v);
+ if (FLAGS_user_timestamp_size > 0) {
+ s = db_->Merge(write_opts, cfh, key, ts, v);
+ } else {
+ s = db_->Merge(write_opts, cfh, key, v);
+ }
} else {
#ifndef ROCKSDB_LITE
Transaction* txn;
} else {
if (!FLAGS_use_txn) {
if (FLAGS_user_timestamp_size > 0) {
- const std::string ts = GetNowNanos();
s = db_->Put(write_opts, cfh, key, ts, v);
} else {
s = db_->Put(write_opts, cfh, key, v);
ts_slice = ts_str;
read_opts.timestamp = &ts_slice;
- if (!thread->rand.OneInOpt(3)) {
+ // TODO (yanqin): support Merge with iter_start_ts
+ if (!thread->rand.OneInOpt(3) || FLAGS_use_merge || FLAGS_use_full_merge_v1) {
return;
}
static_cast<int>(cmp->timestamp_size()));
exit(1);
}
- if (FLAGS_use_merge || FLAGS_use_full_merge_v1) {
- fprintf(stderr, "Merge does not support timestamp yet.\n");
- exit(1);
- }
if (FLAGS_use_txn) {
fprintf(stderr, "TransactionDB does not support timestamp yet.\n");
exit(1);
static_cast<int>(VerificationMethod::kNumberOfMethods);
const VerificationMethod method =
- static_cast<VerificationMethod>(thread->rand.Uniform(num_methods));
+ static_cast<VerificationMethod>(thread->rand.Uniform(
+ (FLAGS_user_timestamp_size > 0) ? num_methods - 1 : num_methods));
if (method == VerificationMethod::kIterator) {
std::unique_ptr<Iterator> iter(
if (FLAGS_use_merge) {
if (!FLAGS_use_txn) {
- s = db_->Merge(write_opts, cfh, k, v);
+ if (FLAGS_user_timestamp_size == 0) {
+ s = db_->Merge(write_opts, cfh, k, v);
+ } else {
+ s = db_->Merge(write_opts, cfh, k, write_ts, v);
+ }
} else {
#ifndef ROCKSDB_LITE
Transaction* txn;