diff --git a/.github/workflows/memcheck.yml b/.github/workflows/memcheck.yml index b9965b64f3..99f5b93609 100644 --- a/.github/workflows/memcheck.yml +++ b/.github/workflows/memcheck.yml @@ -60,8 +60,9 @@ jobs: - name: Set SAFE_PEERS run: | - safe_peers=$(rg "Local node is listening .+ on \".+\"" $BOOTSTRAP_NODE_DATA_PATH -u | \ - rg '/ip4.*$' -m1 -o | rg '"' -r '') + safe_peers=$(rg "Local node is listening .+ on .+" $BOOTSTRAP_NODE_DATA_PATH -u | \ + rg '/ip4.*$' -m1 -o) + echo $safe_peers echo "SAFE_PEERS=$safe_peers" >> $GITHUB_ENV - name: Check SAFE_PEERS was set diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fd095472c0..a401a1483c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,6 +2,11 @@ name: release on: workflow_dispatch: + inputs: + chunk-size: + description: Specify the chunk size in bytes. If not used, the current default is 1048576. + type: number + required: false # The key variables also need to be passed to `cross`, which runs in a container and does not # inherit variables from the parent environment. The `cross` tool is used in the `build` @@ -49,6 +54,12 @@ jobs: - shell: bash run: cargo binstall --no-confirm just + - name: Set chunk size if applicable + if: ${{ inputs.chunk-size != '' }} + shell: bash + run: | + echo "MAX_CHUNK_SIZE=${{ inputs.chunk-size }}" >> $GITHUB_ENV + - name: build release artifacts shell: bash run: | diff --git a/CHANGELOG.md b/CHANGELOG.md index 26c2b893ad..e05fa21fa9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,31 @@ 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.* +## 2024-10-07 + +### Network + +#### Changed + +- Increase chunk size to 4MB with node size remaining at 32GB +- Bootstrap peer parsing in CI was changed to accommodate new log format in libp2p + +### Node Manager + +#### Added + +- The `add` command has new `--max-log-files` and `--max-archived-log-files` arguments to support capping node log output + +#### Fixed + +- The Discord username on the `--owner` argument will always be converted to lower case + +#### Launchpad + +### Added + +- Increased logging related to app configuration. This could help solving issues on launchpad start up. + ## 2024-10-03 ### Launchpad diff --git a/Cargo.lock b/Cargo.lock index bf85dd8399..5418bdcc30 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -252,8 +252,8 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", - "synstructure 0.13.1", + "syn 2.0.79", + "synstructure", ] [[package]] @@ -264,7 +264,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -336,9 +336,9 @@ dependencies = [ [[package]] name = "async-stream" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" dependencies = [ "async-stream-impl", "futures-core", @@ -347,24 +347,24 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] name = "async-trait" -version = "0.1.82" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -421,18 +421,18 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" dependencies = [ - "autocfg 1.3.0", + "autocfg 1.4.0", ] [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "autonomi" -version = "0.1.1" +version = "0.1.2" dependencies = [ "bip39", "blsttc", @@ -839,7 +839,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" dependencies = [ "memchr", - "regex-automata 0.4.7", + "regex-automata 0.4.8", "serde", ] @@ -976,9 +976,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.21" +version = "1.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07b1695e2c7e8fc85310cde85aeaab7e3097f593c91d209d3f9df76c928100f0" +checksum = "812acba72f0a070b003d3697490d2b55b837230ae7c6c6497f05cc2ddbb8d938" dependencies = [ "jobserver", "libc", @@ -1084,9 +1084,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.17" +version = "4.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac" +checksum = "7be5744db7978a28d9df86a214130d106a89ce49644cbc4e3f0c22c3fba30615" dependencies = [ "clap_builder", "clap_derive", @@ -1094,9 +1094,9 @@ dependencies = [ [[package]] name = "clap-verbosity-flag" -version = "2.2.1" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63d19864d6b68464c59f7162c9914a0b569ddc2926b4a2d71afe62a9738eff53" +checksum = "e099138e1807662ff75e2cebe4ae2287add879245574489f9b1588eb5e5564ed" dependencies = [ "clap", "log", @@ -1104,9 +1104,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.17" +version = "4.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73" +checksum = "a5fbc17d3ef8278f55b282b2a2e75ae6f6c7d4bb70ed3d0382375104bfafdb4b" dependencies = [ "anstream", "anstyle", @@ -1114,19 +1114,19 @@ dependencies = [ "strsim", "terminal_size", "unicase", - "unicode-width", + "unicode-width 0.2.0", ] [[package]] name = "clap_derive" -version = "4.5.13" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -1246,7 +1246,7 @@ dependencies = [ "encode_unicode", "lazy_static", "libc", - "unicode-width", + "unicode-width 0.1.14", "windows-sys 0.52.0", ] @@ -1563,7 +1563,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -1585,8 +1585,8 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.77", - "synstructure 0.13.1", + "syn 2.0.79", + "synstructure", ] [[package]] @@ -1610,7 +1610,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -1621,7 +1621,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -1837,7 +1837,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -1975,7 +1975,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -1994,20 +1994,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" -[[package]] -name = "err-derive" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c34a887c8df3ed90498c1c437ce21f211c8e27672921a8ffa293cb8d6d4caa9e" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "rustversion", - "syn 1.0.109", - "synstructure 0.12.6", -] - [[package]] name = "errno" version = "0.3.9" @@ -2163,9 +2149,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.33" +version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" +checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" dependencies = [ "crc32fast", "miniz_oxide 0.8.0", @@ -2306,7 +2292,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -2702,7 +2688,7 @@ checksum = "999ce923619f88194171a67fb3e6d613653b8d4d6078b529b15a765da0edcc17" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -2952,8 +2938,8 @@ dependencies = [ "aho-corasick", "bstr", "log", - "regex-automata 0.4.7", - "regex-syntax 0.8.4", + "regex-automata 0.4.8", + "regex-syntax 0.8.5", ] [[package]] @@ -3020,7 +3006,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.5.0", + "indexmap 2.6.0", "slab", "tokio", "tokio-util 0.7.12", @@ -3059,6 +3045,12 @@ dependencies = [ "allocator-api2", ] +[[package]] +name = "hashbrown" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" + [[package]] name = "headers" version = "0.3.9" @@ -3304,9 +3296,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.4" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "httpdate" @@ -3419,9 +3411,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da62f120a8a37763efb0cf8fdf264b884c7b8b9ac8660b900c8661030c00e6ba" +checksum = "41296eb09f183ac68eec06e03cdbea2e759633d4067b2f6552fc2e009bcad08b" dependencies = [ "bytes", "futures-channel", @@ -3432,7 +3424,6 @@ dependencies = [ "pin-project-lite", "socket2", "tokio", - "tower", "tower-service", "tracing", ] @@ -3544,7 +3535,7 @@ dependencies = [ "globset", "log", "memchr", - "regex-automata 0.4.7", + "regex-automata 0.4.8", "same-file", "walkdir", "winapi-util", @@ -3562,18 +3553,18 @@ version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ - "autocfg 1.3.0", + "autocfg 1.4.0", "hashbrown 0.12.3", ] [[package]] name = "indexmap" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.0", ] [[package]] @@ -3587,7 +3578,7 @@ dependencies = [ "number_prefix", "portable-atomic", "tokio", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] @@ -3597,7 +3588,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "232929e1d75fe899576a3d5c7416ad0d88dbfbb3c3d6aa00873a7408a50ddb88" dependencies = [ "ahash", - "indexmap 2.5.0", + "indexmap 2.6.0", "is-terminal", "itoa", "log", @@ -3625,7 +3616,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b23a0c8dfe501baac4adf6ebbfa6eddf8f0c07f56b058cc1288017e32397846c" dependencies = [ "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -3776,9 +3767,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.158" +version = "0.2.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" [[package]] name = "libm" @@ -4186,7 +4177,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -4324,7 +4315,7 @@ version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ - "autocfg 1.3.0", + "autocfg 1.4.0", "scopeguard", ] @@ -4526,7 +4517,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -4549,9 +4540,9 @@ dependencies = [ [[package]] name = "multiaddr" -version = "0.18.1" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b852bc02a2da5feed68cd14fa50d0774b92790a5bdbfa932a813926c8472070" +checksum = "fe6351f60b488e04c1d21bc69e56b89cb3f5e8f5d22557d6e8031bdfd79b6961" dependencies = [ "arrayref", "byteorder", @@ -4562,7 +4553,7 @@ dependencies = [ "percent-encoding", "serde", "static_assertions", - "unsigned-varint 0.7.2", + "unsigned-varint 0.8.0", "url", ] @@ -4609,7 +4600,7 @@ dependencies = [ [[package]] name = "nat-detection" -version = "0.2.6" +version = "0.2.7" dependencies = [ "clap", "clap-verbosity-flag", @@ -4724,7 +4715,7 @@ dependencies = [ [[package]] name = "node-launchpad" -version = "0.3.18" +version = "0.3.19" dependencies = [ "atty", "better-panic", @@ -4747,7 +4738,7 @@ dependencies = [ "pretty_assertions", "prometheus-parse", "ratatui", - "reqwest 0.12.7", + "reqwest 0.12.8", "serde", "serde_json", "signal-hook", @@ -4831,7 +4822,7 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" dependencies = [ - "autocfg 1.3.0", + "autocfg 1.4.0", "num-integer", "num-traits", ] @@ -4888,7 +4879,7 @@ version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ - "autocfg 1.3.0", + "autocfg 1.4.0", "num-integer", "num-traits", ] @@ -4911,7 +4902,7 @@ version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ - "autocfg 1.3.0", + "autocfg 1.4.0", "libm", ] @@ -4960,9 +4951,12 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "82881c4be219ab5faaf2ad5e5e5ecdff8c66bd7402ca3160975c93b24961afd1" +dependencies = [ + "portable-atomic", +] [[package]] name = "oorandom" @@ -5265,7 +5259,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -5286,7 +5280,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.5.0", + "indexmap 2.6.0", "serde", "serde_derive", ] @@ -5308,7 +5302,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -5345,9 +5339,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "plist" @@ -5356,7 +5350,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" dependencies = [ "base64 0.22.1", - "indexmap 2.5.0", + "indexmap 2.6.0", "quick-xml 0.32.0", "serde", "time", @@ -5430,9 +5424,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.7.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" +checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" [[package]] name = "powerfmt" @@ -5524,30 +5518,6 @@ dependencies = [ "yansi", ] -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - [[package]] name = "proc-macro2" version = "1.0.86" @@ -5583,7 +5553,7 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -5612,7 +5582,7 @@ dependencies = [ "rand 0.8.5", "rand_chacha 0.3.1", "rand_xorshift 0.3.0", - "regex-syntax 0.8.4", + "regex-syntax 0.8.5", "rusty-fork", "tempfile", "unarray", @@ -6055,7 +6025,7 @@ dependencies = [ "strum_macros", "unicode-segmentation", "unicode-truncate", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] @@ -6101,9 +6071,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.4" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0884ad60e090bf1345b93da0a5de8923c93884cd03f40dfcfddd3b4bee661853" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" dependencies = [ "bitflags 2.6.0", ] @@ -6121,14 +6091,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.6" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.7", - "regex-syntax 0.8.4", + "regex-automata 0.4.8", + "regex-syntax 0.8.5", ] [[package]] @@ -6142,13 +6112,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.4", + "regex-syntax 0.8.5", ] [[package]] @@ -6159,9 +6129,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" @@ -6206,9 +6176,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.7" +version = "0.12.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" +checksum = "f713147fbe92361e52392c73b8c9e48c04c6625bce969ef54dc901e58e042a7b" dependencies = [ "base64 0.22.1", "bytes", @@ -6229,7 +6199,7 @@ dependencies = [ "pin-project-lite", "quinn", "rustls 0.23.13", - "rustls-pemfile 2.1.3", + "rustls-pemfile 2.2.0", "rustls-pki-types", "serde", "serde_json", @@ -6500,19 +6470,18 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.3" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64 0.22.1", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" +checksum = "0e696e35370c65c9c541198af4543ccd580cf17fc25d8e05c5a242b202488c55" [[package]] name = "rustls-webpki" @@ -6676,24 +6645,25 @@ dependencies = [ [[package]] name = "self_encryption" -version = "0.29.2" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "894da3241a9e426c16fb8cb28b19416eae5fafdc7742e4bc505c1821661c140f" +checksum = "f9439a0cb3efb35e080a1576e3e00a804caab04010adc802aed88cf539b103ed" dependencies = [ "aes 0.8.4", "bincode", "brotli", "bytes", "cbc", - "err-derive", "hex 0.4.3", "itertools 0.10.5", + "lazy_static", "num_cpus", "rand 0.8.5", "rand_chacha 0.3.1", "rayon", "serde", "tempfile", + "thiserror", "tiny-keccak", "tokio", "xor_name", @@ -6746,7 +6716,7 @@ checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -6763,9 +6733,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] @@ -6797,7 +6767,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.5.0", + "indexmap 2.6.0", "itoa", "ryu", "serde", @@ -6959,7 +6929,7 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ - "autocfg 1.3.0", + "autocfg 1.4.0", ] [[package]] @@ -6970,7 +6940,7 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "sn-node-manager" -version = "0.10.5" +version = "0.10.6" dependencies = [ "assert_cmd", "assert_fs", @@ -6989,7 +6959,7 @@ dependencies = [ "predicates 3.1.2", "prost 0.9.0", "rand 0.8.5", - "reqwest 0.12.7", + "reqwest 0.12.8", "semver", "serde", "serde_json", @@ -7021,7 +6991,7 @@ dependencies = [ "flate2", "lazy_static", "regex", - "reqwest 0.12.7", + "reqwest 0.12.8", "semver", "serde_json", "tar", @@ -7032,7 +7002,7 @@ dependencies = [ [[package]] name = "sn_auditor" -version = "0.3.2" +version = "0.3.3" dependencies = [ "blsttc", "clap", @@ -7066,14 +7036,14 @@ dependencies = [ [[package]] name = "sn_build_info" -version = "0.1.14" +version = "0.1.15" dependencies = [ "vergen", ] [[package]] name = "sn_cli" -version = "0.95.2" +version = "0.95.3" dependencies = [ "aes 0.7.5", "base64 0.22.1", @@ -7095,7 +7065,7 @@ dependencies = [ "libp2p", "rand 0.8.5", "rayon", - "reqwest 0.12.7", + "reqwest 0.12.8", "rmp-serde", "rpassword", "serde", @@ -7115,7 +7085,7 @@ dependencies = [ [[package]] name = "sn_client" -version = "0.110.2" +version = "0.110.3" dependencies = [ "assert_matches", "async-trait", @@ -7198,7 +7168,7 @@ dependencies = [ [[package]] name = "sn_faucet" -version = "0.5.2" +version = "0.5.3" dependencies = [ "assert_fs", "base64 0.22.1", @@ -7212,7 +7182,7 @@ dependencies = [ "hex 0.4.3", "indicatif", "minreq", - "reqwest 0.12.7", + "reqwest 0.12.8", "serde", "serde_json", "sn_build_info", @@ -7230,7 +7200,7 @@ dependencies = [ [[package]] name = "sn_logging" -version = "0.2.35" +version = "0.2.36" dependencies = [ "chrono", "color-eyre", @@ -7255,7 +7225,7 @@ dependencies = [ [[package]] name = "sn_metrics" -version = "0.1.15" +version = "0.1.16" dependencies = [ "clap", "color-eyre", @@ -7269,7 +7239,7 @@ dependencies = [ [[package]] name = "sn_networking" -version = "0.18.3" +version = "0.18.4" dependencies = [ "aes-gcm-siv", "async-trait", @@ -7312,7 +7282,7 @@ dependencies = [ [[package]] name = "sn_node" -version = "0.111.3" +version = "0.111.4" dependencies = [ "assert_fs", "assert_matches", @@ -7335,7 +7305,7 @@ dependencies = [ "prost 0.9.0", "rand 0.8.5", "rayon", - "reqwest 0.12.7", + "reqwest 0.12.8", "rmp-serde", "self_encryption", "serde", @@ -7366,7 +7336,7 @@ dependencies = [ [[package]] name = "sn_node_rpc_client" -version = "0.6.30" +version = "0.6.31" dependencies = [ "assert_fs", "async-trait", @@ -7393,13 +7363,13 @@ dependencies = [ [[package]] name = "sn_peers_acquisition" -version = "0.5.2" +version = "0.5.3" dependencies = [ "clap", "lazy_static", "libp2p", "rand 0.8.5", - "reqwest 0.12.7", + "reqwest 0.12.8", "sn_protocol", "thiserror", "tokio", @@ -7409,7 +7379,7 @@ dependencies = [ [[package]] name = "sn_protocol" -version = "0.17.10" +version = "0.17.11" dependencies = [ "blsttc", "bytes", @@ -7438,7 +7408,7 @@ dependencies = [ [[package]] name = "sn_registers" -version = "0.3.20" +version = "0.3.21" dependencies = [ "blsttc", "crdts", @@ -7455,7 +7425,7 @@ dependencies = [ [[package]] name = "sn_service_management" -version = "0.3.13" +version = "0.3.14" dependencies = [ "async-trait", "dirs-next", @@ -7481,7 +7451,7 @@ dependencies = [ [[package]] name = "sn_transfers" -version = "0.19.2" +version = "0.19.3" dependencies = [ "assert_fs", "blsttc", @@ -7638,7 +7608,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -7649,9 +7619,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "symbolic-common" -version = "12.11.1" +version = "12.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fdf97c441f18a4f92425b896a4ec7a27e03631a0b1047ec4e34e9916a9a167e" +checksum = "366f1b4c6baf6cfefc234bbd4899535fca0b06c74443039a73f6dfb2fad88d77" dependencies = [ "debugid", "memmap2", @@ -7661,9 +7631,9 @@ dependencies = [ [[package]] name = "symbolic-demangle" -version = "12.11.1" +version = "12.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc8ece6b129e97e53d1fbb3f61d33a6a9e5369b11d01228c068094d6d134eaea" +checksum = "aba05ba5b9962ea5617baf556293720a8b2d0a282aa14ee4bf10e22efc7da8c8" dependencies = [ "cpp_demangle", "rustc-demangle", @@ -7683,9 +7653,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.77" +version = "2.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" dependencies = [ "proc-macro2", "quote", @@ -7707,18 +7677,6 @@ dependencies = [ "futures-core", ] -[[package]] -name = "synstructure" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "unicode-xid", -] - [[package]] name = "synstructure" version = "0.13.1" @@ -7727,7 +7685,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -7774,9 +7732,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tar" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb797dad5fb5b76fcf519e702f4a589483b5ef06567f160c392832c1f5e44909" +checksum = "4ff6c40d3aedb5e06b57c6f669ad17ab063dd1e63d977c6a88e7f4dfa4f04020" dependencies = [ "filetime", "libc", @@ -7785,9 +7743,9 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.12.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" +checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" dependencies = [ "cfg-if", "fastrand", @@ -7798,12 +7756,12 @@ dependencies = [ [[package]] name = "terminal_size" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" +checksum = "4f599bd7ca042cfdf8f4512b277c02ba102247820f9d9d4a9f521f496751a6ef" dependencies = [ "rustix", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] @@ -7814,7 +7772,7 @@ checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "test_utils" -version = "0.4.6" +version = "0.4.7" dependencies = [ "color-eyre", "dirs-next", @@ -7825,22 +7783,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.63" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -7956,7 +7914,7 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "token_supplies" -version = "0.1.53" +version = "0.1.54" dependencies = [ "dirs-next", "reqwest 0.11.27", @@ -8002,7 +7960,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -8110,11 +8068,11 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.21" +version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b072cee73c449a636ffd6f32bd8de3a9f7119139aff882f44943ce2986dc5cf" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.5.0", + "indexmap 2.6.0", "serde", "serde_spanned", "toml_datetime", @@ -8257,7 +8215,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -8377,7 +8335,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" dependencies = [ "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -8404,7 +8362,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3e785f863a3af4c800a2a669d0b64c879b538738e352607e2624d03f868dc01" dependencies = [ "crossterm 0.27.0", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] @@ -8434,9 +8392,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "ucd-trie" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "uint" @@ -8467,9 +8425,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" [[package]] name = "unicode-bom" @@ -8506,7 +8464,7 @@ checksum = "b3644627a5af5fa321c95b9b235a72fd24cd29c648c2c379431e6628655627bf" dependencies = [ "itertools 0.13.0", "unicode-segmentation", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] @@ -8516,10 +8474,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] -name = "unicode-xid" -version = "0.2.6" +name = "unicode-width" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" [[package]] name = "universal-hash" @@ -8757,7 +8715,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", "wasm-bindgen-shared", ] @@ -8791,7 +8749,7 @@ checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -9150,9 +9108,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.18" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" dependencies = [ "memchr", ] @@ -9324,7 +9282,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -9344,7 +9302,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] diff --git a/Justfile b/Justfile index 8e260b9804..9452125df5 100644 --- a/Justfile +++ b/Justfile @@ -107,9 +107,13 @@ build-release-artifacts arch: mkdir artifacts cargo clean - echo "===============" - echo "= Public Keys =" - echo "===============" + if [ -n "$MAX_CHUNK_SIZE" ]; then + echo "Overriding chunk size to $MAX_CHUNK_SIZE bytes" + fi + + echo "================" + echo " Network Keys " + echo "================" echo "FOUNDATION_PK: $FOUNDATION_PK" echo "GENESIS_PK: $GENESIS_PK" echo "NETWORK_ROYALTIES_PK: $NETWORK_ROYALTIES_PK" diff --git a/README.md b/README.md index 33bbd87661..6addfb65e8 100644 --- a/README.md +++ b/README.md @@ -30,10 +30,10 @@ if you want it to connect to the current beta network. You should build from the `stable` branch, as follows: ``` git checkout stable -export GENESIS_PK=806b5c2eba70354ea92ba142c57587c9c5467ff69f0d43c482cda2313f9351e40c6120d76a2495cb3ca8367eee0a676f -export FOUNDATION_PK=8296d1f92f0bccaf1a90d57b65122f8c671172074000fc4db538dda4042360ea493a475ae548f1096adf83bd7e940727 -export NETWORK_ROYALTIES_PK=81b8f8a6bc51a6d4d6a2d7a7713ae86467ea0efd971c56d4c7c9380e0a7346b319a0a14178bd134cbb2fdb8571cbe15b -export PAYMENT_FORWARD_PK=8f97398fe7565a39ba83df42d18d253138d17493b4b64cb70282a562ee18a1c4bfe87405519f9c53e728753a103cd953 +export FOUNDATION_PK=8c89a2230096d07b3013089ffd594b23f468e72f19672c3dc1e50747c4c954fbf54ef8e98809e2d2253b14321e2123ad +export GENESIS_PK=93fa3c5e1b68ace4fb02845f89f1eb5ff42c64cd31ee1b908d7c3bbb236d009ae4ae9a1a16d42bc7586e88db1248494c +export NETWORK_ROYALTIES_PK=87ec7d1e5e0252d29b1b0ac42a04d7e8daf7dd9f212a23dbc4a9ca5a6442fdab74196ef7cca150ecd6f9848d49148ed4 +export PAYMENT_FORWARD_PK=887c9371cb9a1467cd45b6f31367520ab44cc40281d52039acfd6f967bdb0c3e214bb81f2a0adcf683bd6608980a7b5f cargo build --release --features=network-contacts --bin safenode ``` @@ -51,10 +51,10 @@ a connecting node is compatible. For a client to connect to the current beta network, these keys must be set at build time: ``` -GENESIS_PK=8829ca178d6022de16fb8d3498411dd8a674a69c5f12e04d8b794a52ab056f1d419d12f690df1082dfa7efbbb10f62fa -FOUNDATION_PK=84418659a8581b510c40b12e57da239787fd0d3b323f102f09fae9daf2ac96907e0045b1653c301de45117d393d92678 -NETWORK_ROYALTIES_PK=8c027130571cea2387a0ceb37c14fec12849015be1573ea6d0a8e4d48da2c1fbe2907ae7503bb7c385b21e2d7ac9d6ff -PAYMENT_FORWARD_PK=8c2f406a52d48d48505e1a3fdbb0c19ab42cc7c4807e9ea19c1fff3e5148f3bbe53431ec5a07544aaeef764e073e4b2f +FOUNDATION_PK=8c89a2230096d07b3013089ffd594b23f468e72f19672c3dc1e50747c4c954fbf54ef8e98809e2d2253b14321e2123ad +GENESIS_PK=93fa3c5e1b68ace4fb02845f89f1eb5ff42c64cd31ee1b908d7c3bbb236d009ae4ae9a1a16d42bc7586e88db1248494c +NETWORK_ROYALTIES_PK=87ec7d1e5e0252d29b1b0ac42a04d7e8daf7dd9f212a23dbc4a9ca5a6442fdab74196ef7cca150ecd6f9848d49148ed4 +PAYMENT_FORWARD_PK=887c9371cb9a1467cd45b6f31367520ab44cc40281d52039acfd6f967bdb0c3e214bb81f2a0adcf683bd6608980a7b5f ``` ##### Features diff --git a/autonomi/Cargo.toml b/autonomi/Cargo.toml index a70a6ee4a9..75b11ac4e9 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.1.1" +version = "0.1.2" edition = "2021" homepage = "https://maidsafe.net" readme = "README.md" @@ -26,12 +26,12 @@ bytes = { version = "1.0.1", features = ["serde"] } libp2p = "0.53" rand = "0.8.5" rmp-serde = "1.1.1" -self_encryption = "~0.29.0" +self_encryption = "~0.30.0" serde = { version = "1.0.133", features = ["derive", "rc"] } -sn_client = { path = "../sn_client", version = "0.110.2" } -sn_protocol = { version = "0.17.10", path = "../sn_protocol" } -sn_registers = { path = "../sn_registers", version = "0.3.20" } -sn_transfers = { path = "../sn_transfers", version = "0.19.2" } +sn_client = { path = "../sn_client", version = "0.110.3" } +sn_protocol = { version = "0.17.11", path = "../sn_protocol" } +sn_registers = { path = "../sn_registers", version = "0.3.21" } +sn_transfers = { path = "../sn_transfers", version = "0.19.3" } thiserror = "1.0.23" tokio = { version = "1.35.0", features = ["sync", "fs"] } tracing = { version = "~0.1.26" } diff --git a/autonomi/src/self_encryption.rs b/autonomi/src/self_encryption.rs index c050c4deb7..34c3357787 100644 --- a/autonomi/src/self_encryption.rs +++ b/autonomi/src/self_encryption.rs @@ -10,6 +10,7 @@ use bytes::{BufMut, Bytes, BytesMut}; use self_encryption::{DataMap, MAX_CHUNK_SIZE}; use serde::{Deserialize, Serialize}; use sn_protocol::storage::Chunk; +use tracing::debug; #[derive(Debug, thiserror::Error)] pub enum Error { @@ -54,14 +55,15 @@ fn pack_data_map(data_map: DataMap) -> Result<(Chunk, Vec), Error> { let mut chunk_content = wrap_data_map(&DataMapLevel::First(data_map))?; let (data_map_chunk, additional_chunks) = loop { + debug!("Max chunk size: {}", *MAX_CHUNK_SIZE); let chunk = Chunk::new(chunk_content); // If datamap chunk is less than `MAX_CHUNK_SIZE` return it so it can be directly sent to the network. - if MAX_CHUNK_SIZE >= chunk.serialised_size() { + if *MAX_CHUNK_SIZE >= chunk.serialised_size() { chunks.reverse(); // Returns the last datamap, and all the chunks produced. break (chunk, chunks); } else { - let mut bytes = BytesMut::with_capacity(MAX_CHUNK_SIZE).writer(); + let mut bytes = BytesMut::with_capacity(*MAX_CHUNK_SIZE).writer(); let mut serialiser = rmp_serde::Serializer::new(&mut bytes); chunk.serialize(&mut serialiser)?; let serialized_chunk = bytes.into_inner().freeze(); diff --git a/nat-detection/Cargo.toml b/nat-detection/Cargo.toml index 2de9f2aded..bb3b5f5afe 100644 --- a/nat-detection/Cargo.toml +++ b/nat-detection/Cargo.toml @@ -7,7 +7,7 @@ license = "GPL-3.0" name = "nat-detection" readme = "README.md" repository = "https://github.com/maidsafe/safe_network" -version = "0.2.6" +version = "0.2.7" [[bin]] name = "nat-detection" @@ -28,7 +28,7 @@ libp2p = { version = "0.53", features = [ "macros", "upnp", ] } -sn_networking = { path = "../sn_networking", version = "0.18.3" } +sn_networking = { path = "../sn_networking", version = "0.18.4" } tokio = { version = "1.32.0", features = ["full"] } tracing = { version = "~0.1.26" } tracing-log = "0.2.0" diff --git a/node-launchpad/Cargo.toml b/node-launchpad/Cargo.toml index c92f499ab4..3178f653e4 100644 --- a/node-launchpad/Cargo.toml +++ b/node-launchpad/Cargo.toml @@ -2,7 +2,7 @@ authors = ["MaidSafe Developers "] description = "Node Launchpad" name = "node-launchpad" -version = "0.3.18" +version = "0.3.19" edition = "2021" license = "GPL-3.0" homepage = "https://maidsafe.net" @@ -48,10 +48,10 @@ reqwest = { version = "0.12.2", default-features = false, features = [ serde = { version = "1.0.188", features = ["derive"] } serde_json = "1.0.107" signal-hook = "0.3.17" -sn-node-manager = { version = "0.10.5", path = "../sn_node_manager" } -sn_peers_acquisition = { version = "0.5.2", path = "../sn_peers_acquisition" } +sn-node-manager = { version = "0.10.6", path = "../sn_node_manager" } +sn_peers_acquisition = { version = "0.5.3", path = "../sn_peers_acquisition" } sn-releases = "~0.2.6" -sn_service_management = { version = "0.3.13", path = "../sn_service_management" } +sn_service_management = { version = "0.3.14", path = "../sn_service_management" } strip-ansi-escapes = "0.2.0" strum = { version = "0.26.1", features = ["derive"] } sysinfo = "0.30.12" diff --git a/node-launchpad/src/config.rs b/node-launchpad/src/config.rs index 93b0bd60be..c7869eaf69 100644 --- a/node-launchpad/src/config.rs +++ b/node-launchpad/src/config.rs @@ -137,11 +137,15 @@ impl AppData { return Ok(Self::default()); } - let data = std::fs::read_to_string(&config_path) - .map_err(|_| color_eyre::eyre::eyre!("Failed to read app data file"))?; - - let app_data: AppData = serde_json::from_str(&data) - .map_err(|_| color_eyre::eyre::eyre!("Failed to parse app data"))?; + let data = std::fs::read_to_string(&config_path).map_err(|e| { + error!("Failed to read app data file: {}", e); + color_eyre::eyre::eyre!("Failed to read app data file: {}", e) + })?; + + let app_data: AppData = serde_json::from_str(&data).map_err(|e| { + error!("Failed to parse app data: {}", e); + color_eyre::eyre::eyre!("Failed to parse app data: {}", e) + })?; Ok(app_data) } diff --git a/node-launchpad/src/node_mgmt.rs b/node-launchpad/src/node_mgmt.rs index 1b591e5a95..893523f245 100644 --- a/node-launchpad/src/node_mgmt.rs +++ b/node-launchpad/src/node_mgmt.rs @@ -297,6 +297,8 @@ async fn scale_down_nodes(config: &NodeConfig, count: u16) { None, None, None, + None, + None, None, // We don't care about the port, as we are scaling down config.owner.clone(), config.peers_args.clone(), @@ -368,6 +370,8 @@ async fn add_nodes( None, None, None, + None, + None, port_range, config.owner.clone(), config.peers_args.clone(), diff --git a/release-cycle-info b/release-cycle-info index b7fbab14d3..118cefc26c 100644 --- a/release-cycle-info +++ b/release-cycle-info @@ -14,5 +14,5 @@ # number for all the released binaries. release-year: 2024 release-month: 10 -release-cycle: 1 -release-cycle-counter: 3 +release-cycle: 2 +release-cycle-counter: 1 diff --git a/sn_auditor/Cargo.toml b/sn_auditor/Cargo.toml index 8884d3b437..b38eeee122 100644 --- a/sn_auditor/Cargo.toml +++ b/sn_auditor/Cargo.toml @@ -2,7 +2,7 @@ authors = ["MaidSafe Developers "] description = "Safe Network Auditor" name = "sn_auditor" -version = "0.3.2" +version = "0.3.3" edition = "2021" homepage = "https://maidsafe.net" repository = "https://github.com/maidsafe/safe_network" @@ -31,9 +31,9 @@ graphviz-rust = { version = "0.9.0", optional = true } lazy_static = "1.4.0" serde = { version = "1.0.133", features = ["derive", "rc"] } serde_json = "1.0.108" -sn_client = { path = "../sn_client", version = "0.110.2" } -sn_logging = { path = "../sn_logging", version = "0.2.35" } -sn_peers_acquisition = { path = "../sn_peers_acquisition", version = "0.5.2" } +sn_client = { path = "../sn_client", version = "0.110.3" } +sn_logging = { path = "../sn_logging", version = "0.2.36" } +sn_peers_acquisition = { path = "../sn_peers_acquisition", version = "0.5.3" } tiny_http = { version = "0.12", features = ["ssl-rustls"] } tracing = { version = "~0.1.26" } tokio = { version = "1.32.0", features = [ diff --git a/sn_build_info/Cargo.toml b/sn_build_info/Cargo.toml index adfddb871a..1d255e20a6 100644 --- a/sn_build_info/Cargo.toml +++ b/sn_build_info/Cargo.toml @@ -8,7 +8,7 @@ license = "GPL-3.0" name = "sn_build_info" readme = "README.md" repository = "https://github.com/maidsafe/safe_network" -version = "0.1.14" +version = "0.1.15" [build-dependencies] vergen = { version = "8.0.0", features = ["build", "git", "gitcl"] } diff --git a/sn_cli/Cargo.toml b/sn_cli/Cargo.toml index 0fdc626f97..abc247336b 100644 --- a/sn_cli/Cargo.toml +++ b/sn_cli/Cargo.toml @@ -8,7 +8,7 @@ license = "GPL-3.0" name = "sn_cli" readme = "README.md" repository = "https://github.com/maidsafe/safe_network" -version = "0.95.2" +version = "0.95.3" [[bin]] path = "src/bin/main.rs" @@ -54,11 +54,11 @@ reqwest = { version = "0.12.2", default-features = false, features = [ rmp-serde = "1.1.1" rpassword = "7.3.1" serde = { version = "1.0.133", features = ["derive"] } -sn_build_info = { path = "../sn_build_info", version = "0.1.14" } -sn_client = { path = "../sn_client", version = "0.110.2" } -sn_logging = { path = "../sn_logging", version = "0.2.35" } -sn_peers_acquisition = { path = "../sn_peers_acquisition", version = "0.5.2" } -sn_protocol = { path = "../sn_protocol", version = "0.17.10" } +sn_build_info = { path = "../sn_build_info", version = "0.1.15" } +sn_client = { path = "../sn_client", version = "0.110.3" } +sn_logging = { path = "../sn_logging", version = "0.2.36" } +sn_peers_acquisition = { path = "../sn_peers_acquisition", version = "0.5.3" } +sn_protocol = { path = "../sn_protocol", version = "0.17.11" } tempfile = "3.6.0" tiny-keccak = "~2.0.2" tokio = { version = "1.32.0", features = [ @@ -80,7 +80,7 @@ eyre = "0.6.8" criterion = "0.5.1" tempfile = "3.6.0" rand = { version = "~0.8.5", features = ["small_rng"] } -sn_client = { path = "../sn_client", version = "0.110.2", features = [ +sn_client = { path = "../sn_client", version = "0.110.3", features = [ "test-utils", ] } diff --git a/sn_client/Cargo.toml b/sn_client/Cargo.toml index 3de8bb5b19..92c944bb87 100644 --- a/sn_client/Cargo.toml +++ b/sn_client/Cargo.toml @@ -8,7 +8,7 @@ license = "GPL-3.0" name = "sn_client" readme = "README.md" repository = "https://github.com/maidsafe/safe_network" -version = "0.110.2" +version = "0.110.3" [features] default = [] @@ -47,18 +47,18 @@ prometheus-client = { version = "0.22", optional = true } rand = { version = "~0.8.5", features = ["small_rng"] } rayon = "1.8.0" rmp-serde = "1.1.1" -self_encryption = "~0.29.0" +self_encryption = "~0.30.0" serde = { version = "1.0.133", features = ["derive", "rc"] } -sn_networking = { path = "../sn_networking", version = "0.18.3" } -sn_protocol = { path = "../sn_protocol", version = "0.17.10" } -sn_registers = { path = "../sn_registers", version = "0.3.20" } -sn_transfers = { path = "../sn_transfers", version = "0.19.2" } +sn_networking = { path = "../sn_networking", version = "0.18.4" } +sn_protocol = { path = "../sn_protocol", version = "0.17.11" } +sn_registers = { path = "../sn_registers", version = "0.3.21" } +sn_transfers = { path = "../sn_transfers", version = "0.19.3" } tempfile = "3.6.0" thiserror = "1.0.23" tiny-keccak = "~2.0.2" tracing = { version = "~0.1.26" } xor_name = "5.0.0" -sn_peers_acquisition = { path = "../sn_peers_acquisition", version = "0.5.2", optional = true } +sn_peers_acquisition = { path = "../sn_peers_acquisition", version = "0.5.3", optional = true } eyre = { version = "0.6.8", optional = true } [dev-dependencies] @@ -67,8 +67,8 @@ dirs-next = "~2.0.0" # add rand to libp2p libp2p-identity = { version = "0.2.7", features = ["rand"] } sn_client = { path = "../sn_client", features = ["test-utils"] } -sn_logging = { path = "../sn_logging", version = "0.2.35" } -sn_registers = { path = "../sn_registers", version = "0.3.20", features = [ +sn_logging = { path = "../sn_logging", version = "0.2.36" } +sn_registers = { path = "../sn_registers", version = "0.3.21", features = [ "test-utils", ] } @@ -83,7 +83,7 @@ crate-type = ["cdylib", "rlib"] getrandom = { version = "0.2.12", features = ["js"] } wasm-bindgen = "0.2.90" wasm-bindgen-futures = "0.4.40" -sn_peers_acquisition = { path = "../sn_peers_acquisition", version = "0.5.2" } +sn_peers_acquisition = { path = "../sn_peers_acquisition", version = "0.5.3" } console_error_panic_hook = "0.1.6" tracing-wasm = "0.2.1" wasmtimer = "0.2.0" diff --git a/sn_client/src/chunks/pac_man.rs b/sn_client/src/chunks/pac_man.rs index 93d5785d9c..3cd368e320 100644 --- a/sn_client/src/chunks/pac_man.rs +++ b/sn_client/src/chunks/pac_man.rs @@ -50,8 +50,8 @@ pub(crate) fn encrypt_large( output_dir: &Path, ) -> Result<(Chunk, Vec<(XorName, PathBuf)>)> { let mut encryptor = StreamSelfEncryptor::encrypt_from_file( - Box::new(file_path.to_path_buf()), - Some(Box::new(output_dir.to_path_buf())), + file_path.to_path_buf(), + Some(output_dir.to_path_buf()), )?; let data_map; @@ -99,16 +99,17 @@ pub(crate) fn to_chunk(chunk_content: Bytes) -> Chunk { fn pack_data_map(data_map: DataMap) -> Result<(Chunk, Vec)> { let mut chunks = vec![]; let mut chunk_content = wrap_data_map(&DataMapLevel::First(data_map))?; + debug!("Max chunk size: {} bytes", *MAX_CHUNK_SIZE); let (data_map_chunk, additional_chunks) = loop { let chunk = to_chunk(chunk_content); - // If datamap chunk is less than `MAX_CHUNK_SIZE` return it so it can be directly sent to the network. - if MAX_CHUNK_SIZE >= chunk.serialised_size() { + // If datamap chunk is less than or equal to MAX_CHUNK_SIZE return it so it can be directly sent to the network. + if chunk.serialised_size() <= *MAX_CHUNK_SIZE { chunks.reverse(); // Returns the last datamap, and all the chunks produced. break (chunk, chunks); } else { - let mut bytes = BytesMut::with_capacity(MAX_CHUNK_SIZE).writer(); + let mut bytes = BytesMut::with_capacity(*MAX_CHUNK_SIZE).writer(); let mut serialiser = rmp_serde::Serializer::new(&mut bytes); chunk.serialize(&mut serialiser)?; let serialized_chunk = bytes.into_inner().freeze(); diff --git a/sn_client/src/files/download.rs b/sn_client/src/files/download.rs index a1f8de5f09..4444fab023 100644 --- a/sn_client/src/files/download.rs +++ b/sn_client/src/files/download.rs @@ -351,10 +351,7 @@ impl FilesDownload { let mut download_kind = { if let Some(path) = decrypted_file_path { - DownloadKind::FileSystem(StreamSelfDecryptor::decrypt_to_file( - Box::new(path), - &data_map, - )?) + DownloadKind::FileSystem(StreamSelfDecryptor::decrypt_to_file(path, &data_map)?) } else { DownloadKind::Memory(Vec::new()) } diff --git a/sn_client/src/folders.rs b/sn_client/src/folders.rs index 4e3152e33c..e2c94ef929 100644 --- a/sn_client/src/folders.rs +++ b/sn_client/src/folders.rs @@ -314,7 +314,7 @@ impl FoldersApi { children: &BTreeSet, encryption_pk: Option, ) -> Result<(EntryHash, XorName, Metadata)> { - let mut bytes = BytesMut::with_capacity(MAX_CHUNK_SIZE); + let mut bytes = BytesMut::with_capacity(*MAX_CHUNK_SIZE); let serialised_metadata = rmp_serde::to_vec(&metadata)?; if let Some(pk) = encryption_pk { bytes.put( diff --git a/sn_faucet/Cargo.toml b/sn_faucet/Cargo.toml index 86b8f5fa70..fecabf236e 100644 --- a/sn_faucet/Cargo.toml +++ b/sn_faucet/Cargo.toml @@ -8,7 +8,7 @@ license = "GPL-3.0" name = "sn_faucet" readme = "README.md" repository = "https://github.com/maidsafe/safe_network" -version = "0.5.2" +version = "0.5.3" [features] default = ["gifting"] @@ -37,13 +37,13 @@ indicatif = { version = "0.17.5", features = ["tokio"] } minreq = { version = "2.11.0", features = ["https-rustls"], optional = true } serde = { version = "1.0.193", features = ["derive"] } serde_json = "1.0.108" -sn_build_info = { path = "../sn_build_info", version = "0.1.14" } -sn_cli = { path = "../sn_cli", version = "0.95.2" } -sn_client = { path = "../sn_client", version = "0.110.2" } -sn_logging = { path = "../sn_logging", version = "0.2.35" } -sn_peers_acquisition = { path = "../sn_peers_acquisition", version = "0.5.2" } -sn_protocol = { path = "../sn_protocol", version = "0.17.10" } -sn_transfers = { path = "../sn_transfers", version = "0.19.2" } +sn_build_info = { path = "../sn_build_info", version = "0.1.15" } +sn_cli = { path = "../sn_cli", version = "0.95.3" } +sn_client = { path = "../sn_client", version = "0.110.3" } +sn_logging = { path = "../sn_logging", version = "0.2.36" } +sn_peers_acquisition = { path = "../sn_peers_acquisition", version = "0.5.3" } +sn_protocol = { path = "../sn_protocol", version = "0.17.11" } +sn_transfers = { path = "../sn_transfers", version = "0.19.3" } tokio = { version = "1.32.0", features = ["parking_lot", "rt"] } tracing = { version = "~0.1.26" } url = "2.5.0" diff --git a/sn_logging/Cargo.toml b/sn_logging/Cargo.toml index 4ebde30490..bd73bb2773 100644 --- a/sn_logging/Cargo.toml +++ b/sn_logging/Cargo.toml @@ -8,7 +8,7 @@ license = "GPL-3.0" name = "sn_logging" readme = "README.md" repository = "https://github.com/maidsafe/safe_network" -version = "0.2.35" +version = "0.2.36" [dependencies] chrono = "~0.4.19" diff --git a/sn_logging/src/lib.rs b/sn_logging/src/lib.rs index f88463246f..e255d8c843 100644 --- a/sn_logging/src/lib.rs +++ b/sn_logging/src/lib.rs @@ -124,8 +124,8 @@ pub struct LogBuilder { default_logging_targets: Vec<(String, Level)>, output_dest: LogOutputDest, format: LogFormat, - max_uncompressed_log_files: Option, - max_compressed_log_files: Option, + max_log_files: Option, + max_archived_log_files: Option, /// Setting this would print the sn_logging related updates to stdout. print_updates_to_stdout: bool, } @@ -140,8 +140,8 @@ impl LogBuilder { default_logging_targets, output_dest: LogOutputDest::Stderr, format: LogFormat::Default, - max_uncompressed_log_files: None, - max_compressed_log_files: None, + max_log_files: None, + max_archived_log_files: None, print_updates_to_stdout: true, } } @@ -157,13 +157,13 @@ impl LogBuilder { } /// The max number of uncompressed log files to store - pub fn max_uncompressed_log_files(&mut self, files: usize) { - self.max_uncompressed_log_files = Some(files); + pub fn max_log_files(&mut self, files: usize) { + self.max_log_files = Some(files); } /// The max number of compressed files to store - pub fn max_compressed_log_files(&mut self, files: usize) { - self.max_compressed_log_files = Some(files); + pub fn max_archived_log_files(&mut self, files: usize) { + self.max_archived_log_files = Some(files); } /// Setting this to false would prevent sn_logging from printing things to stdout. @@ -182,8 +182,8 @@ impl LogBuilder { self.default_logging_targets.clone(), &self.output_dest, self.format, - self.max_uncompressed_log_files, - self.max_compressed_log_files, + self.max_log_files, + self.max_archived_log_files, self.print_updates_to_stdout, )?; diff --git a/sn_metrics/Cargo.toml b/sn_metrics/Cargo.toml index f3b9b9df43..cd2ad4b26d 100644 --- a/sn_metrics/Cargo.toml +++ b/sn_metrics/Cargo.toml @@ -8,7 +8,7 @@ license = "GPL-3.0" name = "sn_metrics" readme = "README.md" repository = "https://github.com/maidsafe/safe_network" -version = "0.1.15" +version = "0.1.16" [[bin]] path = "src/main.rs" diff --git a/sn_networking/Cargo.toml b/sn_networking/Cargo.toml index 3ac07628a9..bf58cc5ea1 100644 --- a/sn_networking/Cargo.toml +++ b/sn_networking/Cargo.toml @@ -8,7 +8,7 @@ license = "GPL-3.0" name = "sn_networking" readme = "README.md" repository = "https://github.com/maidsafe/safe_network" -version = "0.18.3" +version = "0.18.4" [features] default = [] @@ -53,10 +53,10 @@ rand = { version = "~0.8.5", features = ["small_rng"] } rayon = "1.8.0" rmp-serde = "1.1.1" serde = { version = "1.0.133", features = ["derive", "rc"] } -sn_build_info = { path="../sn_build_info", version = "0.1.14" } -sn_protocol = { path = "../sn_protocol", version = "0.17.10" } -sn_transfers = { path = "../sn_transfers", version = "0.19.2" } -sn_registers = { path = "../sn_registers", version = "0.3.20" } +sn_build_info = { path="../sn_build_info", version = "0.1.15" } +sn_protocol = { path = "../sn_protocol", version = "0.17.11" } +sn_transfers = { path = "../sn_transfers", version = "0.19.3" } +sn_registers = { path = "../sn_registers", version = "0.3.21" } sysinfo = { version = "0.30.8", default-features = false, optional = true } thiserror = "1.0.23" tiny-keccak = { version = "~2.0.2", features = ["sha3"] } diff --git a/sn_networking/src/record_store.rs b/sn_networking/src/record_store.rs index 3fe7e00309..17308f196f 100644 --- a/sn_networking/src/record_store.rs +++ b/sn_networking/src/record_store.rs @@ -49,12 +49,12 @@ use walkdir::{DirEntry, WalkDir}; use xor_name::XorName; // A spend record is at the size of 4KB roughly. -// Given chunk record is maxed at size of 512KB. +// Given chunk record is maxed at size of 4MB. // During Beta phase, it's almost one spend per chunk, -// which makes the average record size is around 256k. +// which makes the average record size is around 2MB. // Given we are targeting node size to be 32GB, -// this shall allow around 128K records. -const MAX_RECORDS_COUNT: usize = 128 * 1024; +// this shall allow around 16K records. +const MAX_RECORDS_COUNT: usize = 16 * 1024; /// The maximum number of records to cache in memory. const MAX_RECORDS_CACHE_SIZE: usize = 100; @@ -1023,7 +1023,7 @@ mod tests { let sut = calculate_cost_for_records(percent); // at this point we should be at max cost - assert_eq!(sut, 952572); + assert_eq!(sut, 952541); } #[test] @@ -1032,7 +1032,7 @@ mod tests { let sut = calculate_cost_for_records(percent); // at this point we should be at max cost - assert_eq!(sut, 989011); + assert_eq!(sut, 989001); } #[test] @@ -1041,7 +1041,7 @@ mod tests { let sut = calculate_cost_for_records(percent); // at this point we should be at max cost - assert_eq!(sut, 997527); + assert_eq!(sut, 997523); } #[test] diff --git a/sn_node/Cargo.toml b/sn_node/Cargo.toml index 981c2cb57d..1781e451ee 100644 --- a/sn_node/Cargo.toml +++ b/sn_node/Cargo.toml @@ -2,7 +2,7 @@ authors = ["MaidSafe Developers "] description = "Safe Node" name = "sn_node" -version = "0.111.3" +version = "0.111.4" edition = "2021" license = "GPL-3.0" homepage = "https://maidsafe.net" @@ -48,16 +48,16 @@ tonic = { version = "0.6.2" } rand = { version = "~0.8.5", features = ["small_rng"] } rmp-serde = "1.1.1" rayon = "1.8.0" -self_encryption = "~0.29.0" +self_encryption = "~0.30.0" serde = { version = "1.0.133", features = ["derive", "rc"] } -sn_build_info = { path = "../sn_build_info", version = "0.1.14" } -sn_peers_acquisition = { path = "../sn_peers_acquisition", version = "0.5.2" } -sn_logging = { path = "../sn_logging", version = "0.2.35" } -sn_networking = { path = "../sn_networking", version = "0.18.3" } -sn_protocol = { path = "../sn_protocol", version = "0.17.10" } -sn_registers = { path = "../sn_registers", version = "0.3.20" } -sn_transfers = { path = "../sn_transfers", version = "0.19.2" } -sn_service_management = { path = "../sn_service_management", version = "0.3.13" } +sn_build_info = { path = "../sn_build_info", version = "0.1.15" } +sn_peers_acquisition = { path = "../sn_peers_acquisition", version = "0.5.3" } +sn_logging = { path = "../sn_logging", version = "0.2.36" } +sn_networking = { path = "../sn_networking", version = "0.18.4" } +sn_protocol = { path = "../sn_protocol", version = "0.17.11" } +sn_registers = { path = "../sn_registers", version = "0.3.21" } +sn_transfers = { path = "../sn_transfers", version = "0.19.3" } +sn_service_management = { path = "../sn_service_management", version = "0.3.14" } thiserror = "1.0.23" tokio = { version = "1.32.0", features = [ "io-util", @@ -84,11 +84,11 @@ reqwest = { version = "0.12.2", default-features = false, features = [ "rustls-tls-manual-roots", ] } serde_json = "1.0" -sn_client = { path = "../sn_client", version = "0.110.2" } -sn_protocol = { path = "../sn_protocol", version = "0.17.10", features = [ +sn_client = { path = "../sn_client", version = "0.110.3" } +sn_protocol = { path = "../sn_protocol", version = "0.17.11", features = [ "rpc", ] } -sn_transfers = { path = "../sn_transfers", version = "0.19.2", features = [ +sn_transfers = { path = "../sn_transfers", version = "0.19.3", features = [ "test-utils", ] } tempfile = "3.6.0" diff --git a/sn_node/src/bin/safenode/main.rs b/sn_node/src/bin/safenode/main.rs index cf30e04c65..0df4c65181 100644 --- a/sn_node/src/bin/safenode/main.rs +++ b/sn_node/src/bin/safenode/main.rs @@ -107,16 +107,16 @@ struct Opt { /// /// After reaching this limit, the older files are archived to save space. /// You can also specify the maximum number of archived log files to keep. - #[clap(long = "max_log_files", verbatim_doc_comment)] - max_uncompressed_log_files: Option, + #[clap(long, verbatim_doc_comment)] + max_log_files: Option, /// Specify the maximum number of archived log files to store. /// /// This argument is ignored if `log_output_dest` is set to "stdout" /// /// After reaching this limit, the older archived files are deleted. - #[clap(long = "max_archived_log_files", verbatim_doc_comment)] - max_compressed_log_files: Option, + #[clap(long, verbatim_doc_comment)] + max_archived_log_files: Option, /// Specify the node's data directory. /// @@ -433,11 +433,11 @@ fn init_logging(opt: &Opt, peer_id: PeerId) -> Result<(String, ReloadHandle, Opt let mut log_builder = sn_logging::LogBuilder::new(logging_targets); log_builder.output_dest(output_dest.clone()); log_builder.format(opt.log_format.unwrap_or(LogFormat::Default)); - if let Some(files) = opt.max_uncompressed_log_files { - log_builder.max_uncompressed_log_files(files); + if let Some(files) = opt.max_log_files { + log_builder.max_log_files(files); } - if let Some(files) = opt.max_compressed_log_files { - log_builder.max_compressed_log_files(files); + if let Some(files) = opt.max_archived_log_files { + log_builder.max_archived_log_files(files); } log_builder.initialize()? @@ -451,11 +451,11 @@ fn init_logging(opt: &Opt, peer_id: PeerId) -> Result<(String, ReloadHandle, Opt let mut log_builder = sn_logging::LogBuilder::new(logging_targets); log_builder.output_dest(output_dest.clone()); log_builder.format(opt.log_format.unwrap_or(LogFormat::Default)); - if let Some(files) = opt.max_uncompressed_log_files { - log_builder.max_uncompressed_log_files(files); + if let Some(files) = opt.max_log_files { + log_builder.max_log_files(files); } - if let Some(files) = opt.max_compressed_log_files { - log_builder.max_compressed_log_files(files); + if let Some(files) = opt.max_archived_log_files { + log_builder.max_archived_log_files(files); } log_builder.initialize() })?; diff --git a/sn_node_manager/Cargo.toml b/sn_node_manager/Cargo.toml index df1351b034..2070025fa3 100644 --- a/sn_node_manager/Cargo.toml +++ b/sn_node_manager/Cargo.toml @@ -7,7 +7,7 @@ license = "GPL-3.0" name = "sn-node-manager" readme = "README.md" repository = "https://github.com/maidsafe/safe_network" -version = "0.10.5" +version = "0.10.6" [[bin]] name = "safenode-manager" @@ -44,12 +44,12 @@ semver = "1.0.20" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" service-manager = "0.7.0" -sn_logging = { path = "../sn_logging", version = "0.2.35" } -sn_peers_acquisition = { path = "../sn_peers_acquisition", version = "0.5.2" } -sn_protocol = { path = "../sn_protocol", version = "0.17.10" } -sn_service_management = { path = "../sn_service_management", version = "0.3.13" } +sn_logging = { path = "../sn_logging", version = "0.2.36" } +sn_peers_acquisition = { path = "../sn_peers_acquisition", version = "0.5.3" } +sn_protocol = { path = "../sn_protocol", version = "0.17.11" } +sn_service_management = { path = "../sn_service_management", version = "0.3.14" } sn-releases = "0.2.6" -sn_transfers = { path = "../sn_transfers", version = "0.19.2" } +sn_transfers = { path = "../sn_transfers", version = "0.19.3" } sysinfo = "0.30.12" thiserror = "1.0.23" tokio = { version = "1.26", features = ["full"] } diff --git a/sn_node_manager/src/add_services/config.rs b/sn_node_manager/src/add_services/config.rs index ba0873d82c..2d5cac69dc 100644 --- a/sn_node_manager/src/add_services/config.rs +++ b/sn_node_manager/src/add_services/config.rs @@ -78,6 +78,8 @@ pub struct InstallNodeServiceCtxBuilder { pub log_dir_path: PathBuf, pub log_format: Option, pub name: String, + pub max_archived_log_files: Option, + pub max_log_files: Option, pub metrics_port: Option, pub node_ip: Option, pub node_port: Option, @@ -132,6 +134,14 @@ impl InstallNodeServiceCtxBuilder { args.push(OsString::from("--owner")); args.push(OsString::from(owner)); } + if let Some(log_files) = self.max_archived_log_files { + args.push(OsString::from("--max-archived-log-files")); + args.push(OsString::from(log_files.to_string())); + } + if let Some(log_files) = self.max_log_files { + args.push(OsString::from("--max-log-files")); + args.push(OsString::from(log_files.to_string())); + } if !self.bootstrap_peers.is_empty() { let peers_str = self @@ -169,10 +179,12 @@ pub struct AddNodeServiceOptions { pub home_network: bool, pub local: bool, pub log_format: Option, + pub max_archived_log_files: Option, + pub max_log_files: Option, pub metrics_port: Option, - pub owner: Option, pub node_ip: Option, pub node_port: Option, + pub owner: Option, pub rpc_address: Option, pub rpc_port: Option, pub safenode_src_path: PathBuf, diff --git a/sn_node_manager/src/add_services/mod.rs b/sn_node_manager/src/add_services/mod.rs index bb9b75541a..86137d881d 100644 --- a/sn_node_manager/src/add_services/mod.rs +++ b/sn_node_manager/src/add_services/mod.rs @@ -78,6 +78,16 @@ pub async fn add_node( check_port_availability(port_option, &node_registry.nodes)?; } + let owner = match &options.owner { + Some(owner) => { + if owner.chars().any(|c| c.is_uppercase()) { + warn!("Owner name ({owner}) contains uppercase characters and will be converted to lowercase"); + } + Some(owner.to_lowercase()) + } + None => None, + }; + let safenode_file_name = options .safenode_src_path .file_name() @@ -217,11 +227,13 @@ pub async fn add_node( local: options.local, log_dir_path: service_log_dir_path.clone(), log_format: options.log_format, + max_archived_log_files: options.max_archived_log_files, + max_log_files: options.max_log_files, metrics_port: metrics_free_port, name: service_name.clone(), node_ip: options.node_ip, node_port, - owner: options.owner.clone(), + owner: owner.clone(), rpc_socket_addr, safenode_path: service_safenode_path.clone(), service_user: options.user.clone(), @@ -250,13 +262,15 @@ pub async fn add_node( local: options.local, log_dir_path: service_log_dir_path.clone(), log_format: options.log_format, + max_archived_log_files: options.max_archived_log_files, + max_log_files: options.max_log_files, metrics_port: metrics_free_port, node_ip: options.node_ip, node_port, number: node_number, reward_balance: None, rpc_socket_addr, - owner: options.owner.clone(), + owner: owner.clone(), peer_id: None, pid: None, safenode_path: service_safenode_path, diff --git a/sn_node_manager/src/add_services/tests.rs b/sn_node_manager/src/add_services/tests.rs index ed10be31cf..f53d37f0fc 100644 --- a/sn_node_manager/src/add_services/tests.rs +++ b/sn_node_manager/src/add_services/tests.rs @@ -120,6 +120,8 @@ async fn add_genesis_node_should_use_latest_version_and_add_one_service() -> Res local: true, log_dir_path: node_logs_dir.to_path_buf().join("safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, name: "safenode1".to_string(), node_ip: None, @@ -154,6 +156,8 @@ async fn add_genesis_node_should_use_latest_version_and_add_one_service() -> Res home_network: false, local: true, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -227,6 +231,8 @@ async fn add_genesis_node_should_return_an_error_if_there_is_already_a_genesis_n local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -272,6 +278,8 @@ async fn add_genesis_node_should_return_an_error_if_there_is_already_a_genesis_n home_network: false, local: true, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -341,6 +349,8 @@ async fn add_genesis_node_should_return_an_error_if_count_is_greater_than_1() -> home_network: false, local: true, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -416,6 +426,8 @@ async fn add_node_should_use_latest_version_and_add_three_services() -> Result<( local: false, log_dir_path: node_logs_dir.to_path_buf().join("safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, name: "safenode1".to_string(), node_ip: None, @@ -454,6 +466,8 @@ async fn add_node_should_use_latest_version_and_add_three_services() -> Result<( local: false, log_dir_path: node_logs_dir.to_path_buf().join("safenode2"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, name: "safenode2".to_string(), node_ip: None, @@ -492,6 +506,8 @@ async fn add_node_should_use_latest_version_and_add_three_services() -> Result<( local: false, log_format: None, log_dir_path: node_logs_dir.to_path_buf().join("safenode3"), + max_archived_log_files: None, + max_log_files: None, metrics_port: None, name: "safenode3".to_string(), node_ip: None, @@ -527,6 +543,8 @@ async fn add_node_should_use_latest_version_and_add_three_services() -> Result<( home_network: false, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -651,6 +669,8 @@ async fn add_node_should_update_the_bootstrap_peers_inside_node_registry() -> Re local: false, log_dir_path: node_logs_dir.to_path_buf().join("safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, name: "safenode1".to_string(), node_ip: None, @@ -685,6 +705,8 @@ async fn add_node_should_update_the_bootstrap_peers_inside_node_registry() -> Re genesis: false, home_network: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -783,6 +805,8 @@ async fn add_node_should_update_the_environment_variables_inside_node_registry() local: false, log_dir_path: node_logs_dir.to_path_buf().join("safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, name: "safenode1".to_string(), node_ip: None, @@ -817,6 +841,8 @@ async fn add_node_should_update_the_environment_variables_inside_node_registry() home_network: false, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -889,6 +915,8 @@ async fn add_new_node_should_add_another_service() -> Result<()> { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -934,6 +962,8 @@ async fn add_new_node_should_add_another_service() -> Result<()> { local: false, log_dir_path: node_logs_dir.to_path_buf().join("safenode2"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, name: "safenode2".to_string(), node_ip: None, @@ -969,6 +999,8 @@ async fn add_new_node_should_add_another_service() -> Result<()> { home_network: false, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -1105,6 +1137,8 @@ async fn add_node_should_use_custom_ip() -> Result<()> { home_network: false, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: Some(custom_ip), @@ -1181,6 +1215,8 @@ async fn add_node_should_use_custom_ports_for_one_service() -> Result<()> { local: false, log_dir_path: node_logs_dir.to_path_buf().join("safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, name: "safenode1".to_string(), node_ip: None, @@ -1216,6 +1252,8 @@ async fn add_node_should_use_custom_ports_for_one_service() -> Result<()> { home_network: false, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -1435,6 +1473,8 @@ async fn add_node_should_use_a_custom_port_range() -> Result<()> { home_network: false, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -1487,6 +1527,8 @@ async fn add_node_should_return_an_error_if_duplicate_custom_port_is_used() -> R local: false, log_format: None, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: Some(12000), @@ -1530,6 +1572,8 @@ async fn add_node_should_return_an_error_if_duplicate_custom_port_is_used() -> R home_network: false, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -1580,6 +1624,8 @@ async fn add_node_should_return_an_error_if_duplicate_custom_port_in_range_is_us local: false, log_format: None, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: Some(12000), @@ -1623,6 +1669,8 @@ async fn add_node_should_return_an_error_if_duplicate_custom_port_in_range_is_us home_network: false, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -1690,6 +1738,8 @@ async fn add_node_should_return_an_error_if_port_and_node_count_do_not_match() - home_network: false, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -1762,6 +1812,8 @@ async fn add_node_should_return_an_error_if_multiple_services_are_specified_with home_network: false, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -1887,6 +1939,8 @@ async fn add_node_should_set_random_ports_if_enable_metrics_server_is_true() -> home_network: false, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -1912,6 +1966,246 @@ async fn add_node_should_set_random_ports_if_enable_metrics_server_is_true() -> Ok(()) } +#[tokio::test] +async fn add_node_should_set_max_archived_log_files() -> Result<()> { + let tmp_data_dir = assert_fs::TempDir::new()?; + let node_reg_path = tmp_data_dir.child("node_reg.json"); + + let mut mock_service_control = MockServiceControl::new(); + + let mut node_registry = NodeRegistry { + auditor: None, + faucet: None, + save_path: node_reg_path.to_path_buf(), + nat_status: None, + nodes: vec![], + bootstrap_peers: vec![], + environment_variables: None, + daemon: None, + }; + + let latest_version = "0.96.4"; + let temp_dir = assert_fs::TempDir::new()?; + let node_data_dir = temp_dir.child("data"); + node_data_dir.create_dir_all()?; + let node_logs_dir = temp_dir.child("logs"); + node_logs_dir.create_dir_all()?; + let safenode_download_path = temp_dir.child(SAFENODE_FILE_NAME); + safenode_download_path.write_binary(b"fake safenode bin")?; + + let mut seq = Sequence::new(); + + // Expected calls for first installation + mock_service_control + .expect_get_available_port() + .times(1) + .returning(|| Ok(8081)) + .in_sequence(&mut seq); + + mock_service_control + .expect_install() + .times(1) + .with( + eq(ServiceInstallCtx { + args: vec![ + OsString::from("--rpc"), + OsString::from("127.0.0.1:8081"), + OsString::from("--root-dir"), + OsString::from( + node_data_dir + .to_path_buf() + .join("safenode1") + .to_string_lossy() + .to_string(), + ), + OsString::from("--log-output-dest"), + OsString::from( + node_logs_dir + .to_path_buf() + .join("safenode1") + .to_string_lossy() + .to_string(), + ), + OsString::from("--max-archived-log-files"), + OsString::from("20"), + ], + autostart: false, + contents: None, + environment: None, + label: "safenode1".parse()?, + program: node_data_dir + .to_path_buf() + .join("safenode1") + .join(SAFENODE_FILE_NAME), + username: Some(get_username()), + working_directory: None, + }), + eq(false), + ) + .returning(|_, _| Ok(())) + .in_sequence(&mut seq); + + add_node( + AddNodeServiceOptions { + auto_restart: false, + auto_set_nat_flags: false, + bootstrap_peers: vec![], + count: Some(1), + delete_safenode_src: false, + enable_metrics_server: false, + env_variables: None, + genesis: false, + home_network: false, + local: false, + log_format: None, + max_archived_log_files: Some(20), + max_log_files: None, + metrics_port: None, + owner: None, + node_ip: None, + node_port: None, + rpc_address: None, + rpc_port: None, + safenode_dir_path: temp_dir.to_path_buf(), + safenode_src_path: safenode_download_path.to_path_buf(), + service_data_dir_path: node_data_dir.to_path_buf(), + service_log_dir_path: node_logs_dir.to_path_buf(), + upnp: false, + user: Some(get_username()), + user_mode: false, + version: latest_version.to_string(), + }, + &mut node_registry, + &mock_service_control, + VerbosityLevel::Normal, + ) + .await?; + + assert_matches!(node_registry.nodes[0].max_archived_log_files, Some(20)); + + Ok(()) +} + +#[tokio::test] +async fn add_node_should_set_max_log_files() -> Result<()> { + let tmp_data_dir = assert_fs::TempDir::new()?; + let node_reg_path = tmp_data_dir.child("node_reg.json"); + + let mut mock_service_control = MockServiceControl::new(); + + let mut node_registry = NodeRegistry { + auditor: None, + faucet: None, + save_path: node_reg_path.to_path_buf(), + nat_status: None, + nodes: vec![], + bootstrap_peers: vec![], + environment_variables: None, + daemon: None, + }; + + let latest_version = "0.96.4"; + let temp_dir = assert_fs::TempDir::new()?; + let node_data_dir = temp_dir.child("data"); + node_data_dir.create_dir_all()?; + let node_logs_dir = temp_dir.child("logs"); + node_logs_dir.create_dir_all()?; + let safenode_download_path = temp_dir.child(SAFENODE_FILE_NAME); + safenode_download_path.write_binary(b"fake safenode bin")?; + + let mut seq = Sequence::new(); + + // Expected calls for first installation + mock_service_control + .expect_get_available_port() + .times(1) + .returning(|| Ok(8081)) + .in_sequence(&mut seq); + + mock_service_control + .expect_install() + .times(1) + .with( + eq(ServiceInstallCtx { + args: vec![ + OsString::from("--rpc"), + OsString::from("127.0.0.1:8081"), + OsString::from("--root-dir"), + OsString::from( + node_data_dir + .to_path_buf() + .join("safenode1") + .to_string_lossy() + .to_string(), + ), + OsString::from("--log-output-dest"), + OsString::from( + node_logs_dir + .to_path_buf() + .join("safenode1") + .to_string_lossy() + .to_string(), + ), + OsString::from("--max-log-files"), + OsString::from("20"), + ], + autostart: false, + contents: None, + environment: None, + label: "safenode1".parse()?, + program: node_data_dir + .to_path_buf() + .join("safenode1") + .join(SAFENODE_FILE_NAME), + username: Some(get_username()), + working_directory: None, + }), + eq(false), + ) + .returning(|_, _| Ok(())) + .in_sequence(&mut seq); + + add_node( + AddNodeServiceOptions { + auto_restart: false, + auto_set_nat_flags: false, + bootstrap_peers: vec![], + count: Some(1), + delete_safenode_src: false, + enable_metrics_server: false, + env_variables: None, + genesis: false, + home_network: false, + local: false, + log_format: None, + max_archived_log_files: None, + max_log_files: Some(20), + metrics_port: None, + owner: None, + node_ip: None, + node_port: None, + rpc_address: None, + rpc_port: None, + safenode_dir_path: temp_dir.to_path_buf(), + safenode_src_path: safenode_download_path.to_path_buf(), + service_data_dir_path: node_data_dir.to_path_buf(), + service_log_dir_path: node_logs_dir.to_path_buf(), + upnp: false, + user: Some(get_username()), + user_mode: false, + version: latest_version.to_string(), + }, + &mut node_registry, + &mock_service_control, + VerbosityLevel::Normal, + ) + .await?; + + assert_matches!(node_registry.nodes[0].max_log_files, Some(20)); + + Ok(()) +} + #[tokio::test] async fn add_node_should_use_a_custom_port_range_for_metrics_server() -> Result<()> { let tmp_data_dir = assert_fs::TempDir::new()?; @@ -2100,6 +2394,8 @@ async fn add_node_should_use_a_custom_port_range_for_metrics_server() -> Result< home_network: false, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: Some(PortRange::Range(12000, 12002)), owner: None, node_ip: None, @@ -2149,6 +2445,8 @@ async fn add_node_should_return_an_error_if_duplicate_custom_metrics_port_is_use local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: Some(12000), node_ip: None, node_port: None, @@ -2192,6 +2490,8 @@ async fn add_node_should_return_an_error_if_duplicate_custom_metrics_port_is_use home_network: false, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: Some(PortRange::Single(12000)), owner: None, node_ip: None, @@ -2243,6 +2543,8 @@ async fn add_node_should_return_an_error_if_duplicate_custom_metrics_port_in_ran local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: Some(12000), node_ip: None, node_port: None, @@ -2286,6 +2588,8 @@ async fn add_node_should_return_an_error_if_duplicate_custom_metrics_port_in_ran home_network: false, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: Some(PortRange::Range(12000, 12002)), owner: None, node_ip: None, @@ -2483,6 +2787,8 @@ async fn add_node_should_use_a_custom_port_range_for_the_rpc_server() -> Result< home_network: false, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -2543,6 +2849,8 @@ async fn add_node_should_return_an_error_if_duplicate_custom_rpc_port_is_used() local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -2586,6 +2894,8 @@ async fn add_node_should_return_an_error_if_duplicate_custom_rpc_port_is_used() home_network: false, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -2637,6 +2947,8 @@ async fn add_node_should_return_an_error_if_duplicate_custom_rpc_port_in_range_i local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -2680,6 +2992,8 @@ async fn add_node_should_return_an_error_if_duplicate_custom_rpc_port_in_range_i home_network: false, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -2754,6 +3068,8 @@ async fn add_node_should_disable_upnp_and_home_network_if_nat_status_is_public() local: false, log_dir_path: node_logs_dir.to_path_buf().join("safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, name: "safenode1".to_string(), node_ip: None, @@ -2788,6 +3104,8 @@ async fn add_node_should_disable_upnp_and_home_network_if_nat_status_is_public() genesis: false, home_network: true, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -2859,6 +3177,8 @@ async fn add_node_should_enable_upnp_if_nat_status_is_upnp() -> Result<()> { local: false, log_dir_path: node_logs_dir.to_path_buf().join("safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, name: "safenode1".to_string(), node_ip: None, @@ -2893,6 +3213,8 @@ async fn add_node_should_enable_upnp_if_nat_status_is_upnp() -> Result<()> { genesis: false, home_network: true, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -2964,6 +3286,8 @@ async fn add_node_should_enable_home_network_if_nat_status_is_private() -> Resul local: false, log_dir_path: node_logs_dir.to_path_buf().join("safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, name: "safenode1".to_string(), node_ip: None, @@ -2998,6 +3322,8 @@ async fn add_node_should_enable_home_network_if_nat_status_is_private() -> Resul genesis: false, home_network: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -3073,6 +3399,8 @@ async fn add_node_should_return_an_error_if_nat_status_is_none_but_auto_set_nat_ genesis: false, home_network: true, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -3685,6 +4013,8 @@ async fn add_node_should_not_delete_the_source_binary_if_path_arg_is_used() -> R local: false, log_dir_path: node_logs_dir.to_path_buf().join("safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, name: "safenode1".to_string(), node_ip: None, @@ -3720,6 +4050,8 @@ async fn add_node_should_not_delete_the_source_binary_if_path_arg_is_used() -> R home_network: false, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -3792,6 +4124,8 @@ async fn add_node_should_apply_the_home_network_flag_if_it_is_used() -> Result<( local: false, log_dir_path: node_logs_dir.to_path_buf().join("safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, name: "safenode1".to_string(), node_ip: None, @@ -3827,6 +4161,8 @@ async fn add_node_should_apply_the_home_network_flag_if_it_is_used() -> Result<( home_network: true, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -3899,6 +4235,8 @@ async fn add_node_should_add_the_node_in_user_mode() -> Result<()> { local: false, log_dir_path: node_logs_dir.to_path_buf().join("safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, name: "safenode1".to_string(), node_ip: None, @@ -3934,6 +4272,8 @@ async fn add_node_should_add_the_node_in_user_mode() -> Result<()> { home_network: true, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -4003,6 +4343,8 @@ async fn add_node_should_add_the_node_with_upnp_enabled() -> Result<()> { local: false, log_dir_path: node_logs_dir.to_path_buf().join("safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, name: "safenode1".to_string(), node_ip: None, @@ -4038,6 +4380,8 @@ async fn add_node_should_add_the_node_with_upnp_enabled() -> Result<()> { home_network: true, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: None, node_ip: None, @@ -4066,7 +4410,7 @@ async fn add_node_should_add_the_node_with_upnp_enabled() -> Result<()> { } #[tokio::test] -async fn add_node_should_assign_an_owner() -> Result<()> { +async fn add_node_should_assign_an_owner_in_lowercase() -> Result<()> { let tmp_data_dir = assert_fs::TempDir::new()?; let node_reg_path = tmp_data_dir.child("node_reg.json"); @@ -4154,8 +4498,10 @@ async fn add_node_should_assign_an_owner() -> Result<()> { home_network: false, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, - owner: Some("discord_username".to_string()), + owner: Some("Discord_Username".to_string()), node_ip: None, node_port: None, rpc_address: None, @@ -4272,6 +4618,8 @@ async fn add_node_should_auto_restart() -> Result<()> { home_network: false, local: false, log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, owner: Some("discord_username".to_string()), node_ip: None, diff --git a/sn_node_manager/src/bin/cli/main.rs b/sn_node_manager/src/bin/cli/main.rs index 7e89275279..3ab3b7dcea 100644 --- a/sn_node_manager/src/bin/cli/main.rs +++ b/sn_node_manager/src/bin/cli/main.rs @@ -133,6 +133,17 @@ pub enum SubCmd { /// If the argument is not used, the default format will be applied. #[clap(long, value_parser = LogFormat::parse_from_str, verbatim_doc_comment)] log_format: Option, + /// Specify the maximum number of uncompressed log files to store. + /// + /// After reaching this limit, the older files are archived to save space. + /// You can also specify the maximum number of archived log files to keep. + #[clap(long, verbatim_doc_comment)] + max_log_files: Option, + /// Specify the maximum number of archived log files to store. + /// + /// After reaching this limit, the older archived files are deleted. + #[clap(long, verbatim_doc_comment)] + max_archived_log_files: Option, /// Specify a port for the open metrics server. /// /// If you're passing the compiled safenode via --node-path, make sure to enable the open-metrics feature @@ -1026,6 +1037,8 @@ async fn main() -> Result<()> { local, log_dir_path, log_format, + max_archived_log_files, + max_log_files, metrics_port, node_ip, node_port, @@ -1050,6 +1063,8 @@ async fn main() -> Result<()> { local, log_dir_path, log_format, + max_archived_log_files, + max_log_files, metrics_port, node_ip, node_port, diff --git a/sn_node_manager/src/cmd/node.rs b/sn_node_manager/src/cmd/node.rs index 8a7ba87435..ea30532c45 100644 --- a/sn_node_manager/src/cmd/node.rs +++ b/sn_node_manager/src/cmd/node.rs @@ -46,6 +46,8 @@ pub async fn add( local: bool, log_dir_path: Option, log_format: Option, + max_archived_log_files: Option, + max_log_files: Option, metrics_port: Option, node_ip: Option, node_port: Option, @@ -145,10 +147,12 @@ pub async fn add( home_network, local, log_format, + max_archived_log_files, + max_log_files, metrics_port, - owner, node_ip, node_port, + owner, rpc_address, rpc_port, safenode_src_path, @@ -605,6 +609,8 @@ pub async fn maintain_n_running_nodes( local: bool, log_dir_path: Option, log_format: Option, + max_archived_log_files: Option, + max_log_files: Option, metrics_port: Option, node_ip: Option, node_port: Option, @@ -706,6 +712,8 @@ pub async fn maintain_n_running_nodes( local, log_dir_path.clone(), log_format, + max_archived_log_files, + max_log_files, metrics_port.clone(), node_ip, Some(PortRange::Single(port)), diff --git a/sn_node_manager/src/lib.rs b/sn_node_manager/src/lib.rs index 36a452819a..aafc905096 100644 --- a/sn_node_manager/src/lib.rs +++ b/sn_node_manager/src/lib.rs @@ -773,6 +773,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -875,6 +877,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -942,6 +946,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -1052,6 +1058,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -1132,6 +1140,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -1222,6 +1232,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -1311,6 +1323,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -1370,6 +1384,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -1419,6 +1435,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -1466,6 +1484,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -1516,6 +1536,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -1579,6 +1601,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -1705,6 +1729,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -1793,6 +1819,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -1926,6 +1954,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -2071,6 +2101,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -2211,6 +2243,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -2352,6 +2386,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -2523,6 +2559,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -2677,6 +2715,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: Some(LogFormat::Json), + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -2834,6 +2874,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -2988,6 +3030,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, number: 1, node_ip: Some(Ipv4Addr::new(192, 168, 1, 1)), @@ -3145,6 +3189,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, number: 1, node_ip: None, @@ -3189,6 +3235,321 @@ mod tests { Ok(()) } + #[tokio::test] + async fn upgrade_should_retain_max_archived_log_files() -> Result<()> { + let current_version = "0.1.0"; + let target_version = "0.2.0"; + + let tmp_data_dir = assert_fs::TempDir::new()?; + let current_install_dir = tmp_data_dir.child("safenode_install"); + current_install_dir.create_dir_all()?; + + let current_node_bin = current_install_dir.child("safenode"); + current_node_bin.write_binary(b"fake safenode binary")?; + let target_node_bin = tmp_data_dir.child("safenode"); + target_node_bin.write_binary(b"fake safenode binary")?; + + let mut mock_service_control = MockServiceControl::new(); + let mut mock_rpc_client = MockRpcClient::new(); + + // before binary upgrade + mock_service_control + .expect_get_process_pid() + .with(eq(current_node_bin.to_path_buf().clone())) + .times(1) + .returning(|_| Ok(1000)); + mock_service_control + .expect_stop() + .with(eq("safenode1"), eq(false)) + .times(1) + .returning(|_, _| Ok(())); + + // after binary upgrade + mock_service_control + .expect_uninstall() + .with(eq("safenode1"), eq(false)) + .times(1) + .returning(|_, _| Ok(())); + mock_service_control + .expect_install() + .with( + eq(ServiceInstallCtx { + args: vec![ + OsString::from("--rpc"), + OsString::from("127.0.0.1:8081"), + OsString::from("--root-dir"), + OsString::from("/var/safenode-manager/services/safenode1"), + OsString::from("--log-output-dest"), + OsString::from("/var/log/safenode/safenode1"), + OsString::from("--max-archived-log-files"), + OsString::from("20"), + ], + autostart: false, + contents: None, + environment: None, + label: "safenode1".parse()?, + program: current_node_bin.to_path_buf(), + username: Some("safe".to_string()), + working_directory: None, + }), + eq(false), + ) + .times(1) + .returning(|_, _| Ok(())); + + // after service restart + mock_service_control + .expect_start() + .with(eq("safenode1"), eq(false)) + .times(1) + .returning(|_, _| Ok(())); + mock_service_control + .expect_wait() + .with(eq(3000)) + .times(1) + .returning(|_| ()); + mock_service_control + .expect_get_process_pid() + .with(eq(current_node_bin.to_path_buf().clone())) + .times(1) + .returning(|_| Ok(100)); + + mock_rpc_client.expect_node_info().times(1).returning(|| { + Ok(NodeInfo { + pid: 2000, + peer_id: PeerId::from_str("12D3KooWS2tpXGGTmg2AHFiDh57yPQnat49YHnyqoggzXZWpqkCR")?, + data_path: PathBuf::from("/var/safenode-manager/services/safenode1"), + log_path: PathBuf::from("/var/log/safenode/safenode1"), + version: target_version.to_string(), + uptime: std::time::Duration::from_secs(1), // the service was just started + wallet_balance: 0, + }) + }); + mock_rpc_client + .expect_network_info() + .times(1) + .returning(|| { + Ok(NetworkInfo { + connected_peers: Vec::new(), + listeners: Vec::new(), + }) + }); + + let mut service_data = NodeServiceData { + auto_restart: false, + connected_peers: None, + data_dir_path: PathBuf::from("/var/safenode-manager/services/safenode1"), + genesis: false, + home_network: false, + listen_addr: None, + local: false, + log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), + log_format: None, + max_archived_log_files: Some(20), + max_log_files: None, + metrics_port: None, + node_ip: None, + node_port: None, + number: 1, + owner: None, + peer_id: Some(PeerId::from_str( + "12D3KooWS2tpXGGTmg2AHFiDh57yPQnat49YHnyqoggzXZWpqkCR", + )?), + pid: Some(1000), + reward_balance: Some(NanoTokens::zero()), + rpc_socket_addr: SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8081), + safenode_path: current_node_bin.to_path_buf(), + service_name: "safenode1".to_string(), + status: ServiceStatus::Running, + upnp: false, + user: Some("safe".to_string()), + user_mode: false, + version: current_version.to_string(), + }; + let service = NodeService::new(&mut service_data, Box::new(mock_rpc_client)); + + let mut service_manager = ServiceManager::new( + service, + Box::new(mock_service_control), + VerbosityLevel::Normal, + ); + + service_manager + .upgrade(UpgradeOptions { + auto_restart: false, + bootstrap_peers: Vec::new(), + env_variables: None, + force: false, + start_service: true, + target_bin_path: target_node_bin.to_path_buf(), + target_version: Version::parse(target_version).unwrap(), + }) + .await?; + + assert_matches!( + service_manager.service.service_data.max_archived_log_files, + Some(20) + ); + + Ok(()) + } + + #[tokio::test] + async fn upgrade_should_retain_max_log_files() -> Result<()> { + let current_version = "0.1.0"; + let target_version = "0.2.0"; + + let tmp_data_dir = assert_fs::TempDir::new()?; + let current_install_dir = tmp_data_dir.child("safenode_install"); + current_install_dir.create_dir_all()?; + + let current_node_bin = current_install_dir.child("safenode"); + current_node_bin.write_binary(b"fake safenode binary")?; + let target_node_bin = tmp_data_dir.child("safenode"); + target_node_bin.write_binary(b"fake safenode binary")?; + + let mut mock_service_control = MockServiceControl::new(); + let mut mock_rpc_client = MockRpcClient::new(); + + // before binary upgrade + mock_service_control + .expect_get_process_pid() + .with(eq(current_node_bin.to_path_buf().clone())) + .times(1) + .returning(|_| Ok(1000)); + mock_service_control + .expect_stop() + .with(eq("safenode1"), eq(false)) + .times(1) + .returning(|_, _| Ok(())); + + // after binary upgrade + mock_service_control + .expect_uninstall() + .with(eq("safenode1"), eq(false)) + .times(1) + .returning(|_, _| Ok(())); + mock_service_control + .expect_install() + .with( + eq(ServiceInstallCtx { + args: vec![ + OsString::from("--rpc"), + OsString::from("127.0.0.1:8081"), + OsString::from("--root-dir"), + OsString::from("/var/safenode-manager/services/safenode1"), + OsString::from("--log-output-dest"), + OsString::from("/var/log/safenode/safenode1"), + OsString::from("--max-log-files"), + OsString::from("20"), + ], + autostart: false, + contents: None, + environment: None, + label: "safenode1".parse()?, + program: current_node_bin.to_path_buf(), + username: Some("safe".to_string()), + working_directory: None, + }), + eq(false), + ) + .times(1) + .returning(|_, _| Ok(())); + + // after service restart + mock_service_control + .expect_start() + .with(eq("safenode1"), eq(false)) + .times(1) + .returning(|_, _| Ok(())); + mock_service_control + .expect_wait() + .with(eq(3000)) + .times(1) + .returning(|_| ()); + mock_service_control + .expect_get_process_pid() + .with(eq(current_node_bin.to_path_buf().clone())) + .times(1) + .returning(|_| Ok(100)); + + mock_rpc_client.expect_node_info().times(1).returning(|| { + Ok(NodeInfo { + pid: 2000, + peer_id: PeerId::from_str("12D3KooWS2tpXGGTmg2AHFiDh57yPQnat49YHnyqoggzXZWpqkCR")?, + data_path: PathBuf::from("/var/safenode-manager/services/safenode1"), + log_path: PathBuf::from("/var/log/safenode/safenode1"), + version: target_version.to_string(), + uptime: std::time::Duration::from_secs(1), // the service was just started + wallet_balance: 0, + }) + }); + mock_rpc_client + .expect_network_info() + .times(1) + .returning(|| { + Ok(NetworkInfo { + connected_peers: Vec::new(), + listeners: Vec::new(), + }) + }); + + let mut service_data = NodeServiceData { + auto_restart: false, + connected_peers: None, + data_dir_path: PathBuf::from("/var/safenode-manager/services/safenode1"), + genesis: false, + home_network: false, + listen_addr: None, + local: false, + log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), + log_format: None, + max_archived_log_files: None, + max_log_files: Some(20), + metrics_port: None, + node_ip: None, + node_port: None, + number: 1, + owner: None, + peer_id: Some(PeerId::from_str( + "12D3KooWS2tpXGGTmg2AHFiDh57yPQnat49YHnyqoggzXZWpqkCR", + )?), + pid: Some(1000), + reward_balance: Some(NanoTokens::zero()), + rpc_socket_addr: SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8081), + safenode_path: current_node_bin.to_path_buf(), + service_name: "safenode1".to_string(), + status: ServiceStatus::Running, + upnp: false, + user: Some("safe".to_string()), + user_mode: false, + version: current_version.to_string(), + }; + let service = NodeService::new(&mut service_data, Box::new(mock_rpc_client)); + + let mut service_manager = ServiceManager::new( + service, + Box::new(mock_service_control), + VerbosityLevel::Normal, + ); + + service_manager + .upgrade(UpgradeOptions { + auto_restart: false, + bootstrap_peers: Vec::new(), + env_variables: None, + force: false, + start_service: true, + target_bin_path: target_node_bin.to_path_buf(), + target_version: Version::parse(target_version).unwrap(), + }) + .await?; + + assert_matches!(service_manager.service.service_data.max_log_files, Some(20)); + + Ok(()) + } + #[tokio::test] async fn upgrade_should_retain_custom_metrics_ports() -> Result<()> { let current_version = "0.1.0"; @@ -3299,6 +3660,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: Some(12000), node_ip: None, node_port: None, @@ -3456,6 +3819,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: Some(12000), node_ip: None, node_port: None, @@ -3613,6 +3978,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -3770,6 +4137,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -3926,6 +4295,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -3998,6 +4369,8 @@ mod tests { local: false, log_dir_path: log_dir.to_path_buf(), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -4055,6 +4428,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -4128,6 +4503,8 @@ mod tests { local: false, log_dir_path: PathBuf::from("/var/log/safenode/safenode1"), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -4193,6 +4570,8 @@ mod tests { local: false, log_dir_path: log_dir.to_path_buf(), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, @@ -4256,6 +4635,8 @@ mod tests { local: false, log_dir_path: log_dir.to_path_buf(), log_format: None, + max_archived_log_files: None, + max_log_files: None, metrics_port: None, node_ip: None, node_port: None, diff --git a/sn_node_manager/src/local.rs b/sn_node_manager/src/local.rs index ec3a7ae34e..ebff840cee 100644 --- a/sn_node_manager/src/local.rs +++ b/sn_node_manager/src/local.rs @@ -437,6 +437,8 @@ pub async fn run_node( local: true, log_dir_path: node_info.log_path, log_format: run_options.log_format, + max_archived_log_files: None, + max_log_files: None, metrics_port: run_options.metrics_port, node_ip: None, node_port: run_options.node_port, diff --git a/sn_node_manager/src/rpc.rs b/sn_node_manager/src/rpc.rs index 2c8f15a88b..b9fc50ced8 100644 --- a/sn_node_manager/src/rpc.rs +++ b/sn_node_manager/src/rpc.rs @@ -71,6 +71,8 @@ pub async fn restart_node_service( local: current_node_clone.local, log_dir_path: current_node_clone.log_dir_path.clone(), log_format: current_node_clone.log_format, + max_archived_log_files: current_node_clone.max_archived_log_files, + max_log_files: current_node_clone.max_log_files, metrics_port: None, owner: current_node_clone.owner.clone(), name: current_node_clone.service_name.clone(), @@ -188,6 +190,8 @@ pub async fn restart_node_service( log_dir_path: log_dir_path.clone(), log_format: current_node_clone.log_format, name: new_service_name.clone(), + max_archived_log_files: current_node_clone.max_archived_log_files, + max_log_files: current_node_clone.max_log_files, metrics_port: None, node_ip: current_node_clone.node_ip, node_port: None, @@ -212,6 +216,8 @@ pub async fn restart_node_service( local: current_node_clone.local, log_dir_path, log_format: current_node_clone.log_format, + max_archived_log_files: current_node_clone.max_archived_log_files, + max_log_files: current_node_clone.max_log_files, metrics_port: None, node_ip: current_node_clone.node_ip, node_port: None, diff --git a/sn_node_rpc_client/Cargo.toml b/sn_node_rpc_client/Cargo.toml index 11bb9349ad..ce6ba4dc71 100644 --- a/sn_node_rpc_client/Cargo.toml +++ b/sn_node_rpc_client/Cargo.toml @@ -8,7 +8,7 @@ license = "GPL-3.0" name = "sn_node_rpc_client" readme = "README.md" repository = "https://github.com/maidsafe/safe_network" -version = "0.6.30" +version = "0.6.31" [[bin]] name = "safenode_rpc_client" @@ -23,13 +23,13 @@ color-eyre = "0.6.2" hex = "~0.4.3" libp2p = { version="0.53", features = ["kad"]} libp2p-identity = { version="0.2.7", features = ["rand"] } -sn_client = { path = "../sn_client", version = "0.110.2" } -sn_logging = { path = "../sn_logging", version = "0.2.35" } -sn_node = { path = "../sn_node", version = "0.111.3" } -sn_peers_acquisition = { path = "../sn_peers_acquisition", version = "0.5.2" } -sn_protocol = { path = "../sn_protocol", version = "0.17.10", features=["rpc"] } -sn_service_management = { path = "../sn_service_management", version = "0.3.13" } -sn_transfers = { path = "../sn_transfers", version = "0.19.2" } +sn_client = { path = "../sn_client", version = "0.110.3" } +sn_logging = { path = "../sn_logging", version = "0.2.36" } +sn_node = { path = "../sn_node", version = "0.111.4" } +sn_peers_acquisition = { path = "../sn_peers_acquisition", version = "0.5.3" } +sn_protocol = { path = "../sn_protocol", version = "0.17.11", features=["rpc"] } +sn_service_management = { path = "../sn_service_management", version = "0.3.14" } +sn_transfers = { path = "../sn_transfers", version = "0.19.3" } thiserror = "1.0.23" # # watch out updating this, protoc compiler needs to be installed on all build systems # # arm builds + musl are very problematic diff --git a/sn_peers_acquisition/Cargo.toml b/sn_peers_acquisition/Cargo.toml index e76118f488..6e94f6eff0 100644 --- a/sn_peers_acquisition/Cargo.toml +++ b/sn_peers_acquisition/Cargo.toml @@ -8,7 +8,7 @@ license = "GPL-3.0" name = "sn_peers_acquisition" readme = "README.md" repository = "https://github.com/maidsafe/safe_network" -version = "0.5.2" +version = "0.5.3" [features] local-discovery = [] @@ -21,7 +21,7 @@ lazy_static = "~1.4.0" libp2p = { version="0.53", features = [] } rand = "0.8.5" reqwest = { version="0.12.2", default-features=false, features = ["rustls-tls"] } -sn_protocol = { path = "../sn_protocol", version = "0.17.10", optional = true} +sn_protocol = { path = "../sn_protocol", version = "0.17.11", optional = true} thiserror = "1.0.23" tokio = { version = "1.32.0", default-features = false} tracing = { version = "~0.1.26" } diff --git a/sn_protocol/Cargo.toml b/sn_protocol/Cargo.toml index 6acc656dd7..cd100a22ab 100644 --- a/sn_protocol/Cargo.toml +++ b/sn_protocol/Cargo.toml @@ -7,7 +7,7 @@ license = "GPL-3.0" name = "sn_protocol" readme = "README.md" repository = "https://github.com/maidsafe/safe_network" -version = "0.17.10" +version = "0.17.11" [features] default = [] @@ -28,9 +28,9 @@ rmp-serde = "1.1.1" serde = { version = "1.0.133", features = [ "derive", "rc" ]} serde_json = "1.0" sha2 = "0.10.7" -sn_build_info = { path = "../sn_build_info", version = "0.1.14" } -sn_transfers = { path = "../sn_transfers", version = "0.19.2" } -sn_registers = { path = "../sn_registers", version = "0.3.20" } +sn_build_info = { path = "../sn_build_info", version = "0.1.15" } +sn_transfers = { path = "../sn_transfers", version = "0.19.3" } +sn_registers = { path = "../sn_registers", version = "0.3.21" } thiserror = "1.0.23" tiny-keccak = { version = "~2.0.2", features = [ "sha3" ] } tracing = { version = "~0.1.26" } diff --git a/sn_registers/Cargo.toml b/sn_registers/Cargo.toml index dbbcf90564..cfdaaccc5f 100644 --- a/sn_registers/Cargo.toml +++ b/sn_registers/Cargo.toml @@ -8,7 +8,7 @@ license = "GPL-3.0" name = "sn_registers" readme = "README.md" repository = "https://github.com/maidsafe/safe_network" -version = "0.3.20" +version = "0.3.21" [features] test-utils = [] diff --git a/sn_service_management/Cargo.toml b/sn_service_management/Cargo.toml index 4fb8fe03c3..1589ad0997 100644 --- a/sn_service_management/Cargo.toml +++ b/sn_service_management/Cargo.toml @@ -7,7 +7,7 @@ license = "GPL-3.0" name = "sn_service_management" readme = "README.md" repository = "https://github.com/maidsafe/safe_network" -version = "0.3.13" +version = "0.3.14" [dependencies] async-trait = "0.1" @@ -19,11 +19,11 @@ serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" semver = "1.0.20" service-manager = "0.7.0" -sn_logging = { path = "../sn_logging", version = "0.2.35" } -sn_protocol = { path = "../sn_protocol", version = "0.17.10", features = [ +sn_logging = { path = "../sn_logging", version = "0.2.36" } +sn_protocol = { path = "../sn_protocol", version = "0.17.11", features = [ "rpc", ] } -sn_transfers = { path = "../sn_transfers", version = "0.19.2" } +sn_transfers = { path = "../sn_transfers", version = "0.19.3" } sysinfo = "0.30.12" thiserror = "1.0.23" tokio = { version = "1.32.0", features = ["time"] } diff --git a/sn_service_management/src/node.rs b/sn_service_management/src/node.rs index ffd6af0742..107b01d635 100644 --- a/sn_service_management/src/node.rs +++ b/sn_service_management/src/node.rs @@ -101,6 +101,14 @@ impl<'a> ServiceStateActions for NodeService<'a> { args.push(OsString::from("--metrics-server-port")); args.push(OsString::from(metrics_port.to_string())); } + if let Some(max_archived_log_files) = self.service_data.max_archived_log_files { + args.push(OsString::from("--max-archived-log-files")); + args.push(OsString::from(max_archived_log_files.to_string())); + } + if let Some(max_log_files) = self.service_data.max_log_files { + args.push(OsString::from("--max-log-files")); + args.push(OsString::from(max_log_files.to_string())); + } if let Some(owner) = &self.service_data.owner { args.push(OsString::from("--owner")); @@ -267,6 +275,8 @@ pub struct NodeServiceData { pub local: bool, pub log_dir_path: PathBuf, pub log_format: Option, + pub max_archived_log_files: Option, + pub max_log_files: Option, #[serde(default)] pub metrics_port: Option, #[serde(default)] diff --git a/sn_transfers/Cargo.toml b/sn_transfers/Cargo.toml index 0345932980..4027c8c302 100644 --- a/sn_transfers/Cargo.toml +++ b/sn_transfers/Cargo.toml @@ -8,7 +8,7 @@ license = "GPL-3.0" name = "sn_transfers" readme = "README.md" repository = "https://github.com/maidsafe/safe_network" -version = "0.19.2" +version = "0.19.3" [features] reward-forward = [] diff --git a/test_utils/Cargo.toml b/test_utils/Cargo.toml index cda63acacc..eae9c286f1 100644 --- a/test_utils/Cargo.toml +++ b/test_utils/Cargo.toml @@ -7,7 +7,7 @@ license = "GPL-3.0" name = "test_utils" readme = "README.md" repository = "https://github.com/maidsafe/safe_network" -version = "0.4.6" +version = "0.4.7" [dependencies] color-eyre = "~0.6.2" diff --git a/token_supplies/Cargo.toml b/token_supplies/Cargo.toml index a98ec803c4..b040667397 100644 --- a/token_supplies/Cargo.toml +++ b/token_supplies/Cargo.toml @@ -8,7 +8,7 @@ license = "GPL-3.0" name = "token_supplies" readme = "README.md" repository = "https://github.com/maidsafe/safe_network" -version = "0.1.53" +version = "0.1.54" [dependencies]