Skip to content
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

MC-23881: When category URL page param is larger than the pagination, the page will break with elastic search 2 #31594

Merged
merged 1 commit into from
Jan 13, 2021

Conversation

engcom-Golf
Copy link
Contributor

Description (*)

Related Pull Requests

Fixed Issues (if relevant)

  1. Fixes When category URL page param is larger than the pagination, the page will break with elastic search 2 #23843

Manual testing scenarios (*)

Create a category with products
Enable elasticsearch
Reindex all
Go to the category and add this param: ?p=999999999999999
Expected result:
No out of range exception in logs with status 500

Note:
There still can be log entity with 400 status.
Redirect to the last page of the category is not expected.

Questions or comments

Contribution checklist (*)

  • Pull request has a meaningful description of its purpose
  • All commits are accompanied by meaningful commit messages
  • All new or changed code is covered with unit/integration tests (if applicable)
  • All automated tests passed successfully (all builds are green)

@m2-assistant
Copy link

m2-assistant bot commented Jan 8, 2021

Hi @engcom-Golf. Thank you for your contribution
Here is some useful tips how you can test your changes using Magento test environment.
Add the comment under your pull request to deploy test or vanilla Magento instance:

  • @magento give me test instance - deploy test instance based on PR changes
  • @magento give me 2.4-develop instance - deploy vanilla Magento instance

❗ Automated tests can be triggered manually with an appropriate comment:

  • @magento run all tests - run or re-run all required tests against the PR changes
  • @magento run <test-build(s)> - run or re-run specific test build(s)
    For example: @magento run Unit Tests

<test-build(s)> is a comma-separated list of build names. Allowed build names are:

  1. Database Compare
  2. Functional Tests CE
  3. Functional Tests EE,
  4. Functional Tests B2B
  5. Integration Tests
  6. Magento Health Index
  7. Sample Data Tests CE
  8. Sample Data Tests EE
  9. Sample Data Tests B2B
  10. Static Tests
  11. Unit Tests
  12. WebAPI Tests
  13. Semantic Version Checker

You can find more information about the builds here

ℹ️ Please run only needed test builds instead of all when developing. Please run all test builds before sending your PR for review.

For more details, please, review the Magento Contributor Guide documentation.

⚠️ According to the Magento Contribution requirements, all Pull Requests must go through the Community Contributions Triage process. Community Contributions Triage is a public meeting.

🕙 You can find the schedule on the Magento Community Calendar page.

📞 The triage of Pull Requests happens in the queue order. If you want to speed up the delivery of your contribution, please join the Community Contributions Triage session to discuss the appropriate ticket.

🎥 You can find the recording of the previous Community Contributions Triage on the Magento Youtube Channel

✏️ Feel free to post questions/proposals/feedback related to the Community Contributions Triage process to the corresponding Slack Channel

@m2-community-project m2-community-project bot added Priority: P2 A defect with this priority could have functionality issues which are not to expectations. Severity: S1 Affects critical data or functionality and forces users to employ a workaround. labels Jan 8, 2021
@engcom-Golf
Copy link
Contributor Author

@magento run all tests

