details:   https://code.openbravo.com/erp/devel/pi/rev/804489012532
changeset: 35723:804489012532
user:      Asier Lostalé <asier.lostale <at> openbravo.com>
date:      Tue May 07 12:58:29 2019 +0200
summary:   fixed issue 40754: OOM on export.database in validation part with 
many modules

  Validate model part of export database throws OOM error when there are many
  modules to check.

  This patch:
    - Clears DAL session after validating each module as this process never does
      any modification and there is no reutilization all loaded objects can be
      safely evited from 1st level cache.
    - Removes unused map retainig all AD tables.
    - Filters tables by datatype in query instead of in JVM.

diffstat:

 src/org/openbravo/service/system/DatabaseValidator.java |  21 +++++-----------
 1 files changed, 7 insertions(+), 14 deletions(-)

diffs (47 lines):

diff -r 9d6a4a7aa38c -r 804489012532 
src/org/openbravo/service/system/DatabaseValidator.java
--- a/src/org/openbravo/service/system/DatabaseValidator.java   Tue May 07 
12:29:08 2019 +0200
+++ b/src/org/openbravo/service/system/DatabaseValidator.java   Tue May 07 
12:58:29 2019 +0200
@@ -159,14 +159,6 @@
       }
     }
 
-    final OBCriteria<Table> tcs = 
OBDal.getInstance().createCriteria(Table.class);
-    tcs.add(Restrictions.eq(Table.PROPERTY_VIEW, false));
-    final List<Table> adTables = tcs.list();
-    final Map<String, Table> adTablesByName = new HashMap<String, Table>();
-    for (Table adTable : adTables) {
-      adTablesByName.put(adTable.getDBTableName(), adTable);
-    }
-
     // the following cases are checked:
     // 1) table present in ad, but not in db
     // 2) table present in db, not in ad
@@ -192,14 +184,14 @@
       dbViews.put(view.getName().toUpperCase(), view);
     }
 
+    final List<Table> adTables = OBDal.getInstance()
+        .createCriteria(Table.class)
+        .add(Restrictions.eq(Table.PROPERTY_VIEW, false))
+        .add(Restrictions.eq(Table.PROPERTY_DATAORIGINTYPE, 
ApplicationConstants.TABLEBASEDTABLE))
+        .list();
+
     final String moduleId = (getValidateModule() == null ? null : 
getValidateModule().getId());
     for (Table adTable : adTables) {
-
-      // Do not validate the table if it is based on a datasource
-      if 
(!ApplicationConstants.TABLEBASEDTABLE.equals(adTable.getDataOriginType())) {
-        continue;
-      }
-
       final org.apache.ddlutils.model.Table dbTable = dbTablesByName
           .get(adTable.getDBTableName().toUpperCase());
       final View view = dbViews.get(adTable.getDBTableName().toUpperCase());
@@ -264,6 +256,7 @@
 
     checkKillableImplementation(result);
 
+    OBDal.getInstance().getSession().clear();
     return result;
   }
 


_______________________________________________
Openbravo-commits mailing list
Openbravo-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to