OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ifmap_update_sender.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef __ctrlplane__ifmap_update_sender__
6 #define __ctrlplane__ifmap_update_sender__
7 
8 #include <tbb/mutex.h>
9 #include "base/bitset.h"
10 #include "ifmap/ifmap_encoder.h"
11 
12 struct IFMapMarker;
13 class IFMapUpdate;
14 class IFMapServer;
15 class IFMapState;
16 class IFMapUpdate;
17 class IFMapUpdateQueue;
18 
20 public:
22  virtual ~IFMapUpdateSender();
23 
24  // events
25 
26  // Event posted when the update queue has elements to transmit.
27  virtual void QueueActive();
28 
29  // Event posted when a particular client is ready to send updates
30  // (after previously blocking).
31  virtual void SendActive(int index);
32 
33  void CleanupClient(int index);
34 
35  void SetServer(IFMapServer *srv) { server_ = srv; }
36 
39  }
40 
41  bool IsClientBlocked(int client_index) {
42  return send_blocked_.test(client_index);
43  }
44 
45 private:
46  class SendTask;
47  friend class IFMapUpdateSenderTest;
48 
49  void StartTask();
50 
51  void Send(IFMapMarker *imarker);
52 
53  void SendUpdate(BitSet send_set, BitSet *blocked_set);
54 
55  IFMapMarker* ProcessMarker(IFMapMarker *marker, IFMapMarker *next_marker,
56  bool *done);
57  void ProcessUpdate(IFMapUpdate *update, const BitSet &base_send_set);
58 
59  void GetSendScheduled(BitSet *current);
61  const BitSet &base_send_set);
62 
66 
67  tbb::mutex mutex_; // protect scheduling of send task
70  BitSet send_scheduled_; // client-set for which send active was called
71  BitSet send_blocked_; // client-set for clients that are blocked
72 
73  void SetSendBlocked(int client_index) {
74  send_blocked_.set(client_index);
75  }
76 };
77 
78 #endif /* defined(__ctrlplane__ifmap_update_sender__) */
void ProcessUpdate(IFMapUpdate *update, const BitSet &base_send_set)
void SetObjectsPerMessage(int num)
bool test(size_t pos) const
Definition: bitset.cc:146
IFMapUpdateQueue * queue_
virtual void QueueActive()
void SetServer(IFMapServer *srv)
virtual void SendActive(int index)
void SendUpdate(BitSet send_set, BitSet *blocked_set)
void SetSendBlocked(int client_index)
bool IsClientBlocked(int client_index)
void LogAndCountSentUpdate(IFMapUpdate *update, const BitSet &base_send_set)
IFMapMarker * ProcessMarker(IFMapMarker *marker, IFMapMarker *next_marker, bool *done)
friend class IFMapUpdateSenderTest
Definition: bitset.h:17
void SetObjectsPerMessage(int num)
BitSet & set(size_t pos)
Definition: bitset.cc:125
IFMapUpdateSender(IFMapServer *server, IFMapUpdateQueue *queue)
void CleanupClient(int index)
void Send(IFMapMarker *imarker)
void GetSendScheduled(BitSet *current)
IFMapMessage * message_