Um what is this for? seems like a lot of code for a one time thing. My first impression is -1 to this commit.

jesus

On Tue, Jul 21, 2009 at 5:23 PM, Mike McCune<[email protected]> wrote:
 java/code/src/com/redhat/rhn/domain/task/Task.hbm.xml                          
 |    9
 java/code/src/com/redhat/rhn/domain/task/TaskFactory.java                      
 |   21 ++
 java/code/src/com/redhat/rhn/domain/task/test/TaskTest.java                    
 |   15 +
 java/code/src/com/redhat/rhn/manager/BaseTransactionCommand.java               
 |   75 +++++++
 java/code/src/com/redhat/rhn/manager/errata/cache/UpdateErrataCacheCommand.java
 |   41 ---
 java/code/src/com/redhat/rhn/manager/satellite/UpgradeCommand.java             
 |  105 ++++++++++
 java/code/src/com/redhat/rhn/manager/satellite/test/UpgradeCommandTest.java    
 |   59 +++++
 java/code/src/com/redhat/rhn/webapp/RhnServletListener.java                    
 |   12 +
 8 files changed, 299 insertions(+), 38 deletions(-)

New commits:
commit 8f94b49ce1dd35671f627bd4161e6355631d00f1
Author: Mike McCune <[email protected]>
Date:   Tue Jul 21 14:22:17 2009 -0700

   512814 - adding spot to add 'upgrade' logic to our startup of tomact.

   Now coders can add an entry to rhnTaskQueue to indicate to our Java code
   that we want to run a set of business logic during an upgrade.

diff --git a/java/code/src/com/redhat/rhn/domain/task/Task.hbm.xml 
b/java/code/src/com/redhat/rhn/domain/task/Task.hbm.xml
index 4b32495..276b5e8 100644
--- a/java/code/src/com/redhat/rhn/domain/task/Task.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/task/Task.hbm.xml
@@ -33,4 +33,13 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            and task_data = :data and earliest = :earliest]]>
       </query>

+    <sql-query name="Task.lookupByNameLike">
+      <![CDATA[SELECT {t.*}
+          FROM rhnTaskQueue {t}
+             WHERE t.task_name like :namelike
+        ]]>
+    <return alias="t" class="com.redhat.rhn.domain.task.Task" />
+    </sql-query>
+
+
 </hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/domain/task/TaskFactory.java 
b/java/code/src/com/redhat/rhn/domain/task/TaskFactory.java
index 70c71f1..50149eb 100644
--- a/java/code/src/com/redhat/rhn/domain/task/TaskFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/task/TaskFactory.java
@@ -74,6 +74,16 @@ public class TaskFactory extends HibernateFactory {
    }

    /**
+     * Remove a completed Task from the queue.
+     *
+     * @param taskIn to remove
+     */
+    public static void remove(Task taskIn) {
+        singleton.removeObject(taskIn);
+    }
+
+
+    /**
     * Lookups up a task.
     * @param org The org containing the task
     * @param name The name of the task
@@ -126,4 +136,15 @@ public class TaskFactory extends HibernateFactory {

        return c.list();
    }
+
+    /**
+     * Lookup a list of Tasks who's name start with passed in param
+     * @param nameIn to lookup
+     * @return List of Tasks or null if not found.
+     */
+    public static List getTaskListByNameLike(String nameIn) {
+        return 
HibernateFactory.getSession().getNamedQuery("Task.lookupByNameLike")
+          .setString("namelike", nameIn + "%")
+          .list();
+    }
 }
diff --git a/java/code/src/com/redhat/rhn/domain/task/test/TaskTest.java 
b/java/code/src/com/redhat/rhn/domain/task/test/TaskTest.java
index 2d9333f..c4559d1 100644
--- a/java/code/src/com/redhat/rhn/domain/task/test/TaskTest.java
+++ b/java/code/src/com/redhat/rhn/domain/task/test/TaskTest.java
@@ -24,6 +24,8 @@ import com.redhat.rhn.testing.UserTestUtils;

 import org.hibernate.Session;

