diff --git a/.github/workflows/memcheck.yml b/.github/workflows/memcheck.yml index e6556b9f57..f0efbefda5 100644 --- a/.github/workflows/memcheck.yml +++ b/.github/workflows/memcheck.yml @@ -98,14 +98,14 @@ jobs: ls -l $ANT_DATA_PATH/client_first/logs mkdir $ANT_DATA_PATH/client ls -l $ANT_DATA_PATH - cp ./the-test-data.zip ./the-test-data_1.zip - ./target/release/ant --log-output-dest data-dir file_TYPE upload "" > ./second_upload 2>&1 - enrelease-candidatev: + ./target/release/ant --log-output-dest=data-dir file upload --public "./the-test-data.zip" > ./upload_output_second 2>&1 + rg 'Total cost: 0 AttoTokens' ./upload_output_second -c --stats + env: ANT_LOG: "all" timeout-minutes: 25 - name: showing the second upload terminal output - run: cat second_upload + run: cat upload_output_second shell: bash if: always() @@ -115,7 +115,7 @@ jobs: - name: Start the restart node again run: | ./target/release/antnode \ - --root-dir-type PARESTART_TEST_NODE_DATA_PATH \ + --root-dir $RESTART_TEST_NODE_DATA_PATH \ --log-output-dest $RESTART_TEST_NODE_DATA_PATH \ --local \ --rewards-address "0x03B770D9cD32077cC0bF330c13C114a87643B124" & diff --git a/CHANGELOG.md b/CHANGELOG.md index 6aed4810fa..01c99e92fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,44 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 *When editing this file, please respect a line length of 100.* +## 2025-01-14 + +### Client + +#### Fixed + +- Remove `uploaded` timestamp from archive metadata to prevent unnecessary re-uploads when archive + contents remain unchanged. This ensures we do not charge when uploading the same file more than + once on `ant file upload`. +- Switch from `HashMap` to `BTreeMap` for archive to ensure deterministic serialization, which also + prevents unnecessary re-uploads. As above, this facilitates the fix for the duplicate payment + issue. + +## 2025-01-09 + +### Network + +#### Changed + +- Network discovery no longer queries the farthest full buckets. This significantly reduces the + number of messages as the network grows, resulting in fewer open connections and reduced resource + usage. + +## 2025-01-06 + +### Network + +#### Changed + +- Memory and CPU metrics use more precise `f64` measurements + +### Client + +#### Fixed + +- Apply a timeout for EVM transactions. This fixes an issue where some uploads would freeze indefinitely. +- The `ant` CLI was not selecting its network consistently from the environment variable. + ## 2024-12-21 ### Network diff --git a/Cargo.lock b/Cargo.lock index fb3a998472..d9327f6bdf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -807,7 +807,7 @@ dependencies = [ [[package]] name = "ant-cli" -version = "0.3.3" +version = "0.3.4" dependencies = [ "ant-bootstrap", "ant-build-info", @@ -948,7 +948,7 @@ dependencies = [ [[package]] name = "ant-node" -version = "0.3.3" +version = "0.3.4" dependencies = [ "ant-bootstrap", "ant-build-info", @@ -1049,7 +1049,7 @@ dependencies = [ [[package]] name = "ant-node-rpc-client" -version = "0.6.40" +version = "0.6.41" dependencies = [ "ant-build-info", "ant-logging", @@ -1591,7 +1591,7 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "autonomi" -version = "0.3.3" +version = "0.3.4" dependencies = [ "alloy", "ant-bootstrap", diff --git a/ant-build-info/src/release_info.rs b/ant-build-info/src/release_info.rs index c87bb79fe8..33afb04700 100644 --- a/ant-build-info/src/release_info.rs +++ b/ant-build-info/src/release_info.rs @@ -1,4 +1,4 @@ pub const RELEASE_YEAR: &str = "2024"; pub const RELEASE_MONTH: &str = "12"; pub const RELEASE_CYCLE: &str = "1"; -pub const RELEASE_CYCLE_COUNTER: &str = "8"; +pub const RELEASE_CYCLE_COUNTER: &str = "9"; diff --git a/ant-cli/Cargo.toml b/ant-cli/Cargo.toml index 7e1eda41d4..5cf23b59bc 100644 --- a/ant-cli/Cargo.toml +++ b/ant-cli/Cargo.toml @@ -3,7 +3,7 @@ authors = ["MaidSafe Developers "] name = "ant-cli" description = "CLI client for the Autonomi network" license = "GPL-3.0" -version = "0.3.3" +version = "0.3.4" edition = "2021" homepage = "https://maidsafe.net" readme = "README.md" @@ -28,7 +28,7 @@ ant-bootstrap = { path = "../ant-bootstrap", version = "0.1.3" } ant-build-info = { path = "../ant-build-info", version = "0.1.23" } ant-logging = { path = "../ant-logging", version = "0.2.44" } ant-protocol = { path = "../ant-protocol", version = "0.3.3" } -autonomi = { path = "../autonomi", version = "0.3.3", features = [ +autonomi = { path = "../autonomi", version = "0.3.4", features = [ "fs", "vault", "registers", @@ -60,7 +60,7 @@ tracing = { version = "~0.1.26" } walkdir = "2.5.0" [dev-dependencies] -autonomi = { path = "../autonomi", version = "0.3.3", features = ["fs"]} +autonomi = { path = "../autonomi", version = "0.3.4", features = ["fs"]} criterion = "0.5.1" eyre = "0.6.8" rand = { version = "~0.8.5", features = ["small_rng"] } diff --git a/ant-node-rpc-client/Cargo.toml b/ant-node-rpc-client/Cargo.toml index 650c8b1a74..6bab97421e 100644 --- a/ant-node-rpc-client/Cargo.toml +++ b/ant-node-rpc-client/Cargo.toml @@ -7,7 +7,7 @@ license = "GPL-3.0" name = "ant-node-rpc-client" readme = "README.md" repository = "https://github.com/maidsafe/autonomi" -version = "0.6.40" +version = "0.6.41" [[bin]] name = "antnode_rpc_client" @@ -20,7 +20,7 @@ nightly = [] ant-build-info = { path = "../ant-build-info", version = "0.1.23" } ant-logging = { path = "../ant-logging", version = "0.2.44" } ant-protocol = { path = "../ant-protocol", version = "0.3.3", features=["rpc"] } -ant-node = { path = "../ant-node", version = "0.3.3" } +ant-node = { path = "../ant-node", version = "0.3.4" } ant-service-management = { path = "../ant-service-management", version = "0.4.7" } async-trait = "0.1" bls = { package = "blsttc", version = "8.0.1" } diff --git a/ant-node/Cargo.toml b/ant-node/Cargo.toml index 86afa2a3a7..f8e289a30b 100644 --- a/ant-node/Cargo.toml +++ b/ant-node/Cargo.toml @@ -2,7 +2,7 @@ authors = ["MaidSafe Developers "] description = "The Autonomi node binary" name = "ant-node" -version = "0.3.3" +version = "0.3.4" edition = "2021" license = "GPL-3.0" homepage = "https://maidsafe.net" @@ -86,7 +86,7 @@ xor_name = "5.0.0" ant-protocol = { path = "../ant-protocol", version = "0.3.3", features = ["rpc"] } assert_fs = "1.0.0" evmlib = { path = "../evmlib", version = "0.1.8" } -autonomi = { path = "../autonomi", version = "0.3.3", features = ["registers"] } +autonomi = { path = "../autonomi", version = "0.3.4", features = ["registers"] } reqwest = { version = "0.12.2", default-features = false, features = [ "rustls-tls-manual-roots", ] } diff --git a/autonomi/Cargo.toml b/autonomi/Cargo.toml index e93a1368a7..86df80e572 100644 --- a/autonomi/Cargo.toml +++ b/autonomi/Cargo.toml @@ -3,7 +3,7 @@ authors = ["MaidSafe Developers "] description = "Autonomi client API" name = "autonomi" license = "GPL-3.0" -version = "0.3.3" +version = "0.3.4" edition = "2021" homepage = "https://maidsafe.net" readme = "README.md" diff --git a/autonomi/src/client/files/archive.rs b/autonomi/src/client/files/archive.rs index 8aebc1df85..7afecec092 100644 --- a/autonomi/src/client/files/archive.rs +++ b/autonomi/src/client/files/archive.rs @@ -7,7 +7,7 @@ // permissions and limitations relating to use of the SAFE Network Software. use std::{ - collections::HashMap, + collections::BTreeMap, path::{Path, PathBuf}, }; @@ -36,8 +36,6 @@ pub enum RenameError { /// Metadata for a file in an archive. Time values are UNIX timestamps. #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] pub struct Metadata { - /// When the file was (last) uploaded to the network. - pub uploaded: u64, /// File creation time on local file system. See [`std::fs::Metadata::created`] for details per OS. pub created: u64, /// Last file modification time taken from local file system. See [`std::fs::Metadata::modified`] for details per OS. @@ -55,7 +53,6 @@ impl Metadata { .as_secs(); Self { - uploaded: now, created: now, modified: now, size, @@ -68,7 +65,7 @@ impl Metadata { /// The data maps are stored within this structure instead of uploading them to the network, keeping the data private. #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)] pub struct PrivateArchive { - map: HashMap, + map: BTreeMap, } impl PrivateArchive { @@ -76,7 +73,7 @@ impl PrivateArchive { /// Note that this does not upload the archive to the network pub fn new() -> Self { Self { - map: HashMap::new(), + map: BTreeMap::new(), } } @@ -130,7 +127,7 @@ impl PrivateArchive { } /// Get the underlying map - pub fn map(&self) -> &HashMap { + pub fn map(&self) -> &BTreeMap { &self.map } diff --git a/autonomi/src/client/files/archive_public.rs b/autonomi/src/client/files/archive_public.rs index f4b487747f..4a3a07684a 100644 --- a/autonomi/src/client/files/archive_public.rs +++ b/autonomi/src/client/files/archive_public.rs @@ -7,7 +7,7 @@ // permissions and limitations relating to use of the SAFE Network Software. use std::{ - collections::HashMap, + collections::BTreeMap, path::{Path, PathBuf}, }; @@ -34,7 +34,7 @@ pub type ArchiveAddr = XorName; /// to the network, of which the addresses are stored in this archive. #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)] pub struct PublicArchive { - map: HashMap, + map: BTreeMap, } impl PublicArchive { @@ -42,7 +42,7 @@ impl PublicArchive { /// Note that this does not upload the archive to the network pub fn new() -> Self { Self { - map: HashMap::new(), + map: BTreeMap::new(), } } @@ -92,7 +92,7 @@ impl PublicArchive { } /// Get the underlying map - pub fn map(&self) -> &HashMap { + pub fn map(&self) -> &BTreeMap { &self.map } diff --git a/autonomi/src/client/files/fs_public.rs b/autonomi/src/client/files/fs_public.rs index a35cce82f2..081445019f 100644 --- a/autonomi/src/client/files/fs_public.rs +++ b/autonomi/src/client/files/fs_public.rs @@ -194,7 +194,6 @@ pub(crate) fn metadata_from_entry(entry: &walkdir::DirEntry) -> Metadata { entry.path().display() ); return Metadata { - uploaded: 0, created: 0, modified: 0, size: 0, @@ -224,10 +223,6 @@ pub(crate) fn metadata_from_entry(entry: &walkdir::DirEntry) -> Metadata { let modified = unix_time("modified", fs_metadata.modified()); Metadata { - uploaded: SystemTime::now() - .duration_since(SystemTime::UNIX_EPOCH) - .unwrap_or(Duration::from_secs(0)) - .as_secs(), created, modified, size: fs_metadata.len(), diff --git a/release-cycle-info b/release-cycle-info index 1ec5651cc4..3f88de7ba3 100644 --- a/release-cycle-info +++ b/release-cycle-info @@ -15,4 +15,4 @@ release-year: 2024 release-month: 12 release-cycle: 1 -release-cycle-counter: 8 +release-cycle-counter: 9