-
Notifications
You must be signed in to change notification settings - Fork 372
feat(registry): CRP-2618 migrate pre_signatures_to_create_in_advance field for vetKD keys #8247
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
…eld for vetKD keys to correct representation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This pull request changes code owned by the Governance team. Therefore, make sure that
you have considered the following (for Governance-owned code):
-
Update
unreleased_changelog.md(if there are behavior changes, even if they are
non-breaking). -
Are there BREAKING changes?
-
Is a data migration needed?
-
Security review?
How to Satisfy This Automatic Review
-
Go to the bottom of the pull request page.
-
Look for where it says this bot is requesting changes.
-
Click the three dots to the right.
-
Select "Dismiss review".
-
In the text entry box, respond to each of the numbered items in the previous
section, declare one of the following:
-
Done.
-
$REASON_WHY_NO_NEED. E.g. for
unreleased_changelog.md, "No
canister behavior changes.", or for item 2, "Existing APIs
behave as before.".
Brief Guide to "Externally Visible" Changes
"Externally visible behavior change" is very often due to some NEW canister API.
Changes to EXISTING APIs are more likely to be "breaking".
If these changes are breaking, make sure that clients know how to migrate, how to
maintain their continuity of operations.
If your changes are behind a feature flag, then, do NOT add entrie(s) to
unreleased_changelog.md in this PR! But rather, add entrie(s) later, in the PR
that enables these changes in production.
Reference(s)
For a more comprehensive checklist, see here.
GOVERNANCE_CHECKLIST_REMINDER_DEDUP
- Changelog updated.
- No breaking changes.
- This PR performs data migration.
- No security review needed.
| // Check if this is a vetKD key | ||
| let is_vetkd_key = if let Some(key_id_pb) = &key_config.key_id { | ||
| matches!(key_id_pb.key_id, Some(KeyId::Vetkd(_))) | ||
| } else { | ||
| false | ||
| }; | ||
|
|
||
| if is_vetkd_key && key_config.pre_signatures_to_create_in_advance == Some(0) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do as you see fit.
continue is a more explicit way to skip, rather than setting is_vetkd_key to false.
| // Check if this is a vetKD key | |
| let is_vetkd_key = if let Some(key_id_pb) = &key_config.key_id { | |
| matches!(key_id_pb.key_id, Some(KeyId::Vetkd(_))) | |
| } else { | |
| false | |
| }; | |
| if is_vetkd_key && key_config.pre_signatures_to_create_in_advance == Some(0) { | |
| // Skip if not vetkd. | |
| let key_id = match &key_config.key_id { | |
| None => continue, // Maybe log here? I assume that this is bad data. | |
| Some(ok) => ok, | |
| }; | |
| match key_id.key_id { | |
| Some(KeyId::Vetkd(_ok)) => (), | |
| _ => continue, | |
| } | |
| if key_config.pre_signatures_to_create_in_advance == Some(0) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Adapted to use continue-based approach, including logs for unexpected data.
| .as_ref() | ||
| .unwrap() | ||
| .key_configs[0]; | ||
| assert_eq!(key_config_1.pre_signatures_to_create_in_advance, None); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Even better would be if you take the original SubnetRecord, modify (a copy of) it by setting pre_signatures_to_create_in_advance to None, and comparing subnet_record_1_after to that expected value.
Ditto elsewhere, except you don't even need to modify the original to derive the expected value, because the original IS the expected value!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That is much better, thanks! Done.
| mutations | ||
| } | ||
|
|
||
| fn fix_vetkd_pre_signatures_field(registry: &Registry) -> Vec<RegistryMutation> { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| fn fix_vetkd_pre_signatures_field(registry: &Registry) -> Vec<RegistryMutation> { | |
| // TODO(${JIRA_TICKET_ID}): Delete this after it has been released. | |
| // (Deletion need not take place right away.) | |
| fn fix_vetkd_pre_signatures_field(registry: &Registry) -> Vec<RegistryMutation> { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Adds a data migration in the registry canister that modifies the
pre_signatures_to_create_in_advancefield for vetKD keys in certain subnets fromSome(0)toNoneso as to align with the new/correct representation for keys that do not have pre-signatures.