-
Notifications
You must be signed in to change notification settings - Fork 24.8k
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
REST Client: NodeSelector for node attributes #31296
Conversation
Add a `NodeSelector` so that users can filter the nodes that receive requests based on node attributes. I believe we'll need this to backport elastic#30523 and we want it anyway. I also added a bash script to help with rebuilding the sniffer parsing test documents.
Pinging @elastic/es-core-infra |
I'm going to push some docs for this in a moment. |
Replaces #31276. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
left a few nits, LGTM though
assertEquals(expected, nodes); | ||
} | ||
|
||
private Node dummyNode(Map<String, List<String>> attributes) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
static?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sure!
/* | ||
* Multi-valued attributes come with key = `real_key.index` and we | ||
* unflip them after reading them because we can't rely on the that | ||
* they arive in the result object. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
arive?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry! We can't rely on the order that they arrive. Proxies could jumble them up and we should still work. 2.x looks like it jumbles them up for fun.
Map<String, List<String>> realAttributes = new HashMap<>(protoAttributes.size()); | ||
List<String> keys = new ArrayList<>(protoAttributes.keySet()); | ||
for (String key : keys) { | ||
if (key.endsWith(".0")) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
oh man we don't get the array but rather each item this way?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes....
/** | ||
* Returns {@code defaultValue} if the attribute didn't come back, | ||
* {@code true} or {@code false} if it did come back as | ||
* either of those, or throws and IOException if the attribute |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
throws an
@@ -0,0 +1,107 @@ | |||
#!/bin/bash |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nice! maybe rename the file to create_nodes_info_output ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sure!
key = parser.currentName(); | ||
} else { | ||
NodeSelector newSelector = new HasAttributeNodeSelector(key, parser.text()); | ||
parser.skipChildren(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
do we need to skip children here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let me dig on these. I think they are nice if you pass in weird stuff. Because we don't check the type and just call text
. I'll see.
|
||
private static NodeSelector parseVersionSelector(XContentParser parser) throws IOException { | ||
Version[] range = SkipSection.parseVersionRange(parser.text()); | ||
parser.skipChildren(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
do we need to skip children here?
* master: Upgrade to Lucene-7.4.0-snapshot-518d303506 (#31360) Rankeval: Fold template test project into main module (#31203) Add QA project and fixture based test for discovery-ec2 plugin (#31107) [Docs] Remove reference to repository-s3 plugin creating an S3 bucket (#31359) REST Client: NodeSelector for node attributes (#31296) LLClient: Fix assertion on windows Add details section for dcg ranking metric (#31177) [ML] Re-enable tests muted in #30982
Add a `NodeSelector` so that users can filter the nodes that receive requests based on node attributes. I believe we'll need this to backport #30523 and we want it anyway. I also added a bash script to help with rebuilding the sniffer parsing test documents.
* 6.x: Add get stored script and delete stored script to high level REST API Increasing skip version for failing test on 6.x Skip get_alias tests for 5.x (#31397) Fix defaults in GeoShapeFieldMapper output (#31302) Test: better error message on failure Mute DefaultShardsIT#testDefaultShards test Fix reference to XContentBuilder.string() (#31337) [DOCS] Adds monitoring breaking change (#31369) [DOCS] Adds security breaking change (#31375) [DOCS] Backports breaking change (#31373) RestAPI: Reject forcemerge requests with a body (#30792) Docs: Use the default distribution to test docs (#31251) Use system context for cluster state update tasks (#31241) [DOCS] Adds testing for security APIs (#31345) [DOCS] Removes ML item from release highlights [DOCS] Removes breaking change (#31376) REST high-level client: add validate query API (#31077) Move language analyzers from server to analysis-common module. (#31300) Expose lucene's RemoveDuplicatesTokenFilter (#31275) [Test] Fix :example-plugins:rest-handler on Windows Delete typos in SAML docs (#31199) Ensure we don't use a remote profile if cluster name matches (#31331) Test: Skip alias tests that failed all weekend [DOCS] Fix version in SQL JDBC Maven template [DOCS] Improve install and setup section for SQL JDBC Add ingest-attachment support for per document `indexed_chars` limit (#31352) SQL: Fix rest endpoint names in node stats (#31371) [DOCS] Fixes small issue in release notes Support for remote path in reindex api Closes #22913 [ML] Put ML filter API response should contain the filter (#31362) Remove trial status info from start trial doc (#31365) [DOCS] Added links in breaking changes pages [DOCS] Adds links to release notes and highlights Docs: Document changes in rest client QA: Fix tribe tests to use node selector REST Client: NodeSelector for node attributes (#31296) LLClient: Fix assertion on windows LLClient: Support host selection (#30523) Add QA project and fixture based test for discovery-ec2 plugin (#31107) [ML] Hold ML filter items in sorted set (#31338) [ML] Add description to ML filters (#31330)
Add a
NodeSelector
so that users can filter the nodes that receiverequests based on node attributes.
I believe we'll need this to backport #30523 and we want it anyway.
I also added a bash script to help with rebuilding the sniffer parsing
test documents.