| // Copyright 2016 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef PERIDOT_BIN_LEDGER_STORAGE_FAKE_FAKE_JOURNAL_DELEGATE_H_ |
| #define PERIDOT_BIN_LEDGER_STORAGE_FAKE_FAKE_JOURNAL_DELEGATE_H_ |
| |
| #include <map> |
| #include <string> |
| |
| #include <lib/fit/function.h> |
| #include <lib/fxl/macros.h> |
| |
| #include "peridot/bin/ledger/storage/public/commit.h" |
| #include "peridot/bin/ledger/storage/public/types.h" |
| #include "peridot/lib/convert/convert.h" |
| #include "peridot/lib/rng/random.h" |
| |
| namespace storage { |
| namespace fake { |
| |
| // |FakeJournalDelegate| records the changes made through a journal. This |
| // object is owned by |FakePageStorage| and outlives |FakeJournal|. |
| class FakeJournalDelegate { |
| public: |
| using Data = std::map<std::string, Entry, convert::StringViewComparator>; |
| |
| // Regular commit. |
| // |initial_data| must contain the content of the page when the transaction |
| // starts. |
| FakeJournalDelegate(rng::Random* random, Data initial_data, |
| CommitId parent_id, bool autocommit, uint64_t generation); |
| // Merge commit. |
| // |initial_data| must contain the content of the page when the transaction |
| // starts. |
| FakeJournalDelegate(rng::Random* random, Data initial_data, |
| CommitId parent_id, CommitId other_id, bool autocommit, |
| uint64_t generation); |
| ~FakeJournalDelegate(); |
| |
| const CommitId& GetId() const { return id_; } |
| |
| Status SetValue(convert::ExtendedStringView key, ObjectIdentifier value, |
| KeyPriority priority); |
| Status Delete(convert::ExtendedStringView key); |
| Status Clear(); |
| |
| void Commit( |
| fit::function<void(Status, std::unique_ptr<const storage::Commit>)> |
| callback); |
| bool IsCommitted() const; |
| |
| Status Rollback(); |
| bool IsRolledBack() const; |
| |
| uint64_t GetGeneration() const { return generation_; } |
| |
| std::vector<CommitIdView> GetParentIds() const; |
| |
| bool IsPendingCommit(); |
| void ResolvePendingCommit(Status status); |
| |
| const Data& GetData() const; |
| |
| private: |
| bool autocommit_; |
| |
| const CommitId id_; |
| const CommitId parent_id_; |
| const CommitId other_id_; |
| Data data_; |
| uint64_t generation_; |
| |
| bool is_committed_ = false; |
| bool is_rolled_back_ = false; |
| fit::function<void(Status, std::unique_ptr<const storage::Commit>)> |
| commit_callback_; |
| |
| FXL_DISALLOW_COPY_AND_ASSIGN(FakeJournalDelegate); |
| }; |
| |
| } // namespace fake |
| } // namespace storage |
| |
| #endif // PERIDOT_BIN_LEDGER_STORAGE_FAKE_FAKE_JOURNAL_DELEGATE_H_ |