diff --git a/Cargo.lock b/Cargo.lock index 49289b9bd09..0d8b2d9aece 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11770,7 +11770,6 @@ dependencies = [ "ic-nervous-system-common-build-metadata", "ic-nervous-system-root", "ic-nervous-system-runtime", - "ic-nns-constants", "ic-sns-root-protobuf-generator", "ic-sns-swap", "ic-test-utilities-compare-dirs", diff --git a/rs/sns/governance/canister/governance.did b/rs/sns/governance/canister/governance.did index 71d97ba850b..6ac1061e143 100644 --- a/rs/sns/governance/canister/governance.did +++ b/rs/sns/governance/canister/governance.did @@ -283,7 +283,6 @@ type Governance = record { sns_metadata : opt ManageSnsMetadata; neurons : vec record { text; Neuron }; genesis_timestamp_seconds : nat64; - migrated_root_wasm_memory_limit : opt bool; }; type GovernanceCachedMetrics = record { diff --git a/rs/sns/governance/canister/governance_test.did b/rs/sns/governance/canister/governance_test.did index 3dbb9aa5749..d005ebf1ea8 100644 --- a/rs/sns/governance/canister/governance_test.did +++ b/rs/sns/governance/canister/governance_test.did @@ -292,7 +292,6 @@ type Governance = record { sns_metadata : opt ManageSnsMetadata; neurons : vec record { text; Neuron }; genesis_timestamp_seconds : nat64; - migrated_root_wasm_memory_limit : opt bool; }; type GovernanceCachedMetrics = record { diff --git a/rs/sns/governance/proto/ic_sns_governance/pb/v1/governance.proto b/rs/sns/governance/proto/ic_sns_governance/pb/v1/governance.proto index cd9e45e6780..8fc4f625702 100644 --- a/rs/sns/governance/proto/ic_sns_governance/pb/v1/governance.proto +++ b/rs/sns/governance/proto/ic_sns_governance/pb/v1/governance.proto @@ -1447,7 +1447,8 @@ message Governance { MaturityModulation maturity_modulation = 26; - optional bool migrated_root_wasm_memory_limit = 27; + reserved "migrated_root_wasm_memory_limit"; + reserved 27; } // Request message for 'get_metadata'. diff --git a/rs/sns/governance/src/canister_control.rs b/rs/sns/governance/src/canister_control.rs index ea39693a01b..f11e0798505 100644 --- a/rs/sns/governance/src/canister_control.rs +++ b/rs/sns/governance/src/canister_control.rs @@ -1,4 +1,3 @@ -use crate::governance::Governance; use crate::{ governance::log_prefix, logs::{ERROR, INFO}, @@ -16,7 +15,6 @@ use ic_canister_log::log; use ic_nervous_system_clients::{ canister_id_record::CanisterIdRecord, canister_status::{CanisterStatusResultFromManagementCanister, CanisterStatusType}, - update_settings::{CanisterSettings, UpdateSettings}, }; use std::convert::TryFrom; @@ -322,32 +320,3 @@ pub async fn perform_execute_generic_nervous_system_function_call( } } } - -pub async fn update_root_canister_settings( - governance: &Governance, - settings: CanisterSettings, -) -> Result<(), GovernanceError> { - let update_settings_args = UpdateSettings { - canister_id: PrincipalId::from(governance.proto.root_canister_id_or_panic()), - settings, - // allowed to be None - sender_canister_version: None, - }; - governance - .env - .call_canister( - ic_management_canister_types::IC_00, - "update_settings", - Encode!(&update_settings_args).expect("Unable to encode update_settings args."), - ) - .await - .map(|_reply| ()) - .map_err(|err| { - let err = GovernanceError::new_with_message( - ErrorType::External, - format!("Failed to update settings of the root canister: {:?}", err), - ); - log!(ERROR, "{}{:?}", log_prefix(), err); - err - }) -} diff --git a/rs/sns/governance/src/gen/ic_sns_governance.pb.v1.rs b/rs/sns/governance/src/gen/ic_sns_governance.pb.v1.rs index f2585b21f06..3a3b8605f9f 100644 --- a/rs/sns/governance/src/gen/ic_sns_governance.pb.v1.rs +++ b/rs/sns/governance/src/gen/ic_sns_governance.pb.v1.rs @@ -1644,8 +1644,6 @@ pub struct Governance { pub is_finalizing_disburse_maturity: ::core::option::Option, #[prost(message, optional, tag = "26")] pub maturity_modulation: ::core::option::Option, - #[prost(bool, optional, tag = "27")] - pub migrated_root_wasm_memory_limit: ::core::option::Option, } /// Nested message and enum types in `Governance`. pub mod governance { diff --git a/rs/sns/governance/src/governance.rs b/rs/sns/governance/src/governance.rs index 217cba56a06..92ccc5623c5 100644 --- a/rs/sns/governance/src/governance.rs +++ b/rs/sns/governance/src/governance.rs @@ -4,7 +4,7 @@ use crate::pb::v1::{ use crate::{ canister_control::{ get_canister_id, perform_execute_generic_nervous_system_function_call, - update_root_canister_settings, upgrade_canister_directly, + upgrade_canister_directly, }, logs::{ERROR, INFO}, neuron::{ @@ -82,7 +82,6 @@ use ic_management_canister_types::{ CanisterChangeDetails, CanisterInfoRequest, CanisterInfoResponse, CanisterInstallMode, }; use ic_nervous_system_clients::ledger_client::ICRC1Ledger; -use ic_nervous_system_clients::update_settings::CanisterSettings; use ic_nervous_system_collections_union_multi_map::UnionMultiMap; use ic_nervous_system_common::{ cmc::CMC, @@ -95,10 +94,7 @@ use ic_nervous_system_governance::maturity_modulation::{ }; use ic_nervous_system_lock::acquire; use ic_nervous_system_root::change_canister::ChangeCanisterRequest; -use ic_nns_constants::{ - DEFAULT_SNS_NON_GOVERNANCE_CANISTER_WASM_MEMORY_LIMIT, - LEDGER_CANISTER_ID as NNS_LEDGER_CANISTER_ID, -}; +use ic_nns_constants::LEDGER_CANISTER_ID as NNS_LEDGER_CANISTER_ID; use ic_protobuf::types::v1::CanisterInstallMode as CanisterInstallModeProto; use ic_sns_governance_proposal_criticality::ProposalCriticality; use ic_sns_governance_token_valuation::Valuation; @@ -4601,32 +4597,6 @@ impl Governance { true } - async fn maybe_migrate_root_wasm_memory_limit(&mut self) { - if self - .proto - .migrated_root_wasm_memory_limit - .unwrap_or_default() - { - return; - } - - // Set migrated_root_wasm_memory_limit to Some(true) so this doesn't run again - self.proto.migrated_root_wasm_memory_limit = Some(true); - - let settings = CanisterSettings { - wasm_memory_limit: Some(candid::Nat::from( - DEFAULT_SNS_NON_GOVERNANCE_CANISTER_WASM_MEMORY_LIMIT, - )), - ..Default::default() - }; - - // Set root settings - match update_root_canister_settings(self, settings).await { - Ok(_) => (), - Err(e) => log!(ERROR, "Failed to update root canister settings: {}", e), - } - } - /// Runs periodic tasks that are not directly triggered by user input. pub async fn heartbeat(&mut self) { self.process_proposals(); @@ -4664,8 +4634,6 @@ impl Governance { self.maybe_move_staked_maturity(); self.maybe_gc(); - - self.maybe_migrate_root_wasm_memory_limit().await; } fn should_update_maturity_modulation(&self) -> bool { diff --git a/rs/sns/governance/src/proposal.rs b/rs/sns/governance/src/proposal.rs index 03ec1dabb08..36f9bce70dd 100644 --- a/rs/sns/governance/src/proposal.rs +++ b/rs/sns/governance/src/proposal.rs @@ -2489,7 +2489,6 @@ mod tests { pending_version: None, is_finalizing_disburse_maturity: None, maturity_modulation: None, - migrated_root_wasm_memory_limit: Some(true), } } diff --git a/rs/sns/governance/tests/fixtures/mod.rs b/rs/sns/governance/tests/fixtures/mod.rs index 9da58d41ce2..680aed8cf23 100755 --- a/rs/sns/governance/tests/fixtures/mod.rs +++ b/rs/sns/governance/tests/fixtures/mod.rs @@ -854,7 +854,6 @@ impl Default for GovernanceCanisterFixtureBuilder { current_basis_points: Some(0), updated_at_timestamp_seconds: Some(1), }), - migrated_root_wasm_memory_limit: Some(true), ..Default::default() }, sns_ledger_transforms: Vec::default(), @@ -1076,11 +1075,6 @@ impl GovernanceCanisterFixtureBuilder { // Set up the canister fixture with our neuron. self.add_neuron(neuron) } - - pub fn set_migrated_root_wasm_memory_limit(mut self, value: bool) -> Self { - self.governance.migrated_root_wasm_memory_limit = Some(value); - self - } } #[macro_export] diff --git a/rs/sns/governance/tests/governance.rs b/rs/sns/governance/tests/governance.rs index a57ee4106ea..810f1c65200 100644 --- a/rs/sns/governance/tests/governance.rs +++ b/rs/sns/governance/tests/governance.rs @@ -3,7 +3,6 @@ use crate::fixtures::{ GovernanceCanisterFixtureBuilder, NeuronBuilder, TargetLedger, }; use assert_matches::assert_matches; -use fixtures::environment_fixture::CanisterCallReply; use ic_base_types::{CanisterId, PrincipalId}; use ic_nervous_system_common::{E8, ONE_DAY_SECONDS, ONE_MONTH_SECONDS}; use ic_nervous_system_common_test_keys::{ @@ -3018,44 +3017,3 @@ fn test_deregister_dapp_has_higher_voting_thresholds() { Percentage::from_basis_points(2000) ); } - -#[test] -fn test_updates_root_settings() { - let mut gov = { - // Set up the test environment migrated_root_wasm_memory_limit set to Some(false); - let gov_fixture_builder = - GovernanceCanisterFixtureBuilder::new().set_migrated_root_wasm_memory_limit(false); - let gov = gov_fixture_builder.create(); - // The heartbeat will call the management canister to update the settings, - // so we need to mock the reply - gov.environment_fixture - .environment_fixture_state - .lock() - .unwrap() - .mocked_canister_replies - .push(CanisterCallReply::Response(Vec::new())); - gov - }; - - gov.heartbeat(); - assert!(gov - .governance - .proto - .migrated_root_wasm_memory_limit - .unwrap()); -} - -#[test] -#[should_panic( - expected = "Expected there to be a mocked canister reply on the stack for method `update_settings`" -)] -fn test_updates_root_settings_calls_management_canister() { - let mut gov = { - // Set up the test environment migrated_root_wasm_memory_limit set to Some(false); - let gov_fixture_builder = - GovernanceCanisterFixtureBuilder::new().set_migrated_root_wasm_memory_limit(false); - gov_fixture_builder.create() - }; - - gov.heartbeat(); // should panic -} diff --git a/rs/sns/root/BUILD.bazel b/rs/sns/root/BUILD.bazel index 55648da6b2a..787cce6f76c 100644 --- a/rs/sns/root/BUILD.bazel +++ b/rs/sns/root/BUILD.bazel @@ -17,7 +17,6 @@ DEPENDENCIES = [ "//rs/nervous_system/common", "//rs/nervous_system/root", "//rs/nervous_system/runtime", - "//rs/nns/constants", "//rs/rust_canisters/canister_log", "//rs/rust_canisters/http_types", "//rs/sns/swap", # TODO[NNS1-2282] diff --git a/rs/sns/root/Cargo.toml b/rs/sns/root/Cargo.toml index 615ac085f95..a69adc2206f 100644 --- a/rs/sns/root/Cargo.toml +++ b/rs/sns/root/Cargo.toml @@ -31,7 +31,6 @@ ic-nervous-system-common = { path = "../../nervous_system/common" } ic-nervous-system-common-build-metadata = { path = "../../nervous_system/common/build_metadata" } ic-nervous-system-root = { path = "../../nervous_system/root" } ic-nervous-system-runtime = { path = "../../nervous_system/runtime" } -ic-nns-constants = { path = "../../nns/constants" } ic-sns-swap = { path = "../swap" } icrc-ledger-types = { path = "../../../packages/icrc-ledger-types" } prost = { workspace = true } diff --git a/rs/sns/root/canister/canister.rs b/rs/sns/root/canister/canister.rs index c24bc252a53..916a342e0de 100644 --- a/rs/sns/root/canister/canister.rs +++ b/rs/sns/root/canister/canister.rs @@ -138,16 +138,6 @@ fn canister_post_upgrade() { ); canister_init(state); - // Kick off migration one minute after upgrade - let duration = Duration::from_secs(60); - ic_cdk_timers::set_timer(duration, || { - ic_cdk::spawn(async { - let management_canister_client = - ManagementCanisterClientImpl::::new(None); - SnsRootCanister::migrate_canister_settings(&STATE, &management_canister_client).await; - }) - }); - log!(INFO, "canister_post_upgrade: Done!"); } diff --git a/rs/sns/root/src/lib.rs b/rs/sns/root/src/lib.rs index cd8de1434ab..fc196936c34 100644 --- a/rs/sns/root/src/lib.rs +++ b/rs/sns/root/src/lib.rs @@ -20,7 +20,6 @@ use ic_nervous_system_clients::{ update_settings::{CanisterSettings, LogVisibility, UpdateSettings}, }; use ic_nervous_system_runtime::{CdkRuntime, Runtime}; -use ic_nns_constants::DEFAULT_SNS_NON_GOVERNANCE_CANISTER_WASM_MEMORY_LIMIT; use ic_sns_swap::pb::v1::GetCanisterStatusRequest; use std::{ cell::RefCell, @@ -799,48 +798,6 @@ impl SnsRootCanister { defects.join("\n") } - - pub async fn migrate_canister_settings( - self_ref: &'static LocalKey>, - management_canister_client: &impl ManagementCanisterClient, - ) { - let swap_canister_id = self_ref.with(|state| state.borrow().swap_canister_id); - let ledger_canister_id = self_ref.with(|state| state.borrow().ledger_canister_id); - let index_canister_id = self_ref.with(|state| state.borrow().index_canister_id); - let archive_canister_ids = - self_ref.with(|state| state.borrow().archive_canister_ids.clone()); - - for canister_id in [swap_canister_id, ledger_canister_id, index_canister_id] - .into_iter() - .flatten() - .chain(archive_canister_ids.into_iter()) - { - let settings = CanisterSettings { - wasm_memory_limit: Some(candid::Nat::from( - DEFAULT_SNS_NON_GOVERNANCE_CANISTER_WASM_MEMORY_LIMIT, - )), - ..Default::default() - }; - let result = management_canister_client - .update_settings(UpdateSettings { - canister_id, - settings, - sender_canister_version: management_canister_client.canister_version(), - }) - .await; - match result { - Ok(_) => (), - Err(err) => { - log!( - ERROR, - "Unable to update settings for canister {}: {:?}", - canister_id, - err - ); - } - } - } - } } async fn get_swap_status(env: &impl Environment, swap_id: PrincipalId) -> CanisterSummary { @@ -3438,90 +3395,4 @@ mod tests { expected_management_canister_calls ); } - - #[tokio::test] - async fn test_migrate_canister_settings() { - // Step 1: Prepare the world. - thread_local! { - static STATE: RefCell = RefCell::new(SnsRootCanister { - governance_canister_id: Some(PrincipalId::new_user_test_id(99)), - swap_canister_id: Some(PrincipalId::new_user_test_id(0)), - ledger_canister_id: Some(PrincipalId::new_user_test_id(1)), - index_canister_id: Some(PrincipalId::new_user_test_id(2)), - dapp_canister_ids: vec![], - archive_canister_ids: vec![PrincipalId::new_user_test_id(3), PrincipalId::new_user_test_id(4), PrincipalId::new_user_test_id(5)], - ..Default::default() - }); - } - - // Step 1.1: Prepare helpers. - let management_canister_client = MockManagementCanisterClient::new(vec![ - MockManagementCanisterClientReply::UpdateSettings(Ok(())), - MockManagementCanisterClientReply::UpdateSettings(Ok(())), - MockManagementCanisterClientReply::UpdateSettings(Ok(())), - MockManagementCanisterClientReply::UpdateSettings(Ok(())), - MockManagementCanisterClientReply::UpdateSettings(Ok(())), - MockManagementCanisterClientReply::UpdateSettings(Ok(())), - ]); - - // Step 2: Run code under test. - SnsRootCanister::migrate_canister_settings(&STATE, &management_canister_client).await; - - // Step 3: Inspect results. - let actual_management_canister_calls = management_canister_client.get_calls_snapshot(); - let expected_management_canister_calls = vec![ - MockManagementCanisterClientCall::UpdateSettings(UpdateSettings { - canister_id: PrincipalId::new_user_test_id(0), - settings: CanisterSettings { - wasm_memory_limit: Some(candid::Nat::from(3_u32 * (1_u32 << 30_u32))), - ..Default::default() - }, - sender_canister_version: None, - }), - MockManagementCanisterClientCall::UpdateSettings(UpdateSettings { - canister_id: PrincipalId::new_user_test_id(1), - settings: CanisterSettings { - wasm_memory_limit: Some(candid::Nat::from(3_u32 * (1_u32 << 30_u32))), - ..Default::default() - }, - sender_canister_version: None, - }), - MockManagementCanisterClientCall::UpdateSettings(UpdateSettings { - canister_id: PrincipalId::new_user_test_id(2), - settings: CanisterSettings { - wasm_memory_limit: Some(candid::Nat::from(3_u32 * (1_u32 << 30_u32))), - ..Default::default() - }, - sender_canister_version: None, - }), - MockManagementCanisterClientCall::UpdateSettings(UpdateSettings { - canister_id: PrincipalId::new_user_test_id(3), - settings: CanisterSettings { - wasm_memory_limit: Some(candid::Nat::from(3_u32 * (1_u32 << 30_u32))), - ..Default::default() - }, - sender_canister_version: None, - }), - MockManagementCanisterClientCall::UpdateSettings(UpdateSettings { - canister_id: PrincipalId::new_user_test_id(4), - settings: CanisterSettings { - wasm_memory_limit: Some(candid::Nat::from(3_u32 * (1_u32 << 30_u32))), - ..Default::default() - }, - sender_canister_version: None, - }), - MockManagementCanisterClientCall::UpdateSettings(UpdateSettings { - canister_id: PrincipalId::new_user_test_id(5), - settings: CanisterSettings { - wasm_memory_limit: Some(candid::Nat::from(3_u32 * (1_u32 << 30_u32))), - ..Default::default() - }, - sender_canister_version: None, - }), - ]; - assert_eq!( - actual_management_canister_calls, - expected_management_canister_calls - ); - } }