[ledger] Don't read the object when inserting with PutReference.
The reference has already been computed when client code calls
CreateReferenceFromBuffer. And When calling PutReference, we check
that this is a valid reference when calling PageManager::ResolveReference.
So there is no need to read the object from storage.
Test: PageImplTest.PutUnknownReference
Change-Id: I747083ab4d9d509bffc68e31a0228618d63bc62c
diff --git a/bin/ledger/app/page_delegate.cc b/bin/ledger/app/page_delegate.cc
index e238599..3e87eb8 100644
--- a/bin/ledger/app/page_delegate.cc
+++ b/bin/ledger/app/page_delegate.cc
@@ -148,6 +148,8 @@
Reference reference, Priority priority,
Page::PutReferenceCallback callback) {
FXL_DCHECK(key->size() <= kMaxKeySize);
+ // |ResolveReference| also makes sure that the reference was created for this
+ // page.
storage::ObjectIdentifier object_identifier;
Status status =
manager_->ResolveReference(std::move(reference), &object_identifier);
@@ -156,36 +158,15 @@
return;
}
- auto promise = fxl::MakeRefCounted<callback::Promise<
- storage::Status, std::unique_ptr<const storage::Object>>>(
- storage::Status::ILLEGAL_STATE);
-
- storage_->GetObject(object_identifier, storage::PageStorage::Location::LOCAL,
- promise->NewCallback());
-
operation_serializer_.Serialize<Status>(
std::move(callback),
- [this, promise = std::move(promise), key = std::move(key),
+ [this, key = std::move(key),
object_identifier = std::move(object_identifier),
priority](Page::PutReferenceCallback callback) mutable {
- promise->Finalize(callback::MakeScoped(
- weak_factory_.GetWeakPtr(),
- [this, key = std::move(key),
- object_identifier = std::move(object_identifier), priority,
- callback = std::move(callback)](
- storage::Status status,
- std::unique_ptr<const storage::Object> object) mutable {
- if (status != storage::Status::OK) {
- callback(PageUtils::ConvertStatus(status,
- Status::REFERENCE_NOT_FOUND));
- return;
- }
- PutInCommit(std::move(key), std::move(object_identifier),
- priority == Priority::EAGER
- ? storage::KeyPriority::EAGER
- : storage::KeyPriority::LAZY,
- std::move(callback));
- }));
+ PutInCommit(std::move(key), std::move(object_identifier),
+ priority == Priority::EAGER ? storage::KeyPriority::EAGER
+ : storage::KeyPriority::LAZY,
+ std::move(callback));
});
}