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(a)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;
}
}
Show replies by date