+import java.util.List;
+
 /**
 * TaskTest
 * @version $Rev$
@@ -61,4 +63,17 @@ public class TaskTest extends RhnBaseTestCase {
        t3.setName("foo");
        assertFalse("t2 should not be equal to t3", t2.equals(t3));
    }
+
+    public void testLookupNameLike() throws Exception {
+        Org org = UserTestUtils.findNewOrg("testOrg");
+        String testname = "task_object_unit_test_" + TestUtils.randomString();
+        Long testdata = new Long(42);
+        Task t = TaskFactory.createTask(org, testname, testdata);
+
+        List lookedup = 
TaskFactory.getTaskListByNameLike("task_object_unit_test_");
+        assertNotNull(lookedup);
+        assertTrue(lookedup.size() > 0);
+        assertTrue(lookedup.get(0) != null);
+        assertTrue(lookedup.get(0) instanceof Task);
+    }
 }
diff --git a/java/code/src/com/redhat/rhn/manager/BaseTransactionCommand.java 
b/java/code/src/com/redhat/rhn/manager/BaseTransactionCommand.java
new file mode 100644
index 0000000..1f47b46
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/manager/BaseTransactionCommand.java
@@ -0,0 +1,75 @@
+/**
+ * Copyright (c) 2009 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.manager;
+
+import com.redhat.rhn.common.hibernate.HibernateFactory;
+
+import org.apache.log4j.Logger;
+import org.hibernate.HibernateException;
+
+/**
+ * BaseTransactionCommand - simple baseclass to hold logic for handling tx
+ *
+ * @version $Rev$
+ */
+public class BaseTransactionCommand {
+
+    private Logger log;
+
+    /**
+     * Constructor
+     * @param logIn to use.
+     */
+    public BaseTransactionCommand(Logger logIn) {
+        log = logIn;
+    }
+
+    protected void handleTransaction() {
+        boolean committed = false;
+
+        try {
+            HibernateFactory.commitTransaction();
+            committed = true;
+
+            if (log.isDebugEnabled()) {
+                log.debug("Transaction committed");
+            }
+        }
+        catch (HibernateException e) {
+            log.error("Rolling back transaction", e);
+        }
+        finally {
+            try {
+                if (!committed) {
+                    try {
+                        if (log.isDebugEnabled()) {
+                            log.debug("Rolling back transaction");
+                        }
+                        HibernateFactory.rollbackTransaction();
+                    }
+                    catch (HibernateException e) {
+                        final String msg = "Additional error during rollback";
+                        log.warn(msg, e);
+                    }
+                }
+            }
+            finally {
+                // cleanup the session
+                HibernateFactory.closeSession();
+            }
+        }
+    }
+
+}
diff --git 
a/java/code/src/com/redhat/rhn/manager/errata/cache/UpdateErrataCacheCommand.java
 
b/java/code/src/com/redhat/rhn/manager/errata/cache/UpdateErrataCacheCommand.java
index fdff195..547b78b 100644
--- 
a/java/code/src/com/redhat/rhn/manager/errata/cache/UpdateErrataCacheCommand.java
+++ 
b/java/code/src/com/redhat/rhn/manager/errata/cache/UpdateErrataCacheCommand.java
@@ -25,12 +25,12 @@ import com.redhat.rhn.domain.org.Org;
 import com.redhat.rhn.domain.org.OrgFactory;
 import com.redhat.rhn.domain.server.Server;
 import com.redhat.rhn.frontend.dto.ErrataCacheDto;
+import com.redhat.rhn.manager.BaseTransactionCommand;
 import com.redhat.rhn.manager.action.ActionManager;
 import com.redhat.rhn.manager.errata.ErrataManager;
 import com.redhat.rhn.manager.system.SystemManager;

 import org.apache.log4j.Logger;
-import org.hibernate.HibernateException;

 import java.util.ArrayList;
 import java.util.HashMap;
@@ -43,7 +43,7 @@ import java.util.Map;
 * UpdateErrataCacheCommand
 * @version $Rev$
 */
