[live-migration] deliver structured live migration notifications end to end#2696
Open
rawahars wants to merge 3 commits intomicrosoft:mainfrom
Open
[live-migration] deliver structured live migration notifications end to end#2696rawahars wants to merge 3 commits intomicrosoft:mainfrom
rawahars wants to merge 3 commits intomicrosoft:mainfrom
Conversation
4c68686 to
747d8e8
Compare
jterry75
approved these changes
Apr 21, 2026
jterry75
reviewed
Apr 22, 2026
| Result MigrationResult `json:"Result,omitempty"` | ||
| // AdditionalDetails carries extra event-specific information whose schema | ||
| // depends on the event being reported. Modeled as the HCS schema `Any` type. | ||
| AdditionalDetails *interface{} `json:"AdditionalDetails,omitempty"` |
Contributor
There was a problem hiding this comment.
I thought for the internal we decided this has to be json.RawMessage ptrs?
Contributor
Author
There was a problem hiding this comment.
Yes that's correct. I've made the changes now and have added a test as well which validates the same.
…to-end Replace the opaque event-data string surfaced from HCS live migration callbacks with a typed notification payload so callers can act on migration progress without parsing raw JSON. - Add OperationSystemMigrationNotificationInfo to the HCS schema along with MigrationOrigin, MigrationEvent, and MigrationResult enumerations covering the full set of states reported by HCS (setup, blackout, transfer, recovery, completion, failure, etc.). - Update the HCS migration callback to unmarshal the JSON event payload into the new struct, drop malformed events with a warning, and deliver typed values over MigrationNotifications() instead of raw strings. - Add unit tests for the callback handler covering nil arguments, valid payloads, empty data, malformed JSON, and a full notification channel. Signed-off-by: Harsh Rawat <harshrawat@microsoft.com>
Signed-off-by: Harsh Rawat <harshrawat@microsoft.com>
747d8e8 to
76f2096
Compare
Signed-off-by: Harsh Rawat <harshrawat@microsoft.com>
shreyanshjain7174
approved these changes
Apr 23, 2026
Comment on lines
+63
to
+77
| var info hcsschema.OperationSystemMigrationNotificationInfo | ||
| if eventData != "" { | ||
| if err := json.Unmarshal([]byte(eventData), &info); err != nil { | ||
| logrus.WithFields(logrus.Fields{ | ||
| "event-type": e.Type.String(), | ||
| "event-data": eventData, | ||
| logrus.ErrorKey: err, | ||
| }).Warn("failed to unmarshal migration notification payload, dropping event") | ||
| return 0 | ||
| } | ||
| } | ||
|
|
||
| // Non-blocking send to avoid blocking the HCS callback thread. | ||
| select { | ||
| case ch <- eventData: | ||
| case ch <- info: |
Contributor
There was a problem hiding this comment.
When EventData is nil from HCS, this sends a zero-value struct where Event == "" instead of MigrationEventUnknown. Might be worth a short comment here noting that empty string means "no payload" vs the Unknown sentinel.
shreyanshjain7174
approved these changes
Apr 23, 2026
Comment on lines
+287
to
+288
| got := <-ch | ||
| if got.AdditionalDetails != nil { |
Contributor
There was a problem hiding this comment.
nit: bare <-ch here can hang if the test regresses — the other tests use expectNotification or a select with default. Worth using the same pattern for consistency.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Replace the opaque event-data string surfaced from HCS live migration callbacks with a typed notification payload, and propagate that shape through the migration gRPC API so callers can act on migration progress without parsing raw JSON.