Anonymous | Login
Project:
RSS
  
News | My View | View Issues | Roadmap | Summary

View Issue DetailsJump to Notes ] Issue History ] Print ]
ID
0034669
TypeCategorySeverityReproducibilityDate SubmittedLast Update
defect[Retail Modules] Web POScriticalhave not tried2016-12-01 16:372016-12-22 16:38
ReportermtaalView Statuspublic 
Assigned Tomigueldejuana 
PriorityimmediateResolutionfixedFixed in VersionRR17Q1
StatusclosedFix in branchFixed in SCM revisionb08a151d8926
ProjectionnoneETAnoneTarget VersionRR17Q1
OSAnyDatabaseAnyJava version
OS VersionDatabase versionAnt version
Product VersionSCM revision 
Review Assigned Tomarvintm
Regression levelProduction - Confirmed Stable
Regression date2015-10-28
Regression introduced in releaseRR16Q1
Regression introduced by commithttps://code.openbravo.com/erp/pmods/org.openbravo.mobile.core/rev/7f56ee2e32ec [^]
Triggers an Emergency PackNo
Summary

0034669: ProcessHQLQuery returns duplicates causing errors when inserting data and really slow login with many products

DescriptionThe ProcessHQLQuery class uses the offset and limit parameters to support paginated data [1]. This is needed in case of large datasets so that the client side is not flooded with too much data.

The ProcessHQLQuery class can execute multiple queries depending on the subclass implementation. It will change the offset/limit after each query [2]. For 2 examples see the Product [3] and Business Partner [4].

The problem is that if there are multiple queries then these queries will use different offset/limit parameters within one request. This means that the next request for the next page will get overlapping data with previous requests or can skip data.

Let's take an example:

Subclass of ProcessHQLQuery adds 2 queries. The first query would return 15000 records (unpaginated), the second query would return 8000 records (unpaginated).

Master data load:
Request 1:
offset: 0, limit: 10000
With the current code this would return only 10000 records of the first query, the second query won't be executed anymore
Request 2:
offset: 10000, limit: 10000
This would return 5000 records of the first query and the first 5000 records of the second query (the offset is set to zero if a query returns less than the limit).
Request 3:
offset: 20000, limit: 10000
This would return the first 8000 records of the second query, overlapping with request 2

[1]
https://code.openbravo.com/erp/pmods/org.openbravo.mobile.core/file/0d7bcfc60eb8/src/org/openbravo/mobile/core/process/ProcessHQLQuery.java#l165 [^]

[2]
https://code.openbravo.com/erp/pmods/org.openbravo.mobile.core/file/0d7bcfc60eb8/src/org/openbravo/mobile/core/process/ProcessHQLQuery.java#l229 [^]

[3]
https://code.openbravo.com/erp/pmods/org.openbravo.retail.posterminal/file/5754a065bc58/src/org/openbravo/retail/posterminal/master/Product.java#l247 [^]
https://code.openbravo.com/erp/pmods/org.openbravo.retail.posterminal/file/5754a065bc58/src/org/openbravo/retail/posterminal/master/Product.java#l271 [^]
https://code.openbravo.com/erp/pmods/org.openbravo.retail.posterminal/file/5754a065bc58/src/org/openbravo/retail/posterminal/master/Product.java#l301 [^]

[4]
https://code.openbravo.com/erp/pmods/org.openbravo.retail.posterminal/file/5754a065bc58/src/org/openbravo/retail/posterminal/master/BusinessPartner.java#l57 [^]
Steps To ReproduceCreate a database which would return products for all product queries in the product master

Set the limit in the request for products to something small
- Find this line:
handleIncrementalRequest(35000, 0, params, incremental);
and change it to:
handleIncrementalRequest(20, 0, params, incremental);

clear cache and log in --> duplicate errors
Proposed SolutionThe ProcessHQLQuery should not reset the limit or offset, they should be the same for each query to prevent duplicates and to prevent skipping data.

In BP/Product search you will get more results than the preference/default page size (each query will return max of that), but this is not too bad.

TagsNo tags attached.
Attached Filespng file icon Selection_032.png [^] (648,311 bytes) 2016-12-01 16:37
diff file icon issue34669MobileCore16Q4.diff [^] (6,917 bytes) 2016-12-22 15:45 [Show Content]

- Relationships Relation Graph ] Dependency Graph ]
depends on backport 0034810RR16Q4.1 closedmarvintm ProcessHQLQuery returns duplicates causing errors when inserting data and really slow login with many products 
caused by feature request 0031212RR16Q1 closedmigueldejuana Add a preference to control how many products/bp/address/tickets are loaded when searching 
caused by defect 0033519 closedranjith_qualiantech_com Masterdata loading fails when pagination is used 
has duplicate defect 0034672RR17Q1 closedRetail Default page size (35000) of initial data load is too high for high volume cases 