-public class UpdateErrataCacheCommand {
+public class UpdateErrataCacheCommand extends BaseTransactionCommand {
    private static Logger log = Logger
            .getLogger(UpdateErrataCacheCommand.class);

@@ -51,6 +51,7 @@ public class UpdateErrataCacheCommand {
     * Default constructor
     */
    public UpdateErrataCacheCommand() {
+        super(log);
    }

    /**
@@ -280,42 +281,6 @@ public class UpdateErrataCacheCommand {
        return retval;

    }
-
-    protected void handleTransaction() {
-        boolean committed = false;
-
-        try {
-            HibernateFactory.commitTransaction();
-            committed = true;
-
-            if (log.isDebugEnabled()) {
-                log.debug("Transaction committed");
-            }
-        }
-        catch (HibernateException e) {
-            log.error("Rolling back transaction", e);
-        }
-        finally {
-            try {
-                if (!committed) {
-                    try {
-                        if (log.isDebugEnabled()) {
-                            log.debug("Rolling back transaction");
-                        }
-                        HibernateFactory.rollbackTransaction();
-                    }
-                    catch (HibernateException e) {
-                        final String msg = "Additional error during rollback";
-                        log.warn(msg, e);
-                    }
-                }
-            }
-            finally {
-                // cleanup the session
-                HibernateFactory.closeSession();
-            }
-        }
-    }

    private void processServer(Long serverId, Org org) {
        Server server = SystemManager.lookupByIdAndOrg(serverId, org);
diff --git a/java/code/src/com/redhat/rhn/manager/satellite/UpgradeCommand.java 
b/java/code/src/com/redhat/rhn/manager/satellite/UpgradeCommand.java
new file mode 100644
index 0000000..f2fd91f
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/manager/satellite/UpgradeCommand.java
@@ -0,0 +1,105 @@
+/**
+ * Copyright (c) 2009 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.manager.satellite;
+
+import com.redhat.rhn.common.hibernate.HibernateFactory;
+import com.redhat.rhn.domain.kickstart.KickstartData;
+import com.redhat.rhn.domain.kickstart.KickstartFactory;
+import com.redhat.rhn.domain.kickstart.KickstartSession;
+import com.redhat.rhn.domain.task.Task;
+import com.redhat.rhn.domain.task.TaskFactory;
+import com.redhat.rhn.manager.BaseTransactionCommand;
+import com.redhat.rhn.manager.kickstart.KickstartSessionCreateCommand;
+
+import org.apache.log4j.Logger;
+
+import java.util.List;
+
+
+/**
+ * Class responsible for executing one-time upgrade logic
+ *
+ * @version $Rev$
+ */
+public class UpgradeCommand extends BaseTransactionCommand {
+
+    /**
+     * Logger for this class
+     */
+    private static Logger log = Logger.getLogger(UpgradeCommand.class);
+
+    public static final String UPGRADE_TASK_NAME = "upgrade_satellite_";
+    public static final String UPGRADE_KS_PROFILES =
+        UPGRADE_TASK_NAME + "kickstart_profiles";
+
+    /**
+     * Constructor
+     */
+    public UpgradeCommand() {
+        super(log);
+    }
+
+
+    /**
+     * Excute the upgrade step
+     */
+    public void store() {
+        try {
+            HibernateFactory.getSession().beginTransaction();
+            List upgradeTasks = 
TaskFactory.getTaskListByNameLike(UPGRADE_TASK_NAME);
+            // Loop over upgrade tasks and execute the steps.
+            for (int i = 0; i < upgradeTasks.size(); i++) {
+                Task t = (Task) upgradeTasks.get(i);
+                // Use WARN because we want this logged.
+                if (t != null) {
+                    log.warn("got upgrade task: " + t.getName());
+                    if (t.getName().equals(UPGRADE_KS_PROFILES)) {
+                        processKickstartProfiles();
+                        TaskFactory.remove(t);
+                    }
+                }
+            }
+        }
+        catch (Exception e) {
+            log.error("Problem upgrading!", e);
+            HibernateFactory.rollbackTransaction();
+
+        }
+        finally {
+            handleTransaction();
+        }
+    }
+
+    private void processKickstartProfiles() {
+        // Use WARN here because we want this operation logged.
+        log.warn("Processing ks profiles.");
+        List allKickstarts = KickstartFactory.listAllKickstartData();
+        for (int i = 0; i < allKickstarts.size(); i++) {
+            KickstartData ksdata = (KickstartData) allKickstarts.get(i);
+            KickstartSession ksession =
+                
KickstartFactory.lookupDefaultKickstartSessionForKickstartData(ksdata);
+            if (ksession == null) {
+                log.warn("Kickstart does not have a session: id: " + 
ksdata.getId() +
+                        " label: " + ksdata.getLabel());
+                KickstartSessionCreateCommand kcmd = new 
KickstartSessionCreateCommand(
+                        ksdata.getOrg(), ksdata);
+                kcmd.store();
+                log.warn("Created kickstart session and key");
+            }
+
+        }
+    }
+
+}
diff --git 
a/java/code/src/com/redhat/rhn/manager/satellite/test/UpgradeCommandTest.java 
b/java/code/src/com/redhat/rhn/manager/satellite/test/UpgradeCommandTest.java
new file mode 100644
index 0000000..4175fb5
--- /dev/null
+++ 
b/java/code/src/com/redhat/rhn/manager/satellite/test/UpgradeCommandTest.java
@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2009 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.manager.satellite.test;
+
+import com.redhat.rhn.domain.kickstart.KickstartData;
+import com.redhat.rhn.domain.kickstart.KickstartFactory;
+import com.redhat.rhn.domain.kickstart.KickstartSession;
+import com.redhat.rhn.domain.task.Task;
+import com.redhat.rhn.domain.task.TaskFactory;
+import com.redhat.rhn.frontend.action.kickstart.test.KickstartTestHelper;
+import com.redhat.rhn.manager.satellite.UpgradeCommand;
+import com.redhat.rhn.testing.BaseTestCaseWithUser;
+
+import java.util.List;
+
+
+public class UpgradeCommandTest extends BaseTestCaseWithUser {
+
+    public void testUpgradeProfiles() throws Exception {
+        KickstartData ksd = KickstartTestHelper.createTestKickStart(user);
+
+        KickstartSession ksession =
+            
KickstartFactory.lookupDefaultKickstartSessionForKickstartData(ksd);
+        assertNull(ksession);
+        TaskFactory.createTask(user.getOrg(),
+                UpgradeCommand.UPGRADE_KS_PROFILES, new Long(0));
+
+        List l = TaskFactory.getTaskListByNameLike(
+                UpgradeCommand.UPGRADE_KS_PROFILES);
+        assertTrue(l.get(0) instanceof Task);
+
+        // UpgradeCommand its its own transaction so we gotta commit.
+        commitAndCloseSession();
+
+        UpgradeCommand cmd = new UpgradeCommand();
+        cmd.store();
+
+        // Check to see if the upgrade command created the default profile.
+        ksession =
+            
KickstartFactory.lookupDefaultKickstartSessionForKickstartData(ksd);
+        assertNotNull(ksession);
+
+        assertNull(TaskFactory.getTaskListByNameLike(
+                UpgradeCommand.UPGRADE_KS_PROFILES));
+
+    }
+}
diff --git a/java/code/src/com/redhat/rhn/webapp/RhnServletListener.java 
b/java/code/src/com/redhat/rhn/webapp/RhnServletListener.java
index 94a7925..c81ebeb 100644
--- a/java/code/src/com/redhat/rhn/webapp/RhnServletListener.java
+++ b/java/code/src/com/redhat/rhn/webapp/RhnServletListener.java
@@ -16,6 +16,7 @@ package com.redhat.rhn.webapp;

 import com.redhat.rhn.common.hibernate.HibernateFactory;
 import com.redhat.rhn.common.messaging.MessageQueue;
+import com.redhat.rhn.manager.satellite.UpgradeCommand;

 import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
@@ -109,6 +110,17 @@ public class RhnServletListener implements 
ServletContextListener {

        startHibernate();
        logStart("Hibernate");
+
+        log.debug("Starting upgrade check");
+        executeUpgradeStep();
+    }
+
+    private void executeUpgradeStep() {
+        log.debug("calling UpgradeCommand.");
+        UpgradeCommand cmd = new UpgradeCommand();
+        cmd.store();
+        log.debug("UpgradeCommand done.");
+
    }

    /** {...@inheritdoc} */


_______________________________________________
spacewalk-commits mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/spacewalk-commits


Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Spacewalk-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/spacewalk-devel

Reply via email to