Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 75a6d3426b | |||
| e9753fbe33 | |||
| 7d20609276 | |||
| e010e7a5e2 | |||
| 981b32cdcd | |||
| 9c336f5549 |
@@ -3,11 +3,6 @@ name: Build and upload Node Status agent container to harbor.nymte.ch
|
|||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
gateway_probe_git_ref:
|
|
||||||
type: string
|
|
||||||
default: nym-vpn-core-v1.4.0
|
|
||||||
required: true
|
|
||||||
description: Which gateway probe git ref to build the image with
|
|
||||||
release_image:
|
release_image:
|
||||||
description: 'Tag image as a release'
|
description: 'Tag image as a release'
|
||||||
required: true
|
required: true
|
||||||
@@ -43,16 +38,6 @@ jobs:
|
|||||||
VERSION=$(yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/Cargo.toml)
|
VERSION=$(yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/Cargo.toml)
|
||||||
echo "result=$VERSION" >> $GITHUB_OUTPUT
|
echo "result=$VERSION" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: cleanup-gateway-probe-ref
|
|
||||||
id: cleanup_gateway_probe_ref
|
|
||||||
run: |
|
|
||||||
GATEWAY_PROBE_GIT_REF=${{ github.event.inputs.gateway_probe_git_ref }}
|
|
||||||
GIT_REF_SLUG="${GATEWAY_PROBE_GIT_REF//\//-}"
|
|
||||||
echo "git_ref=${GIT_REF_SLUG}" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Set GIT_TAG variable
|
|
||||||
run: echo "GIT_TAG=${{ env.WORKING_DIRECTORY }}-${{ steps.get_version.outputs.result }}-${{ steps.cleanup_gateway_probe_ref.outputs.git_ref }}" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Initialize RELEASE_TAG
|
- name: Initialize RELEASE_TAG
|
||||||
run: echo "RELEASE_TAG=" >> $GITHUB_ENV
|
run: echo "RELEASE_TAG=" >> $GITHUB_ENV
|
||||||
|
|
||||||
@@ -61,24 +46,12 @@ jobs:
|
|||||||
run: echo "RELEASE_TAG=golden-" >> $GITHUB_ENV
|
run: echo "RELEASE_TAG=golden-" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Set IMAGE_NAME_AND_TAGS variable
|
- name: Set IMAGE_NAME_AND_TAGS variable
|
||||||
run: echo "IMAGE_NAME_AND_TAGS=${{ env.CONTAINER_NAME }}:${{ env.RELEASE_TAG }}${{ steps.get_version.outputs.result }}-${{ steps.cleanup_gateway_probe_ref.outputs.git_ref }}" >> $GITHUB_ENV
|
run: echo "IMAGE_NAME_AND_TAGS=${{ env.CONTAINER_NAME }}:${{ env.RELEASE_TAG }}${{ steps.get_version.outputs.result }}" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: New env vars
|
- name: New env vars
|
||||||
run: echo "RELEASE_TAG='$RELEASE_TAG' GIT_TAG='$GIT_TAG' IMAGE_NAME_AND_TAGS='$IMAGE_NAME_AND_TAGS'"
|
run: echo "RELEASE_TAG='$RELEASE_TAG' IMAGE_NAME_AND_TAGS='$IMAGE_NAME_AND_TAGS'"
|
||||||
|
|
||||||
# - name: Remove existing tag if exists
|
|
||||||
# run: |
|
|
||||||
# if git rev-parse $${{ env.GIT_TAG }} >/dev/null 2>&1; then
|
|
||||||
# git push --delete origin $${{ env.GIT_TAG }}
|
|
||||||
# git tag -d $${{ env.GIT_TAG }}
|
|
||||||
# fi
|
|
||||||
|
|
||||||
# - name: Create tag
|
|
||||||
# run: |
|
|
||||||
# git tag -a $${{ env.GIT_TAG }} -m "Version ${{ steps.get_version.outputs.result }}-${{ steps.cleanup_gateway_probe_ref.outputs.git_ref }}"
|
|
||||||
# git push origin $${{ env.GIT_TAG }}
|
|
||||||
|
|
||||||
- name: BuildAndPushImageOnHarbor
|
- name: BuildAndPushImageOnHarbor
|
||||||
run: |
|
run: |
|
||||||
docker build --build-arg GIT_REF=${{ github.event.inputs.gateway_probe_git_ref }} -f ${{ env.WORKING_DIRECTORY }}/Dockerfile . -t harbor.nymte.ch/nym/${{ env.IMAGE_NAME_AND_TAGS }}
|
docker build -f ${{ env.WORKING_DIRECTORY }}/Dockerfile . -t harbor.nymte.ch/nym/${{ env.IMAGE_NAME_AND_TAGS }}
|
||||||
docker push harbor.nymte.ch/nym/${{ env.CONTAINER_NAME }} --all-tags
|
docker push harbor.nymte.ch/nym/${{ env.CONTAINER_NAME }} --all-tags
|
||||||
|
|||||||
@@ -4,6 +4,46 @@ Post 1.0.0 release, the changelog format is based on [Keep a Changelog](https://
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [2025.19-kase] (2025-10-30)
|
||||||
|
|
||||||
|
- update ns agent workflow ([#6154])
|
||||||
|
- Cherry pick - request #6143 from nymtech/bugfix/mix-tx-closed-v2 ([#6153])
|
||||||
|
- bugfix: nym-credential-proxy query params parsing regression ([#6121])
|
||||||
|
- bugfix: revert some dep updates introduced in #6043 ([#6120])
|
||||||
|
- Skip ipv6 metadata endpoint request ([#6118])
|
||||||
|
- update to no longer use 1mb files ([#6117])
|
||||||
|
- chore: restore pending dkg contract state migration ([#6116])
|
||||||
|
- Revert "Propagate cancel token to mixnet client" ([#6115])
|
||||||
|
- Update dirs to 6.0 ([#6109])
|
||||||
|
- Propagate cancel token to mixnet client ([#6105])
|
||||||
|
- bugfix: retrieve and update ticketbook in the same query ([#6101])
|
||||||
|
- bugfix: include network name in the default gateway probe config path ([#6100])
|
||||||
|
- Bugfix/incompatibility fixes ([#6099])
|
||||||
|
- [DOCs/operators] QUIC deployment script & docs ([#6098])
|
||||||
|
- bugfix: testnet manager 02sql migration ([#6096])
|
||||||
|
- feat: move gateway probe to monorepo (and update to rust edition 2024) ([#6094])
|
||||||
|
- bugfix: use custom topology provider for list of init gateways ([#6092])
|
||||||
|
- Max/fix wasm client + build commands ([#6043])
|
||||||
|
|
||||||
|
[#6154]: https://github.com/nymtech/nym/pull/6154
|
||||||
|
[#6153]: https://github.com/nymtech/nym/pull/6153
|
||||||
|
[#6121]: https://github.com/nymtech/nym/pull/6121
|
||||||
|
[#6120]: https://github.com/nymtech/nym/pull/6120
|
||||||
|
[#6118]: https://github.com/nymtech/nym/pull/6118
|
||||||
|
[#6117]: https://github.com/nymtech/nym/pull/6117
|
||||||
|
[#6116]: https://github.com/nymtech/nym/pull/6116
|
||||||
|
[#6115]: https://github.com/nymtech/nym/pull/6115
|
||||||
|
[#6109]: https://github.com/nymtech/nym/pull/6109
|
||||||
|
[#6105]: https://github.com/nymtech/nym/pull/6105
|
||||||
|
[#6101]: https://github.com/nymtech/nym/pull/6101
|
||||||
|
[#6100]: https://github.com/nymtech/nym/pull/6100
|
||||||
|
[#6099]: https://github.com/nymtech/nym/pull/6099
|
||||||
|
[#6098]: https://github.com/nymtech/nym/pull/6098
|
||||||
|
[#6096]: https://github.com/nymtech/nym/pull/6096
|
||||||
|
[#6094]: https://github.com/nymtech/nym/pull/6094
|
||||||
|
[#6092]: https://github.com/nymtech/nym/pull/6092
|
||||||
|
[#6043]: https://github.com/nymtech/nym/pull/6043
|
||||||
|
|
||||||
## [2025.18-jarlsberg] (2025-10-14)
|
## [2025.18-jarlsberg] (2025-10-14)
|
||||||
|
|
||||||
- ns-api: add descriptions to dVPN gateway responses ([#6102])
|
- ns-api: add descriptions to dVPN gateway responses ([#6102])
|
||||||
|
|||||||
Generated
+7
-7
@@ -4824,7 +4824,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nym-api"
|
name = "nym-api"
|
||||||
version = "1.1.67"
|
version = "1.1.68"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@@ -5050,7 +5050,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nym-cli"
|
name = "nym-cli"
|
||||||
version = "1.1.64"
|
version = "1.1.65"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"base64 0.22.1",
|
"base64 0.22.1",
|
||||||
@@ -5133,7 +5133,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nym-client"
|
name = "nym-client"
|
||||||
version = "1.1.64"
|
version = "1.1.65"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bs58",
|
"bs58",
|
||||||
"clap",
|
"clap",
|
||||||
@@ -6354,7 +6354,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nym-network-requester"
|
name = "nym-network-requester"
|
||||||
version = "1.1.65"
|
version = "1.1.66"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"addr",
|
"addr",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
@@ -6404,7 +6404,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nym-node"
|
name = "nym-node"
|
||||||
version = "1.19.0"
|
version = "1.20.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"arc-swap",
|
"arc-swap",
|
||||||
@@ -6930,7 +6930,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nym-socks5-client"
|
name = "nym-socks5-client"
|
||||||
version = "1.1.64"
|
version = "1.1.65"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bs58",
|
"bs58",
|
||||||
"clap",
|
"clap",
|
||||||
@@ -7669,7 +7669,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nymvisor"
|
name = "nymvisor"
|
||||||
version = "0.1.29"
|
version = "0.1.30"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bytes",
|
"bytes",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nym-client"
|
name = "nym-client"
|
||||||
version = "1.1.64"
|
version = "1.1.65"
|
||||||
authors = ["Dave Hrycyszyn <futurechimp@users.noreply.github.com>", "Jędrzej Stuczyński <andrew@nymtech.net>"]
|
authors = ["Dave Hrycyszyn <futurechimp@users.noreply.github.com>", "Jędrzej Stuczyński <andrew@nymtech.net>"]
|
||||||
description = "Implementation of the Nym Client"
|
description = "Implementation of the Nym Client"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nym-socks5-client"
|
name = "nym-socks5-client"
|
||||||
version = "1.1.64"
|
version = "1.1.65"
|
||||||
authors = ["Dave Hrycyszyn <futurechimp@users.noreply.github.com>"]
|
authors = ["Dave Hrycyszyn <futurechimp@users.noreply.github.com>"]
|
||||||
description = "A SOCKS5 localhost proxy that converts incoming messages to Sphinx and sends them to a Nym address"
|
description = "A SOCKS5 localhost proxy that converts incoming messages to Sphinx and sends them to a Nym address"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|||||||
@@ -783,7 +783,7 @@ where
|
|||||||
event_tx,
|
event_tx,
|
||||||
);
|
);
|
||||||
|
|
||||||
let mix_tx = mix_traffic_controller.mix_rx();
|
let mix_tx = mix_traffic_controller.mix_tx();
|
||||||
let client_tx = mix_traffic_controller.client_tx();
|
let client_tx = mix_traffic_controller.client_tx();
|
||||||
|
|
||||||
shutdown_tracker.try_spawn_named(
|
shutdown_tracker.try_spawn_named(
|
||||||
@@ -940,8 +940,8 @@ where
|
|||||||
// Create a shutdown tracker for this client - either as a child of provided tracker
|
// Create a shutdown tracker for this client - either as a child of provided tracker
|
||||||
// or get one from the registry
|
// or get one from the registry
|
||||||
let shutdown_tracker = match self.shutdown {
|
let shutdown_tracker = match self.shutdown {
|
||||||
Some(parent_tracker) => parent_tracker.child_tracker(),
|
Some(parent_tracker) => parent_tracker.clone(),
|
||||||
None => nym_task::get_sdk_shutdown_tracker()?,
|
None => nym_task::create_sdk_shutdown_tracker()?,
|
||||||
};
|
};
|
||||||
|
|
||||||
Self::start_event_control(self.event_tx, event_receiver, &shutdown_tracker);
|
Self::start_event_control(self.event_tx, event_receiver, &shutdown_tracker);
|
||||||
@@ -976,7 +976,7 @@ where
|
|||||||
self.user_agent.clone(),
|
self.user_agent.clone(),
|
||||||
generate_client_stats_id(*self_address.identity()),
|
generate_client_stats_id(*self_address.identity()),
|
||||||
input_sender.clone(),
|
input_sender.clone(),
|
||||||
&shutdown_tracker.child_tracker(),
|
&shutdown_tracker.clone(),
|
||||||
);
|
);
|
||||||
|
|
||||||
// needs to be started as the first thing to block if required waiting for the gateway
|
// needs to be started as the first thing to block if required waiting for the gateway
|
||||||
@@ -986,7 +986,7 @@ where
|
|||||||
shared_topology_accessor.clone(),
|
shared_topology_accessor.clone(),
|
||||||
self_address.gateway(),
|
self_address.gateway(),
|
||||||
self.wait_for_gateway,
|
self.wait_for_gateway,
|
||||||
&shutdown_tracker.child_tracker(),
|
&shutdown_tracker.clone(),
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
@@ -1006,7 +1006,7 @@ where
|
|||||||
stats_reporter.clone(),
|
stats_reporter.clone(),
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
self.connection_fd_callback,
|
self.connection_fd_callback,
|
||||||
&shutdown_tracker.child_tracker(),
|
&shutdown_tracker.clone(),
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
let gateway_ws_fd = gateway_transceiver.ws_fd();
|
let gateway_ws_fd = gateway_transceiver.ws_fd();
|
||||||
@@ -1014,7 +1014,7 @@ where
|
|||||||
let reply_storage = Self::setup_persistent_reply_storage(
|
let reply_storage = Self::setup_persistent_reply_storage(
|
||||||
reply_storage_backend,
|
reply_storage_backend,
|
||||||
key_rotation_config,
|
key_rotation_config,
|
||||||
&shutdown_tracker.child_tracker(),
|
&shutdown_tracker.clone(),
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
@@ -1025,7 +1025,7 @@ where
|
|||||||
reply_storage.key_storage(),
|
reply_storage.key_storage(),
|
||||||
reply_controller_sender.clone(),
|
reply_controller_sender.clone(),
|
||||||
stats_reporter.clone(),
|
stats_reporter.clone(),
|
||||||
&shutdown_tracker.child_tracker(),
|
&shutdown_tracker.clone(),
|
||||||
);
|
);
|
||||||
|
|
||||||
// The message_sender is the transmitter for any component generating sphinx packets
|
// The message_sender is the transmitter for any component generating sphinx packets
|
||||||
@@ -1035,7 +1035,7 @@ where
|
|||||||
|
|
||||||
let (message_sender, client_request_sender) = Self::start_mix_traffic_controller(
|
let (message_sender, client_request_sender) = Self::start_mix_traffic_controller(
|
||||||
gateway_transceiver,
|
gateway_transceiver,
|
||||||
&shutdown_tracker.child_tracker(),
|
&shutdown_tracker.clone(),
|
||||||
EventSender(event_sender),
|
EventSender(event_sender),
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -1066,7 +1066,7 @@ where
|
|||||||
shared_lane_queue_lengths.clone(),
|
shared_lane_queue_lengths.clone(),
|
||||||
client_connection_rx,
|
client_connection_rx,
|
||||||
stats_reporter.clone(),
|
stats_reporter.clone(),
|
||||||
&shutdown_tracker.child_tracker(),
|
&shutdown_tracker.clone(),
|
||||||
);
|
);
|
||||||
|
|
||||||
if !self
|
if !self
|
||||||
@@ -1082,7 +1082,7 @@ where
|
|||||||
shared_topology_accessor.clone(),
|
shared_topology_accessor.clone(),
|
||||||
message_sender,
|
message_sender,
|
||||||
stats_reporter.clone(),
|
stats_reporter.clone(),
|
||||||
&shutdown_tracker.child_tracker(),
|
&shutdown_tracker.clone(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ impl LoopCoverTrafficStream<OsRng> {
|
|||||||
TrySendError::Full(_) => {
|
TrySendError::Full(_) => {
|
||||||
// This isn't a problem, if the channel is full means we're already sending the
|
// This isn't a problem, if the channel is full means we're already sending the
|
||||||
// max amount of messages downstream can handle.
|
// max amount of messages downstream can handle.
|
||||||
tracing::debug!("Failed to send cover message - channel full");
|
tracing::trace!("Failed to send cover message - channel full");
|
||||||
}
|
}
|
||||||
TrySendError::Closed(_) => {
|
TrySendError::Closed(_) => {
|
||||||
tracing::warn!("Failed to send cover message - channel closed");
|
tracing::warn!("Failed to send cover message - channel closed");
|
||||||
|
|||||||
@@ -20,7 +20,10 @@ pub mod transceiver;
|
|||||||
|
|
||||||
// We remind ourselves that 32 x 32kb = 1024kb, a reasonable size for a network buffer.
|
// We remind ourselves that 32 x 32kb = 1024kb, a reasonable size for a network buffer.
|
||||||
pub const MIX_MESSAGE_RECEIVER_BUFFER_SIZE: usize = 32;
|
pub const MIX_MESSAGE_RECEIVER_BUFFER_SIZE: usize = 32;
|
||||||
const MAX_FAILURE_COUNT: usize = 100;
|
|
||||||
|
/// Reduced from 100 to 20 to fail fast (~1-2 seconds instead of ~6 seconds).
|
||||||
|
/// If we can't send 20 packets in a row, the gateway is unreachable.
|
||||||
|
const MAX_FAILURE_COUNT: usize = 20;
|
||||||
|
|
||||||
// that's also disgusting.
|
// that's also disgusting.
|
||||||
pub struct Empty;
|
pub struct Empty;
|
||||||
@@ -84,7 +87,7 @@ impl MixTrafficController {
|
|||||||
self.client_tx.clone()
|
self.client_tx.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn mix_rx(&self) -> BatchMixMessageSender {
|
pub fn mix_tx(&self) -> BatchMixMessageSender {
|
||||||
self.mix_tx.clone()
|
self.mix_tx.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,6 +159,11 @@ impl MixTrafficController {
|
|||||||
// Do we need to handle the embedded mixnet client case
|
// Do we need to handle the embedded mixnet client case
|
||||||
// separately?
|
// separately?
|
||||||
self.event_tx.send(MixnetClientEvent::Traffic(MixTrafficEvent::FailedSendingSphinx));
|
self.event_tx.send(MixnetClientEvent::Traffic(MixTrafficEvent::FailedSendingSphinx));
|
||||||
|
// IMO it shouldn't be signalled from there but it is how it is
|
||||||
|
// TODO : report the failure upwards and shutdown from upwards
|
||||||
|
// Gateway is dead, we have to shut down currently
|
||||||
|
error!("Signalling shutdown from the MixTrafficController");
|
||||||
|
self.shutdown_token.cancel();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -298,6 +298,8 @@ where
|
|||||||
"failed to send mixnet packet due to closed channel (outside of shutdown!)"
|
"failed to send mixnet packet due to closed channel (outside of shutdown!)"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
// Early return to avoid further processing when channel is closed
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
Ok(_) => {
|
Ok(_) => {
|
||||||
let event = if fragment_id.is_some() {
|
let event = if fragment_id.is_some() {
|
||||||
|
|||||||
@@ -24,6 +24,6 @@ pub use crate::runtime_registry::RegistryAccessError;
|
|||||||
|
|
||||||
/// Get or create a ShutdownTracker for SDK use.
|
/// Get or create a ShutdownTracker for SDK use.
|
||||||
/// This provides automatic task management without requiring manual setup.
|
/// This provides automatic task management without requiring manual setup.
|
||||||
pub fn get_sdk_shutdown_tracker() -> Result<ShutdownTracker, RegistryAccessError> {
|
pub fn create_sdk_shutdown_tracker() -> Result<ShutdownTracker, RegistryAccessError> {
|
||||||
Ok(runtime_registry::RuntimeRegistry::get_or_create_sdk()?.shutdown_tracker_owned())
|
Ok(runtime_registry::RuntimeRegistry::create_sdk()?.shutdown_tracker_owned())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,30 +19,45 @@ pub(crate) struct RuntimeRegistry {
|
|||||||
pub enum RegistryAccessError {
|
pub enum RegistryAccessError {
|
||||||
#[error("the runtime registry is poisoned")]
|
#[error("the runtime registry is poisoned")]
|
||||||
Poisoned,
|
Poisoned,
|
||||||
|
|
||||||
|
#[error("The SDK ShutdownManager already exists")]
|
||||||
|
ExistingShutdownManager,
|
||||||
|
|
||||||
|
#[error("No existing SDK ShutdownManager")]
|
||||||
|
MissingShutdownManager,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RuntimeRegistry {
|
impl RuntimeRegistry {
|
||||||
/// Get or create a ShutdownManager for SDK use.
|
/// Create a ShutdownManager for SDK use.
|
||||||
/// This manager doesn't listen to OS signals, making it suitable for library use.
|
/// This manager doesn't listen to OS signals, making it suitable for library use.
|
||||||
pub(crate) fn get_or_create_sdk() -> Result<Arc<ShutdownManager>, RegistryAccessError> {
|
/// This function overwrite any existing manager!
|
||||||
|
pub(crate) fn create_sdk() -> Result<Arc<ShutdownManager>, RegistryAccessError> {
|
||||||
|
let mut guard = REGISTRY
|
||||||
|
.sdk_manager
|
||||||
|
.write()
|
||||||
|
.map_err(|_| RegistryAccessError::Poisoned)?;
|
||||||
|
|
||||||
|
Ok(guard
|
||||||
|
.insert(Arc::new(
|
||||||
|
ShutdownManager::new_without_signals().with_cancel_on_panic(),
|
||||||
|
))
|
||||||
|
.clone())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get the ShutdownManager for SDK use.
|
||||||
|
/// This manager doesn't listen to OS signals, making it suitable for library use.
|
||||||
|
/// Not yet used, but maybe in the future
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub(crate) fn get_sdk() -> Result<Arc<ShutdownManager>, RegistryAccessError> {
|
||||||
let guard = REGISTRY
|
let guard = REGISTRY
|
||||||
.sdk_manager
|
.sdk_manager
|
||||||
.read()
|
.read()
|
||||||
.map_err(|_| RegistryAccessError::Poisoned)?;
|
.map_err(|_| RegistryAccessError::Poisoned)?;
|
||||||
if let Some(manager) = guard.as_ref() {
|
if let Some(manager) = guard.as_ref() {
|
||||||
return Ok(manager.clone());
|
Ok(manager.clone())
|
||||||
|
} else {
|
||||||
|
Err(RegistryAccessError::MissingShutdownManager)
|
||||||
}
|
}
|
||||||
drop(guard);
|
|
||||||
|
|
||||||
let mut guard = REGISTRY
|
|
||||||
.sdk_manager
|
|
||||||
.write()
|
|
||||||
.map_err(|_| RegistryAccessError::Poisoned)?;
|
|
||||||
Ok(guard
|
|
||||||
.get_or_insert_with(|| {
|
|
||||||
Arc::new(ShutdownManager::new_without_signals().with_cancel_on_panic())
|
|
||||||
})
|
|
||||||
.clone())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Check if an SDK manager has been created.
|
/// Check if an SDK manager has been created.
|
||||||
@@ -85,10 +100,13 @@ mod tests {
|
|||||||
|
|
||||||
assert!(!RuntimeRegistry::has_sdk_manager().unwrap());
|
assert!(!RuntimeRegistry::has_sdk_manager().unwrap());
|
||||||
|
|
||||||
let manager1 = RuntimeRegistry::get_or_create_sdk().unwrap();
|
// Error if nothing was created
|
||||||
|
assert!(RuntimeRegistry::get_sdk().is_err());
|
||||||
|
|
||||||
|
let manager1 = RuntimeRegistry::create_sdk().unwrap();
|
||||||
assert!(RuntimeRegistry::has_sdk_manager().unwrap());
|
assert!(RuntimeRegistry::has_sdk_manager().unwrap());
|
||||||
|
|
||||||
let manager2 = RuntimeRegistry::get_or_create_sdk().unwrap();
|
let manager2 = RuntimeRegistry::get_sdk().unwrap();
|
||||||
// Should return the same instance
|
// Should return the same instance
|
||||||
assert!(Arc::ptr_eq(&manager1, &manager2));
|
assert!(Arc::ptr_eq(&manager1, &manager2));
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nym-api"
|
name = "nym-api"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0"
|
||||||
version = "1.1.67"
|
version = "1.1.68"
|
||||||
authors.workspace = true
|
authors.workspace = true
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
rust-version.workspace = true
|
rust-version.workspace = true
|
||||||
|
|||||||
@@ -1,21 +1,17 @@
|
|||||||
# this will only work with VPN, otherwise remove the harbor part
|
# this will only work with VPN, otherwise remove the harbor part
|
||||||
FROM harbor.nymte.ch/dockerhub/rust:latest AS builder
|
FROM harbor.nymte.ch/dockerhub/rust:latest AS builder
|
||||||
|
|
||||||
ARG GIT_REF=main
|
|
||||||
|
|
||||||
RUN apt update && apt install -yy libdbus-1-dev pkg-config libclang-dev
|
RUN apt update && apt install -yy libdbus-1-dev pkg-config libclang-dev
|
||||||
|
|
||||||
# Install go
|
# Install go
|
||||||
RUN wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz -O go.tar.gz
|
RUN wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz -O go.tar.gz
|
||||||
RUN tar -xzvf go.tar.gz -C /usr/local
|
RUN tar -xzvf go.tar.gz -C /usr/local
|
||||||
|
|
||||||
RUN git clone https://github.com/nymtech/nym-vpn-client /usr/src/nym-vpn-client
|
|
||||||
RUN cd /usr/src/nym-vpn-client && git checkout $GIT_REF
|
|
||||||
ENV PATH=/go/bin:/usr/local/go/bin:$PATH
|
ENV PATH=/go/bin:/usr/local/go/bin:$PATH
|
||||||
WORKDIR /usr/src/nym-vpn-client/nym-vpn-core
|
|
||||||
RUN cargo build --release --package nym-gateway-probe
|
|
||||||
|
|
||||||
COPY ./ /usr/src/nym
|
COPY ./ /usr/src/nym
|
||||||
|
WORKDIR /usr/src/nym
|
||||||
|
RUN cargo build --release --package nym-gateway-probe
|
||||||
|
|
||||||
WORKDIR /usr/src/nym/nym-node-status-api/nym-node-status-agent
|
WORKDIR /usr/src/nym/nym-node-status-api/nym-node-status-agent
|
||||||
RUN cargo build --release
|
RUN cargo build --release
|
||||||
|
|
||||||
@@ -35,7 +31,7 @@ RUN apt-get update && apt-get install -y ca-certificates
|
|||||||
WORKDIR /nym
|
WORKDIR /nym
|
||||||
|
|
||||||
COPY --from=builder /usr/src/nym/target/release/nym-node-status-agent ./
|
COPY --from=builder /usr/src/nym/target/release/nym-node-status-agent ./
|
||||||
COPY --from=builder /usr/src/nym-vpn-client/nym-vpn-core/target/release/nym-gateway-probe ./
|
COPY --from=builder /usr/src/nym/target/release/nym-gateway-probe ./
|
||||||
COPY --from=builder /usr/src/nym/nym-node-status-api/nym-node-status-agent/entrypoint.sh ./
|
COPY --from=builder /usr/src/nym/nym-node-status-api/nym-node-status-agent/entrypoint.sh ./
|
||||||
RUN chmod +x /nym/entrypoint.sh
|
RUN chmod +x /nym/entrypoint.sh
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
[package]
|
[package]
|
||||||
name = "nym-node"
|
name = "nym-node"
|
||||||
version = "1.19.0"
|
version = "1.20.0"
|
||||||
authors.workspace = true
|
authors.workspace = true
|
||||||
repository.workspace = true
|
repository.workspace = true
|
||||||
homepage.workspace = true
|
homepage.workspace = true
|
||||||
|
|||||||
@@ -720,15 +720,11 @@ where
|
|||||||
base_builder = base_builder.with_topology_provider(topology_provider);
|
base_builder = base_builder.with_topology_provider(topology_provider);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use custom shutdown if provided, otherwise get from registry
|
// Use custom shutdown if provided, otherwise the sdk one will be used later down the line
|
||||||
let shutdown_tracker = match self.custom_shutdown {
|
if let Some(shutdown_tracker) = self.custom_shutdown {
|
||||||
Some(custom) => custom,
|
base_builder = base_builder.with_shutdown(shutdown_tracker);
|
||||||
None => {
|
}
|
||||||
// Auto-create from registry for SDK use
|
|
||||||
nym_task::get_sdk_shutdown_tracker()?
|
|
||||||
}
|
|
||||||
};
|
|
||||||
base_builder = base_builder.with_shutdown(shutdown_tracker);
|
|
||||||
if let Some(event_tx) = self.event_tx {
|
if let Some(event_tx) = self.event_tx {
|
||||||
base_builder = base_builder.with_event_tx(event_tx);
|
base_builder = base_builder.with_event_tx(event_tx);
|
||||||
}
|
}
|
||||||
@@ -793,7 +789,7 @@ where
|
|||||||
client_output,
|
client_output,
|
||||||
client_state.clone(),
|
client_state.clone(),
|
||||||
nym_address,
|
nym_address,
|
||||||
started_client.shutdown_handle.child_tracker(),
|
started_client.shutdown_handle.clone(),
|
||||||
packet_type,
|
packet_type,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nym-network-requester"
|
name = "nym-network-requester"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0"
|
||||||
version = "1.1.65"
|
version = "1.1.66"
|
||||||
authors.workspace = true
|
authors.workspace = true
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
rust-version = "1.85"
|
rust-version = "1.85"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nym-cli"
|
name = "nym-cli"
|
||||||
version = "1.1.64"
|
version = "1.1.65"
|
||||||
authors.workspace = true
|
authors.workspace = true
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
license.workspace = true
|
license.workspace = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "nymvisor"
|
name = "nymvisor"
|
||||||
version = "0.1.29"
|
version = "0.1.30"
|
||||||
authors.workspace = true
|
authors.workspace = true
|
||||||
repository.workspace = true
|
repository.workspace = true
|
||||||
homepage.workspace = true
|
homepage.workspace = true
|
||||||
|
|||||||
Reference in New Issue
Block a user