fw: eliminate Forwarder::dispatchToStrategy()
Change-Id: Ia2e58c66548644fe3395f7e8c65e860554484fc8
This commit is contained in:
1 parent
b21bed88ed
commit
05590471e0
3 files changed
+28
-68
No files matched your search
+8
-15
@@ -211,11 +211,9 @@ Forwarder::onContentStoreMiss(const FaceEndpoint& ingress,
|
||||
return;
|
||||
}
|
||||
|
||||
// dispatch to strategy: after incoming Interest
|
||||
this->dispatchToStrategy(*pitEntry,
|
||||
[&] (auto& strategy) {
|
||||
strategy.afterReceiveInterest(FaceEndpoint(ingress.face, 0), interest, pitEntry);
|
||||
});
|
||||
// dispatch to strategy: after receive Interest
|
||||
m_strategyChoice.findEffectiveStrategy(*pitEntry)
|
||||
.afterReceiveInterest(FaceEndpoint(ingress.face, 0), interest, pitEntry);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -236,8 +234,7 @@ Forwarder::onContentStoreHit(const FaceEndpoint& ingress, const shared_ptr<pit::
|
||||
this->setExpiryTimer(pitEntry, 0_ms);
|
||||
|
||||
// dispatch to strategy: after Content Store hit
|
||||
this->dispatchToStrategy(*pitEntry,
|
||||
[&] (auto& strategy) { strategy.afterContentStoreHit(pitEntry, ingress, data); });
|
||||
m_strategyChoice.findEffectiveStrategy(*pitEntry).afterContentStoreHit(pitEntry, ingress, data);
|
||||
}
|
||||
|
||||
pit::OutRecord*
|
||||
@@ -324,8 +321,7 @@ Forwarder::onIncomingData(const FaceEndpoint& ingress, const Data& data)
|
||||
this->setExpiryTimer(pitEntry, 0_ms);
|
||||
|
||||
// trigger strategy: after receive Data
|
||||
this->dispatchToStrategy(*pitEntry,
|
||||
[&] (auto& strategy) { strategy.afterReceiveData(pitEntry, ingress, data); });
|
||||
m_strategyChoice.findEffectiveStrategy(*pitEntry).afterReceiveData(pitEntry, ingress, data);
|
||||
|
||||
// mark PIT satisfied
|
||||
pitEntry->isSatisfied = true;
|
||||
@@ -357,8 +353,7 @@ Forwarder::onIncomingData(const FaceEndpoint& ingress, const Data& data)
|
||||
this->setExpiryTimer(pitEntry, 0_ms);
|
||||
|
||||
// invoke PIT satisfy callback
|
||||
this->dispatchToStrategy(*pitEntry,
|
||||
[&] (auto& strategy) { strategy.beforeSatisfyInterest(pitEntry, ingress, data); });
|
||||
m_strategyChoice.findEffectiveStrategy(*pitEntry).beforeSatisfyInterest(pitEntry, ingress, data);
|
||||
|
||||
// mark PIT satisfied
|
||||
pitEntry->isSatisfied = true;
|
||||
@@ -480,8 +475,7 @@ Forwarder::onIncomingNack(const FaceEndpoint& ingress, const lp::Nack& nack)
|
||||
}
|
||||
|
||||
// trigger strategy: after receive NACK
|
||||
this->dispatchToStrategy(*pitEntry,
|
||||
[&] (auto& strategy) { strategy.afterReceiveNack(ingress, nack, pitEntry); });
|
||||
m_strategyChoice.findEffectiveStrategy(*pitEntry).afterReceiveNack(ingress, nack, pitEntry);
|
||||
}
|
||||
|
||||
bool
|
||||
@@ -555,8 +549,7 @@ Forwarder::onNewNextHop(const Name& prefix, const fib::NextHop& nextHop)
|
||||
|
||||
for (const auto& nte : affectedEntries) {
|
||||
for (const auto& pitEntry : nte.getPitEntries()) {
|
||||
this->dispatchToStrategy(*pitEntry,
|
||||
[&] (auto& strategy) { strategy.afterNewNextHop(nextHop, pitEntry); });
|
||||
m_strategyChoice.findEffectiveStrategy(*pitEntry).afterNewNextHop(nextHop, pitEntry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -237,20 +237,6 @@ NFD_PROTECTED_WITH_TESTS_ELSE_PRIVATE:
|
||||
NFD_VIRTUAL_WITH_TESTS void
|
||||
insertDeadNonceList(pit::Entry& pitEntry, Face* upstream);
|
||||
|
||||
/** \brief call trigger (method) on the effective strategy of pitEntry
|
||||
*/
|
||||
#ifdef NFD_WITH_TESTS
|
||||
virtual void
|
||||
dispatchToStrategy(pit::Entry& pitEntry, std::function<void(fw::Strategy&)> trigger)
|
||||
#else
|
||||
template<class Function>
|
||||
void
|
||||
dispatchToStrategy(pit::Entry& pitEntry, Function&& trigger)
|
||||
#endif
|
||||
{
|
||||
trigger(m_strategyChoice.findEffectiveStrategy(pitEntry));
|
||||
}
|
||||
|
||||
private:
|
||||
ForwarderCounters m_counters;
|
||||
|
||||
|
||||
@@ -265,55 +265,36 @@ BOOST_AUTO_TEST_CASE(HopLimit)
|
||||
BOOST_CHECK_EQUAL(faceRemote->sentInterests.size(), 2);
|
||||
}
|
||||
|
||||
class ScopeLocalhostIncomingTestForwarder : public Forwarder
|
||||
BOOST_AUTO_TEST_CASE(ScopeLocalhostIncoming)
|
||||
{
|
||||
public:
|
||||
using Forwarder::Forwarder;
|
||||
auto face1 = addFace("dummy://", "dummy://", ndn::nfd::FACE_SCOPE_LOCAL);
|
||||
auto face2 = addFace(); // default is non-local
|
||||
|
||||
protected:
|
||||
void
|
||||
dispatchToStrategy(pit::Entry&, std::function<void(fw::Strategy&)>) final
|
||||
{
|
||||
++dispatchToStrategy_count;
|
||||
}
|
||||
|
||||
public:
|
||||
int dispatchToStrategy_count = 0;
|
||||
};
|
||||
|
||||
BOOST_FIXTURE_TEST_CASE(ScopeLocalhostIncoming, GlobalIoTimeFixture)
|
||||
{
|
||||
FaceTable faceTable;
|
||||
ScopeLocalhostIncomingTestForwarder forwarder(faceTable);
|
||||
|
||||
auto face1 = make_shared<DummyFace>("dummy://", "dummy://", ndn::nfd::FACE_SCOPE_LOCAL);
|
||||
auto face2 = make_shared<DummyFace>();
|
||||
faceTable.add(face1);
|
||||
faceTable.add(face2);
|
||||
auto& strategy = choose<DummyStrategy>(forwarder, "/", DummyStrategy::getStrategyName());
|
||||
|
||||
// local face, /localhost: OK
|
||||
forwarder.dispatchToStrategy_count = 0;
|
||||
strategy.afterReceiveInterest_count = 0;
|
||||
auto i1 = makeInterest("/localhost/A1");
|
||||
forwarder.onIncomingInterest(FaceEndpoint(*face1, 0), *i1);
|
||||
BOOST_CHECK_EQUAL(forwarder.dispatchToStrategy_count, 1);
|
||||
BOOST_CHECK_EQUAL(strategy.afterReceiveInterest_count, 1);
|
||||
|
||||
// non-local face, /localhost: violate
|
||||
forwarder.dispatchToStrategy_count = 0;
|
||||
strategy.afterReceiveInterest_count = 0;
|
||||
auto i2 = makeInterest("/localhost/A2");
|
||||
forwarder.onIncomingInterest(FaceEndpoint(*face2, 0), *i2);
|
||||
BOOST_CHECK_EQUAL(forwarder.dispatchToStrategy_count, 0);
|
||||
BOOST_CHECK_EQUAL(strategy.afterReceiveInterest_count, 0);
|
||||
|
||||
// local face, non-/localhost: OK
|
||||
forwarder.dispatchToStrategy_count = 0;
|
||||
strategy.afterReceiveInterest_count = 0;
|
||||
auto i3 = makeInterest("/A3");
|
||||
forwarder.onIncomingInterest(FaceEndpoint(*face1, 0), *i3);
|
||||
BOOST_CHECK_EQUAL(forwarder.dispatchToStrategy_count, 1);
|
||||
BOOST_CHECK_EQUAL(strategy.afterReceiveInterest_count, 1);
|
||||
|
||||
// non-local face, non-/localhost: OK
|
||||
forwarder.dispatchToStrategy_count = 0;
|
||||
strategy.afterReceiveInterest_count = 0;
|
||||
auto i4 = makeInterest("/A4");
|
||||
forwarder.onIncomingInterest(FaceEndpoint(*face2, 0), *i4);
|
||||
BOOST_CHECK_EQUAL(forwarder.dispatchToStrategy_count, 1);
|
||||
BOOST_CHECK_EQUAL(strategy.afterReceiveInterest_count, 1);
|
||||
|
||||
BOOST_CHECK_EQUAL(forwarder.getCounters().nUnsolicitedData, 0);
|
||||
|
||||
@@ -322,7 +303,7 @@ BOOST_FIXTURE_TEST_CASE(ScopeLocalhostIncoming, GlobalIoTimeFixture)
|
||||
forwarder.onIncomingData(FaceEndpoint(*face1, 0), *d1);
|
||||
BOOST_CHECK_EQUAL(forwarder.getCounters().nUnsolicitedData, 1);
|
||||
|
||||
// non-local face, /localhost: OK
|
||||
// non-local face, /localhost: violate
|
||||
auto d2 = makeData("/localhost/B2");
|
||||
forwarder.onIncomingData(FaceEndpoint(*face2, 0), *d2);
|
||||
BOOST_CHECK_EQUAL(forwarder.getCounters().nUnsolicitedData, 1);
|
||||
@@ -349,31 +330,31 @@ BOOST_AUTO_TEST_CASE(IncomingInterestStrategyDispatch)
|
||||
auto interest1 = makeInterest("/A/1");
|
||||
strategyA.afterReceiveInterest_count = 0;
|
||||
strategyA.interestOutFace = face2;
|
||||
forwarder.startProcessInterest(FaceEndpoint(*face1, 0), *interest1);
|
||||
forwarder.onIncomingInterest(FaceEndpoint(*face1, 0), *interest1);
|
||||
BOOST_CHECK_EQUAL(strategyA.afterReceiveInterest_count, 1);
|
||||
|
||||
auto interest2 = makeInterest("/B/2", true);
|
||||
strategyB.afterReceiveInterest_count = 0;
|
||||
strategyB.interestOutFace = face2;
|
||||
forwarder.startProcessInterest(FaceEndpoint(*face1, 0), *interest2);
|
||||
forwarder.onIncomingInterest(FaceEndpoint(*face1, 0), *interest2);
|
||||
BOOST_CHECK_EQUAL(strategyB.afterReceiveInterest_count, 1);
|
||||
|
||||
this->advanceClocks(1_ms, 5_ms);
|
||||
|
||||
auto data1 = makeData("/A/1");
|
||||
strategyA.beforeSatisfyInterest_count = 0;
|
||||
forwarder.startProcessData(FaceEndpoint(*face2, 0), *data1);
|
||||
forwarder.onIncomingData(FaceEndpoint(*face2, 0), *data1);
|
||||
BOOST_CHECK_EQUAL(strategyA.beforeSatisfyInterest_count, 1);
|
||||
|
||||
auto data2 = makeData("/B/2/b");
|
||||
strategyB.beforeSatisfyInterest_count = 0;
|
||||
forwarder.startProcessData(FaceEndpoint(*face2, 0), *data2);
|
||||
forwarder.onIncomingData(FaceEndpoint(*face2, 0), *data2);
|
||||
BOOST_CHECK_EQUAL(strategyB.beforeSatisfyInterest_count, 1);
|
||||
|
||||
auto interest3 = makeInterest("/A/3", false, 30_ms);
|
||||
forwarder.startProcessInterest(FaceEndpoint(*face1, 0), *interest3);
|
||||
forwarder.onIncomingInterest(FaceEndpoint(*face1, 0), *interest3);
|
||||
auto interest4 = makeInterest("/B/4", false, 5_s);
|
||||
forwarder.startProcessInterest(FaceEndpoint(*face1, 0), *interest4);
|
||||
forwarder.onIncomingInterest(FaceEndpoint(*face1, 0), *interest4);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(IncomingData)
|
||||
@@ -682,7 +663,7 @@ BOOST_AUTO_TEST_CASE(PitLeak) // Bug 3484
|
||||
Pit& pit = forwarder.getPit();
|
||||
BOOST_REQUIRE_EQUAL(pit.size(), 0);
|
||||
|
||||
forwarder.startProcessInterest(FaceEndpoint(*face1, 0), *interest);
|
||||
forwarder.onIncomingInterest(FaceEndpoint(*face1, 0), *interest);
|
||||
this->advanceClocks(100_ms, 20_s);
|
||||
BOOST_CHECK_EQUAL(pit.size(), 0);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user