Make controller do a simple write-through cache without revalidating. Means you must restart if files change on disk, but will decrease I/O considerably.
This commit is contained in:
parent
ae303ee902
commit
c62141fd98
4 changed files with 40 additions and 83 deletions
|
@ -61,9 +61,6 @@ using json = nlohmann::json;
|
|||
// Nodes are considered active if they've queried in less than this long
|
||||
#define ZT_NETCONF_NODE_ACTIVE_THRESHOLD (ZT_NETWORK_AUTOCONF_DELAY * 2)
|
||||
|
||||
// Timeout for disk read cache (ms)
|
||||
#define ZT_NETCONF_DB_CACHE_TTL 60000
|
||||
|
||||
namespace ZeroTier {
|
||||
|
||||
static json _renderRule(ZT_VirtualNetworkRule &rule)
|
||||
|
@ -503,7 +500,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpGET(
|
|||
json network;
|
||||
{
|
||||
Mutex::Lock _l(_db_m);
|
||||
network = _db.get("network",nwids,ZT_NETCONF_DB_CACHE_TTL);
|
||||
network = _db.get("network",nwids);
|
||||
}
|
||||
if (!network.size())
|
||||
return 404;
|
||||
|
@ -518,7 +515,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpGET(
|
|||
json member;
|
||||
{
|
||||
Mutex::Lock _l(_db_m);
|
||||
member = _db.get("network",nwids,"member",Address(address).toString(),ZT_NETCONF_DB_CACHE_TTL);
|
||||
member = _db.get("network",nwids,"member",Address(address).toString());
|
||||
}
|
||||
if (!member.size())
|
||||
return 404;
|
||||
|
@ -533,7 +530,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpGET(
|
|||
Mutex::Lock _l(_db_m);
|
||||
|
||||
responseBody = "{";
|
||||
_db.filter((std::string("network/") + nwids + "/member/"),ZT_NETCONF_DB_CACHE_TTL,[&responseBody](const std::string &n,const json &member) {
|
||||
_db.filter((std::string("network/") + nwids + "/member/"),[&responseBody](const std::string &n,const json &member) {
|
||||
if ((member.is_object())&&(member.size() > 0)) {
|
||||
responseBody.append((responseBody.length() == 1) ? "\"" : ",\"");
|
||||
responseBody.append(OSUtils::jsonString(member["id"],"0"));
|
||||
|
@ -566,7 +563,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpGET(
|
|||
std::set<std::string> networkIds;
|
||||
{
|
||||
Mutex::Lock _l(_db_m);
|
||||
_db.filter("network/",120000,[&networkIds](const std::string &n,const json &obj) {
|
||||
_db.filter("network/",[&networkIds](const std::string &n,const json &obj) {
|
||||
if (n.length() == (16 + 8))
|
||||
networkIds.insert(n.substr(8));
|
||||
return true; // do not delete
|
||||
|
@ -641,7 +638,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpPOST(
|
|||
json member;
|
||||
{
|
||||
Mutex::Lock _l(_db_m);
|
||||
member = _db.get("network",nwids,"member",Address(address).toString(),ZT_NETCONF_DB_CACHE_TTL);
|
||||
member = _db.get("network",nwids,"member",Address(address).toString());
|
||||
}
|
||||
json origMember(member); // for detecting changes
|
||||
_initMember(member);
|
||||
|
@ -824,7 +821,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpPOST(
|
|||
uint64_t tryNwid = nwidPrefix | (nwidPostfix & 0xffffffULL);
|
||||
if ((tryNwid & 0xffffffULL) == 0ULL) tryNwid |= 1ULL;
|
||||
Utils::snprintf(nwids,sizeof(nwids),"%.16llx",(unsigned long long)tryNwid);
|
||||
if (_db.get("network",nwids,ZT_NETCONF_DB_CACHE_TTL).size() <= 0) {
|
||||
if (_db.get("network",nwids).size() <= 0) {
|
||||
nwid = tryNwid;
|
||||
break;
|
||||
}
|
||||
|
@ -833,7 +830,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpPOST(
|
|||
return 503;
|
||||
}
|
||||
|
||||
network = _db.get("network",nwids,ZT_NETCONF_DB_CACHE_TTL);
|
||||
network = _db.get("network",nwids);
|
||||
}
|
||||
json origNetwork(network); // for detecting changes
|
||||
_initNetwork(network);
|
||||
|
@ -1053,7 +1050,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpPOST(
|
|||
}
|
||||
|
||||
// Send an update to all members of the network
|
||||
_db.filter((std::string("network/") + nwids + "/member/"),120000,[this,&now,&nwid](const std::string &n,const json &obj) {
|
||||
_db.filter((std::string("network/") + nwids + "/member/"),[this,&now,&nwid](const std::string &n,const json &obj) {
|
||||
_pushMemberUpdate(now,nwid,obj);
|
||||
return true; // do not delete
|
||||
});
|
||||
|
@ -1095,7 +1092,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpDELETE(
|
|||
json network;
|
||||
{
|
||||
Mutex::Lock _l(_db_m);
|
||||
network = _db.get("network",nwids,ZT_NETCONF_DB_CACHE_TTL);
|
||||
network = _db.get("network",nwids);
|
||||
}
|
||||
if (!network.size())
|
||||
return 404;
|
||||
|
@ -1106,7 +1103,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpDELETE(
|
|||
|
||||
Mutex::Lock _l(_db_m);
|
||||
|
||||
json member = _db.get("network",nwids,"member",Address(address).toString(),ZT_NETCONF_DB_CACHE_TTL);
|
||||
json member = _db.get("network",nwids,"member",Address(address).toString());
|
||||
_db.erase("network",nwids,"member",Address(address).toString());
|
||||
|
||||
if (!member.size())
|
||||
|
@ -1119,7 +1116,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpDELETE(
|
|||
Mutex::Lock _l(_db_m);
|
||||
|
||||
std::string pfx("network/"); pfx.append(nwids);
|
||||
_db.filter(pfx,120000,[](const std::string &n,const json &obj) {
|
||||
_db.filter(pfx,[](const std::string &n,const json &obj) {
|
||||
return false; // delete
|
||||
});
|
||||
|
||||
|
@ -1246,8 +1243,8 @@ void EmbeddedNetworkController::_request(
|
|||
json member;
|
||||
{
|
||||
Mutex::Lock _l(_db_m);
|
||||
network = _db.get("network",nwids,ZT_NETCONF_DB_CACHE_TTL);
|
||||
member = _db.get("network",nwids,"member",identity.address().toString(),ZT_NETCONF_DB_CACHE_TTL);
|
||||
network = _db.get("network",nwids);
|
||||
member = _db.get("network",nwids,"member",identity.address().toString());
|
||||
}
|
||||
|
||||
if (!network.size()) {
|
||||
|
@ -1772,7 +1769,7 @@ void EmbeddedNetworkController::_getNetworkMemberInfo(uint64_t now,uint64_t nwid
|
|||
|
||||
{
|
||||
Mutex::Lock _l(_db_m);
|
||||
_db.filter(pfx,120000,[&nmi,&now](const std::string &n,const json &member) {
|
||||
_db.filter(pfx,[&nmi,&now](const std::string &n,const json &member) {
|
||||
try {
|
||||
if (OSUtils::jsonBool(member["authorized"],false)) {
|
||||
++nmi.authorizedMemberCount;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue