OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
resource_backup.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2016 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #include <fstream>
6 #include <cmn/agent.h>
7 #include <cmn/event_notifier.h>
8 #include <base/timer.h>
13 #include "resource_manager/resource_manager_types.h"
14 #include <sys/stat.h>
15 
17  resource_manager_(mgr), agent_(mgr->agent()), sandesh_maps_(this),
18  backup_work_queue_(agent_->task_scheduler()->
19  GetTaskId(kAgentResourceBackUpTask), 0,
20  boost::bind(&ResourceBackupManager::WorkQueueBackUpProcess,
21  this, _1)) {
24  boost::bind(&ResourceManager::Audit, mgr));
25 }
26 
29 }
30 
32  //Read stored resource file and restore resources
35 }
36 
40  ResourceBackupReqPtr backup_data(new ResourceBackupReq (key, data, op));
41  backup_work_queue_.Enqueue(backup_data);
42 }
43 
45  ResourceBackupReqPtr backup_data) {
46  backup_data->Process();
47  return true;
48 }
49 
51 (const std::string &file_name, std::unique_ptr<uint8_t> *buf) {
52  std::stringstream error_str;
53  uint32_t size;
54  std::ifstream input(file_name.c_str(), std::ofstream::binary);
55  if (!input.good()) {
56  error_str << "Resource backup mgr Open failed to read file";
57  goto error;
58  }
59  struct stat st;
60  if (stat(file_name.c_str(), &st) == -1) {
61  error_str << "Resource backup mgr Get size from file failed";
62  goto error;
63  }
64  size = (uint32_t) st.st_size;
65  *buf = std::unique_ptr<uint8_t> (new uint8_t [size]());
66  input.read((char *)((*buf).get()), size);
67 
68  if (!input.good()) {
69  error_str << "Resource backup mgr reading file failed";
70  goto error;
71  }
72 
73  input.close();
74  return size;
75 
76  error:
77  {
78  input.close();
79  error_str << file_name;
80  LOG(ERROR, error_str.str());
81  return 0;
82  }
83 }
84 
86  return sandesh_maps_;
87 }
88 
91  audit_handle_.reset();
92 }
93 
96  Op op) :
97  key_(key), data_(data), op_(op) {
98 }
99 
101 }
102 
104  key_.get()->Backup(data_.get(), op_);
105 }
106 
109  key_(key), data_(data) {
110 }
111 
113 }
ResourceBackupReq(ResourceManager::KeyPtr key, ResourceManager::DataPtr data, Op op)
ResourceManager::KeyPtr key_
boost::shared_ptr< ResourceKey > KeyPtr
ResourceSandeshMaps sandesh_maps_
boost::shared_ptr< ResourceData > DataPtr
EventNotifier * event_notifier() const
Definition: agent.cc:893
bool WorkQueueBackUpProcess(ResourceBackupReqPtr backup_data)
WorkQueue< ResourceBackupReqPtr > backup_work_queue_
static uint32_t ReadResourceDataFromFile(const std::string &file_name, std::unique_ptr< uint8_t > *buf)
#define kAgentResourceBackUpTask
Definition: agent.h:340
void BackupResource(ResourceManager::KeyPtr key, ResourceManager::DataPtr data, ResourceBackupReq::Op op)
boost::shared_ptr< ResourceBackupReq > ResourceBackupReqPtr
virtual ~ResourceBackupManager()
virtual ~ResourceRestoreReq()
#define LOG(_Level, _Msg)
Definition: logging.h:33
void DeregisterSubscriber(EventNotifyHandle::Ptr ptr)
ResourceSandeshMaps & sandesh_maps()
ResourceRestoreReq(ResourceManager::KeyPtr key, ResourceManager::DataPtr data)
virtual ~ResourceBackupReq()
ResourceBackupManager(ResourceManager *mgr)
EventNotifyHandle::Ptr RegisterSubscriber(EventNotifyKey *key, Callback callback)
ResourceManager::DataPtr data_
bool Enqueue(QueueEntryT entry)
Definition: queue_task.h:248
EventNotifyHandle::Ptr audit_handle_