metadata_database_index_interface.h revision 116680a4aac90f2aa7413d9095a592090648e557
1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_METADATA_DATABASE_INDEX_INTERFACE_H_
6#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_METADATA_DATABASE_INDEX_INTERFACE_H_
7
8#include <string>
9#include <vector>
10
11#include "base/memory/scoped_ptr.h"
12
13namespace leveldb {
14class WriteBatch;
15}
16
17namespace sync_file_system {
18namespace drive_backend {
19
20class FileMetadata;
21class FileTracker;
22class TrackerIDSet;
23
24struct ParentIDAndTitle {
25  int64 parent_id;
26  std::string title;
27
28  ParentIDAndTitle();
29  ParentIDAndTitle(int64 parent_id, const std::string& title);
30};
31
32bool operator==(const ParentIDAndTitle& left, const ParentIDAndTitle& right);
33bool operator<(const ParentIDAndTitle& left, const ParentIDAndTitle& right);
34
35// Interface class to maintain indexes of MetadataDatabase.
36class MetadataDatabaseIndexInterface {
37 public:
38  MetadataDatabaseIndexInterface() {}
39  virtual ~MetadataDatabaseIndexInterface() {}
40
41  // Returns true if FileMetadata identified by |file_id| exists.
42  // If |metadata| is not NULL, the FileMetadata is copied to it.
43  virtual bool GetFileMetadata(
44      const std::string& file_id, FileMetadata* metadata) const = 0;
45
46  // Returns true if FileTracker identified by |tracker_id| exists.
47  // If |tracker| is not NULL, the FileTracker is copied to it.
48  virtual bool GetFileTracker(
49      int64 tracker_id, FileTracker* tracker) const = 0;
50
51  // Stores |metadata| and updates indexes.
52  // This overwrites existing FileMetadata for the same |file_id|.
53  virtual void StoreFileMetadata(
54      scoped_ptr<FileMetadata> metadata, leveldb::WriteBatch* batch) = 0;
55
56  // Stores |tracker| and updates indexes.
57  // This overwrites existing FileTracker for the same |tracker_id|.
58  virtual void StoreFileTracker(
59      scoped_ptr<FileTracker> tracker, leveldb::WriteBatch* batch) = 0;
60
61  // Removes FileMetadata identified by |file_id| from indexes.
62  virtual void RemoveFileMetadata(
63      const std::string& file_id, leveldb::WriteBatch* batch) = 0;
64
65  // Removes FileTracker identified by |tracker_id| from indexes.
66  virtual void RemoveFileTracker(
67      int64 tracker_id, leveldb::WriteBatch* batch) = 0;
68
69  // Returns a set of FileTracker that have |file_id| as its own.
70  virtual TrackerIDSet GetFileTrackerIDsByFileID(
71      const std::string& file_id) const = 0;
72
73  // Returns an app-root tracker identified by |app_id|.  Returns 0 if not
74  // found.
75  virtual int64 GetAppRootTracker(const std::string& app_id) const = 0;
76
77  // Returns a set of FileTracker that have |parent_tracker_id| and |title|.
78  virtual TrackerIDSet GetFileTrackerIDsByParentAndTitle(
79      int64 parent_tracker_id,
80      const std::string& title) const = 0;
81
82  virtual std::vector<int64> GetFileTrackerIDsByParent(
83      int64 parent_tracker_id) const = 0;
84
85  // Returns the |file_id| of a file that has multiple trackers.
86  virtual std::string PickMultiTrackerFileID() const = 0;
87
88  // Returns a pair of |parent_tracker_id| and |title| that has multiple file
89  // at the path.
90  virtual ParentIDAndTitle PickMultiBackingFilePath() const = 0;
91
92  // Returns a FileTracker whose |dirty| is set and which isn't demoted.
93  // Returns 0 if not found.
94  virtual int64 PickDirtyTracker() const = 0;
95
96  // Demotes a dirty tracker.
97  virtual void DemoteDirtyTracker(
98      int64 tracker_id, leveldb::WriteBatch* batch) = 0;
99
100  virtual bool HasDemotedDirtyTracker() const = 0;
101
102  // Promotes all demoted dirty trackers to normal dirty trackers.
103  virtual void PromoteDemotedDirtyTrackers(leveldb::WriteBatch* batch) = 0;
104
105  virtual size_t CountDirtyTracker() const = 0;
106  virtual size_t CountFileMetadata() const = 0;
107  virtual size_t CountFileTracker() const = 0;
108
109  virtual void SetSyncRootTrackerID(int64 sync_root_id,
110                                    leveldb::WriteBatch* batch) const = 0;
111  virtual void SetLargestChangeID(int64 largest_change_id,
112                                  leveldb::WriteBatch* batch) const = 0;
113  virtual void SetNextTrackerID(int64 next_tracker_id,
114                                leveldb::WriteBatch* batch) const = 0;
115  virtual int64 GetSyncRootTrackerID() const = 0;
116  virtual int64 GetLargestChangeID() const = 0;
117  virtual int64 GetNextTrackerID() const = 0;
118  virtual std::vector<std::string> GetRegisteredAppIDs() const = 0;
119  virtual std::vector<int64> GetAllTrackerIDs() const = 0;
120  virtual std::vector<std::string> GetAllMetadataIDs() const = 0;
121
122 private:
123  DISALLOW_COPY_AND_ASSIGN(MetadataDatabaseIndexInterface);
124};
125
126}  // namespace drive_backend
127}  // namespace sync_file_system
128
129#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_METADATA_DATABASE_INDEX_INTERFACE_H_
130