mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-05-11 13:03:01 +00:00
Merge branch 'dev' into respect-ldflags
This commit is contained in:
commit
d6bfb8889a
@ -382,6 +382,24 @@ void DB::_networkChanged(nlohmann::json &old,nlohmann::json &networkConfig,bool
|
|||||||
const std::string ids = old["id"];
|
const std::string ids = old["id"];
|
||||||
const uint64_t networkId = Utils::hexStrToU64(ids.c_str());
|
const uint64_t networkId = Utils::hexStrToU64(ids.c_str());
|
||||||
if (networkId) {
|
if (networkId) {
|
||||||
|
try {
|
||||||
|
// deauth all members on the network
|
||||||
|
nlohmann::json network;
|
||||||
|
std::vector<nlohmann::json> members;
|
||||||
|
this->get(networkId, network, members);
|
||||||
|
for(auto i=members.begin();i!=members.end();++i) {
|
||||||
|
const std::string nodeID = (*i)["id"];
|
||||||
|
const uint64_t memberId = Utils::hexStrToU64(nodeID.c_str());
|
||||||
|
std::unique_lock<std::shared_mutex> ll(_changeListeners_l);
|
||||||
|
for(auto j=_changeListeners.begin();j!=_changeListeners.end();++j) {
|
||||||
|
(*j)->onNetworkMemberDeauthorize(this,networkId,memberId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (std::exception &e) {
|
||||||
|
std::cerr << "Error deauthorizing members on network delete: " << e.what() << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete the network
|
||||||
std::unique_lock<std::shared_mutex> l(_networks_l);
|
std::unique_lock<std::shared_mutex> l(_networks_l);
|
||||||
_networks.erase(networkId);
|
_networks.erase(networkId);
|
||||||
}
|
}
|
||||||
|
@ -780,11 +780,25 @@ void PostgreSQL::initializeNetworks()
|
|||||||
fprintf(stderr, "adding networks to redis...\n");
|
fprintf(stderr, "adding networks to redis...\n");
|
||||||
if (_rc->clusterMode) {
|
if (_rc->clusterMode) {
|
||||||
auto tx = _cluster->transaction(_myAddressStr, true, false);
|
auto tx = _cluster->transaction(_myAddressStr, true, false);
|
||||||
tx.sadd(setKey, networkSet.begin(), networkSet.end());
|
uint64_t count = 0;
|
||||||
|
for (std::string nwid : networkSet) {
|
||||||
|
tx.sadd(setKey, nwid);
|
||||||
|
if (++count % 30000 == 0) {
|
||||||
|
tx.exec();
|
||||||
|
tx = _cluster->transaction(_myAddressStr, true, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
tx.exec();
|
tx.exec();
|
||||||
} else {
|
} else {
|
||||||
auto tx = _redis->transaction(true, false);
|
auto tx = _redis->transaction(true, false);
|
||||||
tx.sadd(setKey, networkSet.begin(), networkSet.end());
|
uint64_t count = 0;
|
||||||
|
for (std::string nwid : networkSet) {
|
||||||
|
tx.sadd(setKey, nwid);
|
||||||
|
if (++count % 30000 == 0) {
|
||||||
|
tx.exec();
|
||||||
|
tx = _redis->transaction(true, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
tx.exec();
|
tx.exec();
|
||||||
}
|
}
|
||||||
fprintf(stderr, "done.\n");
|
fprintf(stderr, "done.\n");
|
||||||
@ -1005,14 +1019,24 @@ void PostgreSQL::initializeMembers()
|
|||||||
fprintf(stderr, "Load member data into redis...\n");
|
fprintf(stderr, "Load member data into redis...\n");
|
||||||
if (_rc->clusterMode) {
|
if (_rc->clusterMode) {
|
||||||
auto tx = _cluster->transaction(_myAddressStr, true, false);
|
auto tx = _cluster->transaction(_myAddressStr, true, false);
|
||||||
|
uint64_t count = 0;
|
||||||
for (auto it : networkMembers) {
|
for (auto it : networkMembers) {
|
||||||
tx.sadd(it.first, it.second);
|
tx.sadd(it.first, it.second);
|
||||||
|
if (++count % 30000 == 0) {
|
||||||
|
tx.exec();
|
||||||
|
tx = _cluster->transaction(_myAddressStr, true, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
tx.exec();
|
tx.exec();
|
||||||
} else {
|
} else {
|
||||||
auto tx = _redis->transaction(true, false);
|
auto tx = _redis->transaction(true, false);
|
||||||
|
uint64_t count = 0;
|
||||||
for (auto it : networkMembers) {
|
for (auto it : networkMembers) {
|
||||||
tx.sadd(it.first, it.second);
|
tx.sadd(it.first, it.second);
|
||||||
|
if (++count % 30000 == 0) {
|
||||||
|
tx.exec();
|
||||||
|
tx = _redis->transaction(true, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
tx.exec();
|
tx.exec();
|
||||||
}
|
}
|
||||||
@ -1180,7 +1204,7 @@ void PostgreSQL::_membersWatcher_Redis() {
|
|||||||
_memberChanged(oldConfig,newConfig,(this->_ready >= 2));
|
_memberChanged(oldConfig,newConfig,(this->_ready >= 2));
|
||||||
}
|
}
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
fprintf(stderr, "json parse error in networkWatcher_Redis\n");
|
fprintf(stderr, "json parse error in _membersWatcher_Redis: %s\n", a.second.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (_rc->clusterMode) {
|
if (_rc->clusterMode) {
|
||||||
@ -1269,8 +1293,8 @@ void PostgreSQL::_networksWatcher_Redis() {
|
|||||||
if (oldConfig.is_object()||newConfig.is_object()) {
|
if (oldConfig.is_object()||newConfig.is_object()) {
|
||||||
_networkChanged(oldConfig,newConfig,(this->_ready >= 2));
|
_networkChanged(oldConfig,newConfig,(this->_ready >= 2));
|
||||||
}
|
}
|
||||||
} catch (...) {
|
} catch (std::exception &e) {
|
||||||
fprintf(stderr, "json parse error in networkWatcher_Redis\n");
|
fprintf(stderr, "json parse error in networkWatcher_Redis: what: %s json: %s\n", e.what(), a.second.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (_rc->clusterMode) {
|
if (_rc->clusterMode) {
|
||||||
|
@ -111,6 +111,44 @@ namespace {
|
|||||||
bool finishInitializing();
|
bool finishInitializing();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// RAII construct for calling AttachCurrentThread and DetachCurrent automatically
|
||||||
|
//
|
||||||
|
struct ScopedJNIThreadAttacher {
|
||||||
|
|
||||||
|
JavaVM *jvm;
|
||||||
|
JNIEnv **env_p;
|
||||||
|
jint getEnvRet;
|
||||||
|
|
||||||
|
ScopedJNIThreadAttacher(JavaVM *jvmIn, JNIEnv **env_pIn, jint getEnvRetIn) :
|
||||||
|
jvm(jvmIn),
|
||||||
|
env_p(env_pIn),
|
||||||
|
getEnvRet(getEnvRetIn) {
|
||||||
|
|
||||||
|
if (getEnvRet != JNI_EDETACHED) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
jint attachCurrentThreadRet;
|
||||||
|
if ((attachCurrentThreadRet = jvm->AttachCurrentThread(env_p, NULL)) != JNI_OK) {
|
||||||
|
LOGE("Error calling AttachCurrentThread: %d", attachCurrentThreadRet);
|
||||||
|
assert(false && "Error calling AttachCurrentThread");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
~ScopedJNIThreadAttacher() {
|
||||||
|
|
||||||
|
if (getEnvRet != JNI_EDETACHED) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
jint detachCurrentThreadRet;
|
||||||
|
if ((detachCurrentThreadRet = jvm->DetachCurrentThread()) != JNI_OK) {
|
||||||
|
LOGE("Error calling DetachCurrentThread: %d", detachCurrentThreadRet);
|
||||||
|
assert(false && "Error calling DetachCurrentThread");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This must return 0 on success. It can return any OS-dependent error code
|
* This must return 0 on success. It can return any OS-dependent error code
|
||||||
@ -194,7 +232,25 @@ namespace {
|
|||||||
assert(ref);
|
assert(ref);
|
||||||
assert(ref->node == node);
|
assert(ref->node == node);
|
||||||
JNIEnv *env;
|
JNIEnv *env;
|
||||||
GETENV(env, ref->jvm);
|
|
||||||
|
jint getEnvRet;
|
||||||
|
assert(ref->jvm);
|
||||||
|
getEnvRet = ref->jvm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6);
|
||||||
|
|
||||||
|
if (!(getEnvRet == JNI_OK || getEnvRet == JNI_EDETACHED)) {
|
||||||
|
LOGE("Error calling GetEnv: %d", getEnvRet);
|
||||||
|
assert(false && "Error calling GetEnv");
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Thread might actually be detached.
|
||||||
|
//
|
||||||
|
// e.g:
|
||||||
|
// https://github.com/zerotier/ZeroTierOne/blob/91e7ce87f09ac1cfdeaf6ff22c3cedcd93574c86/node/Switch.cpp#L519
|
||||||
|
//
|
||||||
|
// Make sure to attach if needed
|
||||||
|
//
|
||||||
|
ScopedJNIThreadAttacher attacher{ref->jvm, &env, getEnvRet};
|
||||||
|
|
||||||
if (env->ExceptionCheck()) {
|
if (env->ExceptionCheck()) {
|
||||||
LOGE("Unhandled pending exception");
|
LOGE("Unhandled pending exception");
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
CC=clang
|
CC=clang
|
||||||
CXX=clang++
|
CXX=clang++
|
||||||
TOPDIR=$(shell PWD)
|
TOPDIR=$(shell pwd)
|
||||||
|
|
||||||
INCLUDES=-I$(shell PWD)/rustybits/target -isystem $(TOPDIR)/ext -I$(TOPDIR)/ext/prometheus-cpp-lite-1.0/core/include -I$(TOPDIR)/ext-prometheus-cpp-lite-1.0/3rdparty/http-client-lite/include -I$(TOPDIR)/ext/prometheus-cpp-lite-1.0/simpleapi/include
|
INCLUDES=-I$(shell pwd)/rustybits/target -isystem $(TOPDIR)/ext -I$(TOPDIR)/ext/prometheus-cpp-lite-1.0/core/include -I$(TOPDIR)/ext-prometheus-cpp-lite-1.0/3rdparty/http-client-lite/include -I$(TOPDIR)/ext/prometheus-cpp-lite-1.0/simpleapi/include
|
||||||
DEFS=
|
DEFS=
|
||||||
LIBS=
|
LIBS=
|
||||||
ARCH_FLAGS=-arch x86_64 -arch arm64
|
ARCH_FLAGS=-arch x86_64 -arch arm64
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
## Docker image for Synology's DSM7
|
## Docker image for Synology's DSM7
|
||||||
|
|
||||||
Documentation: [docs.zerotier.com/devices/synology](https://docs.zerotier.com/devices/synology)
|
Documentation: [docs.zerotier.com/devices/synology](https://docs.zerotier.com/devices/synology)
|
||||||
|
|
||||||
|
### Build & Push changes to DockerHub
|
||||||
|
```shell
|
||||||
|
./build.sh build
|
||||||
|
```
|
||||||
|
@ -3,19 +3,17 @@
|
|||||||
ZTO_VER=$(git describe --tags $(git rev-list --tags --max-count=1))
|
ZTO_VER=$(git describe --tags $(git rev-list --tags --max-count=1))
|
||||||
ZTO_COMMIT=$(git rev-parse HEAD)
|
ZTO_COMMIT=$(git rev-parse HEAD)
|
||||||
|
|
||||||
build()
|
build() {
|
||||||
{
|
|
||||||
sudo docker build --load --rm -t zerotier-synology . --build-arg ZTO_COMMIT=${ZTO_COMMIT} --build-arg ZTO_VER=${ZTO_VER}
|
|
||||||
LATEST_DOCKER_IMAGE_HASH=$(sudo docker images -q zerotier-synology)
|
|
||||||
sudo docker tag ${LATEST_DOCKER_IMAGE_HASH} zerotier/zerotier-synology:${ZTO_VER}
|
|
||||||
sudo docker tag ${LATEST_DOCKER_IMAGE_HASH} zerotier/zerotier-synology:latest
|
|
||||||
}
|
|
||||||
|
|
||||||
push()
|
|
||||||
{
|
|
||||||
sudo docker login --username=${DOCKERHUB_USERNAME}
|
sudo docker login --username=${DOCKERHUB_USERNAME}
|
||||||
sudo docker push zerotier/zerotier-synology:${ZTO_VER}
|
|
||||||
sudo docker push zerotier/zerotier-synology:latest
|
sudo docker buildx build \
|
||||||
|
--push \
|
||||||
|
--platform linux/arm/v7,linux/arm64/v8,linux/amd64 \
|
||||||
|
--tag zerotier/zerotier-synology:${ZTO_VER} \
|
||||||
|
--tag zerotier/zerotier-synology:latest \
|
||||||
|
--build-arg ZTO_COMMIT=${ZTO_COMMIT} \
|
||||||
|
--build-arg ZTO_VER=${ZTO_VER} \
|
||||||
|
.
|
||||||
}
|
}
|
||||||
|
|
||||||
"$@"
|
"$@"
|
||||||
|
@ -91,7 +91,7 @@
|
|||||||
<NMakeOutput>
|
<NMakeOutput>
|
||||||
</NMakeOutput>
|
</NMakeOutput>
|
||||||
<NMakeCleanCommandLine>cargo clean</NMakeCleanCommandLine>
|
<NMakeCleanCommandLine>cargo clean</NMakeCleanCommandLine>
|
||||||
<NMakeReBuildCommandLine>cargo clean & cargo build --release --target=x86_64-pc-windows-msvc</NMakeReBuildCommandLine>
|
<NMakeReBuildCommandLine>cargo clean & cargo build -p zeroidc --release --target=x86_64-pc-windows-msvc</NMakeReBuildCommandLine>
|
||||||
<NMakePreprocessorDefinitions>NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
|
<NMakePreprocessorDefinitions>NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user