Project:
View Issue Details[ Jump to Notes ] | [ Issue History ] [ Print ] | |||||||
ID | ||||||||
0035754 | ||||||||
Type | Category | Severity | Reproducibility | Date Submitted | Last Update | |||
defect | [Retail Modules] StoreServer | major | have not tried | 2017-04-11 15:18 | 2017-05-01 17:25 | |||
Reporter | alostale | View Status | public | |||||
Assigned To | AugustoMauch | |||||||
Priority | normal | Resolution | fixed | Fixed in Version | RR17Q3 | |||
Status | closed | Fix in branch | Fixed in SCM revision | 743d566c0db4 | ||||
Projection | none | ETA | none | Target Version | ||||
OS | Any | Database | Any | Java version | ||||
OS Version | Database version | Ant version | ||||||
Product Version | SCM revision | |||||||
Review Assigned To | mtaal | |||||||
Regression level | ||||||||
Regression date | ||||||||
Regression introduced in release | ||||||||
Regression introduced by commit | ||||||||
Triggers an Emergency Pack | No | |||||||
Summary | 0035754: MobileServerController.getThisServerDefinition creates contention | |||||||
Description | MobileServerController.getThisServerDefinition method is invoked all the time from many different places. It is synchronized on a singleton class, which in practice, means there is only thread per JVM that can execute it. This method causes some contention at JVM level. The situation can become worse in scenarios with overload, if number of DB connections is limited at pool level. Because in some cases, the connection for the thread is borrowed from pool inside this method, this can cause deadlock situations if: -pool size=1 -thread 1 acquires the connection anywhere -thread 2 inside this method tries to get a new connection, it cannot get it till thread 1 returns the one it previously borrowed -thread 1 invokes MobileServerController.getThisServerDefinition -> DEADLOCK: it won't be able to execute this method till thread 2 completes it, but it is waiting for thread 1 to release its connection | |||||||
Steps To Reproduce | Can be artificially reproduced by 0. Configure pool as follows: db.pool.maxActive=5 db.pool.maxWait=10000 1. clone https://bitbucket.org/gpscode/butmultiservertests [^] 2. execute wordDay.jmx setting 10 concurrent threads 3. check JVM contention (attached a screenshot from Yourkit) | |||||||
Proposed Solution | * Does it make any sense this method to be synchronized? - If it does not: remove syncrhonization - If it does: what for? would it properly work in a clustered environment?, in any case look for an alternative * Additionally, always it's invoked a DB query is triggered, to always return the same record. Could we improve it by some caching? | |||||||
Tags | Performance | |||||||
Attached Files | Selection_166.png [^] (31,040 bytes) 2017-04-11 15:20
| |||||||
Relationships [ Relation Graph ] [ Dependency Graph ] | |||||||||||||||||||||||||||||||||
|
Notes | |
(0095987) AugustoMauch (administrator) 2017-04-11 16:09 |
More than 50% of the methods that invoke MobileServerController.getThisServerDefinition only check if the object itself is null, or check properties that are not going to change (client id, mobile server key, server type, etc). This invokation should not require a query, and could benefit from just getting a cached object. |
(0096022) hgbot (developer) 2017-04-12 12:28 |
Repository: erp/pmods/org.openbravo.mobile.core Changeset: 743d566c0db42fa8378d8d7b63dfee765c62fcce Author: Augusto Mauch <augusto.mauch <at> openbravo.com> Date: Wed Apr 12 11:29:47 2017 +0200 URL: http://code.openbravo.com/erp/pmods/org.openbravo.mobile.core/rev/743d566c0db42fa8378d8d7b63dfee765c62fcce [^] Fixes issue 35754: getThisServerDefinition should not be synchronized This changeset [1] added the synchronized clause to the MobileServerController.getThisServerDefinition method, to prevent a lazy initialization being done more than once with concurrent accesses. This other changeset [2] removed the lazy initialization of the mobile server, so the synchronized clause is no longer needed. Another issue will be created to provide a method that returns a cached version of the mobile server, to prevent the query to the db when the user only needs to check properties of the mobile server that are not modified. [1] https://code.openbravo.com/erp/pmods/org.openbravo.mobile.core/rev/0e660a087cb3#l1.35 [^] [2] https://code.openbravo.com/erp/pmods/org.openbravo.mobile.core/diff/6a6f980e374a/src/org/openbravo/mobile/core/servercontroller/MobileServerController.java#l1.71 [^] --- M src/org/openbravo/mobile/core/servercontroller/MobileServerController.java --- |
(0096284) mtaal (manager) 2017-05-01 17:24 |
re-open to schedule a backport |
(0096285) mtaal (manager) 2017-05-01 17:25 |
resolved |
(0096286) mtaal (manager) 2017-05-01 17:25 |
reviewed |
Issue History | |||
Date Modified | Username | Field | Change |
2017-04-11 15:18 | alostale | New Issue | |
2017-04-11 15:18 | alostale | Assigned To | => StoreServer |
2017-04-11 15:18 | alostale | Triggers an Emergency Pack | => No |
2017-04-11 15:18 | alostale | Tag Attached: Performance | |
2017-04-11 15:20 | alostale | File Added: Selection_166.png | |
2017-04-11 15:23 | alostale | Issue Monitored: alostale | |
2017-04-11 16:09 | AugustoMauch | Note Added: 0095987 | |
2017-04-12 10:57 | AugustoMauch | Assigned To | StoreServer => AugustoMauch |
2017-04-12 12:13 | AugustoMauch | Relationship added | related to 0035767 |
2017-04-12 12:26 | AugustoMauch | Relationship added | related to 0035768 |
2017-04-12 12:28 | hgbot | Checkin | |
2017-04-12 12:28 | hgbot | Note Added: 0096022 | |
2017-04-12 12:28 | hgbot | Status | new => resolved |
2017-04-12 12:28 | hgbot | Resolution | open => fixed |
2017-04-12 12:28 | hgbot | Fixed in SCM revision | => http://code.openbravo.com/erp/pmods/org.openbravo.mobile.core/rev/743d566c0db42fa8378d8d7b63dfee765c62fcce [^] |
2017-04-12 12:30 | AugustoMauch | Review Assigned To | => mtaal |
2017-04-27 10:00 | alostale | Relationship added | related to 0035855 |
2017-05-01 17:24 | mtaal | Note Added: 0096284 | |
2017-05-01 17:24 | mtaal | Status | resolved => new |
2017-05-01 17:24 | mtaal | Resolution | fixed => open |
2017-05-01 17:24 | mtaal | Status | new => scheduled |
2017-05-01 17:25 | mtaal | Note Added: 0096285 | |
2017-05-01 17:25 | mtaal | Status | scheduled => resolved |
2017-05-01 17:25 | mtaal | Fixed in Version | => RR17Q3 |
2017-05-01 17:25 | mtaal | Resolution | open => fixed |
2017-05-01 17:25 | mtaal | Note Added: 0096286 | |
2017-05-01 17:25 | mtaal | Status | resolved => closed |
Copyright © 2000 - 2009 MantisBT Group |