Finalizing implementation of recovery procedures (when an unknown digest

is received, we remember it. when we generate a new data, send the full
state out)
This commit is contained in:
Alexander Afanasyev committed 2012-05-24 10:57:14 -07:00
1 parent 46eb526e7e
commit 2b6fbfba08
3 files changed
+12 -8

No files matched your search

+2 -2
View File
@@ -58,7 +58,7 @@ SyncInterestTable::pop ()
}
bool
SyncInterestTable::insert (DigestConstPtr digest, const string &name)
SyncInterestTable::insert (DigestConstPtr digest, const string &name, bool unknownState/*=false*/)
{
bool existent = false;
@@ -69,7 +69,7 @@ SyncInterestTable::insert (DigestConstPtr digest, const string &name)
existent = true;
m_table.erase (it);
}
m_table.insert (Interest (digest, name));
m_table.insert (Interest (digest, name, unknownState));
return existent;
}
+1 -1
View File
@@ -52,7 +52,7 @@ public:
* timestamp
*/
bool
insert (DigestConstPtr interest, const std::string &name);
insert (DigestConstPtr interest, const std::string &name, bool unknownState=false);
/**
* @brief Remove interest by digest (e.g., when it was satisfied)
+9 -5
View File
@@ -65,8 +65,8 @@ SyncLogic::SyncLogic (const std::string &syncPrefix,
, m_ccnxHandle(new CcnxWrapper())
#ifndef NS3_MODULE
, m_randomGenerator (static_cast<unsigned int> (std::time (0)))
, m_rangeUniformRandom (m_randomGenerator, uniform_int<> (500,1000))
, m_reexpressionJitter (m_randomGenerator, uniform_int<> (0,100))
, m_rangeUniformRandom (m_randomGenerator, uniform_int<> (200,1000))
, m_reexpressionJitter (m_randomGenerator, uniform_int<> (100,500))
#else
, m_rangeUniformRandom (200,1000)
, m_reexpressionJitter (100,500)
@@ -219,7 +219,7 @@ SyncLogic::processSyncInterest (const std::string &name, DigestConstPtr digest,
if (*m_state->getDigest() == *digest)
{
_LOG_TRACE ("processSyncInterest (): Same state. Adding to PIT");
m_syncInterestTable.insert (digest, name);
m_syncInterestTable.insert (digest, name, false);
return;
}
@@ -235,7 +235,7 @@ SyncLogic::processSyncInterest (const std::string &name, DigestConstPtr digest,
if (!timedProcessing)
{
bool exists = m_syncInterestTable.insert (digest, name);
bool exists = m_syncInterestTable.insert (digest, name, true);
if (exists) // somebody else replied, so restart random-game timer
{
_LOG_DEBUG ("Unknown digest, but somebody may have already replied, so restart our timer");
@@ -260,6 +260,7 @@ void
SyncLogic::processSyncData (const std::string &name, DigestConstPtr digest, const string &dataBuffer)
{
DiffStatePtr diffLog = make_shared<DiffState> ();
bool ownInterestSatisfied = false;
try
{
@@ -267,6 +268,8 @@ SyncLogic::processSyncData (const std::string &name, DigestConstPtr digest, cons
m_syncInterestTable.remove (name); // Remove satisfied interest from PIT
ownInterestSatisfied = (name == m_outstandingInterestName);
DiffState diff;
istringstream ss (dataBuffer);
ss >> diff;
@@ -315,7 +318,8 @@ SyncLogic::processSyncData (const std::string &name, DigestConstPtr digest, cons
// don't do anything
}
if (diffLog != 0 && diffLog->getLeaves ().size () > 0)
if ((diffLog != 0 && diffLog->getLeaves ().size () > 0) ||
ownInterestSatisfied)
{
// Do it only if everything went fine and state changed