java/code/src/com/redhat/rhn/frontend/action/rhnpackage/ssm/SchedulePackageUpgradeAction.java | 34 +++++----
java/code/src/com/redhat/rhn/frontend/events/SsmUpgradePackagesAction.java | 17 ----
java/code/src/com/redhat/rhn/frontend/events/SsmUpgradePackagesEvent.java | 36 +++-------
java/code/src/com/redhat/rhn/manager/action/ActionManager.java | 14 ++-
4 files changed, 45 insertions(+), 56 deletions(-)
New commits:
commit 1c1813066490c49155bcf319c0b3117ddf1ac98a
Author: Justin Sherrill <jsherril(a)redhat.com>
Date: Thu Jun 17 16:40:30 2010 -0400
585176 - changing the behavior of the SSM package upgrade screen to handle system and their packages for upgrade invidually, so only packages needed on a system will be installed. This means that each system is scheduled individually, but at least it is correct
diff --git a/java/code/src/com/redhat/rhn/frontend/action/rhnpackage/ssm/SchedulePackageUpgradeAction.java b/java/code/src/com/redhat/rhn/frontend/action/rhnpackage/ssm/SchedulePackageUpgradeAction.java
index 1c3319c..fce0959 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/rhnpackage/ssm/SchedulePackageUpgradeAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/rhnpackage/ssm/SchedulePackageUpgradeAction.java
@@ -19,7 +19,6 @@ import com.redhat.rhn.common.messaging.MessageQueue;
import com.redhat.rhn.common.util.DatePicker;
import com.redhat.rhn.domain.rhnpackage.PackageEvr;
import com.redhat.rhn.domain.rhnset.RhnSet;
-import com.redhat.rhn.domain.rhnset.RhnSetElement;
import com.redhat.rhn.domain.rhnset.SetCleanup;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.frontend.dto.PackageListItem;
@@ -179,25 +178,30 @@ public class SchedulePackageUpgradeAction extends RhnAction implements Listable
"date", DatePicker.YEAR_RANGE_POSITIVE);
log.debug("Getting package upgrade data.");
- DataResult result = (DataResult) getResult(context);
-
- RhnSet packageSet = RhnSetDecl.SSM_UPGRADE_PACKAGES_LIST.get(user);
- Set<RhnSetElement> packageElements = packageSet.getElements();
-
- List<Map<String, Long>> packageListItems =
- new ArrayList<Map<String, Long>>(packageElements.size());
- for (RhnSetElement packageElement : packageElements) {
- Map<String, Long> keyMap = new HashMap<String, Long>();
- keyMap.put("name_id", packageElement.getElement());
- keyMap.put("evr_id", packageElement.getElementTwo());
- keyMap.put("arch_id", packageElement.getElementThree());
+ List<Map> result = getResult(context);
+ ((DataResult) result).elaborate();
+
+
+ Map<Long, List<Map<String, Long>>> sysPackageSet =
+ new HashMap<Long, List<Map<String, Long>>>();
+ for (Map sys : result) {
+ Long sysId = (Long) sys.get("id");
+ List<Map<String, Long>> pkgSet = new ArrayList<Map<String, Long>>();
+ sysPackageSet.put(sysId, pkgSet);
+ for (Map pkg : (List<Map>) sys.get("elaborator0")) {
+ Map<String, Long> newPkg = new HashMap();
+ newPkg.put("name_id", (Long) pkg.get("name_id"));
+ newPkg.put("evr_id", (Long) pkg.get("evr_id"));
+ newPkg.put("arch_id", (Long) pkg.get("arch_id"));
+ pkgSet.add(newPkg);
+ }
- packageListItems.add(keyMap);
}
+
log.debug("Publishing schedule package upgrade event to message queue.");
SsmUpgradePackagesEvent event = new SsmUpgradePackagesEvent(user.getId(), earliest,
- result, packageListItems);
+ sysPackageSet);
MessageQueue.publish(event);
// Remove the packages from session and the DB
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 ac4a6fa..034dd13 100644
--- a/java/code/src/com/redhat/rhn/frontend/events/SsmUpgradePackagesAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/events/SsmUpgradePackagesAction.java
@@ -14,7 +14,6 @@
*/
package com.redhat.rhn.frontend.events;
-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.user.User;
@@ -25,9 +24,7 @@ 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;
@@ -81,6 +78,7 @@ public class SsmUpgradePackagesAction extends AbstractDatabaseAction {
log.error("Error while scheduling package upgrades for event: " + event, e);
}
finally {
+
SsmOperationManager.completeOperation(user, operationId);
}
@@ -91,19 +89,10 @@ public class SsmUpgradePackagesAction extends AbstractDatabaseAction {
long actionStart = System.currentTimeMillis();
- DataResult result = event.getResult();
Date earliest = event.getEarliest();
- List<Map<String, Long>> packageListItems = event.getPackageListItems();
-
- // Migrate server data result into a single list for lookup
- List<Long> serverIds = new ArrayList<Long>(result.size());
- for (Iterator it = result.iterator(); it.hasNext();) {
- Map data = (Map) it.next();
- Long serverId = (Long) data.get("id");
- serverIds.add(serverId);
- }
+ Map<Long, List<Map<String, Long>>> packageListItems = event.getSysPackageSet();
- ActionManager.schedulePackageUpgrades(user, serverIds, packageListItems, earliest);
+ ActionManager.schedulePackageUpgrades(user, packageListItems, earliest);
if (log.isDebugEnabled()) {
log.debug("Time to schedule all actions: " +
diff --git a/java/code/src/com/redhat/rhn/frontend/events/SsmUpgradePackagesEvent.java b/java/code/src/com/redhat/rhn/frontend/events/SsmUpgradePackagesEvent.java
index 776c945..119cad7 100644
--- a/java/code/src/com/redhat/rhn/frontend/events/SsmUpgradePackagesEvent.java
+++ b/java/code/src/com/redhat/rhn/frontend/events/SsmUpgradePackagesEvent.java
@@ -14,13 +14,11 @@
*/
package com.redhat.rhn.frontend.events;
-import com.redhat.rhn.common.db.datasource.DataResult;
-
import com.redhat.rhn.common.messaging.EventMessage;
import java.util.Date;
-import java.util.Map;
import java.util.List;
+import java.util.Map;
/**
* Event fired to carry the information necessary to upgrade packages on servers in the
@@ -32,23 +30,25 @@ public class SsmUpgradePackagesEvent implements EventMessage {
private Long userId;
private Date earliest;
- private DataResult result;
- private List<Map<String, Long>> packageListItems;
+ private Map<Long, List<Map<String, Long>>> sysPackageSet;
/**
* Creates a new SSM upgrade packages event.
*
* @param userIdIn ID of user scheduling this action.
* @param earliestIn Earliest data action can be picked up.
- * @param resultIn Complex map of which packages we're upgrading on which servers.
- * @param listIn packages to upgrade
+ * @param sysPackageSetIn Complex map of:
+ * system id-> List
+ * Map
+ * name_id -> long
+ * evr_id -> long
+ * arch_id -> long
*/
public SsmUpgradePackagesEvent(Long userIdIn, Date earliestIn,
- DataResult resultIn, List<Map<String, Long>> listIn) {
+ Map<Long, List<Map<String, Long>>> sysPackageSetIn) {
userId = userIdIn;
earliest = earliestIn;
- result = resultIn;
- packageListItems = listIn;
+ sysPackageSet = sysPackageSetIn;
}
/** {@inheritDoc} */
@@ -79,22 +79,12 @@ public class SsmUpgradePackagesEvent implements EventMessage {
return this.earliest;
}
- /**
- * Gets the result for this instance.
- *
- * @return The result.
- */
- public DataResult getResult() {
- return this.result;
- }
/**
- * Gets the packages to upgrade.
- *
- * @return list suitable for scheduling upgrade actions
+ * @return Returns the sysPackageSet.
*/
- public List<Map<String, Long>> getPackageListItems() {
- return packageListItems;
+ public Map<Long, List<Map<String, Long>>> getSysPackageSet() {
+ return sysPackageSet;
}
}
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 c4f0e3c..02a3376 100644
--- a/java/code/src/com/redhat/rhn/manager/action/ActionManager.java
+++ b/java/code/src/com/redhat/rhn/manager/action/ActionManager.java
@@ -1151,13 +1151,19 @@ 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 sids list of server ids on which the action affects.
- * @param pkgs The set of packages to be removed.
+ * @param sysPkgMapping The set of packages to be removed.
* @param earliestAction Date of earliest action to be executed
*/
public static void schedulePackageUpgrades(User scheduler,
- List<Long> sids, List<Map<String, Long>> pkgs, Date earliestAction) {
- schedulePackageInstall(scheduler, sids, pkgs, earliestAction);
+ Map<Long, List<Map<String, Long>>> sysPkgMapping, Date earliestAction) {
+
+ for (Long sid : sysPkgMapping.keySet()) {
+ List<Long> ids = new ArrayList<Long>();
+ ids.add(sid);
+ schedulePackageInstall(scheduler, ids, sysPkgMapping.get(sid), earliestAction);
+ }
+
+
}
/**