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