#include <DQMServices/Core/interface/DQMNet.h>
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_ |
Definition at line 507 of file DQMNet.h.
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 }
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] |
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 }
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 }
ImplPeer* DQMBasicNet::local_ [private] |
Definition at line 520 of file DQMNet.h.
Referenced by DQMBasicNet(), receive(), removeLocalObject(), and updateLocalObject().