mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-06-01 06:50:51 +00:00
LFDB fix
This commit is contained in:
parent
cd2e3c79f2
commit
f4f8fef82e
@ -64,7 +64,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
|
|||||||
|
|
||||||
httplib::Client htcli(_lfNodeHost.c_str(),_lfNodePort,600);
|
httplib::Client htcli(_lfNodeHost.c_str(),_lfNodePort,600);
|
||||||
int64_t timeRangeStart = 0;
|
int64_t timeRangeStart = 0;
|
||||||
while (_running) {
|
while (_running.load()) {
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> sl(_state_l);
|
std::lock_guard<std::mutex> sl(_state_l);
|
||||||
for(auto ns=_state.begin();ns!=_state.end();++ns) {
|
for(auto ns=_state.begin();ns!=_state.end();++ns) {
|
||||||
@ -178,7 +178,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
|
|||||||
<< "\"Name\":\"" << networksSelectorName << "\","
|
<< "\"Name\":\"" << networksSelectorName << "\","
|
||||||
<< "\"Range\":[0,18446744073709551615]"
|
<< "\"Range\":[0,18446744073709551615]"
|
||||||
<< "}],"
|
<< "}],"
|
||||||
<< "\"TimeRange\":[" << timeRangeStart << ",18446744073709551615],"
|
<< "\"TimeRange\":[" << timeRangeStart << ",9223372036854775807],"
|
||||||
<< "\"MaskingKey\":\"" << maskingKey << "\","
|
<< "\"MaskingKey\":\"" << maskingKey << "\","
|
||||||
<< "\"Owners\":[\"" << _lfOwnerPublic << "\"]"
|
<< "\"Owners\":[\"" << _lfOwnerPublic << "\"]"
|
||||||
<< '}';
|
<< '}';
|
||||||
@ -190,6 +190,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
|
|||||||
for(std::size_t ri=0;ri<results.size();++ri) {
|
for(std::size_t ri=0;ri<results.size();++ri) {
|
||||||
nlohmann::json &rset = results[ri];
|
nlohmann::json &rset = results[ri];
|
||||||
if ((rset.is_array())&&(rset.size() > 0)) {
|
if ((rset.is_array())&&(rset.size() > 0)) {
|
||||||
|
|
||||||
nlohmann::json &result = rset[0];
|
nlohmann::json &result = rset[0];
|
||||||
if (result.is_object()) {
|
if (result.is_object()) {
|
||||||
nlohmann::json &record = result["Record"];
|
nlohmann::json &record = result["Record"];
|
||||||
@ -206,7 +207,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
|
|||||||
_NetworkState &ns = _state[id];
|
_NetworkState &ns = _state[id];
|
||||||
if (!ns.dirty) {
|
if (!ns.dirty) {
|
||||||
nlohmann::json oldNetwork;
|
nlohmann::json oldNetwork;
|
||||||
if (get(id,oldNetwork)) {
|
if ((timeRangeStart > 0)&&(get(id,oldNetwork))) {
|
||||||
const uint64_t revision = network["revision"];
|
const uint64_t revision = network["revision"];
|
||||||
const uint64_t prevRevision = oldNetwork["revision"];
|
const uint64_t prevRevision = oldNetwork["revision"];
|
||||||
if (prevRevision < revision) {
|
if (prevRevision < revision) {
|
||||||
@ -222,6 +223,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -244,7 +246,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
|
|||||||
<< "\"Name\":\"" << membersSelectorName << "\","
|
<< "\"Name\":\"" << membersSelectorName << "\","
|
||||||
<< "\"Range\":[0,18446744073709551615]"
|
<< "\"Range\":[0,18446744073709551615]"
|
||||||
<< "}],"
|
<< "}],"
|
||||||
<< "\"TimeRange\":[" << timeRangeStart << ",18446744073709551615],"
|
<< "\"TimeRange\":[" << timeRangeStart << ",9223372036854775807],"
|
||||||
<< "\"MaskingKey\":\"" << maskingKey << "\","
|
<< "\"MaskingKey\":\"" << maskingKey << "\","
|
||||||
<< "\"Owners\":[\"" << _lfOwnerPublic << "\"]"
|
<< "\"Owners\":[\"" << _lfOwnerPublic << "\"]"
|
||||||
<< '}';
|
<< '}';
|
||||||
@ -256,6 +258,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
|
|||||||
for(std::size_t ri=0;ri<results.size();++ri) {
|
for(std::size_t ri=0;ri<results.size();++ri) {
|
||||||
nlohmann::json &rset = results[ri];
|
nlohmann::json &rset = results[ri];
|
||||||
if ((rset.is_array())&&(rset.size() > 0)) {
|
if ((rset.is_array())&&(rset.size() > 0)) {
|
||||||
|
|
||||||
nlohmann::json &result = rset[0];
|
nlohmann::json &result = rset[0];
|
||||||
if (result.is_object()) {
|
if (result.is_object()) {
|
||||||
nlohmann::json &record = result["Record"];
|
nlohmann::json &record = result["Record"];
|
||||||
@ -274,7 +277,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
|
|||||||
auto ns = _state.find(nwid);
|
auto ns = _state.find(nwid);
|
||||||
if ((ns == _state.end())||(!ns->second.members[id].dirty)) {
|
if ((ns == _state.end())||(!ns->second.members[id].dirty)) {
|
||||||
nlohmann::json network,oldMember;
|
nlohmann::json network,oldMember;
|
||||||
if (get(nwid,network,id,oldMember)) {
|
if ((timeRangeStart > 0)&&(get(nwid,network,id,oldMember))) {
|
||||||
const uint64_t revision = member["revision"];
|
const uint64_t revision = member["revision"];
|
||||||
const uint64_t prevRevision = oldMember["revision"];
|
const uint64_t prevRevision = oldMember["revision"];
|
||||||
if (prevRevision < revision)
|
if (prevRevision < revision)
|
||||||
@ -289,6 +292,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -301,12 +305,12 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
|
|||||||
}
|
}
|
||||||
|
|
||||||
timeRangeStart = time(nullptr) - 120; // start next query 2m before now to avoid losing updates
|
timeRangeStart = time(nullptr) - 120; // start next query 2m before now to avoid losing updates
|
||||||
_ready = true;
|
_ready.store(true);
|
||||||
|
|
||||||
for(int k=0;k<20;++k) { // 2s delay between queries for remotely modified networks or members
|
for(int k=0;k<4;++k) { // 2s delay between queries for remotely modified networks or members
|
||||||
if (!_running)
|
if (!_running.load())
|
||||||
return;
|
return;
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
std::this_thread::sleep_for(std::chrono::milliseconds(500));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -314,21 +318,21 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
|
|||||||
|
|
||||||
LFDB::~LFDB()
|
LFDB::~LFDB()
|
||||||
{
|
{
|
||||||
_running = false;
|
_running.store(false);
|
||||||
_syncThread.join();
|
_syncThread.join();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LFDB::waitForReady()
|
bool LFDB::waitForReady()
|
||||||
{
|
{
|
||||||
while (!_ready) {
|
while (!_ready.load()) {
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
std::this_thread::sleep_for(std::chrono::milliseconds(500));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LFDB::isReady()
|
bool LFDB::isReady()
|
||||||
{
|
{
|
||||||
return (_ready);
|
return (_ready.load());
|
||||||
}
|
}
|
||||||
|
|
||||||
void LFDB::save(nlohmann::json *orig,nlohmann::json &record)
|
void LFDB::save(nlohmann::json *orig,nlohmann::json &record)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user