This PR enhances telemetry for login migrations (and in the following ways:
Add details for starting migration (number of logins migrating, type of logins)
Log Migration result (number of errors per step, duration of each step, type of logins, if system error occurred)
Add sql-migration extension to our telemetry
Adds details when trying to connect to target
Tracks clicking "done" from the wizard
Fixes bucketizing for navigating telemetry in the login migration wizard
Sample usage of kusto query for new telemetry:
RawEventsADS
| where EventName contains 'sql-migration'
| extend view = tostring(Properties['view'])
| extend action = tostring(Properties['action'])
| extend buttonPressed = tostring(Properties['buttonpressed'])
| extend pageTitle = tostring(Properties['pagetitle'])
| extend adsVersion = tostring(Properties['common.adsversion'])
| extend targetType = tostring(Properties['targettype'])
| extend tenantId = tostring(Properties['tenantid'])
| extend subscriptionId = tostring(Properties['subscriptionid'])
| where view contains "login"
//| where adsVersion contains "1.42.0-insider"
| where ClientTimestamp >= ago(18h)
| project EventName, ClientTimestamp, SessionId, view, pageTitle, action, buttonPressed, targetType
, tenantId, subscriptionId
, adsVersion, OSVersion, Properties
This PR fixes an issue where the JSON-RPC Migration Service crashes when ADS is reloaded.
This situation applies when user tried to reload ADS where SQL-migration extension was running:
when connecting to DB, SQL-migration extension loads and migration service launches
if a previous MigrationService zombie process is stil running (if extension was used before), then that zombie process will have a lock on the log file
new launches of MigrationService on reloaded ADS fails b/c it can't obtain log file handle due to lock in step 2
The fix stops the MigrationService on extension deactivate and will ensure that a zombie MigrationService process isn't hanging around on reloads.
No hotfix needed as 1.4.0 was baking in insiders and has not been released to stable yet. Additionally, this mainly affects developers as they are most likely to reload ADS this way. Caveat: users do need to reload after installing latest version, however they will not hit this code path (since the migration service process is only in new versions of the extension)
This PR updates the JSON-RPC Migration service to the latest version. Critically, it also changes the dotnet version to 7.0. The STS dotnet version was recently changed, which changed the names of the release packages and broke our existing links.
* Adding migration service to sql migrations
* enabling auto flush log
* Adding support for env variable
* Adding TDE Migration service
* code cleanup
* updating service downloader
* Removing custom output channel
* remove unnecessary await
* Updated service version to get latest code
* Consolidate TDE into migration service
* Sync to latest main
* Update sql-migration package version
* Fix merge conflict error
* Fixing all merge conflicts
* Fixing stuff
* removing extra whitespace
* Cleaning up
---------
Co-authored-by: Akshay Mata <akma@microsoft.com>
* WIP
* Always get latest current connection
* Update more references
* Clean up
* Clean up
* vbump
* Update comments
* Address PR feedback
* Separate into helper methods
This PR fixes a regression for migration login for MI instances that was introduced in https://github.com/microsoft/azuredatastudio/pull/21776/files#diff-93c1a62583fa32d99f775b71ad27922cf31f660d10717ecc6966784306de1b6f.
After that change, support for MI would fail as MI server types were going into the Sql VM path in sqlutils because the underlying logic for isSqlServerVM() was returning wrong results.
The new approach uses the targetType set in StateMachine to extract the correct serverName for connection string based on the targetType.
Testing:
- Tested SQL VM login migration end to end
- Tested SQL MI login migration end to end
This change also bumps the sql-migration version to 1.3.0
This PR bumps sql-migration version to 1.2.2 in order to release to insider's gallery. This also disables the LoginMigration button as we do not want to release it to public yet.
This PR adds various login migration improvements:
- Enabled windows login by prompting user for AAD domain name if a windows login is selected
image
- Adds new login details dialog which gives granular status on each step of the login migration for each login
image
- Checks if windows login migration is supported for selected target type, and only collections source windows logins accordingly
- Perf optimization by source and target login in background of step 1 in order to significantly speed up loading of page 2
* Disable IR scenario and add info box for source < 2014
* Update text and link
* Clean up
* Fix issue where switching to another target platform wouldn't clear restriction
* Remove locale from documentation URL
* Refactor
* Clean up
* Autoselect blob scenario
* Refactor
* Add page blog check
* Clean up
* Update UI logic
Adding collation validation in target database selection page.
collecting source database info including state, size, collation etc in the step 1 (select databases to assess and migrate)
comparing source database collation and target database collation in target selection page.
image
* Vbump and update dependent ADS version (#21179)
* [SQL Migration] Add new Azure Core API changes back in to support USGov + other non-public clouds (#20476)
* WIP - show error message for failed SKU recommendation
* WIP - run query to get correct instance name
* WIP - integrate elastic model recommendation
* Remove private endpoint restriction text
* Add feature switch for elastic recommendation
* Clean up
* Clean up
* Misc UI fixes
* Update package.json with updated azdata dependency
* Remove unused lines
* Fix broken next button
* Vbump extension to 1.0.6
* Revert "[SQL Migration] Revert dependency on new Azure Core API changes (#20469)"
This reverts commit b7a633be25.
* [SQL Migration] Add additional condition for cutover (#21178)
* Add new cutover condition
* Implement helper hasRestoreBlockingReason()