table: add CS enablement flags
This commit also:
* deletes never-implemented and unused Cs::erase method
* groups CS configuration methods together
* uses Table::emplace in Cs::insert
refs #4050
Change-Id: If8cf29dd33921da2f2c4ce56e02395d43cd3ee99
diff --git a/daemon/table/cs.cpp b/daemon/table/cs.cpp
index 89c54e9..81b3fd6 100644
--- a/daemon/table/cs.cpp
+++ b/daemon/table/cs.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2016, Regents of the University of California,
+/*
+ * Copyright (c) 2014-2018, Regents of the University of California,
* Arizona Board of Regents,
* Colorado State University,
* University Pierre & Marie Curie, Sorbonne University,
@@ -44,42 +44,20 @@
}
Cs::Cs(size_t nMaxPackets)
+ : m_shouldAdmit(true)
+ , m_shouldServe(true)
{
this->setPolicyImpl(makeDefaultPolicy());
m_policy->setLimit(nMaxPackets);
}
void
-Cs::setLimit(size_t nMaxPackets)
-{
- m_policy->setLimit(nMaxPackets);
-}
-
-size_t
-Cs::getLimit() const
-{
- return m_policy->getLimit();
-}
-
-void
-Cs::setPolicy(unique_ptr<Policy> policy)
-{
- BOOST_ASSERT(policy != nullptr);
- BOOST_ASSERT(m_policy != nullptr);
- size_t limit = m_policy->getLimit();
- this->setPolicyImpl(std::move(policy));
- m_policy->setLimit(limit);
-}
-
-void
Cs::insert(const Data& data, bool isUnsolicited)
{
- NFD_LOG_DEBUG("insert " << data.getName());
-
- if (m_policy->getLimit() == 0) {
- // shortcut for disabled CS
+ if (!m_shouldAdmit || m_policy->getLimit() == 0) {
return;
}
+ NFD_LOG_DEBUG("insert " << data.getName());
// recognize CachePolicy
shared_ptr<lp::CachePolicyTag> tag = data.getTag<lp::CachePolicyTag>();
@@ -90,10 +68,9 @@
}
}
- bool isNewEntry = false;
iterator it;
- // use .insert because gcc46 does not support .emplace
- std::tie(it, isNewEntry) = m_table.insert(EntryImpl(data.shared_from_this(), isUnsolicited));
+ bool isNewEntry = false;
+ std::tie(it, isNewEntry) = m_table.emplace(data.shared_from_this(), isUnsolicited);
EntryImpl& entry = const_cast<EntryImpl&>(*it);
entry.updateStaleTime();
@@ -119,6 +96,10 @@
BOOST_ASSERT(static_cast<bool>(hitCallback));
BOOST_ASSERT(static_cast<bool>(missCallback));
+ if (!m_shouldServe || m_policy->getLimit() == 0) {
+ missCallback(interest);
+ return;
+ }
const Name& prefix = interest.getName();
bool isRightmost = interest.getChildSelector() == 1;
NFD_LOG_DEBUG("find " << prefix << (isRightmost ? " R" : " L"));
@@ -192,6 +173,25 @@
}
void
+Cs::dump()
+{
+ NFD_LOG_DEBUG("dump table");
+ for (const EntryImpl& entry : m_table) {
+ NFD_LOG_TRACE(entry.getFullName());
+ }
+}
+
+void
+Cs::setPolicy(unique_ptr<Policy> policy)
+{
+ BOOST_ASSERT(policy != nullptr);
+ BOOST_ASSERT(m_policy != nullptr);
+ size_t limit = m_policy->getLimit();
+ this->setPolicyImpl(std::move(policy));
+ m_policy->setLimit(limit);
+}
+
+void
Cs::setPolicyImpl(unique_ptr<Policy> policy)
{
NFD_LOG_DEBUG("set-policy " << policy->getName());
@@ -205,12 +205,23 @@
}
void
-Cs::dump()
+Cs::enableAdmit(bool shouldAdmit)
{
- NFD_LOG_DEBUG("dump table");
- for (const EntryImpl& entry : m_table) {
- NFD_LOG_TRACE(entry.getFullName());
+ if (m_shouldAdmit == shouldAdmit) {
+ return;
}
+ m_shouldAdmit = shouldAdmit;
+ NFD_LOG_INFO((shouldAdmit ? "Enabling" : "Disabling") << " Data admittance");
+}
+
+void
+Cs::enableServe(bool shouldServe)
+{
+ if (m_shouldServe == shouldServe) {
+ return;
+ }
+ m_shouldServe = shouldServe;
+ NFD_LOG_INFO((shouldServe ? "Enabling" : "Disabling") << " Data serving");
}
} // namespace cs