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