diff options
author | agayev@chromium.org <agayev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-12 20:47:18 +0000 |
---|---|---|
committer | agayev@chromium.org <agayev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-12 20:47:18 +0000 |
commit | 6a74a93c35aff1afa3bf94cd08f68e97a48d331f (patch) | |
tree | a2b76f1eef04ea1b3cec0450ad4516e0b5482bef /net/disk_cache/flash/log_structured_store.cc | |
parent | 6e3920611d6243e2860235146baa11c49a49f668 (diff) | |
download | chromium_src-6a74a93c35aff1afa3bf94cd08f68e97a48d331f.zip chromium_src-6a74a93c35aff1afa3bf94cd08f68e97a48d331f.tar.gz chromium_src-6a74a93c35aff1afa3bf94cd08f68e97a48d331f.tar.bz2 |
Renamed classes for consistency.
BUG=157187
TEST=net_unittests --gtest_filter="FlashCacheTest.*" --gtest_repeat=10 --shuffle
Review URL: https://chromiumcodereview.appspot.com/11532011
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@172651 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/disk_cache/flash/log_structured_store.cc')
-rw-r--r-- | net/disk_cache/flash/log_structured_store.cc | 175 |
1 files changed, 0 insertions, 175 deletions
diff --git a/net/disk_cache/flash/log_structured_store.cc b/net/disk_cache/flash/log_structured_store.cc deleted file mode 100644 index f372de0..0000000 --- a/net/disk_cache/flash/log_structured_store.cc +++ /dev/null @@ -1,175 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "base/logging.h" -#include "base/memory/scoped_ptr.h" -#include "base/stl_util.h" -#include "net/disk_cache/flash/format.h" -#include "net/disk_cache/flash/log_structured_store.h" -#include "net/disk_cache/flash/segment.h" -#include "net/disk_cache/flash/storage.h" - -namespace disk_cache { - -LogStructuredStore::LogStructuredStore(Storage* storage) - : storage_(storage), - num_segments_(storage->size() / kFlashSegmentSize), - open_segments_(num_segments_), - write_index_(0), - current_entry_id_(-1), - current_entry_num_bytes_left_to_write_(0), - init_(false), - closed_(false) { - DCHECK(storage->size() % kFlashSegmentSize == 0); -} - -LogStructuredStore::~LogStructuredStore() { - DCHECK(!init_ || closed_); - STLDeleteElements(&open_segments_); -} - -bool LogStructuredStore::Init() { - DCHECK(!init_); - // TODO(agayev): Once we start persisting segment metadata to disk, we will - // start from where we left off during the last shutdown. - scoped_ptr<Segment> segment(new Segment(write_index_, false, storage_)); - if (!segment->Init()) - return false; - - segment->AddUser(); - open_segments_[write_index_] = segment.release(); - init_ = true; - return true; -} - -bool LogStructuredStore::Close() { - DCHECK(init_ && !closed_); - open_segments_[write_index_]->ReleaseUser(); - if (!open_segments_[write_index_]->Close()) - return false; - closed_ = true; - return true; - // TODO(agayev): persist metadata to disk. -} - -bool LogStructuredStore::CreateEntry(int32 size, int32* id) { - DCHECK(init_ && !closed_); - DCHECK(current_entry_id_ == -1 && size <= disk_cache::kFlashSegmentFreeSpace); - - // TODO(agayev): Avoid large entries from leaving the segments almost empty. - if (!open_segments_[write_index_]->CanHold(size)) { - if (!open_segments_[write_index_]->Close()) - return false; - - open_segments_[write_index_]->ReleaseUser(); - if (open_segments_[write_index_]->HasNoUsers()) { - delete open_segments_[write_index_]; - open_segments_[write_index_] = NULL; - } - - write_index_ = GetNextSegmentIndex(); - scoped_ptr<Segment> segment(new Segment(write_index_, false, storage_)); - if (!segment->Init()) - return false; - - segment->AddUser(); - open_segments_[write_index_] = segment.release(); - } - - *id = open_segments_[write_index_]->write_offset(); - open_segments_[write_index_]->StoreOffset(*id); - current_entry_id_ = *id; - current_entry_num_bytes_left_to_write_ = size; - open_entries_.insert(current_entry_id_); - return true; -} - -bool LogStructuredStore::WriteData(const void* buffer, int32 size) { - DCHECK(init_ && !closed_); - DCHECK(current_entry_id_ != -1 && - size <= current_entry_num_bytes_left_to_write_); - if (open_segments_[write_index_]->WriteData(buffer, size)) { - current_entry_num_bytes_left_to_write_ -= size; - return true; - } - return false; -} - -bool LogStructuredStore::OpenEntry(int32 id) { - DCHECK(init_ && !closed_); - if (open_entries_.find(id) != open_entries_.end()) - return false; - - // Segment is already open. - int32 index = id / disk_cache::kFlashSegmentSize; - if (open_segments_[index]) { - if (!open_segments_[index]->HaveOffset(id)) - return false; - open_segments_[index]->AddUser(); - open_entries_.insert(id); - return true; - } - - // Segment is not open. - scoped_ptr<Segment> segment(new Segment(index, true, storage_)); - if (!segment->Init() || !segment->HaveOffset(id)) - return false; - - segment->AddUser(); - open_segments_[index] = segment.release(); - open_entries_.insert(id); - return true; -} - -bool LogStructuredStore::ReadData(int32 id, void* buffer, int32 size, - int32 offset) const { - DCHECK(init_ && !closed_); - DCHECK(open_entries_.find(id) != open_entries_.end()); - - int32 index = id / disk_cache::kFlashSegmentSize; - DCHECK(open_segments_[index] && open_segments_[index]->HaveOffset(id)); - return open_segments_[index]->ReadData(buffer, size, id + offset); -} - -void LogStructuredStore::CloseEntry(int32 id) { - DCHECK(init_ && !closed_); - std::set<int32>::iterator entry_iter = open_entries_.find(id); - DCHECK(entry_iter != open_entries_.end()); - - if (current_entry_id_ != -1) { - DCHECK(id == current_entry_id_ && !current_entry_num_bytes_left_to_write_); - open_entries_.erase(entry_iter); - current_entry_id_ = -1; - return; - } - - int32 index = id / disk_cache::kFlashSegmentSize; - DCHECK(open_segments_[index]); - open_entries_.erase(entry_iter); - - open_segments_[index]->ReleaseUser(); - if (open_segments_[index]->HasNoUsers()) { - delete open_segments_[index]; - open_segments_[index] = NULL; - } -} - -int32 LogStructuredStore::GetNextSegmentIndex() { - DCHECK(init_ && !closed_); - int32 next_index = (write_index_ + 1) % num_segments_; - - while (InUse(next_index)) { - next_index = (next_index + 1) % num_segments_; - DCHECK_NE(next_index, write_index_); - } - return next_index; -} - -bool LogStructuredStore::InUse(int32 index) const { - DCHECK(init_ && !closed_); - DCHECK(index >= 0 && index < num_segments_); - return open_segments_[index] != NULL; -} - -} // namespace disk_cache |