You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@superset.apache.org by "endimonan (via GitHub)" <gi...@apache.org> on 2026/09/08 13:01:04 UTC
[PR] fix(database): allow metadata edits on an unreachable database [superset]
endimonan opened a new pull request, #44000:
URL: https://github.com/apache/superset/pull/44000
### SUMMARY
Editing a database whose connection is down fails with "Connection failed, please check your connection settings", even when the only change is unchecking "Expose database in SQL Lab". `UpdateDatabaseCommand` runs `SyncPermissionsCommand`, which pings the database before syncing permissions and raises when the ping fails. The update command only swallowed OAuth2 errors, so the whole PUT was rolled back.
This change compares the incoming connection settings (name, SQLAlchemy URI, extras, server certificate, impersonation, SSH tunnel) with the stored ones before applying the update. If none of them changed and the ping fails, the permission sync is skipped with a warning and the update goes through. Changing the name or any connection setting still requires a successful sync, since permissions are name based.
The issue thread points at the frontend `getValidation()` call, but that only runs for dynamic-form connections. Druid uses the SQLAlchemy URI form, and the toast in the reporter's screenshot is the update error handler wrapping the backend message, so the failing request is the PUT itself.
### BEFORE/AFTER SCREENSHOTS OR ANIMATED GIF
Before: PUT `/api/v1/database/<id>` returns 422 with the connection error and nothing is saved.
After: PUT returns 200, the metadata change is persisted and a warning is logged.
### TESTING INSTRUCTIONS
1. Create a database connection and confirm it works.
2. Make it unreachable (stop the database or block the host).
3. Edit the connection, uncheck "Expose database in SQL Lab" and click Finish. The change is saved.
4. Edit it again and change the password or the database name. It still fails with the connection error.
Unit tests:
```
pytest tests/unit_tests/commands/databases/update_test.py tests/unit_tests/databases/api_test.py -k "unreachable or missing_old_password"
```
### ADDITIONAL INFORMATION
- [x] Has associated issue: Fixes #42043
- [ ] Required feature flags:
- [ ] Changes UI
- [ ] Includes DB Migration (follow approval process in [SIP-59](https://github.com/apache/superset/issues/13351))
- [ ] Migration is atomic, supports rollback & is backwards-compatible
- [ ] Confirm DB migration upgrade and downgrade tested
- [ ] Runtime estimates and downtime expectations provided
- [ ] Introduces new feature or API
- [ ] Removes existing feature or API
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
Re: [PR] fix(database): allow metadata edits on an unreachable database [superset]
Posted by "rusackas (via GitHub)" <gi...@apache.org>.
rusackas merged PR #44000:
URL: https://github.com/apache/superset/pull/44000
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
Re: [PR] fix(database): allow metadata edits on an unreachable database [superset]
Posted by "endimonan (via GitHub)" <gi...@apache.org>.
endimonan commented on PR #44000:
URL: https://github.com/apache/superset/pull/44000#issuecomment-5709901051
Thanks for the review, @rusackas! Merged the latest master, including #44288 and #44364. Local tests passed and CI has been retriggered.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
Re: [PR] fix(database): allow metadata edits on an unreachable database [superset]
Posted by "netlify[bot] (via GitHub)" <gi...@apache.org>.
netlify[bot] commented on PR #44000:
URL: https://github.com/apache/superset/pull/44000#issuecomment-5586542698
### <span aria-hidden="true">โ
</span> Deploy Preview for *superset-docs-preview* ready!
| Name | Link |
|:-:|------------------------|
|<span aria-hidden="true">๐จ</span> Latest commit | 50529d0ac84169c6da1a6cce3f7779bd5d7232b6 |
|<span aria-hidden="true">๐</span> Latest deploy log | https://app.netlify.com/projects/superset-docs-preview/deploys/6aa017d141c2df0008256d56 |
|<span aria-hidden="true">๐</span> Deploy Preview | [https://deploy-preview-44000--superset-docs-preview.netlify.app](https://deploy-preview-44000--superset-docs-preview.netlify.app) |
|<span aria-hidden="true">๐ฑ</span> Preview on mobile | <details><summary> Toggle QR Code... </summary><br /><br /><br /><br />_Use your smartphone camera to open QR code link._</details> |
|<span aria-hidden="true">๐ค</span> Make changes | [Run an agent on this branch](https://app.netlify.com/projects/superset-docs-preview/agent-runs#DctNCoAgEEDhu8w6aTSz6AYdY3QmCvoRMyiiu-fuLb73QkzHFjMMABX4RHuYS0_LXVuDtlHCS1bXnoTCTH4VxZTJ0ymFs8T1eEYugyNC3bG2OhieELE3rePWwfcD) |
---
<!-- [superset-docs-preview Preview](https://deploy-preview-44000--superset-docs-preview.netlify.app) -->
_To edit notification comments on pull requests, go to your [Netlify project configuration](https://app.netlify.com/projects/superset-docs-preview/configuration/notifications#deploy-notifications)._
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
Re: [PR] fix(database): allow metadata edits on an unreachable database [superset]
Posted by "endimonan (via GitHub)" <gi...@apache.org>.
endimonan commented on PR #44000:
URL: https://github.com/apache/superset/pull/44000#issuecomment-5709838767
@rusackas Thanks for the review! Merged the latest master in c25ba1fbde, including #44288 and the subsequent head merge in #44364. Alembic now resolves to a single head, `60f94cd6cd11`.
The existing fix and its tests are unchanged. Local validation passed: 221 tests across the database update/sync commands, the unreachable-database API cases, and the migration unit tests. Changed-file pre-commit checks and a targeted Pylint run also passed. The new CI runs have started; their results are still pending.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
Re: [PR] fix(database): allow metadata edits on an unreachable database [superset]
Posted by "rusackas (via GitHub)" <gi...@apache.org>.
rusackas commented on PR #44000:
URL: https://github.com/apache/superset/pull/44000#issuecomment-5706162242
Nice fix, and the diagnosis (it's the backend PUT, not the frontend `getValidation()` call) checks out against #42043. Test coverage on `update_test.py`/`api_test.py` is thorough too. CI's failing everywhere though: alembic errors with "Multiple head revisions" on test-mysql/postgres/sqlite. Looks like the branch predates #44288 merging the migration heads on master. @endimonan can you rebase/merge master to pick that up and get CI green?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
Re: [PR] fix(database): allow metadata edits on an unreachable database [superset]
Posted by "bito-code-review[bot] (via GitHub)" <gi...@apache.org>.
bito-code-review[bot] commented on PR #44000:
URL: https://github.com/apache/superset/pull/44000#issuecomment-5586568598
<!-- Bito Reply -->
The flagged issue is correct. When updating a database, the comparison logic for `ssh_tunnel` was incorrectly handling masked credentials in full payloads, causing unchanged tunnels to be treated as changed and preventing offline metadata updates.
To resolve this, the comparison logic for `ssh_tunnel` should be updated to properly unmask and compare the fields, ensuring that unchanged tunnels do not trigger a connection validation failure. The implementation in the PR correctly addresses this by using `unmask_password_info` to normalize the incoming tunnel configuration against the existing one before comparison.
**superset/commands/database/update.py**
```
elif key == "ssh_tunnel" and original is not None and incoming is not None:
incoming = unmask_password_info(incoming.copy(), original)
incoming = {
field: incoming.get(field) for field in original.export_fields
}
original = {
field: getattr(original, field) for field in original.export_fields
}
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
Re: [PR] fix(database): allow metadata edits on an unreachable database [superset]
Posted by "bito-code-review[bot] (via GitHub)" <gi...@apache.org>.
bito-code-review[bot] commented on PR #44000:
URL: https://github.com/apache/superset/pull/44000#issuecomment-5593900066
AI Code Review is in progress (usually takes 3 to 15 minutes unless it's a very large PR).
<details>
<summary>
Bito Usage Guide
</summary>
**Commands**
Type the following command in the pull request comment and save the comment.
- `/review` - Manually triggers an incremental AI Review.
- `/review full` - Manually triggers a full AI Review.
- `/pause` - Pauses automatic reviews on this pull request.
- `/resume` - Resumes automatic reviews.
- `/resolve` - Marks all Bito-posted review comments as resolved.
- `/abort` - Cancels all in-progress reviews.
Refer to the <a href="https://docs.bito.ai/bito-dev-agents/ai-code-review-agent/available-commands" target="_blank" rel="noopener noreferrer">documentation</a> for additional commands.
**Configuration**
This repository uses `Superset` You can customize the agent settings <a href="https://alpha.bito.ai/home/ai-agents/code-review-agent" target="_blank" rel="noopener noreferrer">here</a> or contact your Bito workspace admin at evan@preset.io.
**Documentation & Help**
- <a href="https://docs.bito.ai/bito-dev-agents/ai-code-review-agent/getting-started/install-run-using-bito-cloud/create-or-customize-an-agent-instance" target="_blank" rel="noopener noreferrer">Customize agent settings</a>
- <a href="https://docs.bito.ai/bito-dev-agents/ai-code-review-agent/implementing-custom-code-review-rules" target="_blank" rel="noopener noreferrer">Review rules</a>
- <a href="https://docs.bito.ai/bito-dev-agents/ai-code-review-agent" target="_blank" rel="noopener noreferrer">General documentation</a>
- <a href="https://docs.bito.ai/bito-dev-agents/ai-code-review-agent/faqs" target="_blank" rel="noopener noreferrer">FAQ</a>
</details>
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
Re: [PR] fix(database): allow metadata edits on an unreachable database [superset]
Posted by "codecov[bot] (via GitHub)" <gi...@apache.org>.
codecov[bot] commented on PR #44000:
URL: https://github.com/apache/superset/pull/44000#issuecomment-5585829598
## [Codecov](https://app.codecov.io/gh/apache/superset/pull/44000?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) Report
:x: Patch coverage is `26.31579%` with `28 lines` in your changes missing coverage. Please review.
:white_check_mark: Project coverage is 66.31%. Comparing base ([`1fb6b98`](https://app.codecov.io/gh/apache/superset/commit/1fb6b98941345a99b12240f482dcbd72caadd34e?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)) to head ([`794e946`](https://app.codecov.io/gh/apache/superset/commit/794e946ab089b5f2179fa1831b85e13f8a4f82b0?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)).
:warning: Report is 5 commits behind head on master.
| [Files with missing lines](https://app.codecov.io/gh/apache/superset/pull/44000?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Patch % | Lines |
|---|---|---|
| [superset/commands/database/update.py](https://app.codecov.io/gh/apache/superset/pull/44000?src=pr&el=tree&filepath=superset%2Fcommands%2Fdatabase%2Fupdate.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3VwZXJzZXQvY29tbWFuZHMvZGF0YWJhc2UvdXBkYXRlLnB5) | 26.31% | [22 Missing and 6 partials :warning: ](https://app.codecov.io/gh/apache/superset/pull/44000?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
> :exclamation: There is a different number of reports uploaded between BASE (1fb6b98) and HEAD (794e946). Click for more details.
>
> <details><summary>HEAD has 132 uploads less than BASE</summary>
>
>| Flag | BASE (1fb6b98) | HEAD (794e946) |
>|------|------|------|
>|python|92|3|
>|presto|16|1|
>|hive|15|1|
>|sqlite|15|1|
></details>
<details><summary>Additional details and impacted files</summary>
```diff
@@ Coverage Diff @@
## master #44000 +/- ##
===========================================
- Coverage 79.81% 66.31% -13.50%
===========================================
Files 2914 2914
Lines 170470 170511 +41
Branches 39518 39526 +8
===========================================
- Hits 136063 113080 -22983
- Misses 31885 55078 +23193
+ Partials 2522 2353 -169
```
| [Flag](https://app.codecov.io/gh/apache/superset/pull/44000/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Coverage ฮ | |
|---|---|---|
| [hive](https://app.codecov.io/gh/apache/superset/pull/44000/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `37.62% <10.52%> (-0.02%)` | :arrow_down: |
| [mysql](https://app.codecov.io/gh/apache/superset/pull/44000/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
| [postgres](https://app.codecov.io/gh/apache/superset/pull/44000/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
| [presto](https://app.codecov.io/gh/apache/superset/pull/44000/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `39.50% <10.52%> (-0.02%)` | :arrow_down: |
| [python](https://app.codecov.io/gh/apache/superset/pull/44000/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `57.17% <26.31%> (-27.02%)` | :arrow_down: |
| [sqlite](https://app.codecov.io/gh/apache/superset/pull/44000/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `57.04% <26.31%> (-0.02%)` | :arrow_down: |
| [unit](https://app.codecov.io/gh/apache/superset/pull/44000/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#carryforward-flags-in-the-pull-request-comment) to find out more.
</details>
[:umbrella: View full report in Codecov by Harness](https://app.codecov.io/gh/apache/superset/pull/44000?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache).
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache).
<details><summary> :rocket: New features to boost your workflow: </summary>
- :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
- :package: [JS Bundle Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
</details>
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
Re: [PR] fix(database): allow metadata edits on an unreachable database [superset]
Posted by "endimonan (via GitHub)" <gi...@apache.org>.
endimonan commented on code in PR #44000:
URL: https://github.com/apache/superset/pull/44000#discussion_r3959561896
##########
superset/commands/database/update.py:
##########
@@ -114,9 +121,64 @@ def run(self) -> Model:
).run()
except (OAuth2RedirectError, MissingOAuth2TokenError):
pass
+ except DatabaseConnectionFailedError:
+ if not can_skip_failed_sync:
+ raise
+ logger.warning(
+ "Skipping permission sync for database %s: connection unavailable "
+ "and connection settings unchanged",
+ self._model_id,
+ )
return database
+ def _can_skip_failed_sync(self) -> bool:
+ """Check that the connection and permission identity remain unchanged."""
+ assert self._model
+
+ connection_fields = {
+ "database_name", # Schema and catalog permissions include this name.
+ "sqlalchemy_uri",
+ "encrypted_extra",
+ "extra",
+ "server_cert",
+ "impersonate_user",
+ "ssh_tunnel",
+ }
+ for key in connection_fields & self._properties.keys():
+ incoming = self._properties[key]
+ original = getattr(self._model, key)
+ if key == "sqlalchemy_uri":
+ try:
+ original = make_url_safe(self._model.sqlalchemy_uri_decrypted)
+ except Exception:
+ # An unavailable old password store must not block repairs.
+ return False
+ incoming = make_url_safe(incoming.strip())
+ if incoming.password == PASSWORD_MASK:
+ incoming = incoming.set(password=original.password)
+ elif key in {"extra", "encrypted_extra"}:
+ try:
+ original = json.loads(original or "{}")
+ incoming = json.loads(incoming or "{}")
+ except json.JSONDecodeError:
+ return False
+ elif key == "server_cert":
+ original = original or None
+ incoming = incoming or None
+ elif key == "ssh_tunnel" and original is not None and incoming is not None:
+ incoming = unmask_password_info(incoming.copy(), original)
+ incoming = {
+ field: incoming.get(field) for field in original.export_fields
+ }
+ original = {
+ field: getattr(original, field) for field in original.export_fields
+ }
Review Comment:
The edit modal loads the database from GET /api/v1/database/<id>/connection, which sets ssh_tunnel from SSHTunnel.data with the credentials masked, not from the schema dump. The masked values come back in the PUT and unmask_password_info restores them before the comparison. test_update_unreachable_database[True-None-True] covers this exact round trip with a tunnel password and expects 200.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
Re: [PR] fix(database): allow metadata edits on an unreachable database [superset]
Posted by "codeant-ai-for-open-source[bot] (via GitHub)" <gi...@apache.org>.
codeant-ai-for-open-source[bot] commented on code in PR #44000:
URL: https://github.com/apache/superset/pull/44000#discussion_r3958843665
##########
superset/commands/database/update.py:
##########
@@ -114,9 +121,64 @@ def run(self) -> Model:
).run()
except (OAuth2RedirectError, MissingOAuth2TokenError):
pass
+ except DatabaseConnectionFailedError:
+ if not can_skip_failed_sync:
+ raise
+ logger.warning(
+ "Skipping permission sync for database %s: connection unavailable "
+ "and connection settings unchanged",
+ self._model_id,
+ )
return database
+ def _can_skip_failed_sync(self) -> bool:
+ """Check that the connection and permission identity remain unchanged."""
+ assert self._model
+
+ connection_fields = {
+ "database_name", # Schema and catalog permissions include this name.
+ "sqlalchemy_uri",
+ "encrypted_extra",
+ "extra",
+ "server_cert",
+ "impersonate_user",
+ "ssh_tunnel",
+ }
+ for key in connection_fields & self._properties.keys():
+ incoming = self._properties[key]
+ original = getattr(self._model, key)
+ if key == "sqlalchemy_uri":
+ try:
+ original = make_url_safe(self._model.sqlalchemy_uri_decrypted)
+ except Exception:
+ # An unavailable old password store must not block repairs.
+ return False
+ incoming = make_url_safe(incoming.strip())
+ if incoming.password == PASSWORD_MASK:
+ incoming = incoming.set(password=original.password)
+ elif key in {"extra", "encrypted_extra"}:
+ try:
+ original = json.loads(original or "{}")
+ incoming = json.loads(incoming or "{}")
+ except json.JSONDecodeError:
+ return False
+ elif key == "server_cert":
+ original = original or None
+ incoming = incoming or None
+ elif key == "ssh_tunnel" and original is not None and incoming is not None:
+ incoming = unmask_password_info(incoming.copy(), original)
+ incoming = {
+ field: incoming.get(field) for field in original.export_fields
+ }
+ original = {
+ field: getattr(original, field) for field in original.export_fields
+ }
Review Comment:
**Suggestion:** Full connection payloads omit load-only SSH credentials, so this comparison turns them into `None` and treats unchanged tunnels as changed, preventing offline metadata updates. [logic error]
**Assessment:** ๐ `Major` ยท ๐ `Occurrence: Sometimes`
[](https://docs.codeant.ai/cli/resolve-pr-comments-skill) [](https://app.codeant.ai/fix-in-ide?tool=cursor&prompt_id=4de7f863063b4d819ab487db83f20aa3&service=github&base_url=https%3A%2F%2Fgithub.com&org=apache&repo=apache%2Fsuperset) [](https://app.codeant.ai/fix-in-ide?tool=vscode-claude&prompt_id=4de7f863063b4d819ab487db83f20aa3&service=github&base_url=https%3A%2F%2Fgithub.com&org=apache&repo=apache%2Fsuperset)
<details>
<summary><b>Prompt for AI Agent ๐ค </b></summary>
```mdx
This is a comment left during a code review.
**Path:** superset/commands/database/update.py
**Line:** 171:176
**Comment:**
*Logic Error: Full connection payloads omit load-only SSH credentials, so this comparison turns them into `None` and treats unchanged tunnels as changed, preventing offline metadata updates.
Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix
```
</details>
<a href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F44000&comment_hash=02bc84403cdc6737e9c08a0e13f52f69f5b217e9d7ffe2d5f8c0b5d76c986ab1&reaction=like'>๐</a> | <a href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F44000&comment_hash=02bc84403cdc6737e9c08a0e13f52f69f5b217e9d7ffe2d5f8c0b5d76c986ab1&reaction=dislike'>๐</a>
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org