$searchQuery = [
'index' => $this->searchIndexNameResolver->getIndexName($storeId, $request->getIndex()),
'type' => $this->clientConfig->getEntityType(),
'body' => [
'from' => $request->getFrom(),
'from' => $this->getFrom($request),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think inline looks a bit cleaner. What do you thing?

Suggested change
'from' => $this->getFrom($request),
'from' => min((int)$request->getFrom(), self::ELASTIC_MAX_INT),

PS What about negative values? Should we also handle it?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree. Will update. But don't think that we need to handle negative values. In that case, elastic returns exception with message numHits must be > 0

@@ -61,7 +63,7 @@ public function initQuery(RequestInterface $request)
'index' => $this->searchIndexNameResolver->getIndexName($storeId, $request->getIndex()),
'type' => $this->clientConfig->getEntityType(),
'body' => [
'from' => $request->getFrom(),
'from' => $this->getFrom($request),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here

@@ -23,6 +23,8 @@
*/
class Builder extends Elasticsearch5Builder
{
private const ELASTIC_INT_MAX = 2147483647;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
private const ELASTIC_INT_MAX = 2147483647;
private const ELASTIC_MAX_INT = 2147483647;

@@ -22,6 +22,8 @@
*/
class Builder
{
private const ELASTIC_INT_MAX = 2147483647;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
private const ELASTIC_INT_MAX = 2147483647;
private const ELASTIC_MAX_INT = 2147483647;

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree that max_int sounds better but there is defined PHP_INT_MAX constant. I think it is better to keep the same format here.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, that make sense

@ihor-sviziev
Copy link
Contributor

one more question - on elastic 5+ it works fine?

@m2-community-project m2-community-project bot moved this from Changes Requested to Review in Progress in High Priority Pull Requests Dashboard Jan 11, 2021
… the page will break with elastic search 2
@engcom-Golf
Copy link
Contributor Author

@ihor-sviziev fix tested for elastcsearch 6 and 7 versions

@engcom-Golf
Copy link
Contributor Author

@magento run all tests

@magento-engcom-team
Copy link
Contributor

Hi @ihor-sviziev, thank you for the review.
ENGCOM-8618 has been created to process this Pull Request

@engcom-Delta
Copy link
Contributor

✔️ QA passed
Was checked case from manual testing scenario and checked quick search and advanced search work as before
Before:
❌ Exception error in logs:
[2021-01-12 08:33:52] main.CRITICAL: {"error":{"root_cause":[{"type":"input_coercion_exception","reason":"Numeric value (11999999999999976) out of range of int (-2147483648 - 2147483647) at [Source: (org.elasticsearch.common.io.stream.InputStreamStreamInput); line: 1, column: 26]"}],"type":"input_coercion_exception","reason":"Numeric value (11999999999999976) out of range of int (-2147483648 - 2147483647) at [Source: (org.elasticsearch.common.io.stream.InputStreamStreamInput); line: 1, column: 26]"},"status":500} {"exception":"[object] (Elasticsearch\\Common\\Exceptions\\ServerErrorResponseException(code: 500): {\"error\":{\"root_cause\":[{\"type\":\"input_coercion_exception\",\"reason\":\"Numeric value (11999999999999976) out of range of int (-2147483648 - 2147483647)\ at [Source: (org.elasticsearch.common.io.stream.InputStreamStreamInput); line: 1, column: 26]\"}],\"type\":\"input_coercion_exception\",\"reason\":\"Numeric value (11999999999999976) out of range of int (-2147483648 - 2147483647)\ at [Source: (org.elasticsearch.common.io.stream.InputStreamStreamInput); line: 1, column: 26]\"},\"status\":500} at /var/www/html/magento2dev/vendor/elasticsearch/elasticsearch/src/Elasticsearch/Connections/Connection.php:665)"} []

After:
✔️ Error with status code 400 that is acceptable
[2021-01-12 09:10:00] main.CRITICAL: {"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"Result window is too large, from + size must be less than or equal to: [10000] but was [2147483659]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting."}],"type":"search_phase_execution_exception","reason":"all shards failed","phase":"query","grouped":true,"failed_shards":[{"shard":0,"index":"magento2dev_product_1_v109","node":"YDjpqEllRKOGLQ-KYNHWcQ","reason":{"type":"illegal_argument_exception","reason":"Result window is too large, from + size must be less than or equal to: [10000] but was [2147483659]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting."}}],"caused_by":{"type":"illegal_argument_exception","reason":"Result window is too large, from + size must be less than or equal to: [10000] but was [2147483659]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting.","caused_by":{"type":"illegal_argument_exception","reason":"Result window is too large, from + size must be less than or equal to: [10000] but was [2147483659]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting."}}},"status":400} {"exception":"[object] (Elasticsearch\\Common\\Exceptions\\BadRequest400Exception(code: 400): {\"error\":{\"root_cause\":[{\"type\":\"illegal_argument_exception\",\"reason\":\"Result window is too large, from + size must be less than or equal to: [10000] but was [2147483659]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting.\"}],\"type\":\"search_phase_execution_exception\",\"reason\":\"all shards failed\",\"phase\":\"query\",\"grouped\":true,\"failed_shards\":[{\"shard\":0,\"index\":\"magento2dev_product_1_v109\",\"node\":\"YDjpqEllRKOGLQ-KYNHWcQ\",\"reason\":{\"type\":\"illegal_argument_exception\",\"reason\":\"Result window is too large, from + size must be less than or equal to: [10000] but was [2147483659]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting.\"}}],\"caused_by\":{\"type\":\"illegal_argument_exception\",\"reason\":\"Result window is too large, from + size must be less than or equal to: [10000] but was [2147483659]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting.\",\"caused_by\":{\"type\":\"illegal_argument_exception\",\"reason\":\"Result window is too large, from + size must be less than or equal to: [10000] but was [2147483659]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting.\"}}},\"status\":400} at /var/www/html/magento2dev/vendor/elasticsearch/elasticsearch/src/Elasticsearch/Connections/Connection.php:632)"} []
image

@engcom-Delta
Copy link
Contributor

Note: Automation tests are passed

@engcom-Delta engcom-Delta moved this from Testing in Progress to Merge in Progress in High Priority Pull Requests Dashboard Jan 12, 2021
@engcom-Delta engcom-Delta added the QA: Added to Regression Scope Scenario was analysed and added to Regression Testing Scope label Jan 12, 2021
@m2-community-project m2-community-project bot moved this from Merge in Progress to Ready for Testing in High Priority Pull Requests Dashboard Jan 12, 2021
@engcom-Delta engcom-Delta moved this from Ready for Testing to Testing in Progress in High Priority Pull Requests Dashboard Jan 12, 2021
@engcom-Delta engcom-Delta moved this from Testing in Progress to Merge in Progress in High Priority Pull Requests Dashboard Jan 12, 2021
@zakdma
Copy link
Contributor

zakdma commented Jan 13, 2021

@magento-engcom-team
Copy link
Contributor

@zakdma the branch with code successfully imported intomagento-tsg/magento2ce repository. Branch name: imported-magento-magento2-31594.

@magento-engcom-team magento-engcom-team merged commit 07b1289 into magento:2.4-develop Jan 13, 2021
@m2-assistant
Copy link

m2-assistant bot commented Jan 13, 2021

Hi @engcom-Golf, thank you for your contribution!
Please, complete Contribution Survey, it will take less than a minute.
Your feedback will help us to improve contribution process.

@gabrieldagama gabrieldagama moved this from Merge in Progress to Recently Merged in High Priority Pull Requests Dashboard Jan 25, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Auto-Tests: Covered All changes in Pull Request is covered by auto-tests Award: bug fix Award: test coverage Component: Elasticsearch Priority: P2 A defect with this priority could have functionality issues which are not to expectations. Progress: accept QA: Added to Regression Scope Scenario was analysed and added to Regression Testing Scope Release Line: 2.4 Severity: S1 Affects critical data or functionality and forces users to employ a workaround. Type: Bug Fix
Projects
None yet
Development

Successfully merging this pull request may close these issues.

When category URL page param is larger than the pagination, the page will break with elastic search 2
6 participants