Line data Source code
1 : /* 2 : * Copyright (c) 2016 Juniper Networks, Inc. All rights reserved. 3 : * Copyright Contributors to the OpenSDN project 4 : */ 5 : 6 : #ifndef vnsw_agent_resource_manager_hpp 7 : #define vnsw_agent_resource_manager_hpp 8 : 9 : #include <resource_manager/resource_cmn.h> 10 : #include <resource_manager/resource_table.h> 11 : 12 : 13 : class Resource; 14 : class ResourceKey; 15 : class ResourceData; 16 : class ResourceTable; 17 : class ResourceRestoreReq; 18 : class ResourceBackupManager; 19 : 20 : // Resource maanager is to restore the resources. 21 : // and retain the old labels after reading form the File. 22 : class ResourceManager { 23 : public: 24 : typedef boost::shared_ptr<ResourceKey> KeyPtr; 25 : typedef boost::shared_ptr<ResourceData> DataPtr; 26 : typedef boost::shared_ptr<ResourceRestoreReq> ResourceRestoreReqPtr; 27 : 28 : ResourceManager(Agent *agent); 29 : ~ResourceManager(); 30 : 31 : void Init(); 32 : 33 : void ReserveIndex(Resource::Type, uint32_t index); 34 : void ReleaseIndex(Resource::Type, uint32_t index); 35 : 36 : ResourceManager::DataPtr Allocate(KeyPtr key); 37 : void EnqueueRestore(KeyPtr key, DataPtr data); 38 : void RestoreResource(KeyPtr key, DataPtr data); 39 : void Release(KeyPtr key); 40 : void Release(Resource::Type, uint32_t index); 41 : ResourceTable *resource_table(uint8_t type); 42 0 : ResourceBackupManager *backup_mgr() {return backup_mgr_.get();} 43 : bool Audit(); 44 : 45 : //Work queue to restore the data. 46 : bool WorkQueueRestoreProcess(ResourceRestoreReqPtr restore_data); 47 0 : Agent *agent() {return agent_;} 48 : private: 49 : Agent *agent_; 50 : boost::scoped_ptr<ResourceTable>resource_table_[Resource::MAX]; 51 : WorkQueue<ResourceRestoreReqPtr> restore_work_queue_; 52 : boost::scoped_ptr<ResourceBackupManager> backup_mgr_; 53 : DISALLOW_COPY_AND_ASSIGN(ResourceManager); 54 : }; 55 : // Restore request is to restore the Data & Key from File. 56 : class ResourceRestoreReq { 57 : public: 58 : ResourceRestoreReq(ResourceManager::KeyPtr key, 59 : ResourceManager::DataPtr data); 60 : virtual ~ResourceRestoreReq(); 61 0 : ResourceManager::KeyPtr key() {return key_;} 62 0 : ResourceManager::DataPtr data() {return data_;} 63 : 64 : private: 65 : ResourceManager::KeyPtr key_; 66 : ResourceManager::DataPtr data_; 67 : DISALLOW_COPY_AND_ASSIGN(ResourceRestoreReq); 68 : }; 69 : 70 : #endif //resource_manager