java/code/src/com/redhat/rhn/domain/rhnpackage/PackageFactory.java | 29 +++++++--- search-server/spacewalk-search/src/config/search/rhn_search.conf | 1 search-server/spacewalk-search/src/java/com/redhat/satellite/search/index/IndexManager.java | 4 - 3 files changed, 23 insertions(+), 11 deletions(-)
New commits: commit 8ba08460cebddaf5dfe889e2cbccdf0e5d1e0da7 Author: Milan Zazrivec mzazrivec@redhat.com Date: Wed Dec 11 16:39:46 2013 +0100
1040540 - have package search return all matching results
This fix is to make sure: 1. Search results as we get them from the search server will be split into chunks of 1000, since we need to avoid ORA-01795 errors when we select further info for these packages from the database.
2. 'max_hits_returned' config option is no longer needed, and will be only taken into account when it's specified in rhn.conf. That is, by default, the tomcat application won't be trimming the search results according to 'max_hits_returned', not unless the config option is present in rhn.conf
Both of the above will lead to all search matches being present in Spacewalk webui.
diff --git a/java/code/src/com/redhat/rhn/domain/rhnpackage/PackageFactory.java b/java/code/src/com/redhat/rhn/domain/rhnpackage/PackageFactory.java index 38ae07c..18231cc 100644 --- a/java/code/src/com/redhat/rhn/domain/rhnpackage/PackageFactory.java +++ b/java/code/src/com/redhat/rhn/domain/rhnpackage/PackageFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2009--2012 Red Hat, Inc. + * Copyright (c) 2009--2013 Red Hat, Inc. * * This software is licensed to you under the GNU General Public License, * version 2 (GPLv2). There is NO WARRANTY for this software, express or @@ -298,6 +298,21 @@ public class PackageFactory extends HibernateFactory { return packs.get(packs.size() - 1); }
+ private static List composePackageSearchResults(String queryName, Map params, + List pids) { + List results = new ArrayList(); + int limit = 1000; // ORA-01795 + + for (int n = 0; n < pids.size(); n += limit) { + int chunkSize = (pids.size() > n + limit) ? n + limit : pids.size(); + List chunk = pids.subList(n, chunkSize); + params.put("pids", chunk); + results.addAll(singleton.listObjectsByNamedQuery(queryName, params)); + } + + return results; + } + /** * Returns PackageOverviews from a search. * @param pids List of package ids returned from search server. @@ -318,19 +333,17 @@ public class PackageFactory extends HibernateFactory { boolean relevantFlag) { List results = null; Map params = new HashMap(); - params.put("pids", pids); if (archLabels != null && !archLabels.isEmpty()) { params.put("channel_arch_labels", archLabels); - results = singleton.listObjectsByNamedQuery("Package.searchByIdAndArches", - params); + results = composePackageSearchResults("Package.searchByIdAndArches", + params, pids); } else if (relevantFlag) { - results = - singleton.listObjectsByNamedQuery("Package.relevantSearchById", params); + results = composePackageSearchResults("Package.relevantSearchById", + params, pids); } else { - results = - singleton.listObjectsByNamedQuery("Package.searchById", params); + results = composePackageSearchResults("Package.searchById", params, pids); } List<PackageOverview> realResults = new ArrayList<PackageOverview>(); for (Object result : results) { diff --git a/search-server/spacewalk-search/src/config/search/rhn_search.conf b/search-server/spacewalk-search/src/config/search/rhn_search.conf index 34dd771..0fc306b 100644 --- a/search-server/spacewalk-search/src/config/search/rhn_search.conf +++ b/search-server/spacewalk-search/src/config/search/rhn_search.conf @@ -1,6 +1,5 @@ search.index_work_dir=/var/lib/rhn/search/indexes search.rpc_handlers=index:com.redhat.satellite.search.rpc.handlers.IndexHandler,db:com.redhat.satellite.search.rpc.handlers.DatabaseHandler,admin:com.redhat.satellite.search.rpc.handlers.AdminHandler -search.max_hits_returned=500 search.connection.driver_class=oracle.jdbc.driver.OracleDriver search.score_threshold=.10 search.system_score_threshold=.01 diff --git a/search-server/spacewalk-search/src/java/com/redhat/satellite/search/index/IndexManager.java b/search-server/spacewalk-search/src/java/com/redhat/satellite/search/index/IndexManager.java index ff61b3e..1aaa110 100644 --- a/search-server/spacewalk-search/src/java/com/redhat/satellite/search/index/IndexManager.java +++ b/search-server/spacewalk-search/src/java/com/redhat/satellite/search/index/IndexManager.java @@ -89,7 +89,7 @@ public class IndexManager { * @param config application config */ public IndexManager(Configuration config) { - maxHits = config.getInt("search.max_hits_returned", 50); + maxHits = config.getInt("search.max_hits_returned", 0); indexWorkDir = config.getString("search.index_work_dir", null); if (indexWorkDir == null) { throw new IllegalArgumentException( @@ -533,7 +533,7 @@ public class IndexManager { if (pr != null) { retval.add(pr); } - if (x == maxHits) { + if (maxHits > 0 && x == maxHits) { break; } }
spacewalk-commits@lists.fedorahosted.org