|
|
@ -1190,27 +1190,22 @@ Status DBImpl::get_slot_num(const ReadOptions& options, const Slice& key, |
|
|
|
Status DBImpl::Get_Fields(const ReadOptions& options, const Slice& key, |
|
|
|
FieldArray* fields) { |
|
|
|
// Todo(begin)
|
|
|
|
std::string value; |
|
|
|
Status s = Get(options, key, &value); |
|
|
|
size_t slot_num; |
|
|
|
// 从value中提取slot_num
|
|
|
|
auto s = get_slot_num(options, key, &slot_num); |
|
|
|
if (!s.ok()) { |
|
|
|
return s; |
|
|
|
} |
|
|
|
// 从value中提取slot_num
|
|
|
|
size_t slot_num; |
|
|
|
slot_num = *(size_t *)value.c_str(); // 这里假设value的前几个字节存储了slot_num
|
|
|
|
|
|
|
|
struct slot_content sc; |
|
|
|
std::string vlog_value; |
|
|
|
// 从slot_page中获取slot内容
|
|
|
|
slot_page_->get_slot(slot_num, &sc); |
|
|
|
// 从vlog_set中获取实际的日志值
|
|
|
|
vlog_set_->get_value(sc.vlog_num, sc.value_offset, &vlog_value); |
|
|
|
// 更新value为从vlog获取的值
|
|
|
|
value = vlog_value; |
|
|
|
|
|
|
|
std::cout << "value from value_log: " << key.ToString() << value << std::endl; |
|
|
|
*fields = DeserializeValue(value); |
|
|
|
std::cout << "value from value_log: " << key.ToString() << vlog_value << std::endl; |
|
|
|
*fields = DeserializeValue(vlog_value); |
|
|
|
return Status::OK(); |
|
|
|
// TODO(end)
|
|
|
|
// Todo(end)
|
|
|
|
} |
|
|
|
|
|
|
|
Status DBImpl::Get(const ReadOptions& options, const Slice& key, |
|
|
@ -1277,8 +1272,7 @@ Status DBImpl::Put_Fields(const WriteOptions& opt, const Slice& key, |
|
|
|
// TODO(end)
|
|
|
|
} |
|
|
|
|
|
|
|
// Convenience methods
|
|
|
|
Status DBImpl::Put(const WriteOptions& o, const Slice& key, const Slice& val) { |
|
|
|
Status DBImpl::Put(const WriteOptions& opt, const Slice& key, const Slice& val) { |
|
|
|
// TODO: allocate slot_num in slotpage and put value in vlog
|
|
|
|
|
|
|
|
size_t slot_num = slot_page_->alloc_slot(); |
|
|
@ -1290,16 +1284,10 @@ Status DBImpl::Put(const WriteOptions& o, const Slice& key, const Slice& val) { |
|
|
|
memcpy(data, &slot_num, sizeof(size_t)); |
|
|
|
Slice slot_val(data, sizeof(data)); |
|
|
|
|
|
|
|
return DB::Put(o, key, slot_val); |
|
|
|
return DB::Put(opt, key, slot_val); |
|
|
|
} |
|
|
|
|
|
|
|
Status DBImpl::Delete(const WriteOptions& options, const Slice& key) { |
|
|
|
// size_t slot_num = *(size_t *)value->c_str();
|
|
|
|
// struct slot_content sc;
|
|
|
|
// std::string vlog_value;
|
|
|
|
// slot_page_->get_slot(slot_num, &sc);
|
|
|
|
// vlog_set_->get_value(sc.vlog_num, sc.value_offset, &vlog_value);
|
|
|
|
// *value = vlog_value;
|
|
|
|
size_t slot_num; |
|
|
|
auto s = get_slot_num(ReadOptions(), key, &slot_num); |
|
|
|
|
|
|
|