OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ovsdb_entry.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef SRC_VNSW_AGENT_OVS_TOR_AGENT_OVSDB_CLIENT_OVSDB_ENTRY_H_
6 #define SRC_VNSW_AGENT_OVS_TOR_AGENT_OVSDB_CLIENT_OVSDB_ENTRY_H_
7 
8 #include <boost/intrusive_ptr.hpp>
9 
10 #include <db/db_entry.h>
11 #include <ksync/ksync_entry.h>
12 
13 class KSyncObject;
14 
15 namespace OVSDB {
16 class OvsdbObject;
17 class OvsdbDBObject;
18 class OvsdbClientIdl;
19 
21 public:
22  virtual void Ack(bool success) = 0;
23 
24  // this API is called when the transaction ends up forming an
25  // empty message, to provide success ACK event, this can be
26  // overriden by the derived class to get triggers
27  virtual void TxnDoneNoMessage() {}
28 
30  virtual KSyncObject* GetObject() const = 0;
31 
32 protected:
33  friend class OvsdbClientIdl;
35 };
36 
37 class OvsdbEntry : public KSyncEntry, public OvsdbEntryBase {
38 public:
39  OvsdbEntry(OvsdbObject *table);
40  OvsdbEntry(OvsdbObject *table, uint32_t index);
41  virtual ~OvsdbEntry();
42 
43  virtual bool Add();
44  virtual bool Change();
45  virtual bool Delete();
46 
47  struct ovsdb_idl_row *ovs_entry() {return ovs_entry_;}
48  KSyncObject* GetObject() const;
49  void Ack(bool success);
50 
51 protected:
53  struct ovsdb_idl_row *ovs_entry_;
54 
55 private:
57 };
58 
59 class OvsdbDBEntry : public KSyncDBEntry, public OvsdbEntryBase {
60 public:
62  OvsdbDBEntry(OvsdbDBObject *table, struct ovsdb_idl_row *ovs_entry);
63  virtual ~OvsdbDBEntry();
64 
65  // pre processing callback for add/change msg to take object reference
66  virtual void PreAddChange() {}
67  // post processing callback for delete msg to release object reference
68  // it can result in another delete transaction, so should be triggered
69  // after we are done with the current transaction
70  virtual void PostDelete() {}
71  // Encode add message for entry
72  virtual void AddMsg(struct ovsdb_idl_txn *) {}
73  // Encode change message for entry
74  virtual void ChangeMsg(struct ovsdb_idl_txn *) {}
75  // Encode delete message for entry
76  virtual void DeleteMsg(struct ovsdb_idl_txn *) {}
77 
78  virtual void OvsdbChange() {}
79  // All stale entries get a prior notification before action is taken.
80  virtual void StaleTimerExpired() { }
81 
82  bool AllowDeleteStateComp() {return false;}
83  virtual void NotifyAdd(struct ovsdb_idl_row *);
84  virtual void NotifyDelete(struct ovsdb_idl_row *);
85 
86  virtual bool Add();
87  virtual bool Change();
88  virtual bool Delete();
89 
90  virtual bool IsDataResolved();
91  bool IsDelAckWaiting();
92  bool IsAddChangeAckWaiting();
93 
94  struct ovsdb_idl_row *ovs_entry() {return ovs_entry_;}
95 
96  OvsdbDBObject *table() { return table_;}
97 
98  KSyncObject* GetObject() const;
99  virtual void Ack(bool success);
100 
101  void TriggerDeleteAdd();
102 
103 protected:
104  // by default create transaction for all entries
105  virtual bool IsNoTxnEntry() { return false; }
106 
107  // by default dont use bulk txn
108  virtual bool UseBulkTxn() { return false; }
109 
111  struct ovsdb_idl_row *ovs_entry_;
112 
113 private:
114  friend class OvsdbDBObject;
116 };
117 };
118 
119 #endif //SRC_VNSW_AGENT_OVS_TOR_AGENT_OVSDB_CLIENT_OVSDB_ENTRY_H_
120 
virtual void ChangeMsg(struct ovsdb_idl_txn *)
Definition: ovsdb_entry.h:74
OvsdbDBEntry(OvsdbDBObject *table)
Definition: ovsdb_entry.cc:53
virtual void PreAddChange()
Definition: ovsdb_entry.h:66
virtual void DeleteMsg(struct ovsdb_idl_txn *)
Definition: ovsdb_entry.h:76
virtual bool Change()
Definition: ovsdb_entry.cc:97
OvsdbDBObject * table()
Definition: ovsdb_entry.h:96
virtual void TxnDoneNoMessage()
Definition: ovsdb_entry.h:27
virtual void StaleTimerExpired()
Definition: ovsdb_entry.h:80
struct ovsdb_idl_row * ovs_entry()
Definition: ovsdb_entry.h:94
struct ovsdb_idl_row * ovs_entry_
Definition: ovsdb_entry.h:53
bool IsAddChangeAckWaiting()
Definition: ovsdb_entry.cc:173
virtual void PostDelete()
Definition: ovsdb_entry.h:70
DISALLOW_COPY_AND_ASSIGN(OvsdbDBEntry)
bool AllowDeleteStateComp()
Definition: ovsdb_entry.h:82
KSyncObject * GetObject() const
Definition: ovsdb_entry.cc:194
struct ovsdb_idl_row * ovs_entry_
Definition: ovsdb_entry.h:111
virtual bool Delete()
Definition: ovsdb_entry.cc:35
virtual bool IsDataResolved()
Definition: ovsdb_entry.cc:164
virtual KSyncObject * GetObject() const =0
OvsdbEntry(OvsdbObject *table)
Definition: ovsdb_entry.cc:16
struct ovsdb_idl_row * ovs_entry()
Definition: ovsdb_entry.h:47
virtual bool Delete()
Definition: ovsdb_entry.cc:130
virtual bool UseBulkTxn()
Definition: ovsdb_entry.h:108
virtual ~OvsdbEntry()
Definition: ovsdb_entry.cc:24
virtual void NotifyDelete(struct ovsdb_idl_row *)
Definition: ovsdb_entry.cc:190
virtual ~OvsdbDBEntry()
Definition: ovsdb_entry.cc:61
virtual void NotifyAdd(struct ovsdb_idl_row *)
Definition: ovsdb_entry.cc:179
virtual bool Add()
Definition: ovsdb_entry.cc:64
virtual void AddMsg(struct ovsdb_idl_txn *)
Definition: ovsdb_entry.h:72
OvsdbObject * table_
Definition: ovsdb_entry.h:52
virtual void Ack(bool success)=0
virtual void Ack(bool success)
Definition: ovsdb_entry.cc:198
KSyncObject * GetObject() const
Definition: ovsdb_entry.cc:39
virtual bool IsNoTxnEntry()
Definition: ovsdb_entry.h:105
virtual bool Change()
Definition: ovsdb_entry.cc:31
virtual void OvsdbChange()
Definition: ovsdb_entry.h:78
DISALLOW_COPY_AND_ASSIGN(OvsdbEntry)
virtual bool Add()
Definition: ovsdb_entry.cc:27
OvsdbDBObject * table_
Definition: ovsdb_entry.h:110
void Ack(bool success)
Definition: ovsdb_entry.cc:43
KSyncEntry::KSyncEvent ack_event()
Definition: ovsdb_entry.h:29
KSyncEntry::KSyncEvent ack_event_
Definition: ovsdb_entry.h:34