java/code/src/com/redhat/rhn/common/db/datasource/WriteMode.java | 2 java/code/src/com/redhat/rhn/common/db/datasource/xml/Action_queries.xml | 11 java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml | 48 ++-- java/code/src/com/redhat/rhn/domain/action/Action.java | 34 +- java/code/src/com/redhat/rhn/domain/action/ActionFactory.java | 2 java/code/src/com/redhat/rhn/domain/action/ActionType.java | 2 java/code/src/com/redhat/rhn/domain/server/ServerFactory.java | 46 +++ java/code/src/com/redhat/rhn/domain/server/Server_legacyUser.hbm.xml | 41 ++- java/code/src/com/redhat/rhn/domain/server/test/ServerFactoryTest.java | 30 ++ java/code/src/com/redhat/rhn/frontend/action/rhnpackage/ssm/SchedulePackageRemoveAction.java | 25 +- java/code/src/com/redhat/rhn/frontend/action/rhnpackage/ssm/SchedulePackageVerifyAction.java | 2 java/code/src/com/redhat/rhn/frontend/events/SsmInstallPackagesAction.java | 41 +-- java/code/src/com/redhat/rhn/frontend/events/SsmRemovePackagesAction.java | 36 +-- java/code/src/com/redhat/rhn/frontend/events/SsmUpgradePackagesAction.java | 21 - java/code/src/com/redhat/rhn/manager/action/ActionManager.java | 119 +++++----- java/code/src/com/redhat/rhn/manager/system/SystemManager.java | 20 + java/code/src/com/redhat/rhn/manager/system/test/SystemManagerTest.java | 2 17 files changed, 318 insertions(+), 164 deletions(-)
New commits: commit 087f2b34edfc7b6e526281cf5adea6672e1a1706 Author: Justin Sherrill jsherril@redhat.com Date: Mon Oct 5 18:37:53 2009 -0400
bug fix test
diff --git a/java/code/src/com/redhat/rhn/manager/action/ActionManager.java b/java/code/src/com/redhat/rhn/manager/action/ActionManager.java index 4969ac3..2fcbdd3 100644 --- a/java/code/src/com/redhat/rhn/manager/action/ActionManager.java +++ b/java/code/src/com/redhat/rhn/manager/action/ActionManager.java @@ -1318,7 +1318,7 @@ public class ActionManager extends BaseManager {
private static Action scheduleAction(User scheduler, ActionType type, String name, Date earliestAction, Set<Long> serverIds) { - type = (ActionType) ActionFactory.reload(type); + type = ActionFactory.lookupActionTypeByLabel(type.getLabel()); Action action = createScheduledAction(scheduler, type, name, earliestAction); ActionFactory.save(action); action = (Action) ActionFactory.reload(action);
commit a8db51009e8cf2ceea586b3f8bc79934a23917eb Author: Justin Sherrill jsherril@redhat.com Date: Mon Oct 5 18:27:57 2009 -0400
bug fix test
diff --git a/java/code/src/com/redhat/rhn/domain/action/ActionFactory.java b/java/code/src/com/redhat/rhn/domain/action/ActionFactory.java index 2a0b728..26876cf 100644 --- a/java/code/src/com/redhat/rhn/domain/action/ActionFactory.java +++ b/java/code/src/com/redhat/rhn/domain/action/ActionFactory.java @@ -484,7 +484,7 @@ public class ActionFactory extends HibernateFactory { Map params = new HashMap(); params.put("label", label); return (ActionType) - singleton.lookupObjectByNamedQuery("ActionType.findByLabel", params, false); + singleton.lookupObjectByNamedQuery("ActionType.findByLabel", params, true); }
/** diff --git a/java/code/src/com/redhat/rhn/manager/action/ActionManager.java b/java/code/src/com/redhat/rhn/manager/action/ActionManager.java index ec15a66..4969ac3 100644 --- a/java/code/src/com/redhat/rhn/manager/action/ActionManager.java +++ b/java/code/src/com/redhat/rhn/manager/action/ActionManager.java @@ -1318,7 +1318,7 @@ public class ActionManager extends BaseManager {
private static Action scheduleAction(User scheduler, ActionType type, String name, Date earliestAction, Set<Long> serverIds) { - + type = (ActionType) ActionFactory.reload(type); Action action = createScheduledAction(scheduler, type, name, earliestAction); ActionFactory.save(action); action = (Action) ActionFactory.reload(action);
commit 8dac1b59be6e4059155763c7a8a918f71135524a Author: Justin Sherrill jsherril@redhat.com Date: Mon Oct 5 18:16:26 2009 -0400
bug fix test
diff --git a/java/code/src/com/redhat/rhn/domain/action/ActionFactory.java b/java/code/src/com/redhat/rhn/domain/action/ActionFactory.java index 26876cf..2a0b728 100644 --- a/java/code/src/com/redhat/rhn/domain/action/ActionFactory.java +++ b/java/code/src/com/redhat/rhn/domain/action/ActionFactory.java @@ -484,7 +484,7 @@ public class ActionFactory extends HibernateFactory { Map params = new HashMap(); params.put("label", label); return (ActionType) - singleton.lookupObjectByNamedQuery("ActionType.findByLabel", params, true); + singleton.lookupObjectByNamedQuery("ActionType.findByLabel", params, false); }
/** diff --git a/java/code/src/com/redhat/rhn/domain/server/test/ServerFactoryTest.java b/java/code/src/com/redhat/rhn/domain/server/test/ServerFactoryTest.java index c3c89ae..edbb939 100644 --- a/java/code/src/com/redhat/rhn/domain/server/test/ServerFactoryTest.java +++ b/java/code/src/com/redhat/rhn/domain/server/test/ServerFactoryTest.java @@ -68,7 +68,9 @@ import com.redhat.rhn.testing.UserTestUtils; import org.apache.commons.collections.CollectionUtils;
import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -963,5 +965,33 @@ public class ServerFactoryTest extends RhnBaseTestCase {
}
+ public void testListLinuxSystems() throws Exception { + + Long[] longs = new Long[11818]; + List<Long> systemIds = Arrays.asList(longs); + + + ArrayList<Long> tmpList = new ArrayList<Long>(); + List<Long> toRet = new ArrayList<Long>(); + tmpList.addAll(systemIds); + + + int total = 0; + + for (int i = 0; i < systemIds.size();) { + int initial = i; + int fin = i + 500 < systemIds.size() ? i + 500 : systemIds.size(); + List<Long> sublist = tmpList.subList(i, fin); + + + total += fin-initial; + i = fin; + } + System.out.println(total); + + } + + + }
diff --git a/java/code/src/com/redhat/rhn/manager/action/ActionManager.java b/java/code/src/com/redhat/rhn/manager/action/ActionManager.java index 5c23650..ec15a66 100644 --- a/java/code/src/com/redhat/rhn/manager/action/ActionManager.java +++ b/java/code/src/com/redhat/rhn/manager/action/ActionManager.java @@ -1268,8 +1268,8 @@ public class ActionManager extends BaseManager { public static PackageAction schedulePackageVerify(User scheduler, Server srvr, List<Map<String, Long>> pkgs, Date earliest) { return (PackageAction) schedulePackageAction(scheduler, pkgs, - //ActionFactory.TYPE_PACKAGES_VERIFY, earliest, srvr); - ActionFactory.lookupActionTypeByLabel("packages.verify"), earliest, srvr); + ActionFactory.TYPE_PACKAGES_VERIFY, earliest, srvr); + // ActionFactory.lookupActionTypeByLabel("packages.verify"), earliest, srvr); } /** * Schedules one or more package installation actions for the given server.
commit 41b8b8132d3011b3348ece9aec983b48d037b650 Author: Justin Sherrill jsherril@redhat.com Date: Mon Oct 5 17:39:02 2009 -0400
bug fix test
diff --git a/java/code/src/com/redhat/rhn/domain/action/ActionFactory.java b/java/code/src/com/redhat/rhn/domain/action/ActionFactory.java index 1cda1ae..26876cf 100644 --- a/java/code/src/com/redhat/rhn/domain/action/ActionFactory.java +++ b/java/code/src/com/redhat/rhn/domain/action/ActionFactory.java @@ -480,7 +480,7 @@ public class ActionFactory extends HibernateFactory { * @return Returns the ActionType corresponding to label * @throws Exception */ - private static ActionType lookupActionTypeByLabel(String label) { + public static ActionType lookupActionTypeByLabel(String label) { Map params = new HashMap(); params.put("label", label); return (ActionType) diff --git a/java/code/src/com/redhat/rhn/manager/action/ActionManager.java b/java/code/src/com/redhat/rhn/manager/action/ActionManager.java index ee8268f..5c23650 100644 --- a/java/code/src/com/redhat/rhn/manager/action/ActionManager.java +++ b/java/code/src/com/redhat/rhn/manager/action/ActionManager.java @@ -1268,7 +1268,8 @@ public class ActionManager extends BaseManager { public static PackageAction schedulePackageVerify(User scheduler, Server srvr, List<Map<String, Long>> pkgs, Date earliest) { return (PackageAction) schedulePackageAction(scheduler, pkgs, - ActionFactory.TYPE_PACKAGES_VERIFY, earliest, srvr); + //ActionFactory.TYPE_PACKAGES_VERIFY, earliest, srvr); + ActionFactory.lookupActionTypeByLabel("packages.verify"), earliest, srvr); } /** * Schedules one or more package installation actions for the given server. @@ -1320,7 +1321,6 @@ public class ActionManager extends BaseManager {
Action action = createScheduledAction(scheduler, type, name, earliestAction); ActionFactory.save(action); - action = (Action) ActionFactory.reload(action);
commit a0cc7f2be5a3b42d2544398328e3c1375e94f0d5 Author: Justin Sherrill jsherril@redhat.com Date: Mon Oct 5 17:23:27 2009 -0400
fixing some broken hibernate objects
diff --git a/java/code/src/com/redhat/rhn/domain/action/Action.java b/java/code/src/com/redhat/rhn/domain/action/Action.java index 38db34e..9afcf98 100644 --- a/java/code/src/com/redhat/rhn/domain/action/Action.java +++ b/java/code/src/com/redhat/rhn/domain/action/Action.java @@ -331,16 +331,16 @@ public class Action extends BaseDomainHelper implements Serializable { return false; } Action castOther = (Action) other; - return new EqualsBuilder().append(id, castOther.getId()) - .append(org, castOther.getOrg()) - .append(name, castOther.getName()) - .append(earliestAction, castOther.getEarliestAction()) - .append(version, castOther.getVersion()) - .append(archived, castOther.getArchived()) - .append(created, castOther.getCreated()) - .append(modified, castOther.getModified()) - .append(prerequisite, castOther.getPrerequisite()) - .append(actionType, castOther.getActionType()) + return new EqualsBuilder().append(this.getId(), castOther.getId()) + .append(this.getOrg(), castOther.getOrg()) + .append(this.getName(), castOther.getName()) + .append(this.getEarliestAction(), castOther.getEarliestAction()) + .append(this.getVersion(), castOther.getVersion()) + .append(this.getArchived(), castOther.getArchived()) + .append(this.getCreated(), castOther.getCreated()) + .append(this.getModified(), castOther.getModified()) + .append(this.getPrerequisite(), castOther.getPrerequisite()) + .append(this.getActionType(), castOther.getActionType()) .isEquals(); }
@@ -348,11 +348,15 @@ public class Action extends BaseDomainHelper implements Serializable { * {@inheritDoc} */ public int hashCode() { - return new HashCodeBuilder().append(id).append(org).append(name) - .append(earliestAction).append(version) - .append(archived).append(created) - .append(modified).append(prerequisite) - .append(actionType).toHashCode(); + return new HashCodeBuilder().append(this.getId()).append(this.getOrg()) + .append(this.getName()) + .append(this.getEarliestAction()) + .append(this.getVersion()) + .append(this.getArchived()) + .append(this.getCreated()) + .append(this.getModified()) + .append(this.getPrerequisite()) + .append(this.getActionType()).toHashCode(); }
/**
commit 74c4adf65eb84c65ab3a695fefb0b9ffefe90a6d Author: Justin Sherrill jsherril@redhat.com Date: Mon Oct 5 17:22:31 2009 -0400
revert of change
diff --git a/java/code/src/com/redhat/rhn/domain/action/ActionType.java b/java/code/src/com/redhat/rhn/domain/action/ActionType.java index 6d8b404..527686c 100644 --- a/java/code/src/com/redhat/rhn/domain/action/ActionType.java +++ b/java/code/src/com/redhat/rhn/domain/action/ActionType.java @@ -102,11 +102,7 @@ public class ActionType { /** * {@inheritDoc} */ - public boolean equals(Object o) { - if (o == this) { - return true; - } - + public boolean equals(Object o) { if (o == null || !(o instanceof ActionType)) { return false; }
commit 4240dd4b6395ab2f8d53e1733e24e93e3badad10 Author: Justin Sherrill jsherril@redhat.com Date: Mon Oct 5 17:04:16 2009 -0400
test fix
diff --git a/java/code/src/com/redhat/rhn/domain/action/ActionType.java b/java/code/src/com/redhat/rhn/domain/action/ActionType.java index 162d89f..6d8b404 100644 --- a/java/code/src/com/redhat/rhn/domain/action/ActionType.java +++ b/java/code/src/com/redhat/rhn/domain/action/ActionType.java @@ -103,6 +103,10 @@ public class ActionType { * {@inheritDoc} */ public boolean equals(Object o) { + if (o == this) { + return true; + } + if (o == null || !(o instanceof ActionType)) { return false; }
commit b18cb1986829f686047de7e10fb007a8efe5ae5d Author: Justin Sherrill jsherril@redhat.com Date: Mon Oct 5 15:43:11 2009 -0400
fixing an off by one error in writeMode
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/WriteMode.java b/java/code/src/com/redhat/rhn/common/db/datasource/WriteMode.java index 4858144..dcfa291 100644 --- a/java/code/src/com/redhat/rhn/common/db/datasource/WriteMode.java +++ b/java/code/src/com/redhat/rhn/common/db/datasource/WriteMode.java @@ -49,7 +49,7 @@ public class WriteMode extends BaseMode { inClause.size() - subStart : CachedStatement.BATCH_SIZE; List subClause = inClause.subList(subStart, subStart + subLength); toReturn += getQuery().executeUpdate(parameters, subClause); - subStart += subLength + 1; + subStart += subLength; } return toReturn; }
commit b1660bf8c4a528369772e1054b936deec9026129 Author: Justin Sherrill jsherril@redhat.com Date: Mon Oct 5 15:14:44 2009 -0400
fixing a small off by one error in loop calulcation
diff --git a/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java b/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java index fbacee5..3a01bcc 100644 --- a/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java +++ b/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java @@ -791,7 +791,7 @@ public class ServerFactory extends HibernateFactory { List<Long> sublist = tmpList.subList(i, fin); toRet.addAll(ServerFactory.getSession().getNamedQuery(query). setParameterList("sids", sublist).list()); - i = fin+1; + i = fin; }
return toRet;
commit 439f6678c6f9c4187e7ec2009faf464c503f35a6 Author: Justin Sherrill jsherril@redhat.com Date: Tue Sep 29 17:14:53 2009 -0400
workaround for hibernate not handling in caluses of more than 1000
diff --git a/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java b/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java index 06787c9..fbacee5 100644 --- a/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java +++ b/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java @@ -771,12 +771,31 @@ public class ServerFactory extends HibernateFactory { * @return list of system ids that are solaris systems */ public static List<Long> listSolarisSystems(Collection<Long> systemIds) { + return listGenericSystems(systemIds, "Server.listSolarisSystems"); + } + + + + private static List<Long> listGenericSystems(Collection<Long> systemIds, String query) { //Hibernate can't handle empty lists for in clauses, silly hibernate if (systemIds.isEmpty()) { return Collections.EMPTY_LIST; } - return ServerFactory.getSession().getNamedQuery("Server.listSolarisSystems"). - setParameterList("sids", systemIds).list(); + ArrayList<Long> tmpList = new ArrayList<Long>(); + List<Long> toRet = new ArrayList<Long>(); + tmpList.addAll(systemIds); + + for (int i = 0; i < systemIds.size();) { + int initial = i; + int fin = i + 500 < systemIds.size() ? i + 500 : systemIds.size(); + List<Long> sublist = tmpList.subList(i, fin); + toRet.addAll(ServerFactory.getSession().getNamedQuery(query). + setParameterList("sids", sublist).list()); + i = fin+1; + } + + return toRet; + }
/** @@ -786,13 +805,7 @@ public class ServerFactory extends HibernateFactory { * @return list of system ids that are linux systems */ public static List<Long> listLinuxSystems(Collection<Long> systemIds) { - //Hibernate can't handle empty lists for in clauses, silly hibernate - if (systemIds.isEmpty()) { - return Collections.EMPTY_LIST; - } - return ServerFactory.getSession().getNamedQuery("Server.listRedHatSystems"). - setParameterList("sids", systemIds).list(); - + return listGenericSystems(systemIds, "Server.listRedHatSystems"); }
}
commit 124fc7cfada4b29b636f157d83e0687f2bc4f554 Author: Justin Sherrill jsherril@redhat.com Date: Tue Sep 29 11:53:47 2009 -0400
adding workaround for hibernate oddity/bug
diff --git a/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java b/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java index 7ce8f0b..06787c9 100644 --- a/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java +++ b/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java @@ -40,6 +40,7 @@ import org.hibernate.Session; import java.sql.Types; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.Iterator; @@ -770,6 +771,10 @@ public class ServerFactory extends HibernateFactory { * @return list of system ids that are solaris systems */ public static List<Long> listSolarisSystems(Collection<Long> systemIds) { + //Hibernate can't handle empty lists for in clauses, silly hibernate + if (systemIds.isEmpty()) { + return Collections.EMPTY_LIST; + } return ServerFactory.getSession().getNamedQuery("Server.listSolarisSystems"). setParameterList("sids", systemIds).list(); } @@ -781,6 +786,10 @@ public class ServerFactory extends HibernateFactory { * @return list of system ids that are linux systems */ public static List<Long> listLinuxSystems(Collection<Long> systemIds) { + //Hibernate can't handle empty lists for in clauses, silly hibernate + if (systemIds.isEmpty()) { + return Collections.EMPTY_LIST; + } return ServerFactory.getSession().getNamedQuery("Server.listRedHatSystems"). setParameterList("sids", systemIds).list();
commit 68a978e87adb6b06b45c9dbc6f782e56728fb02e Author: Justin Sherrill jsherril@redhat.com Date: Mon Oct 5 13:34:05 2009 -0400
adjusting query to be a bit faster
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml b/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml index 6f5d4e8..3c59835 100644 --- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml +++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml @@ -586,16 +586,10 @@ ORDER BY UPPER(NVL(S.NAME, '(none)')), S.ID <query name="system_set_remove_package_query" /> <elaborator params="user_id, package_set_label" multiple="t"> SELECT DISTINCT SP.server_id id, - PN.id || '|' || PE.id || '|' || PA.id AS ID_COMBO - FROM rhnPackageEVR PE, - rhnPackageName PN, - rhnServerPackage SP, - rhnPackageArch PA + SP.name_id || '|' || SP.evr_id || '|' || SP.package_arch_id AS ID_COMBO + FROM rhnServerPackage SP WHERE SP.server_id IN (%s) - AND SP.name_id = PN.id - AND PN.id || '|' || PE.id || '|' || PA.id IN (SELECT element || '|' || element_two || '|' || element_three FROM rhnSet WHERE user_id = :user_id AND label = :package_set_label) - AND SP.evr_id = PE.id - AND SP.package_arch_id = PA.id + AND SP.name_id || '|' || SP.evr_id || '|' || SP.package_arch_id IN (SELECT element || '|' || element_two || '|' || element_three FROM rhnSet WHERE user_id = :user_id AND label = :package_set_label) </elaborator> </mode>
commit ec6f716d8a2cff17fa1e6f758bb0d9159a59f639 Author: Justin Sherrill jsherril@redhat.com Date: Mon Oct 5 13:00:50 2009 -0400
REVERT -- adding debugging
diff --git a/java/code/src/com/redhat/rhn/frontend/action/rhnpackage/ssm/SchedulePackageRemoveAction.java b/java/code/src/com/redhat/rhn/frontend/action/rhnpackage/ssm/SchedulePackageRemoveAction.java index 0b241f9..f4b6b61 100644 --- a/java/code/src/com/redhat/rhn/frontend/action/rhnpackage/ssm/SchedulePackageRemoveAction.java +++ b/java/code/src/com/redhat/rhn/frontend/action/rhnpackage/ssm/SchedulePackageRemoveAction.java @@ -145,18 +145,26 @@ public class SchedulePackageRemoveAction extends RhnListAction implements Listab HttpServletRequest request, HttpServletResponse response) {
+ Logger log = Logger.getLogger(this.getClass()); + RequestContext context = new RequestContext(request); StrutsDelegate strutsDelegate = getStrutsDelegate(); User user = context.getLoggedInUser(); - + log.fatal("A"); // Load the date selected by the user Date earliest = getStrutsDelegate().readDatePicker((DynaActionForm) formIn, "date", DatePicker.YEAR_RANGE_POSITIVE);
log.debug("Getting package removal data."); + + + // Parse through all of the results - DataResult result = (DataResult) getResult(context, true); + log.fatal("B"); + DataResult result = (DataResult) getResult(context, true); + log.fatal("C"); result.elaborate(); + log.fatal("D");
log.debug("Publishing schedule package remove event to message queue."); SsmRemovePackagesEvent event = new SsmRemovePackagesEvent(user.getId(), earliest,
commit 95596ce0a9de626a25f99a4556e017abd7af68ac Author: Justin Sherrill jsherril@redhat.com Date: Mon Sep 28 20:23:18 2009 -0400
525549 - fixing issue where SSM package operations would run out of memory
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Action_queries.xml b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Action_queries.xml index 32e63d1..1fbb305 100644 --- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Action_queries.xml +++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Action_queries.xml @@ -294,4 +294,15 @@ SELECT 1 </query> </mode>
+<write-mode name="insert_server_actions"> + <query params="parent_id, status_id, tries"> +INSERT INTO rhnServerAction (server_id, action_id, status, REMAINING_TRIES) + select s.id as server_id, :parent_id as action_id, + :status_id as status, :tries as REMAINING_TRIES + from rhnServer s + where s.id in (%s) + </query> +</write-mode> + + </datasource_modes> diff --git a/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java b/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java index 9f691e1..7ce8f0b 100644 --- a/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java +++ b/java/code/src/com/redhat/rhn/domain/server/ServerFactory.java @@ -39,6 +39,7 @@ import org.hibernate.Session;
import java.sql.Types; import java.util.ArrayList; +import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.Iterator; @@ -762,4 +763,27 @@ public class ServerFactory extends HibernateFactory { "ServerSnapshot.findTags", params); return snaps; } + + /** + * Filter out a list of systemIds with ones that are solaris systems + * @param systemIds list of system ids + * @return list of system ids that are solaris systems + */ + public static List<Long> listSolarisSystems(Collection<Long> systemIds) { + return ServerFactory.getSession().getNamedQuery("Server.listSolarisSystems"). + setParameterList("sids", systemIds).list(); + } + + /** + * Filter out a list of systemIds with ones that are linux systems + * (i.e. not solaris systems) + * @param systemIds list of system ids + * @return list of system ids that are linux systems + */ + public static List<Long> listLinuxSystems(Collection<Long> systemIds) { + return ServerFactory.getSession().getNamedQuery("Server.listRedHatSystems"). + setParameterList("sids", systemIds).list(); + + } + } diff --git a/java/code/src/com/redhat/rhn/domain/server/Server_legacyUser.hbm.xml b/java/code/src/com/redhat/rhn/domain/server/Server_legacyUser.hbm.xml index 0dbadcd..d1ea620 100644 --- a/java/code/src/com/redhat/rhn/domain/server/Server_legacyUser.hbm.xml +++ b/java/code/src/com/redhat/rhn/domain/server/Server_legacyUser.hbm.xml @@ -89,36 +89,36 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" </set>
<many-to-one name="org" class="com.redhat.rhn.domain.org.OrgImpl" - column="org_id"/> + column="org_id" lazy="proxy"/>
<many-to-one name="creator" class="com.redhat.rhn.domain.user.legacy.LegacyRhnUserImpl" - column="creator_id"/> + column="creator_id" lazy="proxy"/>
<many-to-one name="serverArch" class="com.redhat.rhn.domain.server.ServerArch" - column="server_arch_id"/> + column="server_arch_id" lazy="proxy"/>
<many-to-one name="provisionState" class="com.redhat.rhn.domain.common.ProvisionState" - column="provision_state_id" cascade="save-update"/> + column="provision_state_id" cascade="save-update" lazy="proxy"/>
<one-to-one name="serverInfo" - class="com.redhat.rhn.domain.server.ServerInfo" cascade="all"/> + class="com.redhat.rhn.domain.server.ServerInfo" cascade="all" lazy="proxy"/>
<one-to-one name="cpu" class="com.redhat.rhn.domain.server.CPU" - property-ref="server" cascade="all"/> + property-ref="server" cascade="all" lazy="proxy"/>
<one-to-one name="lock" class="com.redhat.rhn.domain.server.ServerLock" - cascade="all"/> + cascade="all" lazy="proxy"/>
<one-to-one name="serverUuid" class="com.redhat.rhn.domain.server.ServerUuid" - cascade="all"/> + cascade="all" lazy="proxy"/>
<one-to-one name="proxyInfo" class="com.redhat.rhn.domain.server.ProxyInfo" - cascade="all"/> + cascade="all" lazy="proxy"/>
<one-to-one name="pushClient" class="com.redhat.rhn.domain.server.PushClient" - property-ref="server" /> + property-ref="server" lazy="proxy" />
<!-- we want to access the ram object via the field directly. @@ -127,16 +127,16 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" create a RAM object on a server. --> <one-to-one name="ram" class="com.redhat.rhn.domain.server.Ram" - property-ref="server" cascade="all" access="field"/> + property-ref="server" cascade="all" access="field" lazy="proxy"/> <one-to-one name="dmi" class="com.redhat.rhn.domain.server.Dmi" - property-ref="server" cascade="all"/> + property-ref="server" cascade="all" lazy="proxy"/> <one-to-one name="location" class="com.redhat.rhn.domain.server.Location" - property-ref="server" cascade="all"/> + property-ref="server" cascade="all" lazy="proxy" />
<one-to-one name="virtualInstance" class="com.redhat.rhn.domain.server.VirtualInstance" property-ref="guestSystem" - cascade="save-update"/> + cascade="save-update" lazy="proxy"/>
<set name="history" cascade="all" lazy="true" inverse="true"> <key column="server_id"/> @@ -179,6 +179,19 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" <query name="Server.findByIdsAndOrgId"> <![CDATA[from com.redhat.rhn.domain.server.Server as s where ORG_ID = :orgId and s.id in (:serverIds)]]> </query> + + <query name="Server.listRedHatSystems"> + <![CDATA[ select s.id + from com.redhat.rhn.domain.server.Server as s + where s.id in (:sids) and s.serverArch.archType.label != 'sysv-solaris']]> + </query> + + <query name="Server.listSolarisSystems"> + <![CDATA[ select s.id + from com.redhat.rhn.domain.server.Server as s + where s.id in (:sids) and s.serverArch.archType.label = 'sysv-solaris']]> + </query> +
<sql-query name="Server.findVirtPlatformHostsByOrg"> <![CDATA[select s.id as id, s.name as name, count(vi.id) as count diff --git a/java/code/src/com/redhat/rhn/frontend/events/SsmInstallPackagesAction.java b/java/code/src/com/redhat/rhn/frontend/events/SsmInstallPackagesAction.java index 77c4024..09441fc 100644 --- a/java/code/src/com/redhat/rhn/frontend/events/SsmInstallPackagesAction.java +++ b/java/code/src/com/redhat/rhn/frontend/events/SsmInstallPackagesAction.java @@ -14,28 +14,27 @@ */ package com.redhat.rhn.frontend.events;
+import com.redhat.rhn.common.localization.LocalizationService; +import com.redhat.rhn.common.messaging.EventMessage; +import com.redhat.rhn.domain.user.User; import com.redhat.rhn.domain.user.UserFactory; +import com.redhat.rhn.frontend.action.SetLabels; +import com.redhat.rhn.frontend.dto.EssentialServerDto; +import com.redhat.rhn.frontend.dto.PackageListItem; +import com.redhat.rhn.manager.action.ActionManager; +import com.redhat.rhn.manager.rhnset.RhnSetDecl; +import com.redhat.rhn.manager.ssm.SsmOperationManager; +import com.redhat.rhn.manager.system.SystemManager; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory;
-import java.util.Set; -import java.util.List; import java.util.ArrayList; -import java.util.Map; import java.util.Date; import java.util.LinkedList; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import com.redhat.rhn.common.messaging.EventMessage; -import com.redhat.rhn.common.localization.LocalizationService; -import com.redhat.rhn.manager.ssm.SsmOperationManager; -import com.redhat.rhn.manager.action.ActionManager; -import com.redhat.rhn.manager.rhnset.RhnSetDecl; -import com.redhat.rhn.manager.system.SystemManager; -import com.redhat.rhn.domain.user.User; -import com.redhat.rhn.domain.server.Server; -import com.redhat.rhn.domain.server.ServerFactory; -import com.redhat.rhn.frontend.dto.PackageListItem; -import com.redhat.rhn.frontend.dto.EssentialServerDto; -import com.redhat.rhn.frontend.action.SetLabels; +import java.util.List; +import java.util.Map; +import java.util.Set;
/** * Schedules package installations on systems in the SSM. @@ -92,17 +91,13 @@ public class SsmInstallPackagesAction extends AbstractDatabaseAction { PackageListItem.toKeyMaps(packageListItems);
// Create one action for all servers to which the packages are installed - List<Server> actionServers = new ArrayList<Server>(servers.size()); List<Long> serverIds = new LinkedList<Long>(); for (EssentialServerDto dto : servers) { serverIds.add(dto.getId()); } - log.debug("Looking up server objects."); - actionServers.addAll(ServerFactory.lookupByIdsAndUser(serverIds, user)); - log.debug("Scheduling actions.");
- - ActionManager.schedulePackageInstall(user, actionServers, + log.debug("Scheduling actions."); + ActionManager.schedulePackageInstall(user, serverIds, packageListData, earliest); log.debug("Done scheduling package installations.");
diff --git a/java/code/src/com/redhat/rhn/frontend/events/SsmRemovePackagesAction.java b/java/code/src/com/redhat/rhn/frontend/events/SsmRemovePackagesAction.java index 55ee1dc..ee3fafa 100644 --- a/java/code/src/com/redhat/rhn/frontend/events/SsmRemovePackagesAction.java +++ b/java/code/src/com/redhat/rhn/frontend/events/SsmRemovePackagesAction.java @@ -14,26 +14,25 @@ */ package com.redhat.rhn.frontend.events;
-import java.util.ArrayList; -import java.util.Date; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import org.apache.log4j.Logger; import com.redhat.rhn.common.db.datasource.DataResult; import com.redhat.rhn.common.localization.LocalizationService; import com.redhat.rhn.common.messaging.EventMessage; -import com.redhat.rhn.domain.server.Server; -import com.redhat.rhn.domain.server.ServerFactory; import com.redhat.rhn.domain.user.User; import com.redhat.rhn.domain.user.UserFactory; import com.redhat.rhn.frontend.dto.PackageListItem; import com.redhat.rhn.manager.action.ActionManager; -import com.redhat.rhn.manager.ssm.SsmOperationManager; import com.redhat.rhn.manager.rhnset.RhnSetDecl; +import com.redhat.rhn.manager.ssm.SsmOperationManager; + +import org.apache.log4j.Logger; + +import java.util.ArrayList; +import java.util.Date; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set;
/** * Handles removing packages from servers in the SSM. @@ -91,8 +90,8 @@ public class SsmRemovePackagesAction extends AbstractDatabaseAction { // total of all packages selected Set<PackageListItem> allPackages = new HashSet<PackageListItem>();
- // Looking up all the server objects in Hibernate was *brutally* slow here: - List<Long> allServerIds = new LinkedList<Long>(); + + Set<Long> allServerIds = new HashSet<Long>();
// Iterate the data, which is essentially each unique package/server combination // to remove. Note that this is only for servers that we have marked as having the @@ -118,16 +117,17 @@ public class SsmRemovePackagesAction extends AbstractDatabaseAction { } }
- List<Server> allServers = new ArrayList<Server>(result.size()); - allServers.addAll(ServerFactory.lookupByIdsAndUser(allServerIds, user));
log.debug("Converting data to maps."); - List<PackageListItem> allPackagesList = new ArrayList<PackageListItem>(allPackages); + List<PackageListItem> allPackagesList = + new ArrayList<PackageListItem>(allPackages); List<Map<String, Long>> packageListData = PackageListItem.toKeyMaps(allPackagesList);
log.debug("Scheduling package removals."); - ActionManager.schedulePackageRemoval(user, allServers, packageListData, earliest); + ActionManager.schedulePackageRemoval(user, allServerIds, + packageListData, earliest); + log.debug("Done."); }
diff --git a/java/code/src/com/redhat/rhn/frontend/events/SsmUpgradePackagesAction.java b/java/code/src/com/redhat/rhn/frontend/events/SsmUpgradePackagesAction.java index 5647b81..af22b5b 100644 --- a/java/code/src/com/redhat/rhn/frontend/events/SsmUpgradePackagesAction.java +++ b/java/code/src/com/redhat/rhn/frontend/events/SsmUpgradePackagesAction.java @@ -14,22 +14,22 @@ */ package com.redhat.rhn.frontend.events;
-import java.util.ArrayList; -import java.util.Date; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import org.apache.log4j.Logger; import com.redhat.rhn.common.db.datasource.DataResult; import com.redhat.rhn.common.localization.LocalizationService; import com.redhat.rhn.common.messaging.EventMessage; -import com.redhat.rhn.domain.server.Server; -import com.redhat.rhn.domain.server.ServerFactory; import com.redhat.rhn.domain.user.User; import com.redhat.rhn.domain.user.UserFactory; import com.redhat.rhn.manager.action.ActionManager; -import com.redhat.rhn.manager.ssm.SsmOperationManager; import com.redhat.rhn.manager.rhnset.RhnSetDecl; +import com.redhat.rhn.manager.ssm.SsmOperationManager; + +import org.apache.log4j.Logger; + +import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import java.util.Map;
/** * Handles removing packages from servers in the SSM. @@ -103,8 +103,7 @@ public class SsmUpgradePackagesAction extends AbstractDatabaseAction { serverIds.add(serverId); }
- List<Server> serverList = ServerFactory.lookupByIdsAndUser(serverIds, user); - ActionManager.schedulePackageUpgrades(user, serverList, packageListItems, earliest); + ActionManager.schedulePackageUpgrades(user, serverIds, packageListItems, earliest);
if (log.isDebugEnabled()) { log.debug("Time to schedule all actions: " + diff --git a/java/code/src/com/redhat/rhn/manager/action/ActionManager.java b/java/code/src/com/redhat/rhn/manager/action/ActionManager.java index b98c1a2..ee8268f 100644 --- a/java/code/src/com/redhat/rhn/manager/action/ActionManager.java +++ b/java/code/src/com/redhat/rhn/manager/action/ActionManager.java @@ -54,6 +54,7 @@ import com.redhat.rhn.domain.rhnpackage.PatchSet; import com.redhat.rhn.domain.rhnset.RhnSet; import com.redhat.rhn.domain.rhnset.RhnSetElement; import com.redhat.rhn.domain.server.Server; +import com.redhat.rhn.domain.server.ServerFactory; import com.redhat.rhn.domain.user.User; import com.redhat.rhn.frontend.dto.PackageMetadata; import com.redhat.rhn.frontend.listview.PageControl; @@ -1103,41 +1104,32 @@ public class ActionManager extends BaseManager { * Schedules one or more package removal actions on one or more servers. * * @param scheduler user scheduling the action. - * @param servers servers from which to remove the packages + * @param serverIds servers from which to remove the packages * @param pkgs list of packages to be removed. * @param earliestAction date of earliest action to be executed */ public static void schedulePackageRemoval(User scheduler, - List<Server> servers, List<Map<String, Long>> pkgs, Date earliestAction) { + Collection<Long> serverIds, List<Map<String, Long>> pkgs, Date earliestAction) {
// Different handling for package removal on solaris v. rhel, so split out // the servers first in case the list is mixed. - List<Server> rhelServers = new ArrayList<Server>(); - List<Server> solarisServers = new ArrayList<Server>(); - - for (Server server : servers) { - if (server.isSolaris()) { - solarisServers.add(server); - } - else { - rhelServers.add(server); - } - } + Set<Long> rhelServers = new HashSet<Long>(); + rhelServers.addAll(ServerFactory.listLinuxSystems(serverIds)); + Set<Long> solarisServers = new HashSet<Long>(); + solarisServers.addAll(ServerFactory.listSolarisSystems(serverIds));
// Since the solaris v. rhel distinction results in a different action type, // we'll end up with 2 actions created if the server list is mixed if (!rhelServers.isEmpty()) { - Server[] s = rhelServers.toArray(new Server[rhelServers.size()]); schedulePackageAction(scheduler, pkgs, ActionFactory.TYPE_PACKAGES_REMOVE, - earliestAction, s); + earliestAction, rhelServers); }
if (!solarisServers.isEmpty()) { - Server[] s = solarisServers.toArray(new Server[solarisServers.size()]); schedulePackageAction(scheduler, pkgs, ActionFactory.TYPE_SOLARISPKGS_REMOVE, - earliestAction, s); + earliestAction, solarisServers); } - } + }
/** * Schedules one or more package upgrade actions for the given server. @@ -1157,13 +1149,13 @@ public class ActionManager extends BaseManager { * Schedules one or more package upgrade actions for the given servers. * Note: package upgrade = package install * @param scheduler User scheduling the action. - * @param srvr list of servers on which the action affects. + * @param sids list of server ids on which the action affects. * @param pkgs The set of packages to be removed. * @param earliestAction Date of earliest action to be executed */ public static void schedulePackageUpgrades(User scheduler, - List<Server> srvr, List<Map<String, Long>> pkgs, Date earliestAction) { - schedulePackageInstall(scheduler, srvr, pkgs, earliestAction); + List<Long> sids, List<Map<String, Long>> pkgs, Date earliestAction) { + schedulePackageInstall(scheduler, sids, pkgs, earliestAction); }
/** @@ -1203,39 +1195,30 @@ public class ActionManager extends BaseManager { /** * Schedules one or more package installation actions on one or more servers. * @param scheduler user scheduling the action. - * @param servers servers for which the packages should be installed + * @param serverIds server ids for which the packages should be installed * @param pkgs set of packages to be removed. * @param earliestAction date of earliest action to be executed */ public static void schedulePackageInstall(User scheduler, - List<Server> servers, List pkgs, Date earliestAction) { + Collection<Long> serverIds, List pkgs, Date earliestAction) {
// Different handling for package installs on solaris v. rhel, so split out // the servers first in case the list is mixed. - List<Server> rhelServers = new ArrayList<Server>(); - List<Server> solarisServers = new ArrayList<Server>(); - - for (Server server : servers) { - if (server.isSolaris()) { - solarisServers.add(server); - } - else { - rhelServers.add(server); - } - } + Set<Long> rhelServers = new HashSet<Long>(); + rhelServers.addAll(ServerFactory.listLinuxSystems(serverIds)); + Set<Long> solarisServers = new HashSet<Long>(); + solarisServers.addAll(ServerFactory.listSolarisSystems(serverIds));
// Since the solaris v. rhel distinction results in a different action type, // we'll end up with 2 actions created if the server list is mixed if (!rhelServers.isEmpty()) { - Server[] s = rhelServers.toArray(new Server[rhelServers.size()]); schedulePackageAction(scheduler, pkgs, ActionFactory.TYPE_PACKAGES_UPDATE, - earliestAction, s); + earliestAction, rhelServers); }
if (!solarisServers.isEmpty()) { - Server[] s = solarisServers.toArray(new Server[solarisServers.size()]); schedulePackageAction(scheduler, pkgs, ActionFactory.TYPE_SOLARISPKGS_INSTALL, - earliestAction, s); + earliestAction, solarisServers); }
} @@ -1285,8 +1268,7 @@ public class ActionManager extends BaseManager { public static PackageAction schedulePackageVerify(User scheduler, Server srvr, List<Map<String, Long>> pkgs, Date earliest) { return (PackageAction) schedulePackageAction(scheduler, pkgs, - ActionFactory.TYPE_PACKAGES_VERIFY, earliest, srvr - ); + ActionFactory.TYPE_PACKAGES_VERIFY, earliest, srvr); } /** * Schedules one or more package installation actions for the given server. @@ -1334,19 +1316,28 @@ public class ActionManager extends BaseManager { }
private static Action scheduleAction(User scheduler, ActionType type, String name, - Date earliestAction, Server... servers) { + Date earliestAction, Set<Long> serverIds) {
Action action = createScheduledAction(scheduler, type, name, earliestAction); + ActionFactory.save(action);
- for (Server server : servers) { - ServerAction sa = new ServerAction(); - sa.setStatus(ActionFactory.STATUS_QUEUED); - sa.setRemainingTries(REMAINING_TRIES); - sa.setServer(server); + action = (Action) ActionFactory.reload(action); + + + Map params = new HashMap(); + params.put("status_id", ActionFactory.STATUS_QUEUED.getId()); + params.put("tries", REMAINING_TRIES); + params.put("parent_id", action.getId()); + //params.put("sid", sid); + + WriteMode m = ModeFactory.getWriteMode("Action_queries", + "insert_server_actions"); + List<Long> sidList = new ArrayList<Long>(); + sidList.addAll(serverIds); + m.executeUpdate(params, sidList);
- action.addServerAction(sa); - sa.setParentAction(action); - } + + //action.addServerAction(sa);
return action; } @@ -1612,10 +1603,34 @@ public class ActionManager extends BaseManager { * @return The action that has been scheduled. */ public static Action schedulePackageAction(User scheduler, + List pkgs, + ActionType type, + Date earliestAction, + Server...servers) { + Set<Long> serverIds = new HashSet<Long>(); + for (Server s : servers) { + serverIds.add(s.getId()); + } + return schedulePackageAction(scheduler, pkgs, type, earliestAction, serverIds); + } + + /** + * Schedules a package action of the given type for the given server with the + * packages given as a list. + * @param scheduler The user scheduling the action. + * @param pkgs A list of maps containing keys 'name_id', 'evr_id' and + * optional 'arch_id' with Long values. + * @param type The type of the package action. One of the static types found in + * ActionFactory + * @param earliestAction The earliest time that this action could happen. + * @param serverIds The server ids that this action is for. + * @return The action that has been scheduled. + */ + public static Action schedulePackageAction(User scheduler, List pkgs, ActionType type, Date earliestAction, - Server... servers) { + Set<Long> serverIds) {
String name = ""; if (type.equals(ActionFactory.TYPE_PACKAGES_REMOVE) || @@ -1633,7 +1648,7 @@ public class ActionManager extends BaseManager { name = "Package Synchronization"; }
- Action action = scheduleAction(scheduler, type, name, earliestAction, servers); + Action action = scheduleAction(scheduler, type, name, earliestAction, serverIds); ActionFactory.save(action);
if (pkgs != null) {
commit 26fe0e3f7232671ff7eafb4f051eaeaebb2afc6b Author: Justin Sherrill jsherril@redhat.com Date: Fri Oct 2 11:02:12 2009 -0400
a couple fixes
diff --git a/java/code/src/com/redhat/rhn/frontend/action/rhnpackage/ssm/SchedulePackageVerifyAction.java b/java/code/src/com/redhat/rhn/frontend/action/rhnpackage/ssm/SchedulePackageVerifyAction.java index 44994b1..9a5b537 100644 --- a/java/code/src/com/redhat/rhn/frontend/action/rhnpackage/ssm/SchedulePackageVerifyAction.java +++ b/java/code/src/com/redhat/rhn/frontend/action/rhnpackage/ssm/SchedulePackageVerifyAction.java @@ -138,7 +138,7 @@ public class SchedulePackageVerifyAction extends RhnAction implements Listable { }
DataResult results = SystemManager.ssmSystemPackagesToRemove(user, - RhnSetDecl.SSM_VERIFY_PACKAGES_LIST.getLabel()); + RhnSetDecl.SSM_VERIFY_PACKAGES_LIST.getLabel(), false);
TagHelper.bindElaboratorTo("groupList", results.getElaborator(), request);
diff --git a/java/code/src/com/redhat/rhn/manager/system/test/SystemManagerTest.java b/java/code/src/com/redhat/rhn/manager/system/test/SystemManagerTest.java index ac2f86b..bb210d2 100644 --- a/java/code/src/com/redhat/rhn/manager/system/test/SystemManagerTest.java +++ b/java/code/src/com/redhat/rhn/manager/system/test/SystemManagerTest.java @@ -1169,7 +1169,7 @@ public class SystemManagerTest extends RhnBaseTestCase {
// Test DataResult result = - SystemManager.ssmSystemPackagesToRemove(admin, packagesSet.getLabel()); + SystemManager.ssmSystemPackagesToRemove(admin, packagesSet.getLabel(), false); assertNotNull(result);
// Need explicit elaborate call here; list tag will do this in the UI
commit c48192d903512c63211d2f55c63e6ac088e3c6ea Author: Justin Sherrill jsherril@redhat.com Date: Fri Oct 2 10:51:04 2009 -0400
increasing speed of SSM package remove confirmation by using a slightly different elaborator
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml b/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml index c96d9ce..6f5d4e8 100644 --- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml +++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml @@ -564,22 +564,43 @@ ORDER BY UPPER(NVL(S.NAME, '(none)')), S.ID <elaborator name="system_overview" /> </mode>
-<mode name="system_set_remove_or_verify_packages_conf"> - <query params="user_id, set_label, package_set_label"> -SELECT DISTINCT S.id, - S.name SYSTEM_NAME - FROM rhnServer S, - rhnServerPackage SP, - rhnSet ST2 - WHERE ST2.user_id = :user_id - AND ST2.label= :package_set_label - AND SP.server_id in (select element from rhnSet where label = :set_label and user_id = :user_id) - AND SP.name_id = ST2.element - AND SP.evr_id = ST2.element_two - AND SP.package_arch_id = ST2.element_three - AND SP.server_id = S.id -ORDER BY UPPER(S.name), S.id + +<query name="system_set_remove_package_query" params="user_id, set_label, package_set_label"> + SELECT DISTINCT S.id, + S.name SYSTEM_NAME + FROM rhnServer S, + rhnServerPackage SP, + rhnSet ST2 + WHERE ST2.user_id = :user_id + AND ST2.label= :package_set_label + AND SP.server_id in (select element from rhnSet where label = :set_label and user_id = :user_id) + AND SP.name_id = ST2.element + AND SP.evr_id = ST2.element_two + AND SP.package_arch_id = ST2.element_three + AND SP.server_id = S.id + ORDER BY UPPER(S.name), S.id </query> + + +<mode name="system_set_remove_or_verify_packages_conf_short"> + <query name="system_set_remove_package_query" /> + <elaborator params="user_id, package_set_label" multiple="t"> +SELECT DISTINCT SP.server_id id, + PN.id || '|' || PE.id || '|' || PA.id AS ID_COMBO + FROM rhnPackageEVR PE, + rhnPackageName PN, + rhnServerPackage SP, + rhnPackageArch PA + WHERE SP.server_id IN (%s) + AND SP.name_id = PN.id + AND PN.id || '|' || PE.id || '|' || PA.id IN (SELECT element || '|' || element_two || '|' || element_three FROM rhnSet WHERE user_id = :user_id AND label = :package_set_label) + AND SP.evr_id = PE.id + AND SP.package_arch_id = PA.id + </elaborator> +</mode> + +<mode name="system_set_remove_or_verify_packages_conf"> + <query name="system_set_remove_package_query" /> <elaborator params="user_id, package_set_label" multiple="t"> SELECT DISTINCT SP.server_id id, PN.name || '-' || PE.evr.as_vre_simple() || '-' || PA.label NVRE, diff --git a/java/code/src/com/redhat/rhn/frontend/action/rhnpackage/ssm/SchedulePackageRemoveAction.java b/java/code/src/com/redhat/rhn/frontend/action/rhnpackage/ssm/SchedulePackageRemoveAction.java index b13e0f8..0b241f9 100644 --- a/java/code/src/com/redhat/rhn/frontend/action/rhnpackage/ssm/SchedulePackageRemoveAction.java +++ b/java/code/src/com/redhat/rhn/frontend/action/rhnpackage/ssm/SchedulePackageRemoveAction.java @@ -92,7 +92,18 @@ public class SchedulePackageRemoveAction extends RhnListAction implements Listab
/** {@inheritDoc} */ public List getResult(RequestContext context) { + return getResult(context, false);
+ } + + /** + * Provide the data result + * @param context The request context + * @param shorten whether to return a DataResult with the full ealborator + * or a shortened much faster ones + * @return the List + */ + public List getResult(RequestContext context, boolean shorten) { HttpServletRequest request = context.getRequest(); User user = context.getLoggedInUser();
@@ -113,7 +124,7 @@ public class SchedulePackageRemoveAction extends RhnListAction implements Listab }
DataResult results = SystemManager.ssmSystemPackagesToRemove(user, - RhnSetDecl.SSM_REMOVE_PACKAGES_LIST.getLabel()); + RhnSetDecl.SSM_REMOVE_PACKAGES_LIST.getLabel(), shorten);
TagHelper.bindElaboratorTo("groupList", results.getElaborator(), request);
@@ -144,7 +155,7 @@ public class SchedulePackageRemoveAction extends RhnListAction implements Listab
log.debug("Getting package removal data."); // Parse through all of the results - DataResult result = (DataResult) getResult(context); + DataResult result = (DataResult) getResult(context, true); result.elaborate();
log.debug("Publishing schedule package remove event to message queue."); diff --git a/java/code/src/com/redhat/rhn/manager/system/SystemManager.java b/java/code/src/com/redhat/rhn/manager/system/SystemManager.java index eb4da6f..b393eee 100644 --- a/java/code/src/com/redhat/rhn/manager/system/SystemManager.java +++ b/java/code/src/com/redhat/rhn/manager/system/SystemManager.java @@ -2406,13 +2406,23 @@ public class SystemManager extends BaseManager { * @param packageSetLabel identifies the RhnSet used to store the packages selected * by the user (this is needed for the query). This must be * established by the caller prior to calling this method + * @param shortened whether or not to include the full elaborator, or a shortened + * one that is much much faster, but doesn't provide a displayed + * string for the package (only the id combo) * @return description of server information as well as a list of relevant packages */ public static DataResult ssmSystemPackagesToRemove(User user, - String packageSetLabel) { - SelectMode m = - ModeFactory.getMode("System_queries", - "system_set_remove_or_verify_packages_conf"); + String packageSetLabel, + boolean shortened) { + SelectMode m; + if (shortened) { + m = ModeFactory.getMode("System_queries", + "system_set_remove_or_verify_packages_conf_short"); + } + else { + m = ModeFactory.getMode("System_queries", + "system_set_remove_or_verify_packages_conf"); + }
Map<String, Object> params = new HashMap<String, Object>(3); params.put("user_id", user.getId()); @@ -2438,7 +2448,7 @@ public class SystemManager extends BaseManager { // The query for this operation is the same as remove, so simply chain to // that method; this method is to make the verify code not look like it // erronuously calls a remove query. - return ssmSystemPackagesToRemove(user, packageSetLabel); + return ssmSystemPackagesToRemove(user, packageSetLabel, false); }
/**
commit 7001c6d38eb090a4b147dee7cfc2f7477c14b8e4 Author: Justin Sherrill jsherril@redhat.com Date: Thu Oct 1 14:13:07 2009 -0400
query fix for SSM package remove confirm list timing out
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml b/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml index 940b191..c96d9ce 100644 --- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml +++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/System_queries.xml @@ -570,13 +570,10 @@ SELECT DISTINCT S.id, S.name SYSTEM_NAME FROM rhnServer S, rhnServerPackage SP, - rhnSet ST2, - rhnSet St - WHERE St.user_id = :user_id - AND St.label = :set_label - AND ST2.user_id = :user_id + rhnSet ST2 + WHERE ST2.user_id = :user_id AND ST2.label= :package_set_label - AND St.element = SP.server_id + AND SP.server_id in (select element from rhnSet where label = :set_label and user_id = :user_id) AND SP.name_id = ST2.element AND SP.evr_id = ST2.element_two AND SP.package_arch_id = ST2.element_three
spacewalk-commits@lists.fedorahosted.org