7 #include <boost/checked_delete.hpp>
8 #include <boost/assign/list_of.hpp>
10 #include <sandesh/request_pipeline.h>
16 #include "ifmap/ifmap_server_show_types.h"
29 list_.push_back(*item);
45 list_.insert(++
list_.iterator_to(*ptr), *item);
62 boost::checked_delete(ptr);
112 for (List::iterator iter =
list_.iterator_to(*marker), next;
113 iter !=
list_.end(); iter = next) {
130 marker->mask.reset(bit);
131 if ((marker != &
tail_marker_) && (marker->mask.empty())) {
162 const BitSet &msplit,
bool before) {
163 assert(!msplit.
empty());
167 new_marker->mask = msplit;
175 loc->second = new_marker;
206 if (marker != current) {
215 if (marker != current) {
222 List::iterator iter =
list_.iterator_to(*current);
223 if (iter ==
list_.begin()) {
227 return iter.operator->();
232 assert(!
list_.empty());
233 List::reverse_iterator riter;
234 riter =
list_.rbegin();
235 return riter.operator->();
239 List::iterator iter =
list_.iterator_to(*current);
240 if (++iter ==
list_.end()) {
243 return iter.operator->();
252 return (
int)
list_.size();
258 List::iterator iter =
list_.iterator_to(
list_.front());
259 while (iter !=
list_.end()) {
260 item = iter.operator->();
264 std::cout << i <<
". Tail Marker: " << item;
266 std::cout << i <<
". Marker: " << item;
268 std::cout <<
" clients:";
271 std::cout <<
" " << j;
273 std::cout << std::endl;
276 std::cout << i <<
". Update: " << item <<
" ";
279 std::cout << i <<
". Delete: " << item <<
" ";
285 std::cout <<
"node <";
286 std::cout << ref.
u.
node->
name() <<
">" << std::endl;
295 std::cout <<
"**End of queue**" << std::endl;
317 std::vector<UpdateQueueShowEntry>::const_iterator
first;
330 int stage,
int instNum,
341 dest->node_name =
"<![CDATA[" + ref.
u.
node->
name() +
"]]>";
343 dest->node_name =
"<![CDATA[" + ref.
u.
link->
ToString() +
"]]>";
346 dest->qe_type =
"Update";
349 dest->qe_type =
"Delete";
355 dest->node_name =
"Marker";
357 dest->qe_type =
"Tail-Marker";
359 dest->qe_type =
"Marker";
369 int stage,
int instNum,
371 const IFMapUpdateQueueShowReq *request =
372 static_cast<const IFMapUpdateQueueShowReq *
>(ps.
snhRequest_.get());
381 IFMapUpdateQueue::List::iterator iter =
382 queue->
list_.iterator_to(queue->
list_.front());
383 while (iter != queue->
list_.end()) {
386 UpdateQueueShowEntry dest;
399 int stage,
int instNum,
404 (prev_stage_data->at(0));
408 std::vector<UpdateQueueShowEntry> dest_buffer;
409 std::vector<UpdateQueueShowEntry>::const_iterator first, last;
412 if (tracker_data->
init) {
414 tracker_data->
init = 0;
416 first = tracker_data->
first;
421 last = first + send_num;
422 copy(first, last, back_inserter(dest_buffer));
424 if ((rem_num - send_num) > 0) {
429 const IFMapUpdateQueueShowReq *request =
430 static_cast<const IFMapUpdateQueueShowReq *
>(ps.
snhRequest_.get());
431 IFMapUpdateQueueShowResp *response =
new IFMapUpdateQueueShowResp();
432 response->set_queue(dest_buffer);
433 response->set_context(request->context());
434 response->set_more(more);
435 response->Response();
436 tracker_data->
first = first + send_num;
442 void IFMapUpdateQueueShowReq::HandleRequest()
const {
461 ps.stages_= boost::assign::list_of(s0)(s1)
462 .convert_to_container<vector<RequestPipeline::StageSpec> >();
static RequestPipeline::InstData * AllocBuffer(int stage)
std::vector< int > instances_
std::vector< UpdateQueueShowEntry > send_buffer
IFMapServer * ifmap_server()
The TaskScheduler keeps track of what tasks are currently schedulable. When a task is enqueued it is ...
IFMapMarker * MarkerSplit(IFMapMarker *marker, IFMapListEntry *current, const BitSet &msplit, bool before)
boost::ptr_vector< InstData > StageData
static RequestPipeline::InstData * AllocTracker(int stage)
void MoveMarkerBefore(IFMapMarker *marker, IFMapListEntry *current)
void ClearAndDisposeList()
void MoveMarkerAfter(IFMapMarker *marker, IFMapListEntry *current)
void Reset(const BitSet &rhs)
IFMapMarker * tail_marker()
void SetSequence(IFMapListEntry *item)
IFMapListEntry * GetLast()
static const uint64_t NULL_SEQUENCE
IFMapExporter * exporter()
const BitSet & advertise() const
void AdvertiseReset(const BitSet &set)
int GetTaskId(const std::string &name)
IFMapMarker * GetMarker(int bit)
void Dequeue(IFMapUpdate *update)
IFMapMarker * MarkerSplitAfter(IFMapMarker *marker, IFMapListEntry *current, const BitSet &msplit)
static TaskScheduler * GetInstance()
const IFMapObjectPtr & data() const
std::vector< UpdateQueueShowEntry >::const_iterator first
IFMapMarker * MarkerSplitBefore(IFMapMarker *marker, IFMapListEntry *current, const BitSet &msplit)
IFMapUpdateQueue * queue()
const std::string & name() const
void set_sequence(uint64_t seq)
void EraseFromList(IFMapListEntry *item)
IFMapListEntry * Previous(IFMapListEntry *current)
void StateUpdateOnDequeue(IFMapUpdate *update, const BitSet &dequeue_set, bool is_delete)
void MarkerMerge(IFMapMarker *dst, IFMapMarker *src, const BitSet &mmove)
size_t find_first() const
static void CopyNode(UpdateQueueShowEntry *dest, IFMapListEntry *src, IFMapUpdateQueue *queue)
static bool SendStage(const Sandesh *sr, const RequestPipeline::PipeSpec ps, int stage, int instNum, RequestPipeline::InstData *data)
boost::shared_ptr< const SandeshRequest > snhRequest_
size_t find_next(size_t pos) const
static const int kMaxElementsPerRound
union IFMapObjectPtr::@5 u
void InsertIntoListBefore(IFMapListEntry *ptr, IFMapListEntry *item)
std::string queue_insert_ago_str()
virtual std::string ToString() const
void PushbackIntoList(IFMapListEntry *item)
std::string ToNumberedString() const
void set_queue_insert_at_to_now()
const StageData * GetStageData(int stage) const
void operator()(IFMapListEntry *ptr)
static bool BufferStage(const Sandesh *sr, const RequestPipeline::PipeSpec ps, int stage, int instNum, RequestPipeline::InstData *data)
IFMapUpdateQueue(IFMapServer *server)
void InsertIntoListAfter(IFMapListEntry *ptr, IFMapListEntry *item)
IFMapListEntry * Next(IFMapListEntry *current)
bool Enqueue(IFMapUpdate *update)