CMS 3D CMS Logo

DQMBasicNet Class Reference

#include <DQMServices/Core/interface/DQMNet.h>

Inheritance diagram for DQMBasicNet:

DQMImplNet< DQMNet::Object > DQMNet

List of all members.

Public Member Functions

 DQMBasicNet (const std::string &appname="")
virtual int receive (DQMStore *store)

Protected Member Functions

virtual void removeLocalObject (const std::string &name)
 Delete the local object.
virtual void requestFullUpdatesFromPeers (void)
virtual void updateLocalObject (Object &o)
 Update the network cache for an object.

Private Attributes

ImplPeer * local_


Detailed Description

Definition at line 507 of file DQMNet.h.


Constructor & Destructor Documentation

DQMBasicNet::DQMBasicNet ( const std::string &  appname = ""  ) 

Definition at line 1424 of file DQMNet.cc.

References DQMImplNet< DQMNet::Object >::createPeer(), and local_.

01425   : DQMImplNet<DQMNet::Object>(appname)
01426 {
01427   local_ = static_cast<ImplPeer *>(createPeer((Socket *) -1));
01428 }


Member Function Documentation

int DQMBasicNet::receive ( DQMStore store  )  [virtual]

Reimplemented from DQMNet.

Definition at line 1431 of file DQMNet.cc.

References DQMNet::DQM_FLAG_DEAD, DQMNet::DQM_FLAG_RECEIVED, DQMNet::CoreObject::flags, local_, DQMNet::lock(), name, DQMNet::CoreObject::name, p, DQMImplNet< DQMNet::Object >::peers_, pi, DQMNet::reinstateObject(), DQMStore::removeElement(), DQMStore::setCurrentFolder(), and DQMNet::unlock().

01432 {
01433   int updates = 0;
01434 
01435   lock();
01436   PeerMap::iterator pi, pe;
01437   ObjectMap::iterator oi, oe;
01438   for (pi = peers_.begin(), pe = peers_.end(); pi != pe; ++pi)
01439   {
01440     ImplPeer &p = pi->second;
01441     if (&p == local_)
01442       continue;
01443 
01444     updates += p.updates;
01445 
01446     for (oi = p.objs.begin(), oe = p.objs.end(); oi != oe; )
01447     {
01448       Object &o = oi->second;
01449       if (o.flags & DQM_FLAG_DEAD)
01450       {
01451         std::string folder = o.name;
01452         std::string name = o.name;
01453         folder.erase(folder.rfind('/'), std::string::npos);
01454         name.erase(0, name.rfind('/')+1);
01455         store->setCurrentFolder(folder);
01456         store->removeElement(name);
01457         p.objs.erase(oi++);
01458       }
01459       else if ((o.flags & DQM_FLAG_RECEIVED) && reinstateObject(store, o))
01460       {
01461         o.flags &= ~DQM_FLAG_RECEIVED;
01462         ++oi;
01463       }
01464     }
01465   }
01466   unlock();
01467 
01468   return updates;
01469 }

void DQMBasicNet::removeLocalObject ( const std::string &  path  )  [protected, virtual]

Delete the local object.

The caller must call sendLocalChanges() later to push out the changes.

Reimplemented from DQMNet.

Definition at line 1498 of file DQMNet.cc.

References local_.

01499 {
01500   local_->objs.erase(path);
01501 }

void DQMBasicNet::requestFullUpdatesFromPeers ( void   )  [protected, virtual]

Reimplemented from DQMImplNet< DQMNet::Object >.

Definition at line 1504 of file DQMNet.cc.

References DQMNet::copydata(), DQMNet::DQM_MSG_UPDATE_ME, e, i, alivecheck_mergeAndRegister::msg, DQMNet::Bucket::next, p, and DQMImplNet< DQMNet::Object >::peers_.

01505 {
01506   for (PeerMap::iterator i = peers_.begin(), e = peers_.end(); i != e; ++i)
01507   {
01508     ImplPeer &p = i->second;
01509     if (! p.source)
01510       continue;
01511 
01512     Bucket **msg = &p.sendq;
01513     while (*msg)
01514       msg = &(*msg)->next;
01515     *msg = new Bucket;
01516     (*msg)->next = 0;
01517 
01518     uint32_t words[3] = { 3*sizeof(uint32_t), DQM_MSG_UPDATE_ME, 1 };
01519     copydata(*msg, words, sizeof(words));
01520   }
01521 }

void DQMBasicNet::updateLocalObject ( Object o  )  [protected, virtual]

Update the network cache for an object.

The caller must call sendLocalChanges() later to push out the changes.

Reimplemented from DQMNet.

Definition at line 1474 of file DQMNet.cc.

References DQMNet::CoreObject::flags, local_, DQMNet::CoreObject::name, DQMNet::CoreObject::qreports, DQMNet::Object::rawdata, std::swap(), DQMNet::CoreObject::tags, and DQMNet::CoreObject::version.

01475 {
01476   ObjectMap::iterator pos = local_->objs.find(o.name);
01477   if (pos == local_->objs.end())
01478     local_->objs.insert(ObjectMap::value_type(o.name, o));
01479   else
01480   {
01481     std::swap(pos->second.version,   o.version);
01482     std::swap(pos->second.tags,      o.tags);
01483     std::swap(pos->second.qreports,  o.qreports);
01484     std::swap(pos->second.flags,     o.flags);
01485     std::swap(pos->second.rawdata,   o.rawdata);
01486 
01487     delete pos->second.object;
01488     pos->second.object = 0;
01489     delete pos->second.reference;
01490     pos->second.reference = 0;
01491     pos->second.lastreq = 0;
01492   }
01493 }


Member Data Documentation

ImplPeer* DQMBasicNet::local_ [private]

Definition at line 520 of file DQMNet.h.

Referenced by DQMBasicNet(), receive(), removeLocalObject(), and updateLocalObject().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:18:31 2009 for CMSSW by  doxygen 1.5.4