-
-
Notifications
You must be signed in to change notification settings - Fork 8.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[grid] Only ignore extension caps with object/array values #14485
base: trunk
Are you sure you want to change the base?
[grid] Only ignore extension caps with object/array values #14485
Conversation
PR Reviewer Guide 🔍
|
a82c998
to
14999b7
Compare
PR Code Suggestions ✨
|
14999b7
to
dbe50be
Compare
ac4802b
to
2d9609b
Compare
java/test/org/openqa/selenium/grid/data/DefaultSlotMatcherTest.java
Outdated
Show resolved
Hide resolved
java/test/org/openqa/selenium/grid/node/config/NodeOptionsTest.java
Outdated
Show resolved
Hide resolved
2d9609b
to
cca2c28
Compare
java/test/org/openqa/selenium/grid/data/DefaultSlotMatcherTest.java
Outdated
Show resolved
Hide resolved
d5aeb2e
to
84b6795
Compare
6a5663f
to
d993e8c
Compare
d993e8c
to
378cb93
Compare
@VietND96 I'm trying to understand why the comparison in the test you added should return |
@diemol Changing the behavior to only ignore extension capabilities whose names contain "options" would produce the same behavior that is causing the test @VietND96 added to fail. The values of The approach I'm presenting in this PR provides the greatest level of control and consistency for clients.
|
No, because we will still ignore |
All other changes should be reverted, please. |
c1f9d31
to
177379a
Compare
@diemol I understand that we currently ignore all "special" extension capabilities, but there appears to be no real-world scenarios of "special" extension capabilities with "simple" values in which this behavior is actually needed. For Appium extension capabilities, current clients rely on capabilities with "simple" values being considered for node matching. |
Why? |
@diemol Why is it desirable to support the scenario enforced by the test that @VietND96 added? We match nodes even when capabilities like |
177379a
to
98354f4
Compare
I cannot see what @VietND96 added because you are force-pushing the whole time, and I don't know who added what. I don't know which scenario you mean. |
I added it back to trunk 10119a9 |
@sbabcoc is correct, this |
98354f4
to
bd93f46
Compare
@diemol It seems like you're advocating for ignoring all extension capabilities for purposes of slot matching. This approach would mean that custom matchers would be required in all scenarios where matching based on extension capabilities is desired (e.g. - The enhancements I recommended in the PR description provide the outline of a mechanism for vendors to define slot matcher extensions that evaluate their specific matching criteria. This would enable vendors to define their own custom criteria without the need to implement custom slot matchers. |
Not really. Just the ones named |
@diemol I can revise my PR to implement this strategy. It is significantly less complex to implement and much easier to describe. I'll update the unit tests accordingly. Is the concept of a slot matcher extension mechanism worth exploring further? This would be an additional method for the WebDriverInfo interface, which is already being scanned for service providers. |
You can already implement your own SlotMatcher, see |
@diemol Yes, but you can only specify one custom matcher. If you need sessions from multiple vendors, this means running with multiple hubs. With a slot matcher extension mechanism, vendor-specific matching gets activated automatically and standing up a grid that supplies sessions from multiple vendors is much easier. |
The matcher is used both at the Distributor and the Node. You would need to decouple that logic to allow more matchers. |
@diemol The extension would be implemented in DefaultSlotMatcher, which is already integrated with Distributor and Node. |
283dae7
to
7727862
Compare
@diemol I've revised the matcher to only ignore extension capabilities with suffix "options" (case-insensitive) and updated the affected unit test accordingly. I also updated the PR description to indicate the revised implementation. |
7727862
to
376bfb7
Compare
376bfb7
to
63f9b9a
Compare
User description
Description
The existing handling of extension capabilities assigns special significance to four recognized prefixes:
goog:
,moz:
,ms:
, andse:
. Capabilities with these prefixes are entirely ignored by the current default slot matcher implementation, but custom prefixes are considered, as well as those for Safari and Appium. This inconsistency means that properties in extension capabilities can cause affectednewSession
requests to fail even though extension capabilities are supposed to be vendor-specific and should probably not be evaluated by the default slot matcher.This PR eliminates the "special" status of the four recognized prefixes, opting instead to ignore all extension capabilities with names that end with "options" (case-insensitive). This maintains the existing behavior regarding the Options objects of Chrome, Firefox, and Edge while allowing node configurations and
newSession
requests to include extension capabilities that won't affect slot matching.Motivation and Context
Revolves #14461
The strategy employed by the PR is that extension capabilities which should be ignored for matching can be expressed as capabilities with name suffix "options" and those which should be considered can be specified as capabilities without name suffix "options". This is a generalization/extrapolation of existing patterns from current use cases.
Recommended slot matcher enhancements
To reduce the need for custom slot matchers, we could extend the WebDriverInfo interface to add a new method that vendors could implement to evaluate their own criteria:
The default implementation would return
null
to indicate that no evaluation has been performed. If the vendor chooses to implement thematches
method, their initial step must be to invoke their ownisSupporting
method, returningnull
if the corresponding driver doesn't support the specified capabilities.The implementation in DefaultSlotMatcher would be updated to iterate over the available WebDriverInfo providers, retaining only those whose
isSupporting
methods returntrue
. Thematches
methods of this filtered list of providers will then be applied to the available nodes to determine which of these satisfies the criteria specified by the client request. The nodes that satisfy these evaluations (if any) would then be evaluated against the remaining common criteria.Another potential enhancement would be to enable vendor-specific
matches
methods to return a weighted integer result instead of a simpleBoolean
. This would enable best-match behavior. Perhaps this is getting too complicated, though.Types of changes
Checklist
PR Type
Bug fix, Tests
Description
DefaultSlotMatcher
, opting to ignore all extension capabilities with names ending in "options" (case-insensitive).RelaySessionFactory
to streamline session creation by removing redundant capability filtering.DefaultSlotMatcherTest
to align with the new handling of extension capabilities.Changes walkthrough 📝
DefaultSlotMatcher.java
Revise extension capabilities handling in DefaultSlotMatcher
java/src/org/openqa/selenium/grid/data/DefaultSlotMatcher.java
RelaySessionFactory.java
Simplify session creation in RelaySessionFactory
java/src/org/openqa/selenium/grid/node/relay/RelaySessionFactory.java
DefaultSlotMatcherTest.java
Update DefaultSlotMatcher tests for revised capability handling
java/test/org/openqa/selenium/grid/data/DefaultSlotMatcherTest.java
handling.