diff --git a/tools/merge/merge.cc b/tools/merge/merge.cc index d54bcf9bbd1d6b0fc2a9738ba19e1ef45f65d56d..8e2cf087b9e55beea0360f2b4db62078f954e2fe 100644 --- a/tools/merge/merge.cc +++ b/tools/merge/merge.cc @@ -10,6 +10,7 @@ #include <cstdio> #include <iostream> #include <string> +#include <unordered_map> #include "rocksdb/db.h" #include "rocksdb/options.h" @@ -22,8 +23,10 @@ namespace fs = std::experimental::filesystem; int main(int argc, char* argv[]) { if(argc != 3) { std::cerr << "Wrong number of arguments\nusage : ./<executable> <folder_having_rocksDB_directories_to_be_merged> <destination_folder>\n"; - return 1; + exit(0); } + + std::unordered_map<std::string, std::string> xid_uid_mp; std::string destinationDB = argv[2]; DB* db; Options options; @@ -52,9 +55,14 @@ int main(int argc, char* argv[]) { rocksdb::Iterator* it = cur_db->NewIterator(rocksdb::ReadOptions()); for (it->SeekToFirst(); it->Valid(); it->Next()) { - std::cout << it->key().ToString() << ": " << it->value().ToString() << std::endl; - s = db->Put(WriteOptions(), it->key().ToString(), it->value().ToString()); - assert(s.ok()); + if(xid_uid_mp.count(it->key().ToString()) != 0 && xid_uid_mp[it->key().ToString()] != it->value().ToString()) { + std::cerr << "FATAL : Different value for same key : " << it->key().ToString() << std::endl; + exit(0); + } else { + xid_uid_mp[it->key().ToString()] = it->value().ToString(); + s = db->Put(WriteOptions(), it->key().ToString(), it->value().ToString()); + assert(s.ok()); + } } assert(it->status().ok()); // Check for any errors found during the scan delete it;