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