fix(grpc): allow multiple wildcard subscriptions when topic validation disabled#1083
fix(grpc): allow multiple wildcard subscriptions when topic validation disabled#1083Rishabh-git10 wants to merge 4 commits into
Conversation
…n disabled Signed-off-by: Rishabh Dewangan <107680241+Rishabh-git10@users.noreply.github.com>
seherv
left a comment
There was a problem hiding this comment.
Thanks a lot for contributing to Dapr! Here are my comments
|
|
||
| sub = registered_topic.subscription | ||
| rules = registered_topic.rules | ||
|
|
There was a problem hiding this comment.
Here you should build an additional route map based on topic to know which handler actually takes it in case you get a wildcard. Something like
if disable_topic_validation and rule is None:
sub.routes.default = topic
self._route_map[(pubsub_name, topic)] = cbSigned-off-by: Rishabh Dewangan <107680241+Rishabh-git10@users.noreply.github.com>
|
Thanks for the review and guidance @seherv. |
|
@Rishabh-git10 can you fix the conflicts pls? |
Signed-off-by: Rishabh Dewangan <107680241+Rishabh-git10@users.noreply.github.com>
0e64253 to
caabd8c
Compare
|
Hey, @CasperGN I have resolved the conflicts. Let's see if the checks are happy with it. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #1083 +/- ##
==========================================
- Coverage 86.63% 82.09% -4.54%
==========================================
Files 84 116 +32
Lines 4473 9585 +5112
==========================================
+ Hits 3875 7869 +3994
- Misses 598 1716 +1118 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
This PR updates the dapr.ext.grpc callback servicer’s pub/sub routing to avoid key collisions when disable_topic_validation=True, aiming to support multiple wildcard-style subscriptions on the same pubsub component without startup crashes or silently dropped subscriptions.
Changes:
- Standardizes internal subscription keying in
register_topic()to always includepubsub_name+topic. - Introduces
_get_topic_callback()to centralize callback selection and adds additional routing maps for fallback lookup. - Adds a unit test that registers multiple wildcard-like subscriptions under the same pubsub with topic validation disabled.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
dapr/ext/grpc/_servicer.py |
Refactors topic registration and event dispatch to use a shared callback resolver and new routing maps. |
tests/ext/grpc/test_servicier.py |
Adds coverage for multiple wildcard-style subscriptions under disable_topic_validation=True. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| self._topic_map[pubsub_topic] = cb | ||
| self._route_map[(pubsub_name, topic)] = cb | ||
|
|
||
| if disable_topic_validation: | ||
| self._validation_disabled_pubsubs[pubsub_name] = cb |
| if (pubsub_name, path) in self._route_map: | ||
| return self._route_map[(pubsub_name, path)] | ||
|
|
||
| if path == '': | ||
| if pubsub_name in self._validation_disabled_pubsubs: | ||
| return self._validation_disabled_pubsubs[pubsub_name] | ||
|
|
Description
Fixes a
ValueErrorstartup crash and subscription drop when registering multiple wildcard paths on the same pub/sub component withdisable_topic_validation=True.Previously, enabling this flag collapsed internal tracking keys down to the pub/sub identifier alone, causing map collisions and rendering the sidecar blind to subsequent subscriptions. This change standardizes discrete internal dictionary keys across all registration paths. It introduces a regex-based pattern matching fallback evaluation inside
OnTopicEventand_handle_bulk_topic_eventto route events when direct string lookups fail.Issue reference
Closes #436
Checklist
Please make sure you've completed the relevant tasks for this PR, out of the following list: