OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
db.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef ctrlplane_db_h
6 #define ctrlplane_db_h
7 
8 #include <map>
9 #include <vector>
10 
11 #include <boost/function.hpp>
12 #include <tbb/mutex.h>
13 
14 #include "base/util.h"
15 
16 class DBGraph;
17 class DBPartition;
18 class DBTableBase;
19 class DBTableWalker;
20 class DBTableWalkMgr;
21 
22 // A database is a collection of tables.
23 // The storage is implemented by a set of shards (DB Partitions).
24 class DB {
25 public:
26  typedef boost::function<DBTableBase *(DB *, const std::string &)>
28  typedef std::map<std::string, DBTableBase *> TableMap;
29  typedef TableMap::iterator iterator;
30  typedef TableMap::const_iterator const_iterator;
31 
32  DB(int task_id = -1);
33  ~DB();
34 
35  // Get the partition with the specified id.
36  DBPartition *GetPartition(int index);
37  const DBPartition *GetPartition(int index) const;
38 
39  void AddTable(DBTableBase *tbl_base);
40 
41  // Table creation.
42  DBTableBase *CreateTable(const std::string &name);
43  DBTableBase *FindTable(const std::string &name);
44  iterator FindTableIter(const std::string &name);
45  void RemoveTable(DBTableBase *tbl_base);
46 
47  // Table walker
49  return walker_.get();
50  }
52  return walk_mgr_.get();
53  }
54 
55  DBGraph *GetGraph(const std::string &name);
56  void SetGraph(const std::string &name, DBGraph *graph);
57  void SetQueueDisable(bool disable);
58 
59  static void SetPartitionCount(int partition_count);
60  static int PartitionCount();
61  static void RegisterFactory(const std::string &prefix,
62  CreateFunction create_fn);
63  static void ClearFactoryRegistry();
64 
65  void Clear();
66  bool IsDBQueueEmpty() const;
67 
68  iterator begin() { return tables_.begin(); }
69  iterator end() { return tables_.end(); }
70  iterator lower_bound(const std::string &name) {
71  return tables_.lower_bound(name);
72  }
73  const_iterator const_begin() { return tables_.begin(); }
74  const_iterator const_end() { return tables_.end(); }
75  const_iterator const_lower_bound(const std::string &name) {
76  return tables_.lower_bound(name);
77  }
78 
79  int task_id() const { return task_id_; }
80 
81 private:
82  typedef std::map<std::string, CreateFunction> FactoryMap;
83  typedef std::map<std::string, DBGraph *> GraphMap;
84 
85  static int partition_count_;
86  static FactoryMap *factories();
87 
88  tbb::mutex mutex_;
89  int task_id_;
90  std::vector<DBPartition *> partitions_;
93  std::unique_ptr<DBTableWalker> walker_;
94  std::unique_ptr<DBTableWalkMgr> walk_mgr_;
95 
97 };
98 
99 #endif
void Clear()
Definition: db.cc:142
iterator end()
Definition: db.h:69
const_iterator const_end()
Definition: db.h:74
static FactoryMap * factories()
Definition: db.cc:19
int task_id_
Definition: db.h:89
static void SetPartitionCount(int partition_count)
Definition: db.cc:42
void SetQueueDisable(bool disable)
Definition: db.cc:136
std::unique_ptr< DBTableWalkMgr > walk_mgr_
Definition: db.h:94
std::map< std::string, DBTableBase * > TableMap
Definition: db.h:28
TableMap tables_
Definition: db.h:91
iterator begin()
Definition: db.h:68
bool IsDBQueueEmpty() const
Definition: db.cc:91
DBTableBase * CreateTable(const std::string &name)
Definition: db.cc:99
DISALLOW_COPY_AND_ASSIGN(DB)
iterator FindTableIter(const std::string &name)
Definition: db.cc:77
std::map< std::string, DBGraph * > GraphMap
Definition: db.h:83
void RemoveTable(DBTableBase *tbl_base)
Definition: db.cc:87
Definition: db.h:24
std::vector< DBPartition * > partitions_
Definition: db.h:90
static void ClearFactoryRegistry()
Definition: db.cc:28
const_iterator const_lower_bound(const std::string &name)
Definition: db.h:75
DBTableWalker * GetWalker()
Definition: db.h:48
tbb::mutex mutex_
Definition: db.h:88
const_iterator const_begin()
Definition: db.h:73
TableMap::iterator iterator
Definition: db.h:29
TableMap::const_iterator const_iterator
Definition: db.h:30
DB(int task_id=-1)
Definition: db.cc:46
~DB()
Definition: db.cc:56
iterator lower_bound(const std::string &name)
Definition: db.h:70
DBGraph * GetGraph(const std::string &name)
Definition: db.cc:122
int task_id() const
Definition: db.h:79
static int partition_count_
Definition: db.h:85
std::unique_ptr< DBTableWalker > walker_
Definition: db.h:93
boost::function< DBTableBase *(DB *, const std::string &)> CreateFunction
Definition: db.h:27
void AddTable(DBTableBase *tbl_base)
Definition: db.cc:81
static int PartitionCount()
Definition: db.cc:32
DBTableWalkMgr * GetWalkMgr()
Definition: db.h:51
void SetGraph(const std::string &name, DBGraph *graph)
Definition: db.cc:130
std::map< std::string, CreateFunction > FactoryMap
Definition: db.h:82
DBPartition * GetPartition(int index)
Definition: db.cc:60
DBTableBase * FindTable(const std::string &name)
Definition: db.cc:68
static void RegisterFactory(const std::string &prefix, CreateFunction create_fn)
Definition: db.cc:24
GraphMap graph_map_
Definition: db.h:92