-  Notes
(0092496)
hgbot (developer)
2016-12-16 13:41

Repository: erp/pmods/org.openbravo.mobile.core
Changeset: 6151c54f767b65b8c90ea1cdc324a15a40f27055
Author: Miguel de Juana <miguel.dejuana <at> openbravo.com>
Date: Thu Dec 15 13:55:25 2016 +0100
URL: http://code.openbravo.com/erp/pmods/org.openbravo.mobile.core/rev/6151c54f767b65b8c90ea1cdc324a15a40f27055 [^]

Related to issue 0033519 and related to issue 0034669

Backed out changeset c8dfc96d4a92

- This changeset is not needed, offset is not needed to update in non-masterdata queries. In fact it breaks recalculation of limit using totalRows instead of queryRows

---
M src/org/openbravo/mobile/core/process/ProcessHQLQuery.java
---
(0092497)
hgbot (developer)
2016-12-16 13:41

Repository: erp/pmods/org.openbravo.mobile.core
Changeset: b08a151d8926837f4b917e77bad5f1be5c755565
Author: Miguel de Juana <miguel.dejuana <at> openbravo.com>
Date: Fri Dec 16 10:15:37 2016 +0100
URL: http://code.openbravo.com/erp/pmods/org.openbravo.mobile.core/rev/b08a151d8926837f4b917e77bad5f1be5c755565 [^]

Fixed issue 0034669: ProcessHQLQuery returns duplicates causing errors when inserting data and really slow login with many products

- Change masterdata batch size from 35000 to 10000
- For masterdata requests send isMasterdata = true
- Request to backend, Parameters starting with '_' are not query params so we will set them in data object
- Define a reference to be able to change masterdata batch size with a preference
- In models with more than one query, do not recalculate limit for next queries when the request is a masterdata request, just recalculate it for remote requests

---
M src-db/database/sourcedata/AD_REF_LIST.xml
M src/org/openbravo/mobile/core/process/ProcessHQLQuery.java
M web/org.openbravo.mobile.core/source/data/ob-datasource.js
---

- Issue History
Date Modified Username Field Change
2016-12-01 16:37 mtaal New Issue
2016-12-01 16:37 mtaal Assigned To => Retail
2016-12-01 16:37 mtaal File Added: Selection_032.png
2016-12-01 16:37 mtaal Regression level => Production - Confirmed Stable
2016-12-01 16:37 mtaal Regression date => 2015-10-28
2016-12-01 16:37 mtaal Regression introduced in release => RR16Q1
2016-12-01 16:37 mtaal Regression introduced by commit => https://code.openbravo.com/erp/pmods/org.openbravo.mobile.core/rev/7f56ee2e32ec [^]
2016-12-01 16:37 mtaal Triggers an Emergency Pack => No
2016-12-01 16:38 mtaal Relationship added caused by 0031212
2016-12-01 16:38 mtaal Relationship added caused by 0033519
2016-12-01 16:43 mtaal Description Updated View Revisions
2016-12-01 16:43 mtaal Steps to Reproduce Updated View Revisions
2016-12-01 16:43 mtaal Proposed Solution updated
2016-12-08 16:14 ranjith_qualiantech_com Assigned To Retail => ranjith_qualiantech_com
2016-12-09 06:21 ranjith_qualiantech_com Assigned To ranjith_qualiantech_com => Retail
2016-12-16 13:41 hgbot Checkin
2016-12-16 13:41 hgbot Note Added: 0092496
2016-12-16 13:41 hgbot Checkin
2016-12-16 13:41 hgbot Note Added: 0092497
2016-12-16 13:41 hgbot Status new => resolved
2016-12-16 13:41 hgbot Resolution open => fixed
2016-12-16 13:41 hgbot Fixed in SCM revision => http://code.openbravo.com/erp/pmods/org.openbravo.mobile.core/rev/b08a151d8926837f4b917e77bad5f1be5c755565 [^]
2016-12-16 13:42 migueldejuana Review Assigned To => marvintm
2016-12-16 14:05 marvintm Assigned To Retail => migueldejuana
2016-12-22 12:18 marvintm Status resolved => new
2016-12-22 12:18 marvintm Resolution fixed => open
2016-12-22 12:18 marvintm Status new => scheduled
2016-12-22 12:18 marvintm Status scheduled => resolved
2016-12-22 12:18 marvintm Fixed in Version => RR17Q1
2016-12-22 12:18 marvintm Resolution open => fixed
2016-12-22 15:45 migueldejuana File Added: issue34669MobileCore16Q4.diff
2016-12-22 16:38 marvintm Status resolved => closed
2016-12-23 14:26 marvintm Relationship added has duplicate 0034672


Copyright © 2000 - 2009 MantisBT Group
Powered by Mantis Bugtracker