Revision: 175
Author:
sma...@gmail.com
Date: Thu Feb 21 17:10:53 2013
Log: Fix regression bug in purgePublisher introduced in r128;
refactored similar code used in multiple places into single method. Thank
you Orlie B for the bug report.
http://code.google.com/p/omapd/source/detail?r=175
Modified:
/trunk/clienthandler.cpp
/trunk/clienthandler.h
=======================================
--- /trunk/clienthandler.cpp Thu Jan 3 17:06:35 2013
+++ /trunk/clienthandler.cpp Thu Feb 21 17:10:53 2013
@@ -103,20 +103,7 @@
}
// Delete all session-level metadata for this publisher
- QHash<Id, QList<Meta> > idMetaDeleted;
- QHash<Link, QList<Meta> > linkMetaDeleted;
- bool haveChange =
_mapGraph->deleteMetaWithPublisherId(publisherId, &idMetaDeleted,
&linkMetaDeleted, true);
- // Check subscriptions for changes to Map Graph
- while (haveChange) {
- updateSubscriptions(idMetaDeleted, linkMetaDeleted);
- if
(_omapdConfig->valueFor("debug_level").value<OmapdConfig::IfmapDebugOptions>().testFlag(OmapdConfig::ShowMAPGraphAfterChange))
{
- _mapGraph->dumpMap();
- }
- idMetaDeleted.clear();
- linkMetaDeleted.clear();
- haveChange = _mapGraph->deleteMetaWithPublisherId(publisherId,
&idMetaDeleted, &linkMetaDeleted, true);
- }
- sendResultsOnActivePolls();
+ purgePublisher(publisherId, true);
}
}
@@ -1093,18 +1080,7 @@
}
if (!requestError) {
- QHash<Id, QList<Meta> > idMetaDeleted;
- QHash<Link, QList<Meta> > linkMetaDeleted;
- bool haveChange =
_mapGraph->deleteMetaWithPublisherId(purgePubId, &idMetaDeleted,
&linkMetaDeleted);
-
- // Check subscriptions for changes to Map Graph
- if (haveChange) {
- updateSubscriptions(idMetaDeleted, linkMetaDeleted);
- sendResultsOnActivePolls();
- if
(_omapdConfig->valueFor("debug_level").value<OmapdConfig::IfmapDebugOptions>().testFlag(OmapdConfig::ShowMAPGraphAfterChange))
{
- _mapGraph->dumpMap();
- }
- }
+ purgePublisher(purgePubId, false);
}
}
@@ -1242,20 +1218,7 @@
to create another session.
*/
// Delete all session-level metadata for this publisher
- QHash<Id, QList<Meta> > idMetaDeleted;
- QHash<Link, QList<Meta> > linkMetaDeleted;
- bool haveChange =
_mapGraph->deleteMetaWithPublisherId(publisherId, &idMetaDeleted,
&linkMetaDeleted, true);
- // Check subscriptions for changes to Map Graph
- while (haveChange) {
- updateSubscriptions(idMetaDeleted, linkMetaDeleted);
- if
(_omapdConfig->valueFor("debug_level").value<OmapdConfig::IfmapDebugOptions>().testFlag(OmapdConfig::ShowMAPGraphAfterChange))
{
- _mapGraph->dumpMap();
- }
- idMetaDeleted.clear();
- linkMetaDeleted.clear();
- haveChange = _mapGraph->deleteMetaWithPublisherId(publisherId,
&idMetaDeleted, &linkMetaDeleted, true);
- }
- sendResultsOnActivePolls();
+ purgePublisher(publisherId, true);
}
return hadExistingSSRCSession;
@@ -1296,6 +1259,32 @@
return hadExistingARCSession;
}
+
+bool ClientHandler::purgePublisher(QString publisherId, bool
sessionMetadataOnly)
+{
+ bool haveChanges = false;
+ bool haveChange = true;
+ while (haveChange) {
+ QHash<Id, QList<Meta> > idMetaDeleted;
+ QHash<Link, QList<Meta> > linkMetaDeleted;
+ // Need to iterate since only a metadata on a single link will be
deleted by deleteMetaWithPublisherId
+ haveChange = _mapGraph->deleteMetaWithPublisherId(publisherId,
&idMetaDeleted, &linkMetaDeleted, sessionMetadataOnly);
+
+ // Check subscriptions for changes to Map Graph
+ if (haveChange) {
+ updateSubscriptions(idMetaDeleted, linkMetaDeleted);
+ haveChanges = true;
+ }
+ }
+ if (haveChanges) {
+ sendResultsOnActivePolls();
+ if
(_omapdConfig->valueFor("debug_level").value<OmapdConfig::IfmapDebugOptions>().testFlag(OmapdConfig::ShowMAPGraphAfterChange))
{
+ _mapGraph->dumpMap();
+ }
+ }
+
+ return haveChanges;
+}
QString ClientHandler::filteredMetadata(Meta meta, QString filter,
QMap<QString, QString> searchNamespaces, MapRequest::RequestError &error)
{
=======================================
--- /trunk/clienthandler.h Tue Nov 6 14:23:45 2012
+++ /trunk/clienthandler.h Thu Feb 21 17:10:53 2013
@@ -106,6 +106,7 @@
bool terminateSession(QString sessionId, MapRequest::RequestVersion
requestVersion);
bool terminateARCSession(QString sessionId, MapRequest::RequestVersion
requestVersion);
+ bool purgePublisher(QString publisherId, bool sessionMetadataOnly);
private:
OmapdConfig* _omapdConfig;