Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6709)

Unified Diff: chrome/browser/chromeos/gdata/gdata_leveldb.cc

Issue 10701118: gdata: Fix a bug in GDataLevelDB where errors are not handled right (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/gdata/gdata_leveldb.cc
diff --git a/chrome/browser/chromeos/gdata/gdata_leveldb.cc b/chrome/browser/chromeos/gdata/gdata_leveldb.cc
index 8ea19c67722c2dff7d3c0407ac35b6dd3a411a6a..74a88b0d825dafef0220d79ba4c3377f0e2d3cae 100644
--- a/chrome/browser/chromeos/gdata/gdata_leveldb.cc
+++ b/chrome/browser/chromeos/gdata/gdata_leveldb.cc
@@ -10,6 +10,7 @@
#include "base/threading/thread_restrictions.h"
#include "chrome/browser/chromeos/gdata/gdata_files.h"
#include "leveldb/write_batch.h"
+#include "third_party/protobuf/src/google/protobuf/message_lite.h"
namespace gdata {
namespace {
@@ -139,7 +140,8 @@ GDataDB::Status GDataLevelDB::GetByResourceId(const std::string& resource_id,
if (db_status.ok()) {
DCHECK(!serialized_proto.empty());
*entry = GDataEntry::FromProtoString(serialized_proto);
- DCHECK(entry->get());
+ if (!entry->get())
achuithb 2012/07/10 17:21:19 nit: can we make this a ternary return? It saves 2
satorux1 2012/07/10 17:28:35 Done.
+ return DB_CORRUPTION;
return DB_OK;
}
return GetStatus(db_status);
@@ -176,6 +178,22 @@ scoped_ptr<GDataDBIter> GDataLevelDB::CreateIterator(const FilePath& path) {
path));
}
+GDataDB::Status GDataLevelDB::PutRawForTesting(
+ const std::string& resource_id,
+ const google::protobuf::MessageLite& protobuf) {
+ std::string serialized_proto;
+ protobuf.SerializeToString(&serialized_proto);
+
+ const std::string resource_id_key =
+ ResourceIdToKey(resource_id);
+ leveldb::Status db_status = level_db_->Put(
+ leveldb::WriteOptions(),
+ leveldb::Slice(resource_id_key),
+ leveldb::Slice(serialized_proto));
+
+ return GetStatus(db_status);
+}
+
GDataLevelDBIter::GDataLevelDBIter(scoped_ptr<leveldb::Iterator> level_db_iter,
GDataDB* db,
const FilePath& path)
@@ -211,7 +229,8 @@ bool GDataLevelDBIter::GetNext(std::string* path,
GDataDB::Status status =
db_->GetByResourceId(level_db_iter_->value().ToString(), entry);
- DCHECK_EQ(GDataDB::DB_OK, status);
+ if (status != GDataDB::DB_OK)
+ return false;
key_slice.remove_prefix(sizeof(kPathPrefix) - 1);
path->assign(key_slice.ToString());

Powered by Google App Engine
This is Rietveld 408576698