feat: telemetry for removed v2 interface imports (stacked on #6004)#6006
Open
jam-jee wants to merge 2 commits into
Open
feat: telemetry for removed v2 interface imports (stacked on #6004)#6006jam-jee wants to merge 2 commits into
jam-jee wants to merge 2 commits into
Conversation
In v3 the v2 top-level modules (sagemaker.estimator, sagemaker.model, ...) were removed, so importing them fails with a bare "ModuleNotFoundError: No module named 'sagemaker.estimator'" that gives the caller no path forward. This adds an actionable migration experience. - raise_removed_in_v3() helper in sagemaker.core.deprecations: emits a DeprecationWarning and raises a ModuleNotFoundError naming the v3 replacement (and the exact import where the migration guide publishes one), plus the migration-guide link. - 12 curated "tombstone" modules under sagemaker/ for the high-traffic removed interfaces (estimator, model, predictor, base_predictor, predictor_async, transformer, tuner, processing, pipeline, multidatamodel, automl, algorithm). These ship with sagemaker-core. - A fallback meta-path finder (_RemovedV2ModuleFinder) registered from sagemaker.core.__init__ as a last resort: any other removed sagemaker.<name> gets a generic "not available in v3, see migration guide" message instead of a bare error. Appended to sys.meta_path so it never shadows real v3 packages or the tombstones, with a _KNOWN_V3_TOPLEVEL guard protecting real packages (core/train/serve/mlops/lineage/ai_registry). Adds tests/unit/test_removed_v2_modules.py (36 tests) covering tombstone messages and the fallback finder (registration, ordering, non-shadowing of real packages, pass-through of non-sagemaker and nested names).
Track how often removed v2 interfaces are imported in v3, building on the actionable-guidance change (raise_removed_in_v3 + the fallback finder). - New Feature.DEPRECATED_V2_INTERFACE (code 21); the specific removed module name travels in x-extra so one feature code covers all of them. - Removed imports have no sagemaker_session, so a session-less emit resolves account id + region best-effort and sends the same field to the same endpoint as the existing session-based emitter (no new data category). - Strictly best-effort: hard time-bounded via a daemon worker so it can never delay the import, once-per-module-per-process, and never raises. - Opt-out honors the standard TelemetryOptOut SDK-defaults config (loaded session-lessly), with SAGEMAKER_DEPRECATION_TELEMETRY_OPT_OUT as an additional env-var fallback. - Wires the emit into raise_removed_in_v3 and the fallback finder via a lazily-imported, fully-guarded hook. Extends tests/unit/test_removed_v2_modules.py (+8 tests, 44 total) covering dedup, opt-out via config and env var, time-bounding under a simulated hang, never-raises, account fallback, and the end-to-end import hook.
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.
Issue #, if available: N/A
Description of changes:
Adds usage telemetry for the removed-v2-interface imports introduced in #6004 — so we can measure how often each removed interface (
sagemaker.estimator, etc.) is still being imported in v3 and prioritize migration support.Feature.DEPRECATED_V2_INTERFACE(code 21); the specific removed module name travels inx-extra, so one feature code covers all removed interfaces and you slice by module.sagemaker_session, so a session-less emit resolves account id + region best-effort and sends the same field to the same endpoint as the existing session-based emitter (no new data category — this is the same account-id field already collected on normal operations).ModuleNotFoundError), once per module per process, and never raises.TelemetryOptOutSDK-defaults config (loaded session-lessly viaload_sagemaker_config()), withSAGEMAKER_DEPRECATION_TELEMETRY_OPT_OUTas an additional env-var fallback.raise_removed_in_v3and the fallback finder via a lazily-imported, fully-guarded hook.Testing done:
tests/unit/test_removed_v2_modules.py(+8 telemetry tests, 44 total, all pass): dedup, opt-out via config and env var, time-bounding under a simulated 5s hang, never-raises, account fallback toNotAvailable, and the end-to-end import→hook path.TelemetryOptOut: trueconfig file opts the emit out.black+flake8(repotox.ini) clean.Merge Checklist
General
NotAvailablein credential-less import environments.us-west-2.)Tests
unique_name_from_basefor integ resource names (N/A — unit tests only)botocore.configalready a transitive dep)By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.