4 commits - java/code
by Tomas Lestach
java/code/src/com/redhat/rhn/common/db/datasource/xml/Action_queries.xml | 25 ++-
java/code/src/com/redhat/rhn/frontend/dto/ScheduledAction.java | 51 ++++++
java/code/src/com/redhat/rhn/frontend/xmlrpc/schedule/ScheduleHandler.java | 31 ++++
java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/ScheduleActionSerializer.java | 6
java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java | 74 ++++++++++
5 files changed, 182 insertions(+), 5 deletions(-)
New commits:
commit fa9986469ae18e7e5c124d7c78c9d94528b71150
Author: Aron Parsons <aparsons(a)redhat.com>
Date: Wed Jul 21 17:08:06 2010 -0400
alter the return type of system.listLatestAvailablePackage
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
index 6ce5eb5..94159c3 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
@@ -1049,25 +1049,32 @@ public class SystemHandler extends BaseHandler {
* @xmlrpc.param #param("string", "sessionKey")
* @xmlrpc.param #array_single("int", "serverId")
* @xmlrpc.param #param("string", "packageName")
- * @xmlrpc.returntype #struct("systems")
- * #prop("int", "serverId")
- * #struct("latest package")
+ * @xmlrpc.returntype
+ * #array()
+ * #prop_desc("int", "id", "server ID")
+ * #prop_desc("string", "name", "server name")
+ * #struct("package")
* #prop("int", "id")
* #prop("string", "name")
* #prop("string", "version")
* #prop("string", "release")
* #prop("string", "epoch")
* #prop("string", "arch")
- * #struct_end()
+ * #array_end()
+ *
*/
- public Map listLatestAvailablePackage(String sessionKey, List<Integer> systemIds, String name)
+ public List listLatestAvailablePackage(String sessionKey, List<Integer> systemIds, String name)
throws FaultException {
// Get the logged in user
User loggedInUser = getLoggedInUser(sessionKey);
- Map results = new HashMap();
+ List list = new ArrayList();
for (Integer sid : systemIds) {
+ Server server = lookupServer(loggedInUser, sid);
+
+ Map systemMap = new HashMap();
+
// get the package name ID
Map pkgEvr = PackageManager.lookupEvrIdByPackageName(sid.longValue(), name);
@@ -1092,12 +1099,16 @@ public class SystemHandler extends BaseHandler {
pkgMap.put("epoch", "");
}
- results.put(sid, pkgMap);
+ systemMap.put("id", sid);
+ systemMap.put("name", server.getName());
+ systemMap.put("package", pkgMap);
+
+ list.add(systemMap);
}
}
}
- return results;
+ return list;
}
/**
commit 55dbd6d6080d7723c3edcc621ef1e73fc8bd6fa8
Author: Aron Parsons <aparsons(a)redhat.com>
Date: Wed Jul 21 13:51:35 2010 -0400
added new API call system.listLatestAvailablePackage that will list the latest available version of a package for each system in the list
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
index 2d16d0a..6ce5eb5 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
@@ -1038,6 +1038,69 @@ public class SystemHandler extends BaseHandler {
}
/**
+ * Get the latest available version of a package for each system
+ * @param sessionKey The sessionKey containing the logged in user
+ * @param systemIds The IDs of the systems in question
+ * @return Returns an a map with the latest available package for each system
+ * @throws FaultException A FaultException is thrown if the server corresponding to
+ * sid cannot be found.
+ *
+ * @xmlrpc.doc Get the latest available version of a package for each system
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #array_single("int", "serverId")
+ * @xmlrpc.param #param("string", "packageName")
+ * @xmlrpc.returntype #struct("systems")
+ * #prop("int", "serverId")
+ * #struct("latest package")
+ * #prop("int", "id")
+ * #prop("string", "name")
+ * #prop("string", "version")
+ * #prop("string", "release")
+ * #prop("string", "epoch")
+ * #prop("string", "arch")
+ * #struct_end()
+ */
+ public Map listLatestAvailablePackage(String sessionKey, List<Integer> systemIds, String name)
+ throws FaultException {
+ // Get the logged in user
+ User loggedInUser = getLoggedInUser(sessionKey);
+
+ Map results = new HashMap();
+
+ for (Integer sid : systemIds) {
+ // get the package name ID
+ Map pkgEvr = PackageManager.lookupEvrIdByPackageName(sid.longValue(), name);
+
+ if (pkgEvr != null) {
+ // find the latest package available to each system
+ Package pkg = PackageManager.guestimatePackageBySystem(sid.longValue(),
+ (Long) pkgEvr.get("name_id"), (Long) pkgEvr.get("evr_id"),
+ null, loggedInUser.getOrg());
+
+ // build the hash to return
+ if (pkg != null) {
+ HashMap pkgMap = new HashMap();
+ pkgMap.put("id", pkg.getId());
+ pkgMap.put("name", pkg.getPackageName().getName());
+ pkgMap.put("version", pkg.getPackageEvr().getVersion());
+ pkgMap.put("release", pkg.getPackageEvr().getRelease());
+ pkgMap.put("arch", pkg.getPackageArch().getLabel());
+
+ if (pkg.getPackageEvr().getEpoch() != null) {
+ pkgMap.put("epoch", pkg.getPackageEvr().getEpoch());
+ } else {
+ pkgMap.put("epoch", "");
+ }
+
+ results.put(sid, pkgMap);
+ }
+ }
+ }
+
+ return results;
+ }
+
+ /**
* Gets the entitlements for a given server.
* @param sessionKey The sessionKey containing the logged in user
* @param sid The id for the system in question
commit 2afeaf8a02329f5f750bb1c1ebfaa0525a9d343c
Author: Aron Parsons <aparsons(a)redhat.com>
Date: Tue Jul 20 13:07:47 2010 -0400
add counts for the number of completed/failed/inprogress systems to the ScheduledAction DTO and schedule.list*Actions API calls
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 e51d6e1..624ec91 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
@@ -117,7 +117,10 @@ SELECT DISTINCT UAO.id AS ID,
UAO.type_name,
(DECODE(UAO.action_name, NULL, UAO.type_name, UAO.action_name)) AS ACTION_NAME,
UAO.scheduler,
- WC.login AS SCHEDULER_NAME
+ WC.login AS SCHEDULER_NAME,
+ (SELECT COUNT(server_id) FROM rhnServerAction SA WHERE SA.action_id = UAO.id AND UAO.action_status_id IN (0,1)) AS "IN_PROGRESS_SYSTEMS",
+ (SELECT COUNT(server_id) FROM rhnServerAction SA WHERE SA.action_id = UAO.id AND UAO.action_status_id = 2) AS "COMPLETED_SYSTEMS",
+ (SELECT COUNT(server_id) FROM rhnServerAction SA WHERE SA.action_id = UAO.id AND UAO.action_status_id = 3) AS "FAILED_SYSTEMS"
FROM rhnUserActionOverview UAO, web_contact WC
WHERE UAO.org_id = :org_id
AND UAO.user_id = :user_id
@@ -162,7 +165,10 @@ SELECT DISTINCT UAO.id AS ID,
UAO.type_name,
(DECODE(UAO.action_name, NULL, UAO.type_name, UAO.action_name)) AS ACTION_NAME,
UAO.scheduler,
- WC.login AS SCHEDULER_NAME
+ WC.login AS SCHEDULER_NAME,
+ (SELECT COUNT(server_id) FROM rhnServerAction SA WHERE SA.action_id = UAO.id AND UAO.action_status_id IN (0,1)) AS "IN_PROGRESS_SYSTEMS",
+ (SELECT COUNT(server_id) FROM rhnServerAction SA WHERE SA.action_id = UAO.id AND UAO.action_status_id = 2) AS "COMPLETED_SYSTEMS",
+ (SELECT COUNT(server_id) FROM rhnServerAction SA WHERE SA.action_id = UAO.id AND UAO.action_status_id = 3) AS "FAILED_SYSTEMS"
FROM rhnUserActionOverview UAO, web_contact WC
WHERE UAO.org_id = :org_id
AND UAO.user_id = :user_id
@@ -182,7 +188,10 @@ SELECT DISTINCT UAO.id AS ID,
UAO.type_name,
(DECODE(UAO.action_name, NULL, UAO.type_name, UAO.action_name)) AS ACTION_NAME,
UAO.scheduler,
- WC.login AS SCHEDULER_NAME
+ WC.login AS SCHEDULER_NAME,
+ (SELECT COUNT(server_id) FROM rhnServerAction SA WHERE SA.action_id = UAO.id AND UAO.action_status_id IN (0,1)) AS "IN_PROGRESS_SYSTEMS",
+ (SELECT COUNT(server_id) FROM rhnServerAction SA WHERE SA.action_id = UAO.id AND UAO.action_status_id = 2) AS "COMPLETED_SYSTEMS",
+ (SELECT COUNT(server_id) FROM rhnServerAction SA WHERE SA.action_id = UAO.id AND UAO.action_status_id = 3) AS "FAILED_SYSTEMS"
FROM rhnUserActionOverview UAO, web_contact WC
WHERE UAO.org_id = :org_id
AND UAO.user_id = :user_id
@@ -204,7 +213,10 @@ SELECT DISTINCT UAO.id AS ID,
UAO.type_name,
(DECODE(UAO.action_name, NULL, UAO.type_name, UAO.action_name)) AS ACTION_NAME,
UAO.scheduler,
- WC.login AS SCHEDULER_NAME
+ WC.login AS SCHEDULER_NAME,
+ (SELECT COUNT(server_id) FROM rhnServerAction SA WHERE SA.action_id = UAO.id AND UAO.action_status_id IN (0,1)) AS "IN_PROGRESS_SYSTEMS",
+ (SELECT COUNT(server_id) FROM rhnServerAction SA WHERE SA.action_id = UAO.id AND UAO.action_status_id = 2) AS "COMPLETED_SYSTEMS",
+ (SELECT COUNT(server_id) FROM rhnServerAction SA WHERE SA.action_id = UAO.id AND UAO.action_status_id = 3) AS "FAILED_SYSTEMS"
FROM rhnUserActionOverview UAO, web_contact WC
WHERE UAO.org_id = :org_id
AND UAO.user_id = :user_id
@@ -226,7 +238,10 @@ SELECT DISTINCT UAO.id AS ID,
UAO.earliest_action AS EARLIEST,
UAO.type_name,
(DECODE(UAO.action_name, NULL, UAO.type_name, UAO.action_name)) AS ACTION_NAME,
- WC.login AS SCHEDULER_NAME
+ WC.login AS SCHEDULER_NAME,
+ (SELECT COUNT(server_id) FROM rhnServerAction SA WHERE SA.action_id = UAO.id AND UAO.action_status_id IN (0,1)) AS "IN_PROGRESS_SYSTEMS",
+ (SELECT COUNT(server_id) FROM rhnServerAction SA WHERE SA.action_id = UAO.id AND UAO.action_status_id = 2) AS "COMPLETED_SYSTEMS",
+ (SELECT COUNT(server_id) FROM rhnServerAction SA WHERE SA.action_id = UAO.id AND UAO.action_status_id = 3) AS "FAILED_SYSTEMS"
FROM rhnUserActionOverview UAO, web_contact WC
WHERE UAO.org_id = :org_id
AND UAO.user_id = :user_id
diff --git a/java/code/src/com/redhat/rhn/frontend/dto/ScheduledAction.java b/java/code/src/com/redhat/rhn/frontend/dto/ScheduledAction.java
index a9ceacd..92c58b9 100644
--- a/java/code/src/com/redhat/rhn/frontend/dto/ScheduledAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/dto/ScheduledAction.java
@@ -51,6 +51,9 @@ public class ScheduledAction extends BaseDto implements RowCallback {
private long pickedUp;
private long completed;
private long failed;
+ private long inProgressSystems;
+ private long completedSystems;
+ private long failedSystems;
private long tally;
private String ageString;
private String userName;
@@ -191,6 +194,54 @@ public class ScheduledAction extends BaseDto implements RowCallback {
}
/**
+ * Sets the number of completed systems.
+ * @param systems the number of systems that have completed the action
+ */
+ public void setCompletedSystems(Long systems) {
+ completedSystems = systems;
+ }
+
+ /**
+ * Sets the number of failed systems.
+ * @param systems the number of systems that have failed the action
+ */
+ public void setFailedSystems(Long systems) {
+ failedSystems = systems;
+ }
+
+ /**
+ * Sets the number of systems which are in progress.
+ * @param systems the number of systems that haven't completed the action
+ */
+ public void setInProgressSystems(Long systems) {
+ inProgressSystems = systems;
+ }
+
+ /**
+ * Returns the number of completed systems.
+ * @return the number of completed systems.
+ */
+ public long getCompletedSystems() {
+ return completedSystems;
+ }
+
+ /**
+ * Returns the number of failed systems.
+ * @return the number of failed systems.
+ */
+ public long getFailedSystems() {
+ return failedSystems;
+ }
+
+ /**
+ * Returns the number of systems which are in progress.
+ * @return the number of systems which are in progress.
+ */
+ public long getInProgressSystems() {
+ return inProgressSystems;
+ }
+
+ /**
* {@inheritDoc}
*/
public void callback(ResultSet rs) throws SQLException {
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/ScheduleActionSerializer.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/ScheduleActionSerializer.java
index bec70ab..b810f74 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/ScheduleActionSerializer.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/serializer/ScheduleActionSerializer.java
@@ -37,6 +37,9 @@ import redstone.xmlrpc.XmlRpcSerializer;
* #prop_desc("string", "scheduler", "The user that scheduled the action.")
* #prop_desc($date, "earliest", "The earliest date and time the action
* will be performed")
+ * #prop_desc("int", "completedSystems", "Number of systems that completed the action.")
+ * #prop_desc("int", "failedSystems", "Number of systems that failed the action.")
+ * #prop_desc("int", "inProgressSystems", "Number of systems that are in progress.")
* #struct_end()
*/
public class ScheduleActionSerializer implements XmlRpcCustomSerializer {
@@ -59,6 +62,9 @@ public class ScheduleActionSerializer implements XmlRpcCustomSerializer {
helper.add("type", action.getTypeName());
helper.add("scheduler", action.getSchedulerName());
helper.add("earliest", action.getEarliestDate());
+ helper.add("completedSystems", action.getCompletedSystems());
+ helper.add("failedSystems", action.getFailedSystems());
+ helper.add("inProgressSystems", action.getInProgressSystems());
helper.writeTo(output);
}
commit 96afda408afc2db005d670bd0cc053e6df478780
Author: Aron Parsons <aparsons(a)redhat.com>
Date: Tue Jul 20 11:34:58 2010 -0400
added new API call schedule.rescheduleActions
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/schedule/ScheduleHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/schedule/ScheduleHandler.java
index e8aba1e..fd1b997 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/schedule/ScheduleHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/schedule/ScheduleHandler.java
@@ -259,4 +259,35 @@ public class ScheduleHandler extends BaseHandler {
dr.elaborate();
return dr.toArray();
}
+
+ /**
+ * Reschedule all actions in the given list.
+ * @param sessionKey The sessionkey for the session containing the logged in user.
+ * @param actionIds The list of ids for actions to reschedule.
+ * @return Returns a list of actions with details
+ * @throws FaultException A FaultException is thrown if one of the actions provided
+ * is invalid.
+ *
+ * @xmlrpc.doc Reschedule all actions in the given list.
+ * @xmlrpc.param #session_key()
+ * @xmlrpc.param #array_single("int", "action id")
+ * @xmlrpc.param #param_desc("boolean", "onlyFailed",
+ * "True to only reschedule failed actions, False to reschedule all")
+ * @xmlrpc.returntype #return_int_success()
+ */
+ public int rescheduleActions(String sessionKey, List<Integer> actionIds, boolean onlyFailed)
+ throws FaultException {
+
+ // Get the logged in user
+ User loggedInUser = getLoggedInUser(sessionKey);
+
+ for (Integer actionId : actionIds) {
+ Action action = ActionManager.lookupAction(loggedInUser, new Long(actionId));
+ if (action != null) {
+ ActionManager.rescheduleAction(action, onlyFailed);
+ }
+ }
+
+ return 1;
+ }
}
13 years, 9 months
Branch 'taskomatic' - 18 commits - java/code schema/spacewalk
by Tomas Lestach
java/code/src/com/redhat/rhn/common/db/datasource/xml/Errata_queries.xml | 73 -----
java/code/src/com/redhat/rhn/common/db/datasource/xml/Task_queries.xml | 96 -------
java/code/src/com/redhat/rhn/taskomatic/TaskoJob.java | 75 ++++-
java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java | 103 ++-----
java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.java | 36 --
java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java | 10
java/code/src/com/redhat/rhn/taskomatic/task/ChannelRepodata.java | 51 +--
java/code/src/com/redhat/rhn/taskomatic/task/CleanCurrentAlerts.java | 25 -
java/code/src/com/redhat/rhn/taskomatic/task/ClearLogHistory.java | 12
java/code/src/com/redhat/rhn/taskomatic/task/CobblerSyncTask.java | 41 +--
java/code/src/com/redhat/rhn/taskomatic/task/CompareConfigFilesTask.java | 3
java/code/src/com/redhat/rhn/taskomatic/task/DailySummary.java | 66 ++---
java/code/src/com/redhat/rhn/taskomatic/task/ErrataCacheTask.java | 51 +--
java/code/src/com/redhat/rhn/taskomatic/task/ErrataMailer.java | 51 ++-
java/code/src/com/redhat/rhn/taskomatic/task/ErrataQueue.java | 53 +---
java/code/src/com/redhat/rhn/taskomatic/task/KickstartCleanup.java | 29 --
java/code/src/com/redhat/rhn/taskomatic/task/KickstartFileSyncTask.java | 3
java/code/src/com/redhat/rhn/taskomatic/task/PackageCleanup.java | 23 -
java/code/src/com/redhat/rhn/taskomatic/task/RepoSyncTask.java | 21 -
java/code/src/com/redhat/rhn/taskomatic/task/RhnJavaJob.java | 65 +++-
java/code/src/com/redhat/rhn/taskomatic/task/RhnJob.java | 12
java/code/src/com/redhat/rhn/taskomatic/task/RhnJobAppender.java | 6
java/code/src/com/redhat/rhn/taskomatic/task/RhnQueueJob.java | 132 ++++++++++
java/code/src/com/redhat/rhn/taskomatic/task/SandboxCleanup.java | 15 -
java/code/src/com/redhat/rhn/taskomatic/task/SatSyncTask.java | 5
java/code/src/com/redhat/rhn/taskomatic/task/SatelliteCertificateCheck.java | 33 +-
java/code/src/com/redhat/rhn/taskomatic/task/SessionCleanup.java | 29 --
java/code/src/com/redhat/rhn/taskomatic/task/SummaryPopulation.java | 27 --
java/code/src/com/redhat/rhn/taskomatic/task/SynchProbeState.java | 23 -
java/code/src/com/redhat/rhn/taskomatic/task/TaskConstants.java | 30 --
java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataCacheDriver.java | 36 +-
java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataQueueDriver.java | 31 +-
java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataQueueWorker.java | 60 ++--
java/code/src/com/redhat/rhn/taskomatic/task/repomd/ChannelRepodataDriver.java | 30 +-
java/code/src/com/redhat/rhn/taskomatic/task/repomd/RepositoryWriter.java | 45 +--
java/code/src/com/redhat/rhn/taskomatic/task/test/ErrataQueueTest.java | 10
java/code/src/com/redhat/rhn/taskomatic/task/threaded/QueueDriver.java | 21 +
java/code/src/com/redhat/rhn/taskomatic/task/threaded/TaskQueue.java | 72 ++++-
java/code/src/com/redhat/rhn/taskomatic/task/threaded/TaskQueueFactory.java | 38 +-
schema/spacewalk/common/data/rhnTaskoBunch.sql | 8
schema/spacewalk/common/data/rhnTaskoTemplate.sql | 16 +
41 files changed, 779 insertions(+), 787 deletions(-)
New commits:
commit dca48a337a6a74a9362633aa3ce8db3844e22c7a
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Mon Jul 26 18:20:49 2010 +0200
migrate RepoSyncTask
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/RepoSyncTask.java b/java/code/src/com/redhat/rhn/taskomatic/task/RepoSyncTask.java
index c0e7fba..2891b57 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/RepoSyncTask.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/RepoSyncTask.java
@@ -21,7 +21,6 @@ import com.redhat.rhn.domain.channel.ContentSource;
import com.redhat.rhn.domain.task.Task;
import com.redhat.rhn.domain.task.TaskFactory;
-import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -33,32 +32,30 @@ import java.util.List;
* Repo Sync
* Used for syncing repos (like yum repos) to a channel
* This really just calls a python script
- *
+ *
* @version $Rev$
*/
-public class RepoSyncTask extends RhnExtCmdJob {
-
+public class RepoSyncTask extends RhnJavaJob {
+
/**
* Used to log stats in the RHNDAEMONSTATE table
*/
public static final String DISPLAY_NAME = "repo_sync";
- private Logger log = getLogger(RepoSyncTask.class);
-
/**
* Default constructor
*/
public RepoSyncTask() {
}
-
+
/**
- *
+ *
* {@inheritDoc}
*/
public void execute(JobExecutionContext context)
throws JobExecutionException {
-
+
for (Task task : TaskFactory.listTasks(DISPLAY_NAME)) {
//workaround in case task is null (which can happen)
@@ -68,7 +65,7 @@ public class RepoSyncTask extends RhnExtCmdJob {
}
ContentSource src = ChannelFactory.lookupContentSource(task.getData());
if (log.isInfoEnabled()) {
- log.info("Syncing repo " + src.getSourceUrl() + " to channel " +
+ log.info("Syncing repo " + src.getSourceUrl() + " to channel " +
src.getChannel().getLabel());
}
if (src == null) {
@@ -81,7 +78,7 @@ public class RepoSyncTask extends RhnExtCmdJob {
executeExtCmd(getSyncCommand(src).toArray(new String[0]));
}
}
-
+
private static List<String> getSyncCommand(ContentSource src) {
List<String> cmd = new ArrayList<String>();
cmd.add(Config.get().getString(ConfigDefaults.SPACEWALK_REPOSYNC_PATH,
@@ -97,6 +94,4 @@ public class RepoSyncTask extends RhnExtCmdJob {
cmd.add("--quiet");
return cmd;
}
-
-
}
commit 3ff40b9cc3c04e325d21fd03dcee17eaa593e268
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Mon Jul 26 18:20:22 2010 +0200
migrate ChannelRepodata task
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/ChannelRepodata.java b/java/code/src/com/redhat/rhn/taskomatic/task/ChannelRepodata.java
index 36aa4c3..3150a53 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/ChannelRepodata.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/ChannelRepodata.java
@@ -14,51 +14,34 @@
*/
package com.redhat.rhn.taskomatic.task;
-import com.redhat.rhn.common.conf.Config;
import com.redhat.rhn.taskomatic.task.repomd.ChannelRepodataDriver;
-import com.redhat.rhn.taskomatic.task.threaded.TaskQueue;
-import com.redhat.rhn.taskomatic.task.threaded.TaskQueueFactory;
import org.apache.log4j.Logger;
-import org.quartz.JobExecutionContext;
-import org.quartz.JobExecutionException;
/**
- *
+ *
* @version $Rev $
*
*/
-public class ChannelRepodata extends SingleThreadedTestableTask {
-
+public class ChannelRepodata extends RhnQueueJob {
+
public static final String DISPLAY_NAME = "channel_repodata";
+ public static Logger log = null;
-
- private static final Logger LOG = Logger.getLogger(ChannelRepodata.class);
-
- /**
- * {@inheritDoc}
- */
- public synchronized void execute(JobExecutionContext ctx, boolean testContext)
- throws JobExecutionException {
- TaskQueueFactory factory = TaskQueueFactory.get();
- TaskQueue queue = factory.getQueue("channel_repodata_queue");
- if (queue == null) {
- try {
- queue = factory.createQueue("channel_repodata_queue",
- ChannelRepodataDriver.class);
- }
- catch (Exception e) {
- e.printStackTrace();
- LOG.error(e);
- return;
- }
+ protected Logger getLogger() {
+ if (log == null) {
+ log = Logger.getLogger(ChannelRepodata.class);
}
- int maxWorkItems = Config.get().getInt(
- "taskomatic.channel_repodata_max_work_items", 2);
- if (queue.getQueueSize() < maxWorkItems) {
- queue.run();
- }
+ return log;
}
-
+ @Override
+ protected Class getDriverClass() {
+ return ChannelRepodataDriver.class;
+ }
+
+ @Override
+ protected String getQueueName() {
+ return DISPLAY_NAME;
+ }
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/repomd/ChannelRepodataDriver.java b/java/code/src/com/redhat/rhn/taskomatic/task/repomd/ChannelRepodataDriver.java
index 874ebef..69cfa8d 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/repomd/ChannelRepodataDriver.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/repomd/ChannelRepodataDriver.java
@@ -19,7 +19,6 @@ import com.redhat.rhn.common.db.datasource.ModeFactory;
import com.redhat.rhn.common.db.datasource.SelectMode;
import com.redhat.rhn.common.db.datasource.WriteMode;
import com.redhat.rhn.common.hibernate.HibernateFactory;
-import com.redhat.rhn.taskomatic.task.ChannelRepodata;
import com.redhat.rhn.taskomatic.task.TaskConstants;
import com.redhat.rhn.taskomatic.task.threaded.QueueDriver;
import com.redhat.rhn.taskomatic.task.threaded.QueueWorker;
@@ -33,32 +32,32 @@ import java.util.List;
import java.util.Map;
/**
- *
+ *
* @version $Rev $
- *
+ *
*/
public class ChannelRepodataDriver implements QueueDriver {
- private static final Logger LOG = Logger.getLogger(ChannelRepodata.class);
+ private Logger logger = null;
/**
- * default Constructor
+ * {@inheritDoc}
*/
- public ChannelRepodataDriver() {
- LOG.info("ChannelRepodataDriver()--resetting orphanned rhnRepoRegenQueue entries");
+ public void initialize() {
+ logger.info("ChannelRepodataDriver()--resetting orphanned rhnRepoRegenQueue entries");
WriteMode resetChannelRepodata = ModeFactory.getWriteMode(TaskConstants.MODE_NAME,
TaskConstants.TASK_QUERY_REPOMOD_CLEAR_IN_PROGRESS);
try {
int eqReset = resetChannelRepodata.executeUpdate(new HashMap());
- if (LOG.isDebugEnabled()) {
- LOG.debug("Reset " + eqReset +
+ if (logger.isDebugEnabled()) {
+ logger.debug("Reset " + eqReset +
" rows from the rhnRepoRegenQueue table in progress by " +
"setting next_action to sysdate");
}
HibernateFactory.commitTransaction();
}
catch (Exception e) {
- LOG.error("Error resetting rhnRepoRegenQueue.next_action", e);
+ logger.error("Error resetting rhnRepoRegenQueue.next_action", e);
HibernateFactory.rollbackTransaction();
}
finally {
@@ -100,7 +99,15 @@ public class ChannelRepodataDriver implements QueueDriver {
* @return Returns Logger
*/
public Logger getLogger() {
- return LOG;
+ return logger;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+
+ public void setLogger(Logger loggerIn) {
+ logger = loggerIn;
}
/**
@@ -117,5 +124,4 @@ public class ChannelRepodataDriver implements QueueDriver {
public QueueWorker makeWorker(Object workItem) {
return new ChannelRepodataWorker((Map) workItem, getLogger());
}
-
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/repomd/RepositoryWriter.java b/java/code/src/com/redhat/rhn/taskomatic/task/repomd/RepositoryWriter.java
index 6530614..9613029 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/repomd/RepositoryWriter.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/repomd/RepositoryWriter.java
@@ -16,6 +16,7 @@ package com.redhat.rhn.taskomatic.task.repomd;
import com.redhat.rhn.common.conf.Config;
import com.redhat.rhn.common.conf.ConfigDefaults;
+import com.redhat.rhn.common.localization.LocalizationService;
import com.redhat.rhn.common.util.StringUtil;
import com.redhat.rhn.domain.channel.Channel;
import com.redhat.rhn.domain.channel.ChannelFactory;
@@ -43,9 +44,9 @@ import java.util.Iterator;
import java.util.Map;
/**
- *
+ *
* @version $Rev $
- *
+ *
*/
public class RepositoryWriter {
@@ -71,7 +72,7 @@ public class RepositoryWriter {
}
/**
- *
+ *
* @param channel channel info
* @return repodata sanity
*/
@@ -82,21 +83,23 @@ public class RepositoryWriter {
Date fileModifiedDate = new Date(theFile.lastModified());
// the file Modified date should be getting set when the file
// is moved into the correct location.
- log.info("File Modified Date:" + fileModifiedDate);
- log.info("Channel Modified Date:" + channel.getLastModified());
+ log.info("File Modified Date:" + LocalizationService.getInstance().
+ formatCustomDate(fileModifiedDate));
+ log.info("Channel Modified Date:" + LocalizationService.getInstance().
+ formatCustomDate(channel.getLastModified()));
return !fileModifiedDate.equals(channel.getLastModified());
}
/**
- *
+ *
* @param channel channelinfo for repomd file creation
*/
public void writeRepomdFiles(Channel channel) {
-
+
PackageManager.createRepoEntrys(channel.getId());
-
+
String prefix = mountPoint + File.separator + pathPrefix +
File.separator + channel.getLabel() + File.separator;
-
+
if (channel.getChannelArch().getArchType().getLabel().equalsIgnoreCase("deb")) {
log.info("Generating new DEB repository for channel " + channel.getLabel());
generateDebRepository(channel, prefix);
@@ -118,7 +121,7 @@ public class RepositoryWriter {
// Get compatible checksumType
this.checksumtype = channel.getChecksumTypeLabel();
- log.info("Checksum Type Value" + this.checksumtype);
+ log.info("Checksum Type Value: " + this.checksumtype);
// java.security.MessageDigest recognizes:
// MD2, MD5, SHA-1, SHA-256, SHA-384, SHA-512
@@ -206,7 +209,7 @@ public class RepositoryWriter {
log.info("Starting updateinfo generation for '" +
channel.getLabel() + '"');
- log.info("Checksum Type Value for generate updateinfo" +
+ log.info("Checksum Type Value for generate updateinfo " +
this.checksumtype);
RepomdIndexData updateinfoData = generateUpdateinfo(channel,
prefix, checksumAlgo);
@@ -259,7 +262,7 @@ public class RepositoryWriter {
(int) (new Date().getTime() - start.getTime()) / 1000 + " seconds");
}
}
-
+
/**
* Create repository for APT
* @param channel
@@ -296,7 +299,7 @@ public class RepositoryWriter {
}
/**
- *
+ *
* @param channel channel indo
* @param checksumAlgo checksum algorithm
* @return repomd index for given channel
@@ -344,8 +347,8 @@ public class RepositoryWriter {
}
/**
- * TODO: This static comps paths should go away once
- * we can get the paths directly from hosted through
+ * TODO: This static comps paths should go away once
+ * we can get the paths directly from hosted through
* satellite-sync and only limit to supporting cloned.
* @param channel channel object
* @return compsPath comps file path
@@ -356,13 +359,13 @@ public class RepositoryWriter {
Map<String, String> compsMapping = new HashMap<String, String>();
String rootClientPath = "/rhn/kickstart/ks-rhel-x86_64-client-5";
String rootServerPath = "/rhn/kickstart/ks-rhel-x86_64-server-5";
- compsMapping.put("rhel-x86_64-client-5",
+ compsMapping.put("rhel-x86_64-client-5",
rootClientPath + "/Client/repodata/comps-rhel5-client-core.xml");
compsMapping.put("rhel-x86_64-client-vt-5",
rootClientPath + "/VT/repodata/comps-rhel5-vt.xml");
compsMapping.put("rhel-x86_64-client-workstation-5",
rootClientPath + "/Workstation/repodata/comps-rhel5-client-workstation.xml");
- compsMapping.put("rhel-x86_64-server-5",
+ compsMapping.put("rhel-x86_64-server-5",
rootServerPath + "/Server/repodata/comps-rhel5-server-core.xml");
compsMapping.put("rhel-x86_64-server-vt-5",
rootServerPath + "/VT/repodata/comps-rhel5-vt.xml");
@@ -375,12 +378,12 @@ public class RepositoryWriter {
Map<String, String> newCompsmap = new HashMap<String, String>();
for (String k : compsMapping.keySet()) {
for (String arch : arches) {
- newCompsmap.put(k.replace("x86_64", arch),
+ newCompsmap.put(k.replace("x86_64", arch),
compsMapping.get(k).replace("x86_64", arch));
}
}
compsMapping.putAll(newCompsmap);
-
+
if (compsMapping.containsKey(channel.getLabel())) {
compsPath = compsMapping.get(channel.getLabel());
}
@@ -395,9 +398,9 @@ public class RepositoryWriter {
* @param checksumtype checksum type
* @return repodata index
*/
- private RepomdIndexData generateUpdateinfo(Channel channel, String prefix,
+ private RepomdIndexData generateUpdateinfo(Channel channel, String prefix,
String checksumtypeIn) {
-
+
if (channel.getErrataCount() == 0) {
return null;
}
diff --git a/schema/spacewalk/common/data/rhnTaskoBunch.sql b/schema/spacewalk/common/data/rhnTaskoBunch.sql
index ed2ca19..505cb9e 100644
--- a/schema/spacewalk/common/data/rhnTaskoBunch.sql
+++ b/schema/spacewalk/common/data/rhnTaskoBunch.sql
@@ -62,4 +62,7 @@ INSERT INTO rhnTaskoBunch (id, name, description, org_bunch, active_from)
INSERT INTO rhnTaskoBunch (id, name, description, org_bunch, active_from)
VALUES (rhn_tasko_bunch_id_seq.nextval, 'errata-cache-bunch', 'Performs errata cache recalc for a given server or channel', '', sysdate);
+INSERT INTO rhnTaskoBunch (id, name, description, org_bunch, active_from)
+ VALUES (rhn_tasko_bunch_id_seq.nextval, 'channel-repodata-bunch', 'Generates channel repodata', '', sysdate);
+
commit;
diff --git a/schema/spacewalk/common/data/rhnTaskoTemplate.sql b/schema/spacewalk/common/data/rhnTaskoTemplate.sql
index a664b3c..db5a77f 100644
--- a/schema/spacewalk/common/data/rhnTaskoTemplate.sql
+++ b/schema/spacewalk/common/data/rhnTaskoTemplate.sql
@@ -135,8 +135,8 @@ INSERT INTO rhnTaskoTemplate (id, bunch_id, task_id, ordering, start_if)
INSERT INTO rhnTaskoTemplate (id, bunch_id, task_id, ordering, start_if)
VALUES (rhn_tasko_template_id_seq.nextval,
- (SELECT id FROM rhnTaskoBunch WHERE name='errata-cache-bunch'),
- (SELECT id FROM rhnTaskoTask WHERE name='errata-cache'),
+ (SELECT id FROM rhnTaskoBunch WHERE name='channel-repodata-bunch'),
+ (SELECT id FROM rhnTaskoTask WHERE name='channel-repodata'),
0,
'');
commit 24502336b96bfbf32eceea0e72df04f383eb9347
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Mon Jul 26 18:18:03 2010 +0200
introduce initialize method for queue tasks
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/RhnQueueJob.java b/java/code/src/com/redhat/rhn/taskomatic/task/RhnQueueJob.java
index 2e822f7..2d27e6a 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/RhnQueueJob.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/RhnQueueJob.java
@@ -103,12 +103,12 @@ public abstract class RhnQueueJob implements RhnJob {
logToNewFile();
getLogger().debug("Starting run "+ jobRun.getId());
}
- int maxWorkItems = Config.get().getInt("taskomatic." + queueName + "_max_work_items", 1);
+ int maxWorkItems = Config.get().getInt("taskomatic." + queueName + "_max_work_items", 3);
if (queue.getQueueSize() < maxWorkItems) {
queue.run(this);
}
else {
- getLogger().info("Maximum number of workers already put ... skipping.");
+ getLogger().debug("Maximum number of workers already put ... skipping.");
}
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataCacheDriver.java b/java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataCacheDriver.java
index 912982d..01bb591 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataCacheDriver.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataCacheDriver.java
@@ -92,4 +92,12 @@ public class ErrataCacheDriver implements QueueDriver {
Map item = (Map) workItem;
return new ErrataCacheWorker(item, logger);
}
+
+ /**
+ *
+ * {@inheritDoc}
+ */
+ public void initialize() {
+ // empty
+ }
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataQueueDriver.java b/java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataQueueDriver.java
index 297f194..df36670 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataQueueDriver.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataQueueDriver.java
@@ -95,4 +95,11 @@ public class ErrataQueueDriver implements QueueDriver {
return new ErrataQueueWorker((Map) workItem, logger);
}
+ /**
+ *
+ * {@inheritDoc}
+ */
+ public void initialize() {
+ // empty
+ }
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/threaded/QueueDriver.java b/java/code/src/com/redhat/rhn/taskomatic/task/threaded/QueueDriver.java
index 6c81641..38ac5d1 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/threaded/QueueDriver.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/threaded/QueueDriver.java
@@ -62,4 +62,9 @@ public interface QueueDriver {
* @return true if processing can continue, otherwise false
*/
boolean canContinue();
+
+ /**
+ * Actions that has to be executed, when queue is created
+ */
+ void initialize();
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/threaded/TaskQueueFactory.java b/java/code/src/com/redhat/rhn/taskomatic/task/threaded/TaskQueueFactory.java
index 5ba1062..e1e0fd6 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/threaded/TaskQueueFactory.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/threaded/TaskQueueFactory.java
@@ -72,6 +72,7 @@ public class TaskQueueFactory {
retval = new TaskQueue();
QueueDriver driver = (QueueDriver) driverClass.newInstance();
driver.setLogger(loggerIn);
+ driver.initialize();
retval.setQueueDriver(driver);
queues.put(name, retval);
}
commit b3f34d1dd1ebbfb259d046f77a8dec9dff89758f
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Mon Jul 26 16:24:08 2010 +0200
ErrataMailer changes
- logging updated
- create and commit concrete transaction
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/ErrataMailer.java b/java/code/src/com/redhat/rhn/taskomatic/task/ErrataMailer.java
index 450700a..67f005b 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/ErrataMailer.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/ErrataMailer.java
@@ -29,8 +29,8 @@ import com.redhat.rhn.domain.errata.impl.PublishedErrata;
import com.redhat.rhn.domain.org.OrgFactory;
import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
import org.hibernate.Session;
+import org.hibernate.Transaction;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -56,8 +56,6 @@ public class ErrataMailer extends RhnJavaJob {
*/
public static final String DISPLAY_NAME = "errata_engine";
- private Logger logger = getLogger(ErrataMailer.class);
-
/**
* {@inheritDoc}
*/
@@ -67,13 +65,13 @@ public class ErrataMailer extends RhnJavaJob {
try {
List results = getErrataToProcess();
if (results == null || results.size() == 0) {
- if (logger.isDebugEnabled()) {
- logger.debug("No errata found...exiting");
+ if (log.isDebugEnabled()) {
+ log.debug("No errata found...exiting");
}
}
else {
- if (logger.isDebugEnabled()) {
- logger.debug("Queued up " + results.size() + " errata");
+ if (log.isDebugEnabled()) {
+ log.debug("=== Queued up " + results.size() + " errata");
}
Map erratas = new HashMap();
WriteMode cleanUp = ModeFactory.getWriteMode(TaskConstants.MODE_NAME,
@@ -85,32 +83,33 @@ public class ErrataMailer extends RhnJavaJob {
Long channelId = (Long) row.get("channel_id");
markErrataDone(errataId, orgId, channelId);
if (!hasProcessedErrata(orgId, errataId, erratas)) {
- if (logger.isDebugEnabled()) {
- logger.debug("Processing errata " + errataId +
+ if (log.isDebugEnabled()) {
+ log.debug("Processing errata " + errataId +
" for org " + orgId);
}
try {
sendEmails(errataId, orgId, channelId);
- if (logger.isDebugEnabled()) {
- logger.debug("Finished errata " + errataId +
+ if (log.isDebugEnabled()) {
+ log.debug("Finished errata " + errataId +
" for org " + orgId);
}
}
catch (JavaMailException e) {
- logger.error("Error sending mail", e);
+ log.error("Error sending mail", e);
}
try {
cleanUp.executeUpdate(Collections.EMPTY_MAP);
+ HibernateFactory.commitTransaction();
}
catch (Exception e) {
- logger.error("Error cleaning up ErrataMailer queue", e);
+ log.error("Error cleaning up ErrataMailer queue", e);
}
}
}
}
}
catch (Exception e) {
- logger.error(e.getMessage(), e);
+ log.error(e.getMessage(), e);
throw new JobExecutionException(e);
}
finally {
@@ -120,7 +119,7 @@ public class ErrataMailer extends RhnJavaJob {
cleanUp.executeUpdate(Collections.EMPTY_MAP);
}
catch (Exception e) {
- logger.error("Error cleaning up ErrataMailer queue", e);
+ log.error("Error cleaning up ErrataMailer queue", e);
}
}
@@ -155,6 +154,7 @@ public class ErrataMailer extends RhnJavaJob {
private void markErrataDone(Long errataId, Long orgId, Long channelId)
throws Exception {
+ Transaction tx = HibernateFactory.getSession().beginTransaction();
WriteMode marker = ModeFactory.getWriteMode(TaskConstants.MODE_NAME,
TaskConstants.TASK_QUERY_ERRATAMAILER_MARK_ERRATA_DONE);
Map params = new HashMap();
@@ -162,9 +162,11 @@ public class ErrataMailer extends RhnJavaJob {
params.put("errata_id", errataId);
params.put("channel_id", channelId);
int rowsUpdated = marker.executeUpdate(params);
- if (logger.isDebugEnabled()) {
- logger.debug("Marked " + rowsUpdated + " rows complete");
+ if (log.isDebugEnabled()) {
+ log.debug("Marked " + rowsUpdated + " rows complete");
+ log.debug("errata_id = " + errataId + " AND channel_id = " + channelId + " AND org_id = " + orgId);
}
+ tx.commit();
}
private void sendEmails(Long errataId, Long orgId, Long channelId) throws Exception {
@@ -174,15 +176,15 @@ public class ErrataMailer extends RhnJavaJob {
populateWorkQueue(errataId, orgId, channelId);
List users = findTargetUsers();
if (users == null || users.size() == 0) {
- if (logger.isDebugEnabled()) {
- logger.debug("No target users found for errata " + errata.getId() +
+ if (log.isDebugEnabled()) {
+ log.debug("No target users found for errata " + errata.getId() +
"...skipping");
}
return;
}
else {
- if (logger.isDebugEnabled()) {
- logger.debug("Found " + String.valueOf(users.size()) + " target users");
+ if (log.isDebugEnabled()) {
+ log.debug("Found " + String.valueOf(users.size()) + " target users");
}
}
@@ -206,7 +208,7 @@ public class ErrataMailer extends RhnJavaJob {
subject.append(errata.getAdvisory()).append(" - ");
subject.append(errata.getSynopsis());
mail.setSubject(subject.toString());
- TaskHelper.sendMail(mail, logger);
+ TaskHelper.sendMail(mail, log);
}
}
@@ -233,9 +235,10 @@ public class ErrataMailer extends RhnJavaJob {
params.put("org_id", orgId);
params.put("channel_id", channelId);
int workItemsFound = queueWriter.executeUpdate(params);
- if (logger.isDebugEnabled()) {
- logger.debug("Queuing " + workItemsFound + " rows of work");
+ if (log.isDebugEnabled()) {
+ log.debug("Queuing " + workItemsFound + " rows of work");
}
+ HibernateFactory.commitTransaction();
}
private String formatEmail(String login,
commit 7342d6fea566a40b34fabcaf4a645a4b48d05f89
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Mon Jul 26 14:53:05 2010 +0200
add commit to ClearLogHistory
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/ClearLogHistory.java b/java/code/src/com/redhat/rhn/taskomatic/task/ClearLogHistory.java
index 6d0ce49..0de3dc5 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/ClearLogHistory.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/ClearLogHistory.java
@@ -19,6 +19,7 @@ import com.redhat.rhn.taskomatic.TaskoFactory;
import com.redhat.rhn.taskomatic.TaskoRun;
import com.redhat.rhn.taskomatic.TaskoSchedule;
+import org.hibernate.Transaction;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -59,6 +60,7 @@ public class ClearLogHistory extends RhnJavaJob {
log.info("Clearing log history older than: " +
LocalizationService.getInstance().formatCustomDate(limitTime));
+ Transaction tx = TaskoFactory.getSession().beginTransaction();
// loop accross all the orgs
List<TaskoRun> runList = TaskoFactory.listRunsOlderThan(limitTime);
for (TaskoRun run : runList) {
@@ -75,5 +77,6 @@ public class ClearLogHistory extends RhnJavaJob {
TaskoFactory.delete(schedule);
}
}
+ tx.commit();
}
}
commit 7e48942476f13942c58b9390144d7f835264d982
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Sun Jul 25 19:03:39 2010 +0200
errata queue and errata cache task
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/ErrataCacheTask.java b/java/code/src/com/redhat/rhn/taskomatic/task/ErrataCacheTask.java
index e4d96ec..5c6f939 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/ErrataCacheTask.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/ErrataCacheTask.java
@@ -14,47 +14,38 @@
*/
package com.redhat.rhn.taskomatic.task;
-import com.redhat.rhn.common.conf.Config;
import com.redhat.rhn.taskomatic.task.errata.ErrataCacheDriver;
-import com.redhat.rhn.taskomatic.task.threaded.TaskQueue;
-import com.redhat.rhn.taskomatic.task.threaded.TaskQueueFactory;
import org.apache.log4j.Logger;
-import org.quartz.JobExecutionContext;
-import org.quartz.JobExecutionException;
+
/**
* ErrataCacheTask
* @version $Rev$
*/
-public class ErrataCacheTask extends SingleThreadedTestableTask {
-
+public class ErrataCacheTask extends RhnQueueJob {
+
/**
* Used to log stats in the RHNDAEMONSTATE table
- */
- public static final String DISPLAY_NAME = "errata_cache";
-
- private static final Logger LOG = Logger.getLogger(ErrataCacheTask.class);
-
- /**
- * {@inheritDoc}
*/
- public void execute(JobExecutionContext ctx, boolean testContext)
- throws JobExecutionException {
- TaskQueueFactory factory = TaskQueueFactory.get();
- TaskQueue queue = factory.getQueue("errata_cache");
- if (queue == null) {
- try {
- queue = factory.createQueue("errata_cache", ErrataCacheDriver.class);
- }
- catch (Exception e) {
- LOG.error(e);
- return;
- }
- }
- int maxWorkItems = Config.get().getInt("taskomatic.errata_cache_max_work_items", 3);
- if (queue.getQueueSize() < maxWorkItems) {
- queue.run();
+ public static final String DISPLAY_NAME = "errata_cache";
+ private static Logger log = null;
+
+ @Override
+ protected Logger getLogger() {
+ if (log == null) {
+ log = Logger.getLogger(ErrataCacheTask.class);
}
+ return log;
+ }
+
+ @Override
+ protected Class getDriverClass() {
+ return ErrataCacheDriver.class;
+ }
+
+ @Override
+ protected String getQueueName() {
+ return DISPLAY_NAME;
}
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/ErrataQueue.java b/java/code/src/com/redhat/rhn/taskomatic/task/ErrataQueue.java
index 2e2a040..78fbed9 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/ErrataQueue.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/ErrataQueue.java
@@ -14,49 +14,38 @@
*/
package com.redhat.rhn.taskomatic.task;
-import com.redhat.rhn.common.conf.Config;
import com.redhat.rhn.taskomatic.task.errata.ErrataQueueDriver;
-import com.redhat.rhn.taskomatic.task.threaded.TaskQueue;
-import com.redhat.rhn.taskomatic.task.threaded.TaskQueueFactory;
import org.apache.log4j.Logger;
-import org.quartz.JobExecutionContext;
-import org.quartz.JobExecutionException;
/**
* Manages the pending errata queue
- *
+ *
* @version $Rev $
*/
-public class ErrataQueue extends SingleThreadedTestableTask {
-
+public class ErrataQueue extends RhnQueueJob {
+
/**
* Used to log stats in the RHNDAEMONSTATE table
- */
- public static final String DISPLAY_NAME = "errata_queue";
-
- private static final Logger LOG = Logger.getLogger(ErrataQueue.class);
-
- /**
- * {@inheritDoc}
*/
- public void execute(JobExecutionContext ctx, boolean testContext)
- throws JobExecutionException {
- TaskQueueFactory factory = TaskQueueFactory.get();
- TaskQueue queue = factory.getQueue("errata_queue");
- if (queue == null) {
- try {
- queue = factory.createQueue("errata_queue", ErrataQueueDriver.class);
- }
- catch (Exception e) {
- LOG.error(e);
- return;
- }
+ public static final String DISPLAY_NAME = "errata_queue";
+ public static Logger log = null;
+
+ @Override
+ protected Logger getLogger() {
+ if (log == null) {
+ log = Logger.getLogger(ErrataQueue.class);
}
- int maxWorkItems = Config.get().getInt("taskomatic.errata_queue_max_work_items", 2);
- if (queue.getQueueSize() < maxWorkItems) {
- queue.run();
- }
+ return log;
+ }
+
+ @Override
+ protected String getQueueName() {
+ return DISPLAY_NAME;
+ }
+
+ @Override
+ protected Class getDriverClass() {
+ return ErrataQueueDriver.class;
}
-
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataCacheDriver.java b/java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataCacheDriver.java
index a4ff73b..912982d 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataCacheDriver.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataCacheDriver.java
@@ -17,7 +17,6 @@ package com.redhat.rhn.taskomatic.task.errata;
import com.redhat.rhn.common.conf.Config;
import com.redhat.rhn.domain.task.Task;
import com.redhat.rhn.domain.task.TaskFactory;
-import com.redhat.rhn.taskomatic.task.ErrataCacheTask;
import com.redhat.rhn.taskomatic.task.threaded.QueueDriver;
import com.redhat.rhn.taskomatic.task.threaded.QueueWorker;
@@ -29,15 +28,15 @@ import java.util.List;
import java.util.Map;
/**
- * Driver for the threaded errata cache update queue
+ * Driver for the threaded errata cache update queue
* @version $Rev$
*/
public class ErrataCacheDriver implements QueueDriver {
-
- private static final Logger LOG = Logger.getLogger(ErrataCacheTask.class);
+
+ private Logger logger = null;
/**
- *
+ *
* {@inheritDoc}
*/
public boolean canContinue() {
@@ -45,7 +44,7 @@ public class ErrataCacheDriver implements QueueDriver {
}
/**
- *
+ *
* {@inheritDoc}
*/
public List getCandidates() {
@@ -62,15 +61,23 @@ public class ErrataCacheDriver implements QueueDriver {
}
/**
- *
+ *
* {@inheritDoc}
*/
public Logger getLogger() {
- return LOG;
+ return logger;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+
+ public void setLogger(Logger loggerIn) {
+ logger = loggerIn;
}
/**
- *
+ *
* {@inheritDoc}
*/
public int getMaxWorkers() {
@@ -78,12 +85,11 @@ public class ErrataCacheDriver implements QueueDriver {
}
/**
- *
+ *
* {@inheritDoc}
*/
public QueueWorker makeWorker(Object workItem) {
Map item = (Map) workItem;
- return new ErrataCacheWorker(item, LOG);
+ return new ErrataCacheWorker(item, logger);
}
-
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataQueueDriver.java b/java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataQueueDriver.java
index be6c804..297f194 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataQueueDriver.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataQueueDriver.java
@@ -18,7 +18,6 @@ import com.redhat.rhn.common.conf.Config;
import com.redhat.rhn.common.db.datasource.ModeFactory;
import com.redhat.rhn.common.db.datasource.SelectMode;
import com.redhat.rhn.common.hibernate.HibernateFactory;
-import com.redhat.rhn.taskomatic.task.ErrataQueue;
import com.redhat.rhn.taskomatic.task.TaskConstants;
import com.redhat.rhn.taskomatic.task.threaded.QueueDriver;
import com.redhat.rhn.taskomatic.task.threaded.QueueWorker;
@@ -37,11 +36,11 @@ import java.util.Map;
*/
public class ErrataQueueDriver implements QueueDriver {
- private static final Logger LOG = Logger.getLogger(ErrataQueue.class);
-
+ private Logger logger = null;
+
/**
* {@inheritDoc}
- */
+ */
public boolean canContinue() {
return true;
}
@@ -67,26 +66,33 @@ public class ErrataQueueDriver implements QueueDriver {
HibernateFactory.closeSession();
}
}
-
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setLogger(Logger loggerIn) {
+ logger = loggerIn;
+ }
+
/**
* {@inheritDoc}
*/
public Logger getLogger() {
- return LOG;
+ return logger;
}
/**
* {@inheritDoc}
- */
+ */
public int getMaxWorkers() {
return Config.get().getInt("taskomatic.errata_queue_workers", 2);
}
/**
* {@inheritDoc}
- */
+ */
public QueueWorker makeWorker(Object workItem) {
- return new ErrataQueueWorker((Map) workItem, LOG);
+ return new ErrataQueueWorker((Map) workItem, logger);
}
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataQueueWorker.java b/java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataQueueWorker.java
index 99f6425..b979d76 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataQueueWorker.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/errata/ErrataQueueWorker.java
@@ -45,24 +45,24 @@ import java.util.Map;
* @version $Rev$
*/
class ErrataQueueWorker implements QueueWorker {
-
+
private Logger logger;
private Long errataId;
private Long channelId;
private Long orgId;
private TaskQueue parentQueue;
-
+
ErrataQueueWorker(Map row, Logger parentLogger) {
channelId = (Long) row.get("channel_id");
errataId = (Long) row.get("errata_id");
orgId = (Long) row.get("org_id");
logger = parentLogger;
}
-
+
public void run() {
try {
parentQueue.workerStarting();
- dequeueErrata();
+ dequeueErrata();
ActionStatus queuedStatus = lookupQueuedStatus();
try {
Errata errata = loadErrata();
@@ -72,7 +72,7 @@ class ErrataQueueWorker implements QueueWorker {
"skipping ErrataQueue. (" + errataId + ", " + channelId + ")");
}
else {
- scheduleAutoUpdates(errata, queuedStatus, channel);
+ scheduleAutoUpdates(errata, queuedStatus, channel);
}
}
catch (Exception e) {
@@ -80,24 +80,24 @@ class ErrataQueueWorker implements QueueWorker {
return;
}
if (logger.isDebugEnabled()) {
- logger.debug("Scheduling autoupdate actions for errata " +
+ logger.debug("Scheduling autoupdate actions for errata " +
errataId.longValue());
}
if (logger.isDebugEnabled()) {
- logger.debug("Processing errata queue for " +
+ logger.debug("Processing errata queue for " +
errataId.longValue());
}
-
+
WriteMode deqNotif = ModeFactory.getWriteMode(TaskConstants.MODE_NAME,
TaskConstants.TASK_QUERY_ERRATA_QUEUE_DEQUEUE_ERRATA_NOTIFICATION);
Map deqNotifParams = new HashMap();
deqNotifParams.put("errata_id", errataId);
int notifDeleted = deqNotif.executeUpdate(deqNotifParams);
if (logger.isDebugEnabled()) {
- logger.debug("deleted " + notifDeleted +
+ logger.debug("deleted " + notifDeleted +
" rows from the rhnErrataNotificationQueue table");
}
-
+
WriteMode marker = ModeFactory.getWriteMode(TaskConstants.MODE_NAME,
TaskConstants.TASK_QUERY_ERRATA_QUEUE_ENQUEUE_SAT_ERRATA);
Map params = new HashMap();
@@ -106,7 +106,7 @@ class ErrataQueueWorker implements QueueWorker {
params.put("channel_id", channelId);
int rowsUpdated = marker.executeUpdate(params);
if (logger.isDebugEnabled()) {
- logger.debug("inserted " + rowsUpdated +
+ logger.debug("inserted " + rowsUpdated +
" rows into the rhnErrataNotificationQueue table");
}
HibernateFactory.commitTransaction();
@@ -120,8 +120,8 @@ class ErrataQueueWorker implements QueueWorker {
HibernateFactory.closeSession();
}
}
-
-
+
+
private void dequeueErrata() {
WriteMode deqErrata = ModeFactory.getWriteMode(TaskConstants.MODE_NAME,
TaskConstants.TASK_QUERY_ERRATA_QUEUE_DEQUEUE_ERRATA);
@@ -129,17 +129,17 @@ class ErrataQueueWorker implements QueueWorker {
dqeParams.put("errata_id", errataId);
int eqDeleted = deqErrata.executeUpdate(dqeParams);
if (logger.isDebugEnabled()) {
- logger.debug("deleted " + eqDeleted +
+ logger.debug("deleted " + eqDeleted +
" rows from the rhnErrataQueue table");
- }
+ }
HibernateFactory.commitTransaction();
HibernateFactory.closeSession();
}
-
+
private Errata loadErrata() throws Exception {
return ErrataFactory.lookupById(new Long(errataId.longValue()));
}
-
+
protected List findCandidates() throws Exception {
SelectMode select = ModeFactory.getMode(TaskConstants.MODE_NAME,
TaskConstants.TASK_QUERY_ERRATA_QUEUE_FIND_CANDIDATES);
@@ -147,10 +147,10 @@ class ErrataQueueWorker implements QueueWorker {
params.put("threshold", new Integer(1));
return select.execute(params);
}
-
- private void scheduleAutoUpdates(Errata errata,
+
+ private void scheduleAutoUpdates(Errata errata,
ActionStatus queuedStatus, Channel chan) throws Exception {
- logger.debug("Scheduling auto updates for " + errata.getAdvisoryName() + "(" +
+ logger.debug("Scheduling auto updates for " + errata.getAdvisoryName() + "(" +
errata.getId() + ")");
String desc = errata.getAdvisory() + " - " + errata.getSynopsis();
HibernateFactory.getSession();
@@ -163,19 +163,19 @@ class ErrataQueueWorker implements QueueWorker {
List results = select.execute(params);
if (results == null || results.size() == 0) {
if (logger.isDebugEnabled()) {
- logger.debug("No autoupdate servers found for errata " +
+ logger.debug("No autoupdate servers found for errata " +
errata.getId());
}
return;
}
else if (logger.isDebugEnabled()) {
- logger.debug("Found " + results.size() + " autoupdate servers for " +
+ logger.debug("Found " + results.size() + " autoupdate servers for " +
"errata " + errata.getId());
}
-
+
// I think this nifty little loop accurately models what the perl
// code is doing
-
+
Org org = null;
for (Iterator iter = results.iterator(); iter.hasNext();) {
Map row = (Map) iter.next();
@@ -189,12 +189,12 @@ class ErrataQueueWorker implements QueueWorker {
org = OrgFactory.lookupById(orgId);
}
Long convertedServerId = new Long(serverId.longValue());
- // Only schedule an Auto Update if the server supports the
+ // Only schedule an Auto Update if the server supports the
// feature. We originally calculated this in the driving
// query but it wasn't performant.
if (logger.isDebugEnabled()) {
logger.debug("Scheduling auto update for Errata: " +
- errata.getId() + ", Server: " + convertedServerId +
+ errata.getId() + ", Server: " + convertedServerId +
", Org: " + convertedOrgId);
}
ErrataAction errataAction = ActionManager.
@@ -208,12 +208,12 @@ class ErrataQueueWorker implements QueueWorker {
HibernateFactory.closeSession();
}
else {
- logger.error("No advisory or synopsis found for errata " +
+ logger.error("No advisory or synopsis found for errata " +
errata.getId());
}
-
+
}
-
+
private ActionStatus lookupQueuedStatus() {
ActionStatus queuedStatus = ActionFactory.STATUS_QUEUED;
if (queuedStatus != null) {
@@ -223,7 +223,7 @@ class ErrataQueueWorker implements QueueWorker {
logger.error("Couldn't locate \"queued\" action status");
return null;
}
-
+
}
public void setParentQueue(TaskQueue queue) {
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/test/ErrataQueueTest.java b/java/code/src/com/redhat/rhn/taskomatic/task/test/ErrataQueueTest.java
index de7317f..ffdcaf3 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/test/ErrataQueueTest.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/test/ErrataQueueTest.java
@@ -24,10 +24,10 @@ import java.util.List;
import java.util.Map;
public class ErrataQueueTest extends BaseTestCaseWithUser {
-
+
// We can run this now that mmccune made ErrataQueue perform OK.
public void testErrataQueue() throws Exception {
-
+
ErrataQueue eq = new ErrataQueue() {
// Override this so we only process one errata.
@@ -43,10 +43,10 @@ public class ErrataQueueTest extends BaseTestCaseWithUser {
System.out.println("Returning one test errata.");
return retval;
}
-
+
};
- eq.execute(null, true);
- // Just a simple test to make sure we get here without
+ eq.execute(null);
+ // Just a simple test to make sure we get here without
// exceptions. Better than nothin'
assertTrue(true);
}
diff --git a/schema/spacewalk/common/data/rhnTaskoBunch.sql b/schema/spacewalk/common/data/rhnTaskoBunch.sql
index b6c912b..ed2ca19 100644
--- a/schema/spacewalk/common/data/rhnTaskoBunch.sql
+++ b/schema/spacewalk/common/data/rhnTaskoBunch.sql
@@ -57,6 +57,9 @@ INSERT INTO rhnTaskoBunch (id, name, description, org_bunch, active_from)
VALUES (rhn_tasko_bunch_id_seq.nextval, 'kickstart-cleanup-bunch', 'Cleans up stale Kickstarts', '', sysdate);
INSERT INTO rhnTaskoBunch (id, name, description, org_bunch, active_from)
- VALUES (rhn_tasko_bunch_id_seq.nextval, 'errata-mailer-bunch', 'Emails errata info', '', sysdate);
+ VALUES (rhn_tasko_bunch_id_seq.nextval, 'errata-queue-bunch', 'Processes errata', '', sysdate);
+
+INSERT INTO rhnTaskoBunch (id, name, description, org_bunch, active_from)
+ VALUES (rhn_tasko_bunch_id_seq.nextval, 'errata-cache-bunch', 'Performs errata cache recalc for a given server or channel', '', sysdate);
commit;
diff --git a/schema/spacewalk/common/data/rhnTaskoTemplate.sql b/schema/spacewalk/common/data/rhnTaskoTemplate.sql
index edab431..a664b3c 100644
--- a/schema/spacewalk/common/data/rhnTaskoTemplate.sql
+++ b/schema/spacewalk/common/data/rhnTaskoTemplate.sql
@@ -121,8 +121,22 @@ INSERT INTO rhnTaskoTemplate (id, bunch_id, task_id, ordering, start_if)
INSERT INTO rhnTaskoTemplate (id, bunch_id, task_id, ordering, start_if)
VALUES (rhn_tasko_template_id_seq.nextval,
- (SELECT id FROM rhnTaskoBunch WHERE name='errata-mailer-bunch'),
+ (SELECT id FROM rhnTaskoBunch WHERE name='errata-queue-bunch'),
+ (SELECT id FROM rhnTaskoTask WHERE name='errata-queue'),
+ 0,
+ '');
+
+INSERT INTO rhnTaskoTemplate (id, bunch_id, task_id, ordering, start_if)
+ VALUES (rhn_tasko_template_id_seq.nextval,
+ (SELECT id FROM rhnTaskoBunch WHERE name='errata-queue-bunch'),
(SELECT id FROM rhnTaskoTask WHERE name='errata-mailer'),
+ 1,
+ '');
+
+INSERT INTO rhnTaskoTemplate (id, bunch_id, task_id, ordering, start_if)
+ VALUES (rhn_tasko_template_id_seq.nextval,
+ (SELECT id FROM rhnTaskoBunch WHERE name='errata-cache-bunch'),
+ (SELECT id FROM rhnTaskoTask WHERE name='errata-cache'),
0,
'');
commit 23e423ee95d51790ae58fa4c81f94070118739e2
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Sun Jul 25 18:59:20 2010 +0200
logging for queue tasks
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/RhnQueueJob.java b/java/code/src/com/redhat/rhn/taskomatic/task/RhnQueueJob.java
new file mode 100644
index 0000000..2e822f7
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/RhnQueueJob.java
@@ -0,0 +1,132 @@
+/**
+ * Copyright (c) 2009--2010 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
+ * implied, including the implied warranties of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+ * along with this software; if not, see
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+ *
+ * Red Hat trademarks are not licensed under GPLv2. No permission is
+ * granted to use or replicate Red Hat trademarks that are incorporated
+ * in this software or its documentation.
+ */
+package com.redhat.rhn.taskomatic.task;
+
+import com.redhat.rhn.common.conf.Config;
+import com.redhat.rhn.common.hibernate.HibernateFactory;
+import com.redhat.rhn.taskomatic.TaskoRun;
+import com.redhat.rhn.taskomatic.task.threaded.TaskQueue;
+import com.redhat.rhn.taskomatic.task.threaded.TaskQueueFactory;
+
+import org.apache.log4j.FileAppender;
+import org.apache.log4j.Logger;
+import org.apache.log4j.PatternLayout;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+
+import java.io.IOException;
+
+/**
+ * Custom Quartz Job implementation which only allows one thread to
+ * run at a time. All other threads return without performing any work.
+ * This policy was chosen instead of blocking so as to reduce threading
+ * problems inside Quartz itself.
+ *
+ * @version $Rev $
+ *
+ */
+public abstract class RhnQueueJob implements RhnJob {
+
+ private TaskoRun jobRun = null;
+ boolean queueEmpty = true;
+
+ abstract protected Logger getLogger();
+
+ public void appendExceptionToLogError(Exception e) {
+ getLogger().error(e.getMessage());
+ getLogger().error(e.getCause());
+ }
+
+ void logToNewFile() {
+ PatternLayout pattern =
+ new PatternLayout(DEFAULT_LOGGING_LAYOUT);
+ try {
+ getLogger().removeAllAppenders();
+ FileAppender appender = new FileAppender(pattern, jobRun.buildStdOutputLogPath());
+ getLogger().addAppender(appender);
+ }
+ catch (IOException e) {
+ getLogger().warn("Logging to file disabled");
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void execute(JobExecutionContext ctx, TaskoRun runIn)
+ throws JobExecutionException {
+ setJobRun(runIn);
+ try {
+ execute(ctx);
+ } catch (Exception e) {
+ if (HibernateFactory.getSession().getTransaction().isActive()) {
+ HibernateFactory.rollbackTransaction();
+ }
+ appendExceptionToLogError(e);
+ jobRun.saveStatus(TaskoRun.STATUS_FAILED);
+ }
+ HibernateFactory.commitTransaction();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void execute(JobExecutionContext ctx)
+ throws JobExecutionException {
+ TaskQueueFactory factory = TaskQueueFactory.get();
+ String queueName = getQueueName();
+ TaskQueue queue = factory.getQueue(queueName);
+ if (queue == null) {
+ try {
+ queue = factory.createQueue(queueName, getDriverClass(), getLogger());
+ }
+ catch (Exception e) {
+ getLogger().error(e);
+ return;
+ }
+ }
+ if (queue.changeRun(jobRun)) {
+ jobRun.start();
+ logToNewFile();
+ getLogger().debug("Starting run "+ jobRun.getId());
+ }
+ int maxWorkItems = Config.get().getInt("taskomatic." + queueName + "_max_work_items", 1);
+ if (queue.getQueueSize() < maxWorkItems) {
+ queue.run(this);
+ }
+ else {
+ getLogger().info("Maximum number of workers already put ... skipping.");
+ }
+ }
+
+ /**
+ * @return Returns the run.
+ */
+ public TaskoRun getRun() {
+ return jobRun;
+ }
+
+ /**
+ * @param runIn The run to set.
+ */
+ public void setJobRun(TaskoRun runIn) {
+ jobRun = runIn;
+ }
+
+ protected abstract Class getDriverClass();
+
+ protected abstract String getQueueName();
+}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/threaded/QueueDriver.java b/java/code/src/com/redhat/rhn/taskomatic/task/threaded/QueueDriver.java
index ce60fb3..6c81641 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/threaded/QueueDriver.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/threaded/QueueDriver.java
@@ -23,32 +23,38 @@ import java.util.List;
* @version $Rev$
*/
public interface QueueDriver {
-
+
+ /**
+ * Set the logger to use for all logging operations
+ * @return void
+ */
+ void setLogger(Logger loggerIn);
+
/**
* The logger to use for all logging operations
* @return log4j Logger
*/
Logger getLogger();
-
+
/**
* List of work items to "prime" the queue
* @return list of work items
*/
List getCandidates();
-
+
/**
* Maximum number of worker threads to run
* @return number of worker threads
*/
int getMaxWorkers();
-
+
/**
* Create a worker instance to work on a particular work item
* @param workItem object contained in the list returned from getCandidates()
* @return worker instance
*/
QueueWorker makeWorker(Object workItem);
-
+
/**
* Logic to tell the queue when to stop running
* Queues will always stop when there is no more work to do.
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/threaded/TaskQueue.java b/java/code/src/com/redhat/rhn/taskomatic/task/threaded/TaskQueue.java
index c57b232..50a6f89 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/threaded/TaskQueue.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/threaded/TaskQueue.java
@@ -19,6 +19,9 @@ import EDU.oswego.cs.dl.util.concurrent.LinkedQueue;
import EDU.oswego.cs.dl.util.concurrent.PooledExecutor;
import com.redhat.rhn.common.hibernate.HibernateFactory;
+import com.redhat.rhn.taskomatic.TaskoFactory;
+import com.redhat.rhn.taskomatic.TaskoRun;
+import com.redhat.rhn.taskomatic.task.RhnQueueJob;
import java.util.List;
@@ -27,15 +30,17 @@ import java.util.List;
* tasks need to process a number of work items in parallel.
* @version $Rev$
*/
-public class TaskQueue implements Runnable {
-
+public class TaskQueue {
+
private QueueDriver queueDriver;
private Channel workers = new LinkedQueue();
private PooledExecutor executor = null;
private int executingWorkers = 0;
private int queueSize = 0;
private byte[] emptyQueueWait = new byte[0];
-
+ private boolean taskQueueDone = true;
+ private TaskoRun queueRun = null;
+
/**
* Store the QueueDriver instance used when run() is called
* @param driver to be used as the current QueueDriver
@@ -43,7 +48,7 @@ public class TaskQueue implements Runnable {
public void setQueueDriver(QueueDriver driver) {
queueDriver = driver;
}
-
+
/**
* Get the current QueueDriver
* @return current QueueDriver
@@ -51,7 +56,7 @@ public class TaskQueue implements Runnable {
public QueueDriver getQueueDriver() {
return queueDriver;
}
-
+
/**
* Callback all workers should call when starting
* to process work
@@ -59,7 +64,7 @@ public class TaskQueue implements Runnable {
public synchronized void workerStarting() {
executingWorkers++;
}
-
+
/**
* Callback all workers should call when
* finished with their work item
@@ -77,19 +82,22 @@ public class TaskQueue implements Runnable {
synchronized (emptyQueueWait) {
emptyQueueWait.notifyAll();
}
+ synchronized (this) {
+ taskQueueDone = true;
+ }
}
}
-
+
/**
* Returns the number of currently executing workers
- * This should never be more than the thread pool's
+ * This should never be more than the thread pool's
* maximum size
* @return number of currently executing workers
*/
public int getExecutingWorkerCount() {
return executingWorkers;
}
-
+
/**
* Returns the number of workers pending
* @return number of workers pending
@@ -97,22 +105,28 @@ public class TaskQueue implements Runnable {
public int getQueueSize() {
return queueSize;
}
-
+
/**
* {@inheritDoc}
+ * @param runIn
+ * @param jobIn
*/
- public void run() {
+ public void run(RhnQueueJob jobIn) {
setupQueue();
List candidates = queueDriver.getCandidates();
queueSize = candidates.size();
+ queueDriver.getLogger().info("In the queue: " + queueSize);
while (candidates.size() > 0 && queueDriver.canContinue()) {
- Object candidate = (Object) candidates.remove(0);
+ Object candidate = candidates.remove(0);
QueueWorker worker = queueDriver.makeWorker(candidate);
worker.setParentQueue(this);
try {
queueDriver.getLogger().debug("Putting worker");
workers.put(worker);
queueDriver.getLogger().debug("Put worker");
+ synchronized (this) {
+ taskQueueDone = false;
+ }
}
catch (InterruptedException e) {
queueDriver.getLogger().error(e);
@@ -122,8 +136,16 @@ public class TaskQueue implements Runnable {
return;
}
}
+ if (isTaskQueueDone()) {
+ // everything done
+ queueDriver.getLogger().debug("Finishing run "+ queueRun.getId());
+ queueRun.finished();
+ queueRun.saveStatus(TaskoRun.STATUS_FINISHED);
+ TaskoFactory.commitTransaction();
+ changeRun(null);
+ }
}
-
+
/**
* Waits indefinitely until the queue has emptied of all workers
* @throws InterruptedException the wait is interrupted
@@ -133,7 +155,7 @@ public class TaskQueue implements Runnable {
emptyQueueWait.wait();
}
}
-
+
void shutdown() {
executor.shutdownNow();
while (!executor.isTerminatedAfterShutdown()) {
@@ -144,9 +166,9 @@ public class TaskQueue implements Runnable {
queueDriver.getLogger().error(e);
return;
}
- }
+ }
}
-
+
private void setupQueue() {
if (executor != null) {
executor.shutdownAfterProcessingCurrentlyQueuedTasks();
@@ -155,9 +177,25 @@ public class TaskQueue implements Runnable {
int maxPoolSize = queueDriver.getMaxWorkers();
executor = new PooledExecutor(workers);
executor.setThreadFactory(new TaskThreadFactory());
- executor.setKeepAliveTime(5000);
+ executor.setKeepAliveTime(5000);
executor.setMinimumPoolSize(1);
executor.setMaximumPoolSize(maxPoolSize);
executor.createThreads(maxPoolSize);
}
+
+ public boolean changeRun(TaskoRun runIn) {
+ if (runIn == null) {
+ queueRun = null;
+ return true;
+ }
+ else if (queueRun == null) {
+ queueRun = runIn;
+ return true;
+ }
+ return false;
+ }
+
+ private synchronized boolean isTaskQueueDone() {
+ return taskQueueDone;
+ }
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/threaded/TaskQueueFactory.java b/java/code/src/com/redhat/rhn/taskomatic/task/threaded/TaskQueueFactory.java
index 7e3f9c3..5ba1062 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/threaded/TaskQueueFactory.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/threaded/TaskQueueFactory.java
@@ -14,19 +14,21 @@
*/
package com.redhat.rhn.taskomatic.task.threaded;
+import org.apache.log4j.Logger;
+
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
- * Provides an easy-to-use way to locate and use threaded
- * work queues. Each queue is only created once.
+ * Provides an easy-to-use way to locate and use threaded
+ * work queues. Each queue is only created once.
* @version $Rev$
*/
public class TaskQueueFactory {
-
+
private static TaskQueueFactory instance = new TaskQueueFactory();
-
+
private Map queues = new HashMap();
/**
@@ -36,11 +38,11 @@ public class TaskQueueFactory {
public static TaskQueueFactory get() {
return instance;
}
-
+
private TaskQueueFactory() {
Runtime.getRuntime().addShutdownHook(new ShutdownHook(this));
}
-
+
/**
* Retrieves a queue by name
* @param name queue name
@@ -51,29 +53,32 @@ public class TaskQueueFactory {
return (TaskQueue) queues.get(name);
}
}
-
+
/**
* Create the queue, if it doesn't exist already. If the
- * queue has been created on a previous call to createQueue(),
+ * queue has been created on a previous call to createQueue(),
* then that instance is returned instead.
* @param name queue name
* @param driverClass class to use as the queue driver
+ * @param loggerIn queue logger
* @return queue instance
* @throws Exception error occurred during queue creation
*/
- public TaskQueue createQueue(String name, Class driverClass) throws Exception {
+ public TaskQueue createQueue(String name, Class driverClass, Logger loggerIn) throws Exception {
TaskQueue retval = null;
synchronized (queues) {
retval = (TaskQueue) queues.get(name);
if (retval == null) {
retval = new TaskQueue();
- retval.setQueueDriver((QueueDriver) driverClass.newInstance());
+ QueueDriver driver = (QueueDriver) driverClass.newInstance();
+ driver.setLogger(loggerIn);
+ retval.setQueueDriver(driver);
queues.put(name, retval);
}
}
return retval;
}
-
+
/**
* Removes the queue from the map of available queues.
* This DOES NOT shutdown the queue or perform any cleanup.
@@ -87,7 +92,7 @@ public class TaskQueueFactory {
}
return retval;
}
-
+
void closeAllQueues() {
synchronized (queues) {
for (Iterator iter = queues.values().iterator(); iter.hasNext();) {
@@ -97,19 +102,19 @@ public class TaskQueueFactory {
}
queues.clear();
}
-
+
/**
* JVM shutdown hook used to clean up any remaining queues
* @version $Rev$
*/
class ShutdownHook extends Thread {
-
+
private TaskQueueFactory factory;
-
+
ShutdownHook(TaskQueueFactory factoryIn) {
factory = factoryIn;
}
-
+
public void run() {
factory.closeAllQueues();
}
commit 66ff2bc97c019cdb28363e35ed0c009f86dfd059
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Sun Jul 25 18:51:20 2010 +0200
logging changed
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/CleanCurrentAlerts.java b/java/code/src/com/redhat/rhn/taskomatic/task/CleanCurrentAlerts.java
index 8670c4c..4ea19a6 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/CleanCurrentAlerts.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/CleanCurrentAlerts.java
@@ -17,7 +17,6 @@ package com.redhat.rhn.taskomatic.task;
import com.redhat.rhn.common.db.datasource.ModeFactory;
import com.redhat.rhn.common.db.datasource.WriteMode;
-import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -29,24 +28,22 @@ import java.util.HashMap;
* @version $Rev$
*/
public class CleanCurrentAlerts extends RhnJavaJob {
-
+
/**
* Used to log stats in the RHNDAEMONSTATE table
*/
public static final String DISPLAY_NAME = "clean_current_alerts";
- private Logger log = getLogger(CleanCurrentAlerts.class);
-
/**
* {@inheritDoc}
*/
public void execute(JobExecutionContext contextIn)
throws JobExecutionException {
-
+
if (log.isDebugEnabled()) {
log.debug("Starting clean_current_alerts run ...");
}
-
+
/*
* First, set DATE_COMPLETED on any alerts that may be left hanging
* around (e.g. from a server crash)
@@ -54,37 +51,37 @@ public class CleanCurrentAlerts extends RhnJavaJob {
if (log.isDebugEnabled()) {
log.debug("Updating DATE_COMPLETED");
}
-
+
int rowsUpdated = updateDateCompleted();
-
+
if (log.isDebugEnabled()) {
log.debug(rowsUpdated + " rows updated.");
}
-
+
/*
* Next, delete old CURRENT_ALERTS records.
*/
if (log.isDebugEnabled()) {
log.debug("Deleting old CURRENT_ALERTS records");
}
-
+
int rowsDeleted = deleteOldAlerts();
-
+
if (log.isDebugEnabled()) {
log.debug(rowsDeleted + " rows deleted");
}
-
+
if (log.isDebugEnabled()) {
log.debug("Finished clean_current_alerts run.");
}
}
-
+
/**
* Updated the date_completed and in_progress columns of rhn_current_alerts.
* @return Returns the number of rows affected.
*/
private int updateDateCompleted() {
- WriteMode m = ModeFactory.getWriteMode("General_queries",
+ WriteMode m = ModeFactory.getWriteMode("General_queries",
"update_current_alerts_date_completed");
return m.executeUpdate(new HashMap());
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/ClearLogHistory.java b/java/code/src/com/redhat/rhn/taskomatic/task/ClearLogHistory.java
index 8c65ecd..6d0ce49 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/ClearLogHistory.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/ClearLogHistory.java
@@ -19,7 +19,6 @@ import com.redhat.rhn.taskomatic.TaskoFactory;
import com.redhat.rhn.taskomatic.TaskoRun;
import com.redhat.rhn.taskomatic.TaskoSchedule;
-import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -33,10 +32,10 @@ import java.util.List;
* @version $Rev$
*/
public class ClearLogHistory extends RhnJavaJob {
- private Logger log = getLogger(ClearLogHistory.class);
+
/**
* {@inheritDoc}
- * @throws InvalidParamException
+ * @throws InvalidParamException
*/
public void execute(JobExecutionContext context)
throws JobExecutionException {
@@ -57,8 +56,8 @@ public class ClearLogHistory extends RhnJavaJob {
now.set(Calendar.SECOND, 0);
now.set(Calendar.MILLISECOND, 0);
Date limitTime = now.getTime();
-
- log.info("Clearing log history older than: " +
+
+ log.info("Clearing log history older than: " +
LocalizationService.getInstance().formatCustomDate(limitTime));
// loop accross all the orgs
List<TaskoRun> runList = TaskoFactory.listRunsOlderThan(limitTime);
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/CobblerSyncTask.java b/java/code/src/com/redhat/rhn/taskomatic/task/CobblerSyncTask.java
index 0d6b56b..35756f2 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/CobblerSyncTask.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/CobblerSyncTask.java
@@ -22,7 +22,6 @@ import com.redhat.rhn.manager.kickstart.cobbler.CobblerProfileSyncCommand;
import com.redhat.rhn.manager.kickstart.cobbler.CobblerSystemSyncCommand;
import com.redhat.rhn.manager.kickstart.cobbler.CobblerXMLRPCHelper;
-import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -38,18 +37,16 @@ import redstone.xmlrpc.XmlRpcFault;
* @version $Rev$
*/
public class CobblerSyncTask extends RhnJavaJob {
-
+
private static final AtomicLong LAST_UPDATED = new AtomicLong();
private long errorCount;
private long distroWarnCount;
-
+
/**
* Used to log stats in the RHNDAEMONSTATE table
*/
public static final String DISPLAY_NAME = "sync_from_cobbler";
- private Logger log = getLogger(CobblerSyncTask.class);
-
/**
* Default constructor
*/
@@ -57,35 +54,35 @@ public class CobblerSyncTask extends RhnJavaJob {
errorCount = 0;
distroWarnCount = 0;
}
-
+
/**
* {@inheritDoc}
*/
public void execute(JobExecutionContext ctxIn)
throws JobExecutionException {
-
+
try {
- XMLRPCInvoker invoker = (XMLRPCInvoker)
+ XMLRPCInvoker invoker = (XMLRPCInvoker)
MethodUtil.getClassFromConfig(CobblerXMLRPCHelper.class.getName());
-
+
Double mtime = null;
try {
- mtime = (Double) invoker.invokeMethod("last_modified_time",
+ mtime = (Double) invoker.invokeMethod("last_modified_time",
new ArrayList());
}
catch (XmlRpcFault e) {
log.error("Error calling cobbler.", e);
}
-
+
CobblerDistroSyncCommand distSync = new CobblerDistroSyncCommand();
ValidatorError ve = distSync.syncNullDistros();
if (ve != null && distroWarnCount < 1) {
TaskHelper.sendErrorEmail(log, ve.getMessage());
distroWarnCount++;
}
-
-
- log.debug("mtime: " + mtime.longValue() + ", last modified: " +
+
+
+ log.debug("mtime: " + mtime.longValue() + ", last modified: " +
LAST_UPDATED.get());
//If we got an mtime from cobbler and that mtime is before our last update
// Then don't update anything
@@ -95,25 +92,25 @@ public class CobblerSyncTask extends RhnJavaJob {
}
else {
log.debug("Syncing distros and profiles.");
-
+
ve = distSync.store();
if (ve != null) {
TaskHelper.sendErrorEmail(log, ve.getMessage());
}
-
+
CobblerProfileSyncCommand profSync = new CobblerProfileSyncCommand();
profSync.store();
-
+
CobblerSystemSyncCommand systemSync = new CobblerSystemSyncCommand();
systemSync.store();
}
-
+
LAST_UPDATED.set((new Date()).getTime() / 1000 + 1);
}
catch (RuntimeException re) {
- log.error("RuntimeExceptioneError trying to sync to cobbler: " +
+ log.error("RuntimeExceptioneError trying to sync to cobbler: " +
re.getMessage(), re);
- // Only throw up one error. Otherwise if say cobblerd is shutoff you can
+ // Only throw up one error. Otherwise if say cobblerd is shutoff you can
// possibly generate 1 stacktrace email per minute which is quite spammy.
if (errorCount < 1) {
errorCount++;
@@ -125,7 +122,7 @@ public class CobblerSyncTask extends RhnJavaJob {
}
}
}
-
-
+
+
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/CompareConfigFilesTask.java b/java/code/src/com/redhat/rhn/taskomatic/task/CompareConfigFilesTask.java
index 29098c2..36fa613 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/CompareConfigFilesTask.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/CompareConfigFilesTask.java
@@ -26,7 +26,6 @@ import com.redhat.rhn.domain.server.ServerFactory;
import com.redhat.rhn.frontend.dto.ConfigFileNameDto;
import com.redhat.rhn.manager.configuration.ConfigurationManager;
-import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -45,8 +44,6 @@ public class CompareConfigFilesTask extends RhnJavaJob {
*/
public static final String DISPLAY_NAME = "compare_config_files";
- private Logger log = getLogger(CompareConfigFilesTask.class);
-
/**
* Default constructor
*/
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/DailySummary.java b/java/code/src/com/redhat/rhn/taskomatic/task/DailySummary.java
index 6d793bd..3b5c28d 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/DailySummary.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/DailySummary.java
@@ -31,7 +31,6 @@ import com.redhat.rhn.frontend.dto.ReportingUser;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.StopWatch;
-import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -52,7 +51,7 @@ import java.util.TreeMap;
* @version $Rev$
*/
public class DailySummary extends RhnJavaJob {
-
+
/**
* Used to log stats in the RHNDAEMONSTATE table
*/
@@ -64,8 +63,7 @@ public class DailySummary extends RhnJavaJob {
private Mail mail;
- private Logger log = getLogger(DailySummary.class);
-
+
/**
* Default constructor
*/
@@ -80,7 +78,7 @@ public class DailySummary extends RhnJavaJob {
public DailySummary(Mail mailer) {
mail = mailer;
}
-
+
/**
* {@inheritDoc}
*/
@@ -89,8 +87,8 @@ public class DailySummary extends RhnJavaJob {
SelectMode m = ModeFactory.getMode(TaskConstants.MODE_NAME,
TaskConstants.TASK_QUERY_DAILY_SUMMARY_QUEUE);
List results = m.execute();
-
-
+
+
OrgIdWrapper oiw = null;
for (Iterator itr = results.iterator(); itr.hasNext();) {
try {
@@ -115,7 +113,7 @@ public class DailySummary extends RhnJavaJob {
HibernateFactory.closeSession();
}
}
- }
+ }
}
/**
@@ -142,7 +140,7 @@ public class DailySummary extends RhnJavaJob {
TaskConstants.TASK_QUERY_USERS_WANTING_REPORTS);
Map params = new HashMap();
params.put("org_id", orgId);
-
+
StopWatch watch = new StopWatch();
watch.start();
List users = m.execute(params);
@@ -152,24 +150,24 @@ public class DailySummary extends RhnJavaJob {
List awol = getAwolServers(ru.idAsLong());
// send email
List actions = getActionInfo(ru.idAsLong());
- if ((awol == null || awol.size() == 0) && (actions == null ||
+ if ((awol == null || awol.size() == 0) && (actions == null ||
actions.size() == 0)) {
- log.debug("Skipping ORG " + orgId + " because daily summary info has " +
+ log.debug("Skipping ORG " + orgId + " because daily summary info has " +
"changed");
continue;
}
String awolMsg = renderAwolServersMessage(awol);
String actionMsg = renderActionsMessage(actions);
-
+
String emailMsg = prepareEmail(
ru.getLogin(), ru.getAddress(), awolMsg, actionMsg);
-
- LocalizationService ls = LocalizationService.getInstance();
+
+ LocalizationService ls = LocalizationService.getInstance();
mail.setSubject(ls.getMessage(
"dailysummary.email.subject", ls.formatDate(new Date())));
mail.setRecipient(ru.getAddress());
-
+
if (log.isDebugEnabled()) {
log.debug("Sending email to [" + ru.getAddress() + "]");
}
@@ -179,11 +177,11 @@ public class DailySummary extends RhnJavaJob {
}
watch.stop();
if (log.isDebugEnabled()) {
- log.debug("queued emails of org of " + users.size() +
+ log.debug("queued emails of org of " + users.size() +
" users in " + watch.getTime() + "ms");
}
}
-
+
/**
* DO NOT CALL FROM OUTSIDE THIS CLASS. Returns the list of awol servers.
* @param uid User id whose awol servers are sought.
@@ -196,10 +194,10 @@ public class DailySummary extends RhnJavaJob {
params.put("user_id", uid);
params.put("checkin_threshold",
Config.get().getInteger(ConfigDefaults.SYSTEM_CHECKIN_THRESHOLD));
-
+
return m.execute(params);
}
-
+
/**
* DO NOT CALL FROM OUTSIDE THIS CLASS. Returns the list of recent actions.
* @param uid User id whose recent actions are sought.
@@ -210,10 +208,10 @@ public class DailySummary extends RhnJavaJob {
TaskConstants.TASK_QUERY_GET_ACTION_INFO);
Map params = new HashMap();
params.put("user_id", uid);
-
+
return m.execute(params);
}
-
+
/**
* DO NOT CALL FROM OUTSIDE THIS CLASS. Renders the awol servers message
* @param servers list of awol servers
@@ -226,12 +224,12 @@ public class DailySummary extends RhnJavaJob {
/*
* The Awol message is going to be a table containing a list of systems
* that have gone AWOL.
- *
+ *
* All the calculation crap for tables will be done... how many spaces
* between columns and the column width for the given data.
* This means that we will read through the data twice, once to find the
* longest entries and again to build the return string.
- *
+ *
* Since this will be going in an email, if the receiver doesn't use
* monospace fonts *ever* than all this calculation is for nothing.
*/
@@ -239,12 +237,12 @@ public class DailySummary extends RhnJavaJob {
String sid = ls.getMessage("taskomatic.daily.sid"); //System Id column
String sname = ls.getMessage("taskomatic.daily.systemname"); //System Name column
String checkin = ls.getMessage("taskomatic.daily.checkin"); //Last Checkin column
-
+
//First we need to figure out how long the width of the columns should be.
int minDiff = 4; //this is the minimum spaces between header elements
int sidLength = sid.length() + minDiff;
int snameLength = sid.length() + minDiff;
-
+
//Find the longest entry in the table for both sid and sname.
for (Iterator itr = servers.iterator(); itr.hasNext();) {
AwolServer as = (AwolServer) itr.next();
@@ -259,7 +257,7 @@ public class DailySummary extends RhnJavaJob {
snameLength = currentName.length() + 1;
}
}
-
+
//render the header-- System Id System Name LastCheckin
StringBuffer buf = new StringBuffer();
buf.append(sid);
@@ -268,7 +266,7 @@ public class DailySummary extends RhnJavaJob {
buf.append(StringUtils.repeat(" ", snameLength - sname.length()));
buf.append(checkin);
buf.append("\n");
-
+
//Now render the data in the table
for (Iterator itr = servers.iterator(); itr.hasNext();) {
AwolServer as = (AwolServer) itr.next();
@@ -281,7 +279,7 @@ public class DailySummary extends RhnJavaJob {
buf.append(as.getCheckin());
buf.append("\n");
}
-
+
//Lastly, create the url for the link in the email.
StringBuffer url = new StringBuffer();
if (Config.get().getBoolean(ConfigDefaults.SSL_AVAILABLE)) {
@@ -292,11 +290,11 @@ public class DailySummary extends RhnJavaJob {
}
url.append(getHostname());
url.append("/rhn/systems/Inactive.do");
-
+
return LocalizationService.getInstance().getMessage(
"taskomatic.msg.awolservers", buf.toString(), url);
}
-
+
/**
* DO NOT CALL FROM OUTSIDE THIS CLASS. Renders the actions email message
* @param actions list of recent actions
@@ -356,7 +354,7 @@ public class DailySummary extends RhnJavaJob {
}
}
-
+
hdr.append(StringUtils.repeat(" ", longestActionLength));
for (String status : statusSet) {
hdr.append(status + StringUtils.repeat(" ", (longestStatusLength +
@@ -389,7 +387,7 @@ public class DailySummary extends RhnJavaJob {
}
return msg.toString();
}
-
+
private StringBuffer renderActionTree(int longestActionLength,
int longestStatusLength, LinkedHashSet<String> statusSet,
TreeMap<String, HashMap<String, Integer>> actionTree) {
@@ -438,13 +436,13 @@ public class DailySummary extends RhnJavaJob {
args[6] = OrgFactory.EMAIL_ACCOUNT_INFO.getValue();
String msg = ls.getMessage(
"dailysummary.email.body", (Object[])args);
-
+
// wow, what an ugly @$$ hack, but this requires rewriting
// the email templating engine which kinda sucks.
msg = StringUtils.replace(msg, "<login />", login);
return StringUtils.replace(msg, "<email-address />", email);
}
-
+
private String getHostname() {
return ConfigDefaults.get().getHostname();
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/KickstartCleanup.java b/java/code/src/com/redhat/rhn/taskomatic/task/KickstartCleanup.java
index 5892dcf..9f721bd 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/KickstartCleanup.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/KickstartCleanup.java
@@ -20,7 +20,6 @@ import com.redhat.rhn.common.db.datasource.ModeFactory;
import com.redhat.rhn.common.db.datasource.SelectMode;
import com.redhat.rhn.common.db.datasource.WriteMode;
-import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -42,8 +41,6 @@ public class KickstartCleanup extends RhnJavaJob {
*/
public static final String DISPLAY_NAME = "kickstart_session_check";
- private Logger logger = getLogger(KickstartCleanup.class);
-
/**
* Primarily a convenience method to make testing easier
* @param ctx Quartz job runtime environment
@@ -56,8 +53,8 @@ public class KickstartCleanup extends RhnJavaJob {
SelectMode select = ModeFactory.getMode(TaskConstants.MODE_NAME,
TaskConstants.TASK_QUERY_KSCLEANUP_FIND_CANDIDATES);
DataResult dr = select.execute(Collections.EMPTY_MAP);
- if (logger.isDebugEnabled()) {
- logger.debug("Found " + dr.size() + " entries to process");
+ if (log.isDebugEnabled()) {
+ log.debug("Found " + dr.size() + " entries to process");
}
// Bail early if no candidates
if (dr.size() == 0) {
@@ -66,7 +63,7 @@ public class KickstartCleanup extends RhnJavaJob {
Long failedStateId = findFailedStateId();
if (failedStateId == null) {
- logger.warn("Failed kickstart state id not found");
+ log.warn("Failed kickstart state id not found");
return;
}
for (Iterator iter = dr.iterator(); iter.hasNext();) {
@@ -75,7 +72,7 @@ public class KickstartCleanup extends RhnJavaJob {
}
}
catch (Exception e) {
- logger.error(e.getMessage(), e);
+ log.error(e.getMessage(), e);
throw new JobExecutionException(e);
}
}
@@ -93,8 +90,8 @@ public class KickstartCleanup extends RhnJavaJob {
private void processRow(Long failedStateId, Map row) {
Long sessionId = (Long) row.get("id");
- if (logger.isInfoEnabled()) {
- logger.info("Processing stalled kickstart session " + sessionId.longValue());
+ if (log.isInfoEnabled()) {
+ log.info("Processing stalled kickstart session " + sessionId.longValue());
}
Long actionId = (Long) row.get("action_id");
Long oldServerId = (Long) row.get("old_server_id");
@@ -134,15 +131,15 @@ public class KickstartCleanup extends RhnJavaJob {
TaskConstants.TASK_QUERY_KSCLEANUP_FIND_PREREQ_ACTION);
Map params = new HashMap();
params.put("action_id", startingAction);
- if (logger.isDebugEnabled()) {
- logger.debug("StartingAction: " + startingAction);
+ if (log.isDebugEnabled()) {
+ log.debug("StartingAction: " + startingAction);
}
Long retval = startingAction;
Long preqid = startingAction;
DataResult dr = select.execute(params);
- if (logger.isDebugEnabled()) {
- logger.debug("dr: " + dr);
+ if (log.isDebugEnabled()) {
+ log.debug("dr: " + dr);
}
while (dr.size() > 0 && preqid != null) {
@@ -154,9 +151,9 @@ public class KickstartCleanup extends RhnJavaJob {
dr = select.execute(params);
}
}
- if (logger.isDebugEnabled()) {
- logger.debug("preqid: " + preqid);
- logger.debug("Returning: " + retval);
+ if (log.isDebugEnabled()) {
+ log.debug("preqid: " + preqid);
+ log.debug("Returning: " + retval);
}
return retval;
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/KickstartFileSyncTask.java b/java/code/src/com/redhat/rhn/taskomatic/task/KickstartFileSyncTask.java
index 02ca929..7885e0a 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/KickstartFileSyncTask.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/KickstartFileSyncTask.java
@@ -20,7 +20,6 @@ import com.redhat.rhn.domain.kickstart.KickstartData;
import com.redhat.rhn.domain.kickstart.KickstartFactory;
import com.redhat.rhn.manager.kickstart.cobbler.CobblerXMLRPCHelper;
-import org.apache.log4j.Logger;
import org.cobbler.CobblerConnection;
import org.cobbler.Profile;
import org.quartz.JobExecutionContext;
@@ -48,8 +47,6 @@ public class KickstartFileSyncTask extends RhnJavaJob {
*/
public static final String DISPLAY_NAME = "sync_from_cobbler";
- private Logger log = getLogger(KickstartFileSyncTask.class);
-
/**
* Default constructor
*/
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/PackageCleanup.java b/java/code/src/com/redhat/rhn/taskomatic/task/PackageCleanup.java
index 1c1e9c7..4a50686 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/PackageCleanup.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/PackageCleanup.java
@@ -20,7 +20,6 @@ import com.redhat.rhn.common.db.datasource.ModeFactory;
import com.redhat.rhn.common.db.datasource.SelectMode;
import com.redhat.rhn.common.db.datasource.WriteMode;
-import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -43,8 +42,6 @@ public class PackageCleanup extends RhnJavaJob {
*/
public static final String DISPLAY_NAME = "package_cleanup";
- private Logger logger = getLogger(PackageCleanup.class);
-
/**
* {@inheritDoc}
*/
@@ -57,20 +54,20 @@ public class PackageCleanup extends RhnJavaJob {
// Bail if no work to do
if (candidates == null || candidates.size() == 0) {
- if (logger.isDebugEnabled()) {
- logger.debug("No orphaned packages found");
+ if (log.isDebugEnabled()) {
+ log.debug("No orphaned packages found");
}
}
- else if (logger.isDebugEnabled()) {
- logger.debug("Found " + candidates.size() + " orphaned pacakges");
+ else if (log.isDebugEnabled()) {
+ log.debug("Found " + candidates.size() + " orphaned pacakges");
}
// Delete them from the filesystem
for (Iterator iter = candidates.iterator(); iter.hasNext();) {
Map row = (Map) iter.next();
String path = (String) row.get("path");
- if (logger.isDebugEnabled()) {
- logger.debug("Deleting package " + path);
+ if (log.isDebugEnabled()) {
+ log.debug("Deleting package " + path);
}
if (path == null) {
continue;
@@ -82,7 +79,7 @@ public class PackageCleanup extends RhnJavaJob {
resetQueue();
}
catch (Exception e) {
- logger.error(e.getMessage(), e);
+ log.error(e.getMessage(), e);
throw new JobExecutionException(e);
}
}
@@ -97,8 +94,8 @@ public class PackageCleanup extends RhnJavaJob {
File f = new File(pkgDir, path);
if (f.exists() && f.canWrite() && !f.isDirectory()) {
f.delete();
- if (logger.isDebugEnabled()) {
- logger.debug("Deleting " + f.getAbsoluteFile());
+ if (log.isDebugEnabled()) {
+ log.debug("Deleting " + f.getAbsoluteFile());
}
// Remove parents but only within path, and keep two top directories
@@ -116,7 +113,7 @@ public class PackageCleanup extends RhnJavaJob {
while (parent != null && parent.delete());
}
else {
- logger.error(f.getAbsoluteFile() + " not found");
+ log.error(f.getAbsoluteFile() + " not found");
}
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/RhnJavaJob.java b/java/code/src/com/redhat/rhn/taskomatic/task/RhnJavaJob.java
index fe10da1..3ba2d2b 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/RhnJavaJob.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/RhnJavaJob.java
@@ -14,9 +14,17 @@
*/
package com.redhat.rhn.taskomatic.task;
+import com.redhat.rhn.common.hibernate.HibernateFactory;
import com.redhat.rhn.manager.satellite.SystemCommandExecutor;
+import com.redhat.rhn.taskomatic.TaskoRun;
+import org.apache.log4j.FileAppender;
import org.apache.log4j.Logger;
+import org.apache.log4j.PatternLayout;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+
+import java.io.IOException;
/**
@@ -25,30 +33,23 @@ import org.apache.log4j.Logger;
*/
public abstract class RhnJavaJob implements RhnJob {
- protected Logger log = null;
- private RhnJobAppender appender = null;
+ protected Logger log = Logger.getLogger(getClass());
- public Logger getLogger(Class clazz) {
- if (log == null) {
- log = Logger.getLogger(clazz);
- appender = new RhnJobAppender();
- log.addAppender(appender);
- }
+ protected Logger getLogger() {
return log;
}
- public String getLogOutput() {
- if (appender == null) {
- return null;
+ void enableLogging(TaskoRun run) {
+ PatternLayout pattern = new PatternLayout(DEFAULT_LOGGING_LAYOUT);
+ try {
+ getLogger().removeAllAppenders();
+ FileAppender appender = new FileAppender(pattern, run.buildStdOutputLogPath());
+ getLogger().addAppender(appender);
}
- return appender.getOutputContent();
- }
-
- public String getLogError() {
- if (appender == null) {
- return null;
+ catch (IOException e) {
+ getLogger().warn("Logging to file disabled");
+ e.printStackTrace();
}
- return appender.getErrorContent();
}
public void appendExceptionToLogError(Exception e) {
@@ -56,6 +57,26 @@ public abstract class RhnJavaJob implements RhnJob {
log.error(e.getCause());
}
+ public void execute(JobExecutionContext context, TaskoRun run)
+ throws JobExecutionException {
+ enableLogging(run);
+ run.start();
+ HibernateFactory.commitTransaction();
+ try {
+ execute(context);
+ run.saveStatus(TaskoRun.STATUS_FINISHED);
+ }
+ catch (Exception e) {
+ if (HibernateFactory.getSession().getTransaction().isActive()) {
+ HibernateFactory.rollbackTransaction();
+ }
+ appendExceptionToLogError(e);
+ run.saveStatus(TaskoRun.STATUS_FAILED);
+ }
+ run.finished();
+ HibernateFactory.commitTransaction();
+ }
+
protected void executeExtCmd(String[] args) {
SystemCommandExecutor ce = new SystemCommandExecutor();
ce.execute(args);
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/RhnJob.java b/java/code/src/com/redhat/rhn/taskomatic/task/RhnJob.java
index 9e9e77b..1a1b321 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/RhnJob.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/RhnJob.java
@@ -14,7 +14,8 @@
*/
package com.redhat.rhn.taskomatic.task;
-import org.apache.log4j.Logger;
+import com.redhat.rhn.taskomatic.TaskoRun;
+
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -22,14 +23,11 @@ import org.quartz.JobExecutionException;
public abstract interface RhnJob extends Job {
- void execute(JobExecutionContext context)
+ final public String DEFAULT_LOGGING_LAYOUT = "%d [%t] %-5p %c %x - %m%n";
+ void execute(JobExecutionContext context, TaskoRun taskRun)
throws JobExecutionException;
- Logger getLogger(Class clazz);
-
- String getLogOutput();
-
- String getLogError();
+ // abstract Logger getLogger();
void appendExceptionToLogError(Exception e);
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/SandboxCleanup.java b/java/code/src/com/redhat/rhn/taskomatic/task/SandboxCleanup.java
index 7cc26cf..362baae 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/SandboxCleanup.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/SandboxCleanup.java
@@ -19,7 +19,6 @@ import com.redhat.rhn.common.db.datasource.CallableMode;
import com.redhat.rhn.common.db.datasource.ModeFactory;
import com.redhat.rhn.common.db.datasource.SelectMode;
-import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -33,14 +32,12 @@ import java.util.Map;
* @version $Rev$
*/
public class SandboxCleanup extends RhnJavaJob {
-
+
/**
* Used to log stats in the RHNDAEMONSTATE table
- */
+ */
public static final String DISPLAY_NAME = "sandbox_cleanup";
- private Logger log = getLogger(SandboxCleanup.class);
-
/**
* {@inheritDoc}
*/
@@ -54,11 +51,11 @@ public class SandboxCleanup extends RhnJavaJob {
remove("find_sandbox_file_candidates", params, "remove_sandbox_file");
remove("find_sandbox_channel_candidates", params, "remove_sandbox_channel");
}
-
+
private void remove(String candidateQuery, Map candidateParams, String removeQuery) {
- SelectMode candidateMode =
+ SelectMode candidateMode =
ModeFactory.getMode("Task_queries", candidateQuery);
- CallableMode removeMode =
+ CallableMode removeMode =
ModeFactory.getCallableMode("Task_queries", removeQuery);
List candidates = candidateMode.execute(candidateParams);
if (candidates != null && candidates.size() > 0) {
@@ -71,5 +68,5 @@ public class SandboxCleanup extends RhnJavaJob {
}
}
}
-
+
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/SatSyncTask.java b/java/code/src/com/redhat/rhn/taskomatic/task/SatSyncTask.java
index 95f9c05..7d2a746 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/SatSyncTask.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/SatSyncTask.java
@@ -14,7 +14,6 @@
*/
package com.redhat.rhn.taskomatic.task;
-import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -23,9 +22,7 @@ import org.quartz.JobExecutionException;
* SatSyncTask
* @version $Rev$
*/
-public class SatSyncTask extends RhnExtCmdJob {
-
- private Logger log = getLogger(SatSyncTask.class);
+public class SatSyncTask extends RhnJavaJob {
/**
* {@inheritDoc}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/SatelliteCertificateCheck.java b/java/code/src/com/redhat/rhn/taskomatic/task/SatelliteCertificateCheck.java
index 1030537..7dae87e 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/SatelliteCertificateCheck.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/SatelliteCertificateCheck.java
@@ -23,7 +23,6 @@ import com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.domain.org.OrgFactory;
import com.redhat.rhn.manager.satellite.CertificateManager;
-import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -33,47 +32,45 @@ import org.quartz.JobExecutionException;
*/
public class SatelliteCertificateCheck extends RhnJavaJob {
- private Logger log = getLogger(SatelliteCertificateCheck.class);
-
public static final String DISPLAY_NAME = "satcert_check";
-
+
/**
* {@inheritDoc}
*/
public void execute(JobExecutionContext ctx) throws JobExecutionException {
LocalizationService ls = LocalizationService.getInstance();
-
+
CertificateManager man = CertificateManager.getInstance();
-
+
if (man.isSatelliteCertExpired()) {
- sendMessage(ls.getMessage("email.satellitecert.expired.subject"),
- ls.getMessage("email.satellitecert.expired.body",
+ sendMessage(ls.getMessage("email.satellitecert.expired.subject"),
+ ls.getMessage("email.satellitecert.expired.body",
ConfigDefaults.get().getHostname()));
}
else if (man.isSatelliteCertInGracePeriod()) {
- long daysUntilExpiration = (man.getGracePeriodEndDate().getTime() -
- System.currentTimeMillis()) /
+ long daysUntilExpiration = (man.getGracePeriodEndDate().getTime() -
+ System.currentTimeMillis()) /
86400000;
-
+
Object[] args = new String[2];
args[0] = ConfigDefaults.get().getHostname();
args[1] = new Long(daysUntilExpiration).toString();
- sendMessage(ls.getMessage("email.satellitecert.graceperiod.subject"),
+ sendMessage(ls.getMessage("email.satellitecert.graceperiod.subject"),
ls.getMessage("email.satellitecert.graceperiod.body", args));
}
}
-
+
protected void sendMessage(String subject, String body) {
Org org = OrgFactory.getSatelliteOrg();
-
+
Mail mail = getMailer();
mail.setSubject(subject);
mail.setBody(body);
mail.setRecipients(TaskHelper.getAdminEmails(org));
-
+
String from = Config.get().getString("web.customer_service_email",
"dev-null(a)redhat.com");
-
+
mail.setFrom(from);
mail.setHeader("X-RHN-Info", "backend_satellite_certificate_check");
try {
@@ -84,9 +81,9 @@ public class SatelliteCertificateCheck extends RhnJavaJob {
"org_id: " + org.getId());
log.error(e.getMessage(), e);
}
-
+
}
-
+
/**
* @return Returns a Mail object
*/
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/SessionCleanup.java b/java/code/src/com/redhat/rhn/taskomatic/task/SessionCleanup.java
index 4c34bbb..b832cf1 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/SessionCleanup.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/SessionCleanup.java
@@ -18,7 +18,6 @@ import com.redhat.rhn.common.conf.Config;
import com.redhat.rhn.common.db.datasource.CallableMode;
import com.redhat.rhn.common.db.datasource.ModeFactory;
-import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -33,14 +32,12 @@ import java.util.Map;
* @version $Rev$
*/
public class SessionCleanup extends RhnJavaJob {
-
+
/**
* Used to log stats in the RHNDAEMONSTATE table
- */
+ */
public static final String DISPLAY_NAME = "session_cleanup";
-
- private Logger log = getLogger(SessionCleanup.class);
-
+
/**
* {@inheritDoc}
*/
@@ -49,24 +46,24 @@ public class SessionCleanup extends RhnJavaJob {
Config c = Config.get();
Map inParams = new HashMap();
Map outParams = new HashMap();
-
+
//retrieves info from user preferences
long window = c.getInt("web.session_database_lifetime");
int batchSize = c.getInt("web.session_delete_batch_size");
int commitInterval = c.getInt("web.session_delete_commit_interval");
-
+
// 100000 is an arbitrary value
if (batchSize > 100000 || batchSize <= 0) {
batchSize = 50000;
log.warn("session_delete_batch_size out of range, using default of 50000");
}
-
+
//1000 is yet another arbitrary value
if (commitInterval > 1000 || commitInterval <= 0) {
commitInterval = 100;
log.warn("session_delete_commit interval out of range, using default of 100");
}
-
+
long bound = (System.currentTimeMillis() / 1000) - (2 * window);
log.info("session_cleanup: starting delete of stale sessions");
@@ -80,24 +77,24 @@ public class SessionCleanup extends RhnJavaJob {
inParams.put("bound", new Long(bound));
inParams.put("commit_interval", new Integer(commitInterval));
inParams.put("batch_size", new Integer(batchSize));
-
+
//output parameter of the proc
outParams.put("sessions_deleted", new Integer(Types.NUMERIC));
CallableMode m = ModeFactory.getCallableMode(TaskConstants.MODE_NAME,
TaskConstants.TASK_QUERY_SESSION_CLEANUP);
if (log.isDebugEnabled()) {
- log.debug("Calling CallableMode " + TaskConstants.MODE_NAME + "::" +
+ log.debug("Calling CallableMode " + TaskConstants.MODE_NAME + "::" +
TaskConstants.TASK_QUERY_SESSION_CLEANUP);
}
Map row = m.execute(inParams, outParams);
if (log.isDebugEnabled()) {
- log.debug("CallableMode " + TaskConstants.MODE_NAME + "::" +
+ log.debug("CallableMode " + TaskConstants.MODE_NAME + "::" +
TaskConstants.TASK_QUERY_SESSION_CLEANUP + " returned");
- }
+ }
//retrieves and logs number of sessions deleted
- log.debug("session: cleanup " + row.get("sessions_deleted") +
- " stale sessions deleted\n");
+ log.debug("session: cleanup " + row.get("sessions_deleted") +
+ " stale sessions deleted\n");
}
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/SummaryPopulation.java b/java/code/src/com/redhat/rhn/taskomatic/task/SummaryPopulation.java
index 55cc07c..fdf47d9 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/SummaryPopulation.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/SummaryPopulation.java
@@ -22,7 +22,6 @@ import com.redhat.rhn.common.db.datasource.SelectMode;
import com.redhat.rhn.common.db.datasource.WriteMode;
import com.redhat.rhn.frontend.dto.OrgIdWrapper;
-import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -39,24 +38,22 @@ import java.util.Set;
* @version $Rev$
*/
public class SummaryPopulation extends RhnJavaJob {
-
+
/**
* Used to log stats in the RHNDAEMONSTATE table
- */
+ */
public static final String DISPLAY_NAME = "summary_populator";
-
- private Logger log = getLogger(SummaryPopulation.class);
-
+
/**
* {@inheritDoc}
*/
public void execute(JobExecutionContext ctx) throws JobExecutionException {
-
+
try {
// don't want duplicates otherwise we risk violating the
// RHN_DSQUEUE_OID_UQ unique constraint on org_id
Set orgSet = new LinkedHashSet();
-
+
log.debug("Finding orgs with awol servers");
List orgs = awolServerOrgs();
orgSet.addAll(orgs);
@@ -70,11 +67,11 @@ public class SummaryPopulation extends RhnJavaJob {
}
log.debug("Found " + orgCount + " awol servers");
}
-
+
log.debug("Finding orgs w/ recent action activity");
orgSet.addAll(orgsWithRecentActions());
log.debug("Done finding orgs w/ recent action activity");
-
+
log.debug("Enqueing orgs");
for (Iterator itr = orgSet.iterator(); itr.hasNext();) {
OrgIdWrapper bdw = (OrgIdWrapper) itr.next();
@@ -88,11 +85,11 @@ public class SummaryPopulation extends RhnJavaJob {
throw new JobExecutionException(e);
}
}
-
+
private List awolServerOrgs() {
SelectMode m = ModeFactory.getMode(TaskConstants.MODE_NAME,
TaskConstants.TASK_QUERY_SUMMARYPOP_AWOL_SERVER_IN_ORGS);
-
+
Map params = new HashMap();
int checkin = Config.get().getInt(ConfigDefaults.SYSTEM_CHECKIN_THRESHOLD);
if (log.isDebugEnabled()) {
@@ -101,13 +98,13 @@ public class SummaryPopulation extends RhnJavaJob {
params.put("checkin_threshold", new Integer(checkin));
return m.execute(params);
}
-
+
private List orgsWithRecentActions() {
SelectMode m = ModeFactory.getMode(TaskConstants.MODE_NAME,
TaskConstants.TASK_QUERY_SUMMARYPOP_ORGS_RECENT_ACTIONS);
return m.execute();
}
-
+
private int enqueueOrg(Long orgId) {
Map params = new HashMap();
params.put("org_id", orgId);
@@ -116,7 +113,7 @@ public class SummaryPopulation extends RhnJavaJob {
WriteMode m = ModeFactory.getWriteMode(
TaskConstants.MODE_NAME,
TaskConstants.TASK_QUERY_INSERT_SUMMARY_QUEUE);
-
+
try {
DataResult result = select.execute(params);
Map row = (Map) result.get(0);
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/SynchProbeState.java b/java/code/src/com/redhat/rhn/taskomatic/task/SynchProbeState.java
index f9a0efb..82d3291 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/SynchProbeState.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/SynchProbeState.java
@@ -17,7 +17,6 @@ package com.redhat.rhn.taskomatic.task;
import com.redhat.rhn.common.db.datasource.CallableMode;
import com.redhat.rhn.common.db.datasource.ModeFactory;
-import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -26,36 +25,34 @@ import java.util.HashMap;
/**
* Calls the synch probe state proc on a regular basis from Taskomatic
- *
+ *
* @version $Rev $
*/
public class SynchProbeState extends RhnJavaJob {
-
+
/**
* Used to log stats in the RHNDAEMONSTATE table
- */
+ */
public static final String DISPLAY_NAME = "synch_probe_state";
-
- private Logger logger = getLogger(SynchProbeState.class);
-
+
/**
* {@inheritDoc}
*/
public void execute(JobExecutionContext context) throws JobExecutionException {
try {
- if (logger.isDebugEnabled()) {
- logger.debug("Starting probe state sync");
+ if (log.isDebugEnabled()) {
+ log.debug("Starting probe state sync");
}
- CallableMode proc = ModeFactory.getCallableMode(TaskConstants.MODE_NAME,
+ CallableMode proc = ModeFactory.getCallableMode(TaskConstants.MODE_NAME,
TaskConstants.TASK_QUERY_SYNCHPROBESTATE_PROC);
proc.execute(Collections.EMPTY_MAP, new HashMap());
- if (logger.isDebugEnabled()) {
- logger.debug("Probe state sync completed");
+ if (log.isDebugEnabled()) {
+ log.debug("Probe state sync completed");
}
}
catch (Exception e) {
- logger.error("Error during probe state sync", e);
+ log.error("Error during probe state sync", e);
throw new JobExecutionException(e);
}
}
commit 4f5510d03ff5bf4d9c454e15c81081fa6cc24dd8
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Sat Jul 24 22:54:19 2010 +0200
move extecute part from TaskoRun to TaskoJob
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoJob.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoJob.java
index 620ed68..430c6be 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoJob.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoJob.java
@@ -16,6 +16,8 @@ package com.redhat.rhn.taskomatic;
import com.redhat.rhn.common.conf.Config;
import com.redhat.rhn.common.hibernate.HibernateFactory;
+import com.redhat.rhn.taskomatic.task.RhnJob;
+import com.redhat.rhn.taskomatic.task.RhnQueueJob;
import org.apache.log4j.Logger;
import org.quartz.Job;
@@ -31,7 +33,7 @@ public class TaskoJob implements Job {
private static Map<String, Integer> tasks = new HashMap<String, Integer>();
private static Map<String, Object> locks = new HashMap<String, Object>();
- private Long scheduleId;
+ private Long scheduleId;
static {
for (TaskoTask task : TaskoFactory.listTasks()) {
@@ -44,6 +46,16 @@ public class TaskoJob implements Job {
setScheduleId(scheduleIdIn);
}
+ private boolean isTaskSingleThreaded(TaskoTask task) {
+ try {
+ RhnQueueJob job = (RhnQueueJob) Class.forName(task.getTaskClass()).newInstance();
+ }
+ catch (Exception e) {
+ return false;
+ }
+ return true;
+ }
+
private boolean isTaskRunning(TaskoTask task) {
return tasks.get(task.getName()) > 0;
}
@@ -81,37 +93,68 @@ public class TaskoJob implements Job {
}
log.info(schedule.getJobLabel() + ":" + " bunch " + schedule.getBunch().getName() +
- " started");
+ " STARTED");
for (TaskoTemplate template : schedule.getBunch().getTemplates()) {
- if ((previousRun == null) ||
+ if ((previousRun == null) || // first run
+ (template.getStartIf() == null) || // do not care
(previousRun.getStatus().equals(template.getStartIf()))) {
TaskoTask task = template.getTask();
Object lock = locks.get(task.getName());
synchronized (lock) {
- while (!isTaskThreadAvailable(task)) {
- log.debug(schedule.getJobLabel() + ":" + " task " +
- task.getName() +
- " all allowed threads running ... WAITING");
- try {
- lock.wait();
+ if (isTaskSingleThreaded(task)) {
+ if (isTaskRunning(task)) {
log.debug(schedule.getJobLabel() + ":" + " task " +
- task.getName() + " ... AWAKE");
+ task.getName() + " already running ... LEAVING");
+ previousRun = null;
+ continue;
}
- catch (InterruptedException e) {
- // ok
+ }
+ else{
+ while (!isTaskThreadAvailable(task)) {
+ try {
+ log.debug(schedule.getJobLabel() + ":" + " task " +
+ task.getName() +
+ " all allowed threads running ... WAITING");
+ lock.wait();
+ log.debug(schedule.getJobLabel() + ":" + " task " +
+ task.getName() + " ... AWAKE");
+ }
+ catch (InterruptedException e) {
+ // ok
+ }
}
}
markTaskRunning(task);
}
log.debug(schedule.getJobLabel() + ":" + " task " + task.getName() +
- " STARTED");
+ " started");
TaskoRun taskRun = new TaskoRun(schedule.getOrgId(), template, scheduleId);
TaskoFactory.save(taskRun);
- taskRun.execute(context);
+ TaskoFactory.commitTransaction();
+
+ Class jobClass = null;
+ RhnJob job = null;
+ try {
+ jobClass = Class.forName(template.getTask().getTaskClass());
+ job = (RhnJob) jobClass.newInstance();
+ }
+ catch (Exception e) {
+ String errorLog = e.getMessage() + '\n' + e.getCause() + '\n';
+ taskRun.appendToErrorLog(errorLog);
+ taskRun.saveStatus(TaskoRun.STATUS_FAILED);
+ return;
+ }
+
+ job.execute(context, taskRun);
+ // rollback everything, what the application changed and didn't committed
+ if (TaskoFactory.getSession().getTransaction().isActive()) {
+ TaskoFactory.rollbackTransaction();
+ }
+
log.debug(task.getName() +
- " (" + schedule.getJobLabel() + ") ... " + taskRun.getStatus());
+ " (" + schedule.getJobLabel() + ") ... " + taskRun.getStatus().toLowerCase());
previousRun = taskRun;
synchronized (lock) {
unmarkTaskRunning(task);
@@ -126,7 +169,7 @@ public class TaskoJob implements Job {
}
HibernateFactory.closeSession();
log.info(schedule.getJobLabel() + ":" + " bunch " + schedule.getBunch().getName() +
- " finished");
+ " FINISHED");
}
/**
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java
index e7262c9..a4bbaf8 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java
@@ -14,12 +14,7 @@
*/
package com.redhat.rhn.taskomatic;
-import com.redhat.rhn.taskomatic.task.RhnJob;
-
import org.apache.log4j.Logger;
-import org.quartz.Job;
-import org.quartz.JobExecutionContext;
-import org.quartz.JobExecutionException;
import java.io.BufferedWriter;
import java.io.File;
@@ -34,7 +29,7 @@ import java.util.Date;
* TaskoRun
* @version $Rev$
*/
-public class TaskoRun implements Job {
+public class TaskoRun {
private static Logger log = Logger.getLogger(TaskoTask.class);
@@ -73,77 +68,38 @@ public class TaskoRun implements Job {
}
public void start() {
+ setStdOutputPath(buildStdOutputLogPath());
+ setStdErrorPath(buildStdErrorLogPath());
+ deleteLogFileIfExists(stdOutputPath);
+ deleteLogFileIfExists(stdErrorPath);
setStartTime(new Date());
saveStatus(STATUS_RUNNING);
}
- public void finished(RhnJob job) {
+ public void finished() {
setEndTime(new Date());
- String out = job.getLogOutput();
- if (new File(getStdLogDirName()).isDirectory()) {
- if ((out != null) && (!out.isEmpty())) {
- saveStdOutputLog(out);
- }
- else {
- setStdOutputPath("");
- }
- String err = job.getLogError();
- if ((err != null) && (!err.isEmpty())) {
- saveErrorLog(err);
- }
- else {
- setStdErrorPath("");
- }
- }
- else {
- log.warn("Logging disabled. No directory " + getStdLogDirName());
- }
+ updateLogPaths();
}
- public void execute(JobExecutionContext context)
- throws JobExecutionException {
- start();
- Class jobClass = null;
- RhnJob job = null;
- try {
- jobClass = Class.forName(template.getTask().getTaskClass());
- job = (RhnJob) jobClass.newInstance();
- }
- catch (Exception e) {
- String errorLog = e.getMessage() + '\n' + e.getCause() + '\n';
- saveErrorLog(errorLog);
- saveStatus(STATUS_FAILED);
- return;
- }
-
- try {
- TaskoFactory.commitTransaction();
- job.execute(context);
- // rollback everything, what the application changed and didn't committed
- if (TaskoFactory.getSession().getTransaction().isActive()) {
- TaskoFactory.rollbackTransaction();
- }
- saveStatus(STATUS_FINISHED);
- }
- catch (Exception e) {
- job.appendExceptionToLogError(e);
- saveStatus(STATUS_FAILED);
- }
- finished(job);
- TaskoFactory.commitTransaction();
+ private void updateLogPaths() {
+ if (!logPresent(stdOutputPath)) {
+ stdOutputPath = null;
+ }
+ if (!logPresent(stdErrorPath)) {
+ stdErrorPath = null;
+ }
+ TaskoFactory.save(this);
}
- private void saveStdOutputLog(String out) {
- setStdOutputPath(buildStdOutputLogPath());
- saveLogToFile(getStdOutputPath(), out);
+ private void appendToStdOutputLog(String out) {
+ appendLogToFile(getStdOutputPath(), out);
}
- private void saveErrorLog(String errorLog) {
- setStdErrorPath(buildStdErrorLogPath());
- saveLogToFile(getStdErrorPath(), errorLog);
+ public void appendToErrorLog(String errorLog) {
+ appendLogToFile(getStdErrorPath(), errorLog);
}
- private void saveStatus(String statusIn) {
+ public void saveStatus(String statusIn) {
setStatus(statusIn);
TaskoFactory.save(this);
}
@@ -173,11 +129,11 @@ public class TaskoRun implements Job {
}
}
- private String buildStdOutputLogPath() {
+ public String buildStdOutputLogPath() {
return getStdLogDirName() + getStdLogFileName() + "_out";
}
- private String buildStdErrorLogPath() {
+ public String buildStdErrorLogPath() {
return getStdLogDirName() + getStdLogFileName() + "_err";
}
@@ -198,9 +154,20 @@ public class TaskoRun implements Job {
"_" + getId();
}
- private void saveLogToFile(String fileName, String logContent) {
+ private void deleteLogFileIfExists(String fileName) {
+ if (logPresent(fileName)) {
+ new File(fileName).delete();
+ }
+ }
+
+ private boolean logPresent(String fileName) {
+ File log = new File(fileName);
+ return log.length() > 0;
+ }
+
+ private void appendLogToFile(String fileName, String logContent) {
try {
- BufferedWriter out = new BufferedWriter(new FileWriter(fileName));
+ BufferedWriter out = new BufferedWriter(new FileWriter(fileName, true));
out.write(logContent);
out.close();
}
commit 367be1a0b1468c9cde2f9baa82760a82bb09bbbd
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Wed Jul 21 00:41:21 2010 +0200
enable external commands execution to RhnJavaJob
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/RhnJavaJob.java b/java/code/src/com/redhat/rhn/taskomatic/task/RhnJavaJob.java
index 156e1dd..fe10da1 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/RhnJavaJob.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/RhnJavaJob.java
@@ -14,6 +14,8 @@
*/
package com.redhat.rhn.taskomatic.task;
+import com.redhat.rhn.manager.satellite.SystemCommandExecutor;
+
import org.apache.log4j.Logger;
@@ -23,7 +25,7 @@ import org.apache.log4j.Logger;
*/
public abstract class RhnJavaJob implements RhnJob {
- private Logger log = null;
+ protected Logger log = null;
private RhnJobAppender appender = null;
public Logger getLogger(Class clazz) {
@@ -53,4 +55,12 @@ public abstract class RhnJavaJob implements RhnJob {
log.error(e.getMessage());
log.error(e.getCause());
}
+
+ protected void executeExtCmd(String[] args) {
+ SystemCommandExecutor ce = new SystemCommandExecutor();
+ ce.execute(args);
+
+ log.info(ce.getLastCommandOutput());
+ log.error(ce.getLastCommandErrorMessage());
+ }
}
commit fc4d6b5ba894a122df30f8a9aad055e52fe72a69
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Wed Jul 21 00:39:40 2010 +0200
change appender logging
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/RhnJobAppender.java b/java/code/src/com/redhat/rhn/taskomatic/task/RhnJobAppender.java
index c88b084..8f45ea9 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/RhnJobAppender.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/RhnJobAppender.java
@@ -41,10 +41,8 @@ public class RhnJobAppender extends AppenderSkeleton {
@Override
protected void append(LoggingEvent event) {
- if (Level.INFO.isGreaterOrEqual(event.getLevel())) {
- outputBuffer.append(logEvent(event));
- }
- else {
+ outputBuffer.append(logEvent(event));
+ if (!Level.INFO.isGreaterOrEqual(event.getLevel())) {
errorBuffer.append(logEvent(event));
}
}
commit 88d3f7523eaec16507baf6bd933d14057174c2d1
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Tue Jul 20 15:55:10 2010 +0200
let hibernate convert block to byte array
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.java
index d64eef5..8dd78b9 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.java
@@ -14,6 +14,8 @@
*/
package com.redhat.rhn.taskomatic;
+import com.redhat.rhn.common.hibernate.HibernateFactory;
+
import org.hibernate.Hibernate;
import java.io.ByteArrayOutputStream;
@@ -22,7 +24,6 @@ import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.sql.Blob;
-import java.sql.SQLException;
import java.util.Date;
import java.util.Map;
@@ -105,36 +106,6 @@ public class TaskoSchedule {
return (Map) obj;
}
- private byte[] toByteArray(Blob fromImageBlob) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- try {
- return toByteArrayImpl(fromImageBlob, baos);
- }
- catch (Exception e) {
- // return null
- }
- return null;
- }
-
- private byte[] toByteArrayImpl(Blob fromImageBlob,
- ByteArrayOutputStream baos) throws SQLException, IOException {
- byte[] buf = new byte[4000];
- int dataSize;
- InputStream is = fromImageBlob.getBinaryStream();
-
- try {
- while ((dataSize = is.read(buf)) != -1) {
- baos.write(buf, 0, dataSize);
- }
- }
- finally {
- if (is != null) {
- is.close();
- }
- }
- return baos.toByteArray();
- }
-
public void setDataMap(Map dataMap) {
data = serializeMap(dataMap);
}
@@ -238,8 +209,7 @@ public class TaskoSchedule {
* @param dataBlobIn The params to set.
*/
public void setData(Blob dataBlobIn) {
- // data = dataBlobIn.getBytes(0, (int) dataBlobIn.length() - 1);
- data = toByteArray(dataBlobIn);
+ data = HibernateFactory.blobToByteArray(dataBlobIn);
}
/**
commit 029a68e4f13cfeb582c41635fb16f3dcfab62971
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Tue Jul 20 15:14:21 2010 +0200
remove unused errata queries
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Errata_queries.xml b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Errata_queries.xml
index 674f55f..7a50512 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Errata_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Errata_queries.xml
@@ -120,19 +120,6 @@ SELECT DISTINCT E.id, E.update_date
<elaborator name="errata_overview" />
</mode>
-<mode name="all_errata_orig" class="com.redhat.rhn.frontend.dto.ErrataOverview">
- <query params="org_id">
-SELECT DISTINCT E.id, E.update_date, E.synopsis AS ADVISORY_SYNOPSIS
- FROM rhnErrata E, rhnChannelErrata CE, rhnAvailableChannels AC
- WHERE AC.org_id = :org_id
- AND CE.channel_id = AC.channel_id
- AND CE.errata_id = E.id
- ORDER BY E.update_date DESC, E.id
- </query>
- <elaborator name="errata_overview" />
-</mode>
-
-
<mode name="relevant_to_system" class="com.redhat.rhn.frontend.dto.ErrataOverview">
<query params="user_id, sid">
SELECT DISTINCT E.id, E.update_date,
@@ -953,12 +940,6 @@ ORDER BY E.update_date DESC
</query>
</callable-mode>
-<write-mode name="deletePaidErrataTempCache">
- <query params="errata_id">
- delete from rhnPaidErrataTempCache where errata_id = :errata_id
- </query>
-</write-mode>
-
<write-mode name="deletePaidErrataTempCacheBulk">
<query params="set, uid">
delete from rhnPaidErrataTempCache where errata_id in
@@ -966,13 +947,6 @@ ORDER BY E.update_date DESC
</query>
</write-mode>
-
-<write-mode name="deleteErrataFile">
- <query params="errata_id">
- delete from rhnErrataFile where errata_id = :errata_id
- </query>
-</write-mode>
-
<write-mode name="deleteErrataFileBulk">
<query params="set, uid">
delete from rhnErrataFile where errata_id in
@@ -980,12 +954,6 @@ ORDER BY E.update_date DESC
</query>
</write-mode>
-<write-mode name="deleteErrataPackage">
- <query params="errata_id">
- delete from rhnErrataPackage where errata_id = :errata_id
- </query>
-</write-mode>
-
<write-mode name="deleteErrataPackageBulk">
<query params="set, uid">
delete from rhnErrataPackage where errata_id in
@@ -993,12 +961,6 @@ ORDER BY E.update_date DESC
</query>
</write-mode>
-<write-mode name="deleteErrataTmp">
- <query params="errata_id">
- delete from rhnErrataTmp where id = :errata_id
- </query>
-</write-mode>
-
<write-mode name="deleteErrataTmpBulk">
<query params="set, uid">
delete from rhnErrataTmp where id in
@@ -1019,15 +981,6 @@ ORDER BY E.update_date DESC
</query>
</write-mode>
-
-<write-mode name="deleteServerErrataPackageCache">
- <query params="errata_id, org_id">
-delete from rhnServerNeededCache
- where server_id in (select id from rhnServer where org_id = :org_id)
- and errata_id = :errata_id
- </query>
-</write-mode>
-
<write-mode name="deleteServerErrataPackageCacheBulk">
<query params="org_id, set, uid">
delete from rhnServerNeededCache
@@ -1061,12 +1014,6 @@ delete from rhnServerNeededCache
</query>
</mode>
-<callable-mode name="remove_errata_by_org">
- <query params="eid, oid">
- {call delete_errata_by_org(:eid, :oid)}
- </query>
-</callable-mode>
-
<!-- Errata Search Queries -->
<elaborator name="default_errata_elaborator" params="">
SELECT E.id, E.advisory, E.advisory_name, E.advisory_type, E.synopsis AS ADVISORY_SYNOPSIS,
@@ -1183,18 +1130,6 @@ SELECT 1
</query>
</mode>
-<write-mode name="populate_visible_errata">
- <query params="session_id, org_id">
- insert into rhnVisibleObjects ( SELECT distinct :session_id, E.id, 'errata'
- FROM rhnErrata E,
- rhnChannelErrata CE,
- rhnAvailableChannels AC
- WHERE E.id = CE.errata_id
- AND CE.channel_id = AC.channel_id
- AND AC.org_id = :org_id)
- </query>
-</write-mode>
-
<mode name="channel_errata_for_list" class="com.redhat.rhn.frontend.dto.ErrataOverview">
<query params="cid">
SELECT DISTINCT E.id,
@@ -1283,14 +1218,6 @@ SELECT E.id, E.advisory, E.synopsis
</query>
</mode>
-<mode name="list_channel_errata_ids">
- <query params="cid">
- select CE.errata_id as id
- from rhnChannelErrata CE
- where CE.channel_id = :cid
- </query>
-</mode>
-
<query name="errata_cves_elab">
SELECT E.id, C.name AS CVE
FROM rhnErrata E, rhnCve C, rhnErrataCVE EC
commit 7cc21f53d0313ed5ecf16224e27580404f97781b
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Tue Jul 20 14:12:01 2010 +0200
remove unused tak queries
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Task_queries.xml b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Task_queries.xml
index d6c8bed..31a6e24 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Task_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Task_queries.xml
@@ -114,24 +114,6 @@ SELECT DISTINCT
</query>
</write-mode>
-<write-mode name="errataqueue_enqueue_non_sat_errata">
- <query params="errata_id,minutes">
-INSERT
- INTO rhnErrataNotificationQueue
- (errata_id, org_id, next_action)
-SELECT DISTINCT
- :errata_id, CFP.org_id, sysdate + :minutes / 1440
- FROM rhnPrivateChannelFamily CFP,
- rhnChannelFamilyMembers CFM,
- rhnChannelErrata CE
- WHERE CE.errata_id = :errata_id
- AND CFM.channel_id = CE.channel_id
- AND CFM.channel_family_id = CFP.channel_family_id
- AND CFP.org_id IS NOT NULL
- </query>
-</write-mode>
-
-
<write-mode name="errataqueue_dequeue_errata_notification">
<query params="errata_id">
DELETE FROM rhnErrataNotificationQueue WHERE errata_id = :errata_id
@@ -245,22 +227,6 @@ SELECT id, channel_label, client, reason, force, bypass_filters, next_action
</query>
</callable-mode>
-<mode name="users_to_be_notified">
- <query>
-SELECT WCN.id, WCN.org_id, WCN.contact_email_address, WC.name, WC.oracle_customer_number
- FROM web_customer WC, web_customer_notification WCN
- WHERE WC.id = WCN.org_id
- </query>
-</mode>
-
-<write-mode name="remove_user_from_wcn">
- <query params="user_id">
-DELETE
- FROM web_customer_notification
- WHERE id = :user_id
- </query>
-</write-mode>
-
<callable-mode name="taskomatic_session_cleanup">
<query params="bound, commit_interval, batch_size, sessions_deleted">
{call pxt_session_cleanup(:bound, :commit_interval, :batch_size, :sessions_deleted)}
@@ -279,34 +245,6 @@ DELETE
</query>
</write-mode>
-<mode name="nochannelcheck_find_orgs">
- <query params="">
- SELECT DISTINCT S.id, S.org_id, S.name
- FROM rhnServer S
- WHERE S.created > SYSDATE - 1
- AND (SELECT COUNT(1) FROM rhnServer S2 WHERE S2.org_id = S.org_id) >= 1
- AND NOT EXISTS (SELECT 1 FROM rhnServerChannel SC WHERE SC.server_id = S.id)
- </query>
-</mode>
-
-<mode name="userdeletion_find_candidates">
- <query params="">
- SELECT user_id FROM rhnUserDeletionQueue ORDER BY created
- </query>
-</mode>
-
-<callable-mode name="userdeletion_delete_user">
- <query params="user_id">
- {call rhn_org.delete_user(:user_id)}
- </query>
-</callable-mode>
-
-<write-mode name="userdeletion_remove_queue_entry">
- <query params="user_id">
- DELETE FROM rhnUserDeletionQueue WHERE user_id = :user_id
- </query>
-</write-mode>
-
<!-- timings: webdev: 6m (2 records), webqa: 1m 58s (3), prod: 3m 32s (697) -->
<mode name="summarypop_awol_server_in_orgs"
class="com.redhat.rhn.frontend.dto.OrgIdWrapper">
@@ -369,24 +307,6 @@ INSERT INTO rhnDailySummaryQueue (org_id) VALUES (:org_id)
</query>
</write-mode>
-<callable-mode name="entitlement_queue_pending">
- <query>
-{:total = call rhn_ep.entitlement_queue_pending}
- </query>
-</callable-mode>
-
-<callable-mode name="process_queue_batch">
- <query params="duration, batch">
-{:done = call rhn_ep.process_queue_batch(:duration, :batch)}
- </query>
-</callable-mode>
-
-<callable-mode name="entitle_org_direct">
- <query params="org_id">
-{call rhn_ep.poll_customer_internal(:org_id)}
- </query>
-</callable-mode>
-
<callable-mode name="remove_sandbox_file">
<query params="id">
{call rhn_config.delete_file(:id)}
@@ -519,22 +439,6 @@ FROM
</query>
</mode>
-<mode name="repomdgenerator_all_channels">
- <query params="">
- SELECT C.id, C.label,
- CASE
- WHEN org_id is NOT NULL then -1
- WHEN label LIKE 'rhel%' then 1
- WHEN label LIKE 'redhat%' then 1
- WHEN label LIKE 'jbapp%' then 1
- ELSE 0
- END AS rank,
- C.last_modified
- FROM rhnChannel C
- ORDER by 3 DESC, 4 DESC
- </query>
-</mode>
-
<mode name="repomdgenerator_channel_packages"
class="com.redhat.rhn.frontend.dto.PackageDto">
<query params="channel_id">
commit 648f3923611661382450e018ee3e3cfa92d29ccc
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Tue Jul 20 14:00:00 2010 +0200
remove unused tak constants
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/TaskConstants.java b/java/code/src/com/redhat/rhn/taskomatic/task/TaskConstants.java
index 8235fca..295a146 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/TaskConstants.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/TaskConstants.java
@@ -50,39 +50,18 @@ public class TaskConstants {
public static final String TASK_QUERY_SESSION_CLEANUP =
"taskomatic_session_cleanup";
- public static final String TASK_QUERY_NOCHANNEL_FIND_ORGS =
- "nochannelcheck_find_orgs";
-
- public static final String TASK_QUERY_USER_DELETION_FIND_CANDIDATES =
- "userdeletion_find_candidates";
-
- public static final String TASK_QUERY_USER_DELETION_DELETE_USER =
- "userdeletion_delete_user";
-
- public static final String TASK_QUERY_USER_DELETION_DEL_QUEUE_ENTRY =
- "userdeletion_remove_queue_entry";
-
public static final String TASK_QUERY_ERRATA_QUEUE_FIND_CANDIDATES =
"errataqueue_find_candidates";
public static final String TASK_QUERY_ERRATA_QUEUE_ENQUEUE_SAT_ERRATA =
"errataqueue_enqueue_sat_errata";
- public static final String TASK_QUERY_ERRATA_QUEUE_ENQUEUE_NON_SAT_ERRATA =
- "errataqueue_enqueue_non_sat_errata";
-
public static final String TASK_QUERY_ERRATA_QUEUE_DEQUEUE_ERRATA_NOTIFICATION =
"errataqueue_dequeue_errata_notification";
public static final String TASK_QUERY_ERRATA_QUEUE_DEQUEUE_ERRATA =
"errataqueue_dequeue_errata";
- public static final String TASK_QUERY_ERRATA_QUEUE_MARK_ERRATA_IN_PROGRESS =
- "errataqueue_mark_errata_in_progress";
-
- public static final String TASK_QUERY_ERRATA_QUEUE_CLEAR_ERRATA_IN_PROGRESS =
- "errataqueue_clear_errata_in_progress";
-
public static final String TASK_QUERY_REPOMD_DEQUEUE =
"repomd_dequeue";
@@ -94,9 +73,6 @@ public class TaskConstants {
public static final String TASK_QUERY_REPOMOD_CLEAR_IN_PROGRESS =
"repomd_clear_in_progress";
- public static final String TASK_QUERY_ERRATA_QUEUE_FETCH_DESC =
- "errataqueue_fetch_errata_description";
-
public static final String TASK_QUERY_ERRATA_QUEUE_FIND_AUTOUPDATE_SERVERS =
"errataqueue_find_autoupdate_servers";
@@ -144,12 +120,6 @@ public class TaskConstants {
public static final String TASK_QUERY_ERRATAMAILER_MARK_ERRATA_DONE =
"erratamailer_mark_errata_done";
- public static final String TASK_QUERY_EMAILENGINE_FIND_USERS =
- "emailengine_find_users";
-
- public static final String TASK_QUERY_REPOMD_GENERATOR_CHANNELS =
- "repomdgenerator_all_channels";
-
public static final String TASK_QUERY_REPOMD_GENERATOR_CHANNEL_PACKAGES =
"repomdgenerator_channel_packages";
commit beff609e1bbbb40c98bf5b8a607309138f10f350
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Tue Jul 20 13:45:51 2010 +0200
add scheduleSingleSatBunchRun interface
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
index 5d142d6..8ef16d1 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
@@ -156,11 +156,21 @@ public class TaskoXmlRpcHandler {
return scheduleDate;
}
+ public Date scheduleSingleSatBunchRun(String bunchName, Map params, Date start)
+ throws NoSuchBunchTaskException, InvalidParamException {
+ return scheduleSingleBunchRun(null, bunchName, params, start);
+ }
+
public Date scheduleSingleBunchRun(Integer orgId, String bunchName, Map params)
throws NoSuchBunchTaskException, InvalidParamException {
return scheduleSingleBunchRun(orgId, bunchName, params, new Date());
}
+ public Date scheduleSingleSatBunchRun(String bunchName, Map params)
+ throws NoSuchBunchTaskException, InvalidParamException {
+ return scheduleSingleBunchRun(null, bunchName, params, new Date());
+ }
+
private String getUniqueSingleJobLabel(Integer orgId, String bunchName)
throws SchedulerException {
String jobLabel = "single-" + bunchName + "-";
commit 84e0f70180bb9c18f5963987b348287a0b689e7b
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Tue Jul 20 13:41:42 2010 +0200
add appender null check
diff --git a/java/code/src/com/redhat/rhn/taskomatic/task/RhnJavaJob.java b/java/code/src/com/redhat/rhn/taskomatic/task/RhnJavaJob.java
index 52ddbdc..156e1dd 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/RhnJavaJob.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/RhnJavaJob.java
@@ -36,10 +36,16 @@ public abstract class RhnJavaJob implements RhnJob {
}
public String getLogOutput() {
- return appender.getOutputContent();
+ if (appender == null) {
+ return null;
+ }
+ return appender.getOutputContent();
}
public String getLogError() {
+ if (appender == null) {
+ return null;
+ }
return appender.getErrorContent();
}
commit 11ac73f2cc1dbd81da518b2dd7ad8d505a7c356c
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Mon Jul 12 13:35:18 2010 +0200
update description of errata-mailer-bunch
diff --git a/schema/spacewalk/common/data/rhnTaskoBunch.sql b/schema/spacewalk/common/data/rhnTaskoBunch.sql
index a3b22e8..b6c912b 100644
--- a/schema/spacewalk/common/data/rhnTaskoBunch.sql
+++ b/schema/spacewalk/common/data/rhnTaskoBunch.sql
@@ -57,6 +57,6 @@ INSERT INTO rhnTaskoBunch (id, name, description, org_bunch, active_from)
VALUES (rhn_tasko_bunch_id_seq.nextval, 'kickstart-cleanup-bunch', 'Cleans up stale Kickstarts', '', sysdate);
INSERT INTO rhnTaskoBunch (id, name, description, org_bunch, active_from)
- VALUES (rhn_tasko_bunch_id_seq.nextval, 'errata-mailer-bunch', 'Cleans up stale Kickstarts', '', sysdate);
+ VALUES (rhn_tasko_bunch_id_seq.nextval, 'errata-mailer-bunch', 'Emails errata info', '', sysdate);
commit;
13 years, 9 months
spacecmd/src
by aparsons
spacecmd/src/lib/report.py | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
New commits:
commit e1e64c58bce055e430c2af21e6afe35d94ff75e6
Author: Aron Parsons <aparsons(a)redhat.com>
Date: Mon Jul 26 11:05:50 2010 -0400
allow filtering in report_errata
diff --git a/spacecmd/src/lib/report.py b/spacecmd/src/lib/report.py
index 1c6b609..6f0320c 100644
--- a/spacecmd/src/lib/report.py
+++ b/spacecmd/src/lib/report.py
@@ -119,16 +119,19 @@ def do_report_ungroupedsystems(self, args):
def help_report_errata(self):
print 'report_errata: List all errata and how many systems they affect'
- print 'usage: report_errata'
+ print 'usage: report_errata [ERRATA|search:XXX ...]'
#XXX: performance is terrible due to all the API calls
def do_report_errata(self, args):
- self.generate_errata_cache()
+ args = parse_arguments(args)
+
+ errata_list = self.expand_errata(args)
report = {}
- for erratum in self.all_errata:
- affected = self.client.errata.listAffectedSystems(self.session,
- erratum)
+ for erratum in errata_list:
+ logging.debug('Getting affected systems for %s' % erratum)
+
+ affected = self.client.errata.listAffectedSystems(self.session, erratum)
num_affected = len(affected)
if num_affected:
@@ -144,7 +147,7 @@ def do_report_errata(self, args):
print '%s # Systems' % ('Errata'.ljust(max_size))
print '%s ---------' % ('------'.ljust(max_size))
for erratum in sorted(report):
- print '%s %s' % \
+ print '%s %s' % \
(erratum.ljust(max_size), str(report[erratum]).rjust(3))
####################
13 years, 9 months
Changes to 'refs/tags/osad-5.9.37-1'
by Milan Zazrivec
Tag 'osad-5.9.37-1' created by Milan Zazrivec <mzazrivec(a)redhat.com> at 2010-07-26 15:35 +0000
Tagging package [osad] version [5.9.37-1] in directory [client/tools/osad/].
Changes since spacewalk-schema-1.1.20-1:
Milan Zazrivec (2):
618300 - default_db is no longer needed
Automatic commit of package [osad] release [5.9.37-1].
---
client/tools/osad/osad.spec | 5 ++++-
client/tools/osad/rhn-conf/rhn_osa-dispatcher.conf | 2 --
rel-eng/packages/osad | 2 +-
3 files changed, 5 insertions(+), 4 deletions(-)
---
13 years, 9 months
client/tools rel-eng/packages
by Milan Zazrivec
client/tools/osad/osad.spec | 5 ++++-
rel-eng/packages/osad | 2 +-
2 files changed, 5 insertions(+), 2 deletions(-)
New commits:
commit 16dc12448ddf70fbbb48dfb3c93ff364a23e217c
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Mon Jul 26 17:35:11 2010 +0200
Automatic commit of package [osad] release [5.9.37-1].
diff --git a/client/tools/osad/osad.spec b/client/tools/osad/osad.spec
index 4f7bd29..9fa1595 100644
--- a/client/tools/osad/osad.spec
+++ b/client/tools/osad/osad.spec
@@ -9,7 +9,7 @@ Group: System Environment/Daemons
License: GPLv2
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
-Version: 5.9.36
+Version: 5.9.37
Release: 1%{?dist}
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch
@@ -247,6 +247,9 @@ rpm -ql osa-dispatcher | xargs -n 1 /sbin/restorecon -rvi {}
# $Id$
%changelog
+* Mon Jul 26 2010 Milan Zazrivec <mzazrivec(a)redhat.com> 5.9.37-1
+- 618300 - default_db is no longer needed
+
* Tue Jul 20 2010 Milan Zazrivec <mzazrivec(a)redhat.com> 5.9.36-1
- make osa-dispatcher start after jabberd
diff --git a/rel-eng/packages/osad b/rel-eng/packages/osad
index dfb5987..e2c4912 100644
--- a/rel-eng/packages/osad
+++ b/rel-eng/packages/osad
@@ -1 +1 @@
-5.9.36-1 client/tools/osad/
+5.9.37-1 client/tools/osad/
13 years, 9 months
client/tools
by Milan Zazrivec
client/tools/osad/rhn-conf/rhn_osa-dispatcher.conf | 2 --
1 file changed, 2 deletions(-)
New commits:
commit 24a652b81a51a12127500c3ae87fe4f19fdae66f
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Mon Jul 26 17:30:18 2010 +0200
618300 - default_db is no longer needed
This is to avoid traceback during osa-dispatcher startup:
Traceback (most recent call last):
File "/usr/share/rhn/osad/jabber_lib.py", line 119, in main
self.setup_config(config)
File "/usr/share/rhn/osad/osa_dispatcher.py", line 81, in setup_config
rhnSQL.initDB()
File "/usr/share/rhn/server/rhnSQL/__init__.py", line 119, in initDB
__init__DB(backend, host, port, username, password, database)
File "/usr/share/rhn/server/rhnSQL/__init__.py", line 52, in
__init__DB
__DB.connect()
File "/usr/share/rhn/server/rhnSQL/driver_cx_Oracle.py", line 385, in
connect
raise apply(sql_base.SQLConnectError, err_args)
SQLConnectError: (12154, 'ORA-12154: TNS:could not resolve the connect
identifier specified\n', 'oracleinstance', 'Connection_Connect(): server
attach')
diff --git a/client/tools/osad/rhn-conf/rhn_osa-dispatcher.conf b/client/tools/osad/rhn-conf/rhn_osa-dispatcher.conf
index dc447b6..7c38642 100644
--- a/client/tools/osad/rhn-conf/rhn_osa-dispatcher.conf
+++ b/client/tools/osad/rhn-conf/rhn_osa-dispatcher.conf
@@ -1,7 +1,5 @@
# Default log file
log_file = /var/log/rhn/osa-dispatcher.log
-# Database
-default_db = oracleuser/oraclepassword@oracleinstance
# SSL cert
osa_ssl_cert = /usr/share/rhn/RHNS-OSA-CERT
# Jabber server to connect to
13 years, 9 months
Changes to 'refs/tags/spacewalk-schema-1.1.20-1'
by Michael Mraka
Tag 'spacewalk-schema-1.1.20-1' created by Michael Mraka <michael.mraka(a)redhat.com> at 2010-07-26 14:42 +0000
Tagging package [spacewalk-schema] version [1.1.20-1] in directory [schema/spacewalk/].
Changes since spacecmd-0.5.3-1:
Michael Mraka (3):
618219 - update family counts only once per family
added upgrade for 618219 - update family counts only once per family
Automatic commit of package [spacewalk-schema] release [1.1.20-1].
Milan Zazrivec (1):
617425 - point the user to the correct menu item
Miroslav Suchý (1):
618267 - do not allow control characters in xmlrpc communication
---
client/rhel/rhn-client-tools/data/rh_register.glade | 8 ++
client/rhel/rhnlib/rhn/rpclib.py | 30 +++++++++-
rel-eng/packages/spacewalk-schema | 2
schema/spacewalk/oracle/packages/rhn_channel.pkb | 19 +++++-
schema/spacewalk/spacewalk-schema.spec | 5 +
schema/spacewalk/upgrade/spacewalk-schema-1.0-to-spacewalk-schema-1.1/015-rhn_channel-pkb.sql | 19 +++++-
6 files changed, 73 insertions(+), 10 deletions(-)
---
13 years, 9 months
rel-eng/packages schema/spacewalk
by Michael Mraka
rel-eng/packages/spacewalk-schema | 2 +-
schema/spacewalk/spacewalk-schema.spec | 5 ++++-
2 files changed, 5 insertions(+), 2 deletions(-)
New commits:
commit c6899efe53e04a8126e4288770bcc29dc3ef658f
Author: Michael Mraka <michael.mraka(a)redhat.com>
Date: Mon Jul 26 16:42:02 2010 +0200
Automatic commit of package [spacewalk-schema] release [1.1.20-1].
diff --git a/rel-eng/packages/spacewalk-schema b/rel-eng/packages/spacewalk-schema
index 575caef..ad5d24a 100644
--- a/rel-eng/packages/spacewalk-schema
+++ b/rel-eng/packages/spacewalk-schema
@@ -1 +1 @@
-1.1.19-1 schema/spacewalk/
+1.1.20-1 schema/spacewalk/
diff --git a/schema/spacewalk/spacewalk-schema.spec b/schema/spacewalk/spacewalk-schema.spec
index 72931b5..17bbcc3 100644
--- a/schema/spacewalk/spacewalk-schema.spec
+++ b/schema/spacewalk/spacewalk-schema.spec
@@ -2,7 +2,7 @@ Name: spacewalk-schema
Group: Applications/Internet
Summary: Oracle SQL schema for Spacewalk server
-Version: 1.1.19
+Version: 1.1.20
Release: 1%{?dist}
Source0: %{name}-%{version}.tar.gz
@@ -59,6 +59,9 @@ rm -rf $RPM_BUILD_ROOT
%{_mandir}/man1/spacewalk-schema-upgrade*
%changelog
+* Mon Jul 26 2010 Michael Mraka <michael.mraka(a)redhat.com> 1.1.20-1
+- 618219 - update family counts only once per family
+
* Wed Jul 21 2010 Jan Pazdziora 1.1.19-1
- If PostgreSQL source specifies SHA1 of Oracle source equivalent, we need to
verify it.
13 years, 9 months
schema/spacewalk
by Michael Mraka
schema/spacewalk/upgrade/spacewalk-schema-1.0-to-spacewalk-schema-1.1/015-rhn_channel-pkb.sql | 19 ++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
New commits:
commit 255acea577c7e73b61809aa08daa7b613f78a618
Author: Michael Mraka <michael.mraka(a)redhat.com>
Date: Mon Jul 26 16:41:04 2010 +0200
added upgrade for 618219 - update family counts only once per family
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.0-to-spacewalk-schema-1.1/015-rhn_channel-pkb.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.0-to-spacewalk-schema-1.1/015-rhn_channel-pkb.sql
index afc81b2..b4046bf 100644
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.0-to-spacewalk-schema-1.1/015-rhn_channel-pkb.sql
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.0-to-spacewalk-schema-1.1/015-rhn_channel-pkb.sql
@@ -427,12 +427,27 @@ IS
rhnChannelFamilyMembers cfm
where s.id = server_id_in
and s.id = sc.server_id
- and sc.channel_id = cfm.channel_id;
+ and sc.channel_id = cfm.channel_id
+ order by cfm.channel_family_id;
+ last_channel_family_id rhnChannelFamilyMembers.channel_family_id%type := -1;
+ last_channel_org_id rhnServer.org_id%type := -1;
BEGIN
for channel in server_channels(server_id_in)
loop
- unsubscribe_server(server_id_in, channel.channel_id, 1, 1, deleting_server, update_family_countsYN);
+ unsubscribe_server(server_id_in, channel.channel_id, 1, 1, deleting_server, 0);
+ if update_family_countsYN
+ and channel.channel_family_id != last_channel_family_id then
+ -- update family counts only once
+ -- after all channels with same family has been fetched
+ update_family_counts(last_channel_family_id, last_channel_org_id);
+ last_channel_family_id := channel.channel_family_id;
+ last_channel_org_id := channel.org_id;
+ end if;
end loop channel;
+ if update_family_countsYN and last_channel_family_id != -1 then
+ -- update the last family fetched
+ update_family_counts(last_channel_family_id, channel.org_id);
+ end if;
END clear_subscriptions;
PROCEDURE unsubscribe_server(server_id_in IN NUMBER, channel_id_in NUMBER, immediate_in NUMBER := 1, unsubscribe_children_in number := 0,
13 years, 9 months
schema/spacewalk
by Michael Mraka
schema/spacewalk/oracle/packages/rhn_channel.pkb | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
New commits:
commit fc86b832f262feb6cf4b92ee9beaa493fb54a566
Author: Michael Mraka <michael.mraka(a)redhat.com>
Date: Mon Jul 26 16:36:50 2010 +0200
618219 - update family counts only once per family
diff --git a/schema/spacewalk/oracle/packages/rhn_channel.pkb b/schema/spacewalk/oracle/packages/rhn_channel.pkb
index afc81b2..b4046bf 100644
--- a/schema/spacewalk/oracle/packages/rhn_channel.pkb
+++ b/schema/spacewalk/oracle/packages/rhn_channel.pkb
@@ -427,12 +427,27 @@ IS
rhnChannelFamilyMembers cfm
where s.id = server_id_in
and s.id = sc.server_id
- and sc.channel_id = cfm.channel_id;
+ and sc.channel_id = cfm.channel_id
+ order by cfm.channel_family_id;
+ last_channel_family_id rhnChannelFamilyMembers.channel_family_id%type := -1;
+ last_channel_org_id rhnServer.org_id%type := -1;
BEGIN
for channel in server_channels(server_id_in)
loop
- unsubscribe_server(server_id_in, channel.channel_id, 1, 1, deleting_server, update_family_countsYN);
+ unsubscribe_server(server_id_in, channel.channel_id, 1, 1, deleting_server, 0);
+ if update_family_countsYN
+ and channel.channel_family_id != last_channel_family_id then
+ -- update family counts only once
+ -- after all channels with same family has been fetched
+ update_family_counts(last_channel_family_id, last_channel_org_id);
+ last_channel_family_id := channel.channel_family_id;
+ last_channel_org_id := channel.org_id;
+ end if;
end loop channel;
+ if update_family_countsYN and last_channel_family_id != -1 then
+ -- update the last family fetched
+ update_family_counts(last_channel_family_id, channel.org_id);
+ end if;
END clear_subscriptions;
PROCEDURE unsubscribe_server(server_id_in IN NUMBER, channel_id_in NUMBER, immediate_in NUMBER := 1, unsubscribe_children_in number := 0,
13 years, 9 months