Branch 'fve' - java/code
by Partha Aji
java/code/src/com/redhat/rhn/domain/channel/test/ChannelFactoryTest.java | 27 -
java/code/src/com/redhat/rhn/domain/channel/test/ChannelFamilyFactoryTest.java | 17
java/code/src/com/redhat/rhn/domain/server/ServerGroupType.java | 10
java/code/src/com/redhat/rhn/domain/server/test/HostBuilder.java | 11
java/code/src/com/redhat/rhn/domain/server/test/ServerFactoryTest.java | 45 +-
java/code/src/com/redhat/rhn/manager/system/VirtualizationEntitlementsManager.java | 25 -
java/code/src/com/redhat/rhn/manager/system/test/VirtualizationEntitlementsManagerTest.java | 220 ++++++++++
java/code/src/com/redhat/rhn/testing/UserTestUtils.java | 14
8 files changed, 311 insertions(+), 58 deletions(-)
New commits:
commit 5445dc72d6f86f44bbac5d4c14c7d6000cdd76f8
Author: Partha Aji <paji(a)redhat.com>
Date: Fri Jun 25 14:51:29 2010 -0400
Added unit tests for VirtEntitlementsManager
diff --git a/java/code/src/com/redhat/rhn/domain/channel/test/ChannelFactoryTest.java b/java/code/src/com/redhat/rhn/domain/channel/test/ChannelFactoryTest.java
index d7d48e3..d33e07c 100644
--- a/java/code/src/com/redhat/rhn/domain/channel/test/ChannelFactoryTest.java
+++ b/java/code/src/com/redhat/rhn/domain/channel/test/ChannelFactoryTest.java
@@ -89,11 +89,29 @@ public class ChannelFactoryTest extends RhnBaseTestCase {
ChannelFactory.save(c);
return c;
}
+
+ public static Channel createBaseChannel(User user,
+ ChannelFamily fam) throws Exception {
+ Channel c = createTestChannel(null, fam);
+ ProductName pn = lookupOrCreateProductName(ChannelManager.RHEL_PRODUCT_NAME);
+ c.setProductName(pn);
+ ChannelFactory.save(c);
+ return (Channel)TestUtils.saveAndReload(c);
+ }
+
public static Channel createTestChannel(User user) throws Exception {
Org org = user.getOrg();
ChannelFamily cfam = user.getOrg().getPrivateChannelFamily();
+ Channel c = createTestChannel(org, cfam);
+ // assume we want the user to have access to this channel once created
+ UserManager.addChannelPerm(user, c.getId(), "subscribe");
+ UserManager.addChannelPerm(user, c.getId(), "manage");
+ ChannelFactory.save(c);
+ return c;
+ }
+ public static Channel createTestChannel(Org org, ChannelFamily cfam) throws Exception {
String label = "ChannelLabel" + TestUtils.randomString();
String basedir = "TestChannel basedir";
String name = "ChannelName" + TestUtils.randomString();
@@ -108,11 +126,10 @@ public class ChannelFactoryTest extends RhnBaseTestCase {
Calendar cal = Calendar.getInstance();
cal.roll(Calendar.DATE, true);
Date endoflife = new Date(System.currentTimeMillis() + Integer.MAX_VALUE);
-
+
Long testid = new Long(500);
String query = "ChannelArch.findById";
ChannelArch arch = (ChannelArch) TestUtils.lookupFromCacheById(testid, query);
-
Channel c = new Channel();
c.setOrg(org);
c.setLabel(label);
@@ -129,12 +146,6 @@ public class ChannelFactoryTest extends RhnBaseTestCase {
c.setEndOfLife(endoflife);
c.setChannelArch(arch);
c.setChannelFamily(cfam);
-
- ChannelFactory.save(c);
-
- // assume we want the user to have access to this channel once created
- UserManager.addChannelPerm(user, c.getId(), "subscribe");
- UserManager.addChannelPerm(user, c.getId(), "manage");
ChannelFactory.save(c);
return c;
}
diff --git a/java/code/src/com/redhat/rhn/domain/channel/test/ChannelFamilyFactoryTest.java b/java/code/src/com/redhat/rhn/domain/channel/test/ChannelFamilyFactoryTest.java
index 66bf9b1..6389262 100644
--- a/java/code/src/com/redhat/rhn/domain/channel/test/ChannelFamilyFactoryTest.java
+++ b/java/code/src/com/redhat/rhn/domain/channel/test/ChannelFamilyFactoryTest.java
@@ -14,6 +14,7 @@
*/
package com.redhat.rhn.domain.channel.test;
+import com.redhat.rhn.common.hibernate.HibernateFactory;
import com.redhat.rhn.domain.channel.ChannelFamily;
import com.redhat.rhn.domain.channel.ChannelFamilyFactory;
import com.redhat.rhn.domain.channel.PrivateChannelFamily;
@@ -31,7 +32,8 @@ import java.util.List;
*/
public class ChannelFamilyFactoryTest extends RhnBaseTestCase {
- public static final Long ENTITLEMENT_ALLOCATION = new Long(10000);
+ public static final long ENTITLEMENT_ALLOCATION = 10000;
+ public static final long FLEX_ALLOCATION = ENTITLEMENT_ALLOCATION;
public void testChannelFamilyFactory() throws Exception {
ChannelFamily cfam = createTestChannelFamily();
@@ -105,6 +107,11 @@ public class ChannelFamilyFactoryTest extends RhnBaseTestCase {
}
public static ChannelFamily createTestChannelFamily(User user) throws Exception {
+ return createTestChannelFamily(user, ENTITLEMENT_ALLOCATION, FLEX_ALLOCATION);
+ }
+
+ public static ChannelFamily createTestChannelFamily(User user,
+ Long ents, Long flexEnts) throws Exception {
Org org = user.getOrg();
String label = "ChannelFamilyLabel" + TestUtils.randomString();
String name = "ChannelFamilyName" + TestUtils.randomString();
@@ -123,8 +130,12 @@ public class ChannelFamilyFactoryTest extends RhnBaseTestCase {
pcf.setOrg(user.getOrg());
pcf.setChannelFamily(cfam);
pcf.setCurrentMembers(new Long(0));
- pcf.setMaxMembers(ENTITLEMENT_ALLOCATION);
- pcf = (PrivateChannelFamily) TestUtils.saveAndReload(pcf);
+ pcf.setMaxMembers(ents);
+ pcf.setCurrentFlex(0L);
+ pcf.setMaxFlex(flexEnts);
+ HibernateFactory.getSession().save(pcf);
+
+
cfam.addPrivateChannelFamily(pcf);
cfam = (ChannelFamily) TestUtils.reload(cfam);
return cfam;
diff --git a/java/code/src/com/redhat/rhn/domain/server/ServerGroupType.java b/java/code/src/com/redhat/rhn/domain/server/ServerGroupType.java
index ede23eb..7a458f9 100644
--- a/java/code/src/com/redhat/rhn/domain/server/ServerGroupType.java
+++ b/java/code/src/com/redhat/rhn/domain/server/ServerGroupType.java
@@ -15,6 +15,8 @@
package com.redhat.rhn.domain.server;
import com.redhat.rhn.domain.AbstractLabelNameHelper;
+import com.redhat.rhn.domain.entitlement.Entitlement;
+import com.redhat.rhn.manager.entitlement.EntitlementManager;
import java.util.HashSet;
import java.util.Set;
@@ -74,4 +76,12 @@ public class ServerGroupType extends AbstractLabelNameHelper {
public void setFeatures(Set<Feature> featuresIn) {
features = featuresIn;
}
+
+ /**
+ * Get the associated Entitlement
+ * @return the Entitlement
+ */
+ public Entitlement getAssociatedEntitlement() {
+ return EntitlementManager.getByName(this.getLabel());
+ }
}
diff --git a/java/code/src/com/redhat/rhn/domain/server/test/HostBuilder.java b/java/code/src/com/redhat/rhn/domain/server/test/HostBuilder.java
index 299067f..61fa278 100644
--- a/java/code/src/com/redhat/rhn/domain/server/test/HostBuilder.java
+++ b/java/code/src/com/redhat/rhn/domain/server/test/HostBuilder.java
@@ -20,10 +20,13 @@ import com.redhat.rhn.domain.server.ServerConstants;
import com.redhat.rhn.domain.server.ServerGroupType;
import com.redhat.rhn.domain.server.VirtualInstance;
import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.manager.entitlement.EntitlementManager;
+import com.redhat.rhn.manager.system.SystemManager;
import com.redhat.rhn.testing.TestUtils;
import org.hibernate.Session;
+import java.util.Date;
import java.util.Iterator;
@@ -80,6 +83,9 @@ public class HostBuilder {
private HostBuilder createHost(ServerGroupType type) throws Exception {
host = ServerFactoryTest.createTestServer(owner, true, type);
+ if (host.getBaseEntitlement() == null) {
+ SystemManager.entitleServer(host, EntitlementManager.MANAGEMENT);
+ }
return this;
}
@@ -162,11 +168,14 @@ public class HostBuilder {
virtualInstance.setUuid(TestUtils.randomString());
if (register) {
- guest = ServerFactoryTest.createTestServer(owner);
+ guest = ServerFactoryTest.createUnentitledTestServer(owner, true,
+ ServerFactoryTest.TYPE_SERVER_NORMAL , new Date());
virtualInstance.setGuestSystem(guest);
}
host.addGuest(virtualInstance);
+ TestUtils.saveAndFlush(host);
+ TestUtils.saveAndFlush(guest);
}
}
diff --git a/java/code/src/com/redhat/rhn/domain/server/test/ServerFactoryTest.java b/java/code/src/com/redhat/rhn/domain/server/test/ServerFactoryTest.java
index 68f3016..42ef538 100644
--- a/java/code/src/com/redhat/rhn/domain/server/test/ServerFactoryTest.java
+++ b/java/code/src/com/redhat/rhn/domain/server/test/ServerFactoryTest.java
@@ -535,36 +535,42 @@ public class ServerFactoryTest extends RhnBaseTestCase {
new Date());
}
- public static Server createTestServer(User owner, boolean ensureOwnerAccess,
- ServerGroupType type, Date dateCreated) throws Exception {
- return createTestServer(owner, ensureOwnerAccess, type, TYPE_SERVER_NORMAL,
- dateCreated);
- }
public static Server createTestServer(User owner, boolean ensureOwnerAccess,
ServerGroupType type, int stype) throws Exception {
return createTestServer(owner, ensureOwnerAccess, type, stype, new Date());
}
+
+ private static Server createTestServer(User owner, boolean ensureOwnerAccess,
+ ServerGroupType type, int stype, Date dateCreated)
+ throws Exception {
+
+ Server newS = createUnentitledTestServer(owner, ensureOwnerAccess, stype,
+ dateCreated);
+
+ if (!type.getAssociatedEntitlement().isBase()) {
+ SystemManager.entitleServer(newS, EntitlementManager.MANAGEMENT);
+ }
+
+
+ EntitlementServerGroup sg = ServerGroupTestUtils.createEntitled(owner.getOrg(),
+ type);
+ SystemManager.entitleServer(newS, sg.getGroupType().getAssociatedEntitlement());
+ return (Server) TestUtils.saveAndReload(newS);
+ }
+
/**
* Create a test Server and commit it to the DB.
* @param owner the owner of this Server
* @param ensureOwnerAccess this flag will make sure the owner passed in has
* access to the new server.
* @return Server that was created
+ * @throws Exception if there are server creation errors
*/
- private static Server createTestServer(User owner, boolean ensureOwnerAccess,
- ServerGroupType type, int stype, Date dateCreated)
- throws Exception {
-
- //Create a server and a server group
- EntitlementServerGroup sg = ServerGroupTestUtils.createEntitled(owner.getOrg(),
- type);
- if (sg.getMaxMembers() != null) {
- sg.setMaxMembers(new Long(sg.getMaxMembers().longValue() + 10L));
- }
+ public static Server createUnentitledTestServer(User owner, boolean ensureOwnerAccess,
+ int stype, Date dateCreated) throws Exception {
Server newS = createServer(stype);
-
// We have to commit this change manually since
// ServerGroups aren't actually mapped from within
// the Server class.
@@ -587,9 +593,11 @@ public class ServerFactoryTest extends RhnBaseTestCase {
newS.addNetworkInterface(netint);
+
ServerFactory.save(newS);
- ServerFactory.addServerToGroup(newS, sg);
+ TestUtils.saveAndReload(newS);
+
/* Since we added a server to the Org we need
* to update the User's permissions as associated with
@@ -705,7 +713,7 @@ public class ServerFactoryTest extends RhnBaseTestCase {
throws Exception {
return createTestServer(owner, ensureOwnerAccess,
- ServerConstants.getServerGroupTypeUpdateEntitled());
+ ServerConstants.getServerGroupTypeEnterpriseEntitled());
}
private static Server createServer(int type) {
@@ -988,4 +996,3 @@ public class ServerFactoryTest extends RhnBaseTestCase {
}
}
-
diff --git a/java/code/src/com/redhat/rhn/manager/system/VirtualizationEntitlementsManager.java b/java/code/src/com/redhat/rhn/manager/system/VirtualizationEntitlementsManager.java
index 4f10446..2c9d9d5 100644
--- a/java/code/src/com/redhat/rhn/manager/system/VirtualizationEntitlementsManager.java
+++ b/java/code/src/com/redhat/rhn/manager/system/VirtualizationEntitlementsManager.java
@@ -22,9 +22,6 @@ import com.redhat.rhn.domain.server.VirtualInstanceFactory;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.frontend.dto.ChannelFamilySystemGroup;
-import org.apache.commons.lang.BooleanUtils;
-
-import java.sql.Types;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
@@ -137,26 +134,4 @@ public class VirtualizationEntitlementsManager {
"Channel_queries", "convert_to_flex");
m.execute(in, new HashMap());
}
-
-
- /**
- * True if the passed in server can be converted to flex
- * @param sid the server id
- * @param cfid the channel family id
- * @return true if the server can be converted to flex
- */
- public boolean canConvertToFlex(Long sid, Long cfid) {
- Map in = new HashMap();
- in.put("sid", sid);
- in.put("cfid", cfid);
- Map outParams = new HashMap();
- outParams.put("result", new Integer(Types.NUMERIC));
-
- CallableMode m = ModeFactory.getCallableMode(
- "Channel_queries", "can_convert_to_flex");
-
- Map result = m.execute(in, outParams);
- return BooleanUtils.toBoolean(
- ((Long)result.get("result")).intValue());
- }
}
diff --git a/java/code/src/com/redhat/rhn/manager/system/test/VirtualizationEntitlementsManagerTest.java b/java/code/src/com/redhat/rhn/manager/system/test/VirtualizationEntitlementsManagerTest.java
new file mode 100644
index 0000000..9e5dca4
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/manager/system/test/VirtualizationEntitlementsManagerTest.java
@@ -0,0 +1,220 @@
+/**
+ * Copyright (c) 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.manager.system.test;
+
+import com.redhat.rhn.common.hibernate.HibernateFactory;
+import com.redhat.rhn.domain.channel.Channel;
+import com.redhat.rhn.domain.channel.ChannelFactory;
+import com.redhat.rhn.domain.channel.ChannelFamily;
+import com.redhat.rhn.domain.channel.ChannelFamilyFactory;
+import com.redhat.rhn.domain.channel.test.ChannelFactoryTest;
+import com.redhat.rhn.domain.channel.test.ChannelFamilyFactoryTest;
+import com.redhat.rhn.domain.org.Org;
+import com.redhat.rhn.domain.org.OrgFactory;
+import com.redhat.rhn.domain.role.RoleFactory;
+import com.redhat.rhn.domain.server.EntitlementServerGroup;
+import com.redhat.rhn.domain.server.Server;
+import com.redhat.rhn.domain.server.ServerFactory;
+import com.redhat.rhn.domain.server.VirtualInstance;
+import com.redhat.rhn.domain.server.test.HostBuilder;
+import com.redhat.rhn.domain.user.User;
+import com.redhat.rhn.domain.user.UserFactory;
+import com.redhat.rhn.frontend.dto.ChannelFamilySystemGroup;
+import com.redhat.rhn.manager.entitlement.EntitlementManager;
+import com.redhat.rhn.manager.org.UpdateOrgSoftwareEntitlementsCommand;
+import com.redhat.rhn.manager.org.UpdateOrgSystemEntitlementsCommand;
+import com.redhat.rhn.manager.system.ServerGroupManager;
+import com.redhat.rhn.manager.system.SystemManager;
+import com.redhat.rhn.manager.system.VirtualizationEntitlementsManager;
+import com.redhat.rhn.testing.RhnBaseTestCase;
+import com.redhat.rhn.testing.UserTestUtils;
+
+import org.apache.commons.lang.RandomStringUtils;
+
+import java.util.List;
+
+
+/**
+ * VirtualizationEntitlementsManagerTest
+ * @version $Rev$
+ */
+public class VirtualizationEntitlementsManagerTest extends RhnBaseTestCase {
+
+ public void testListFlexGuests() throws Exception {
+ Org org = UserTestUtils.createNewOrgFull(RandomStringUtils.randomAlphabetic(10));
+ User user = UserTestUtils.createUser(RandomStringUtils.randomAlphabetic(10),
+ org.getId());
+ user.addRole(RoleFactory.ORG_ADMIN);
+ UserFactory.save(user);
+ long ents = 3;
+ int guestsToCreate = 6;
+ long flexEnts = guestsToCreate;
+ long sysEnts = guestsToCreate + 1; // 1 for host
+ //Give it some system entitlements
+ UpdateOrgSystemEntitlementsCommand cmd1 = new UpdateOrgSystemEntitlementsCommand(
+ EntitlementManager.MANAGEMENT, org, sysEnts);
+ assertNull(cmd1.store());
+
+ ChannelFamily rhelFamily = ChannelFamilyFactoryTest.createTestChannelFamily(
+ UserFactory.findRandomOrgAdmin(OrgFactory.getSatelliteOrg()),
+ ents, flexEnts);
+ assertEquals(Long.valueOf(flexEnts),
+ rhelFamily.getMaxFlex(OrgFactory.getSatelliteOrg()));
+ UpdateOrgSoftwareEntitlementsCommand cmd2 = new
+ UpdateOrgSoftwareEntitlementsCommand(rhelFamily.getLabel(),
+ org, ents, flexEnts);
+ assertNull(cmd2.store());
+ Channel rhelChannel = ChannelFactoryTest.createBaseChannel(user, rhelFamily);
+
+
+ HibernateFactory.getSession().clear();
+ rhelChannel = ChannelFactory.lookupById(rhelChannel.getId());
+ assertNotNull(rhelChannel.getId());
+ assertNotNull(rhelChannel);
+
+ rhelFamily = ChannelFamilyFactory.lookupById(rhelFamily.getId());
+ assertNotNull(rhelFamily);
+ assertNotNull(rhelFamily.getMaxFlex(org));
+ assertEquals(Long.valueOf(flexEnts), rhelFamily.getMaxFlex(org));
+
+ HostBuilder builder = new HostBuilder(org.getActiveOrgAdmins().get(0));
+ builder.createNonVirtHost().withGuests(guestsToCreate);
+ Server host = builder.build();
+ ServerFactory.save(host);
+
+ SystemManager.subscribeServerToChannel(user, host, rhelChannel);
+
+ ServerFactory.save(host);
+
+ for (VirtualInstance inst : host.getGuests()) {
+ SystemManager.subscribeServerToChannel(user,
+ inst.getGuestSystem(), rhelChannel);
+ SystemManager.entitleServer(inst.getGuestSystem(),
+ EntitlementManager.MANAGEMENT);
+ ServerFactory.save(inst.getGuestSystem());
+ }
+
+ HibernateFactory.getSession().clear();
+
+
+ //Verify everything is as it should be
+ EntitlementServerGroup mgmnt =
+ ServerGroupManager.getInstance().lookupEntitled(
+ EntitlementManager.MANAGEMENT, user);
+ assertEquals(Long.valueOf(sysEnts), mgmnt.getCurrentMembers());
+
+ rhelFamily = ChannelFamilyFactory.lookupById(rhelFamily.getId());
+ assertEquals(Long.valueOf(1), rhelFamily.getCurrentMembers(org));
+ assertEquals(Long.valueOf(guestsToCreate), rhelFamily.getCurrentFlex(org));
+
+ List<ChannelFamilySystemGroup> l = VirtualizationEntitlementsManager.getInstance().
+ listFlexGuests(user);
+ assertTrue(!l.isEmpty());
+ assertEquals(1, l.size());
+ assertEquals(guestsToCreate, l.get(0).expand().size());
+ }
+
+ public void testListEligibleFlexGuests() throws Exception {
+ Org org = UserTestUtils.createNewOrgFull(RandomStringUtils.randomAlphabetic(10));
+ User user = UserTestUtils.createUser(RandomStringUtils.randomAlphabetic(10),
+ org.getId());
+ user.addRole(RoleFactory.ORG_ADMIN);
+ UserFactory.save(user);
+ int guestsToCreate = 6;
+ long flexEnts = guestsToCreate;
+ long ents = guestsToCreate + 1; //+ 1 for host
+ long sysEnts = guestsToCreate + 1; //+ 1 for host
+ //Give it some system entitlements
+ UpdateOrgSystemEntitlementsCommand cmd1 = new UpdateOrgSystemEntitlementsCommand(
+ EntitlementManager.MANAGEMENT, org, sysEnts);
+ assertNull(cmd1.store());
+
+ ChannelFamily rhelFamily = ChannelFamilyFactoryTest.createTestChannelFamily(
+ UserFactory.findRandomOrgAdmin(OrgFactory.getSatelliteOrg()),
+ ents, flexEnts);
+ assertEquals(Long.valueOf(flexEnts),
+ rhelFamily.getMaxFlex(OrgFactory.getSatelliteOrg()));
+
+ //No flex initially
+ UpdateOrgSoftwareEntitlementsCommand cmd2 = new
+ UpdateOrgSoftwareEntitlementsCommand(rhelFamily.getLabel(),
+ org, ents, 0L);
+ assertNull(cmd2.store());
+ Channel rhelChannel = ChannelFactoryTest.createBaseChannel(user, rhelFamily);
+
+
+ HibernateFactory.getSession().clear();
+ rhelChannel = ChannelFactory.lookupById(rhelChannel.getId());
+ assertNotNull(rhelChannel.getId());
+ assertNotNull(rhelChannel);
+
+ rhelFamily = ChannelFamilyFactory.lookupById(rhelFamily.getId());
+ assertNotNull(rhelFamily);
+ assertNotNull(rhelFamily.getMaxFlex(org));
+ assertEquals(Long.valueOf(0), rhelFamily.getMaxFlex(org));
+
+ HostBuilder builder = new HostBuilder(org.getActiveOrgAdmins().get(0));
+ builder.createNonVirtHost().withGuests(guestsToCreate);
+ Server host = builder.build();
+ ServerFactory.save(host);
+
+ SystemManager.subscribeServerToChannel(user, host, rhelChannel);
+
+ ServerFactory.save(host);
+ for (VirtualInstance inst : host.getGuests()) {
+ SystemManager.subscribeServerToChannel(user,
+ inst.getGuestSystem(), rhelChannel);
+ SystemManager.entitleServer(inst.getGuestSystem(),
+ EntitlementManager.MANAGEMENT);
+ ServerFactory.save(inst.getGuestSystem());
+ }
+
+ HibernateFactory.getSession().clear();
+
+
+ //Verify everything is as it should be
+ EntitlementServerGroup mgmnt =
+ ServerGroupManager.getInstance().lookupEntitled(
+ EntitlementManager.MANAGEMENT, user);
+ assertEquals(Long.valueOf(sysEnts), mgmnt.getCurrentMembers());
+
+ rhelFamily = ChannelFamilyFactory.lookupById(rhelFamily.getId());
+ assertEquals(Long.valueOf(ents), rhelFamily.getCurrentMembers(org));
+ assertEquals(Long.valueOf(0), rhelFamily.getCurrentFlex(org));
+
+ assertTrue(VirtualizationEntitlementsManager.getInstance().
+ listFlexGuests(user).isEmpty());
+
+ //Now Uodate the rhenChannelFamily's flex entitlements
+
+ cmd2 = new UpdateOrgSoftwareEntitlementsCommand(rhelFamily.getLabel(),
+ org, ents, flexEnts);
+ assertNull(cmd2.store());
+ HibernateFactory.getSession().clear();
+
+ rhelFamily = ChannelFamilyFactory.lookupById(rhelFamily.getId());
+ assertEquals(Long.valueOf(flexEnts), rhelFamily.getMaxFlex(org));
+
+ List<ChannelFamilySystemGroup> l = VirtualizationEntitlementsManager.
+ getInstance().listEligibleFlexGuests(user);
+
+
+ assertTrue(!l.isEmpty());
+ assertEquals(1, l.size());
+ assertEquals(guestsToCreate, l.get(0).expand().size());
+ }
+
+
+}
diff --git a/java/code/src/com/redhat/rhn/testing/UserTestUtils.java b/java/code/src/com/redhat/rhn/testing/UserTestUtils.java
index 308e2d1..04f61d9 100644
--- a/java/code/src/com/redhat/rhn/testing/UserTestUtils.java
+++ b/java/code/src/com/redhat/rhn/testing/UserTestUtils.java
@@ -53,15 +53,25 @@ public class UserTestUtils extends Assert {
* @return long The Org id.
*/
public static Long createOrg(String orgName) {
+ return createNewOrgFull(orgName).getId();
+ }
+
+ /**
+ * Creates a new Org with the given orgName.
+ * The current time is appended to the given orgName.
+ * @param orgName Name of org.
+ * @return long The Org
+ */
+ public static Org createNewOrgFull(String orgName) {
Org org1 = OrgFactory.createOrg();
org1.setName(orgName + TestUtils.randomString());
org1.setCustomerType("B");
org1 = OrgFactory.save(org1);
assertTrue(org1.getId().longValue() > 0);
-
- return org1.getId();
+ return org1;
}
+
/**
* Creates a new User and Org with the given userName and orgName.
* The current time is appended to the given username and orgName.
13 years, 10 months
Branch 'yum-repo-sync' - backend/satellite_tools
by Shannon Hughes
backend/satellite_tools/reposync.py | 33 +++++++++++++++++++--------------
1 file changed, 19 insertions(+), 14 deletions(-)
New commits:
commit 12aa98011ce2c8d9de5b36f93eb75dac53d31a1c
Author: Shannon Hughes <shughes(a)redhat.com>
Date: Fri Jun 25 14:18:40 2010 -0400
modified reposync script to handle 1:many channel content source objects
diff --git a/backend/satellite_tools/reposync.py b/backend/satellite_tools/reposync.py
index 0ec6517..a93e924 100644
--- a/backend/satellite_tools/reposync.py
+++ b/backend/satellite_tools/reposync.py
@@ -33,9 +33,8 @@ class RepoSync:
parser = None
type = None
- url = None
+ urls = None
channel_label = None
- plugin = None
channel = None
fail = False
repo_label = None
@@ -61,20 +60,23 @@ class RepoSync:
quit = False
if not options.url:
if options.channel_label:
+ # TODO:need to look at user security across orgs
h = rhnSQL.prepare("""select s.source_url
- from rhnChannelContentSource s,
+ from rhnContentSource s,
+ rhnChannelContentSource cs,
rhnChannel c
- where c.id = s.channel_id
+ where s.id = cs.source_id
+ and cs.channel_id = c.id
and c.label = :label""")
h.execute(label=options.channel_label)
source_urls = h.fetchall_dict() or []
if source_urls:
- self.url = source_urls[0]['source_url']
+ self.urls = [row['source_url'] for row in source_urls]
else:
quit = True
self.error_msg("Channel has no URL associated")
else:
- self.url = options.url
+ self.urls = [options.url]
if not options.channel_label:
quit = True
self.error_msg("--channel must be specified")
@@ -93,16 +95,18 @@ class RepoSync:
self.type = options.type
self.channel_label = options.channel_label
self.fail = options.fail
- self.repo_label = self.short_hash(self.url)
+ #self.repo_label = self.short_hash(self.url)
self.quiet = options.quiet
self.channel = self.load_channel()
if not self.channel or not rhnChannel.isCustomChannel(self.channel['id']):
print "Channel does not exist or is not custom"
sys.exit(1)
-
- self.plugin = self.load_plugin()(self.url, self.channel_label + "-" + self.repo_label)
- self.import_packages(self.plugin.list_packages())
+
+ for url in self.urls:
+ self.repo_label = self.short_hash(url)
+ plugin = self.load_plugin()(url, self.channel_label + "-" + self.repo_label)
+ self.import_packages(plugin, url)
self.print_msg("Sync complete")
def process_args(self):
@@ -122,10 +126,11 @@ class RepoSync:
submod = getattr(mod, name)
return getattr(submod, "ContentSource")
- def import_packages(self, packages):
+ def import_packages(self, plug, url):
+ packages = plug.list_packages()
to_link = []
to_download = []
- self.print_msg("Repo " + self.url + " has " + str(len(packages)) + " packages.")
+ self.print_msg("Repo " + url + " has " + str(len(packages)) + " packages.")
for pack in packages:
if self.channel_label not in \
rhnPackage.get_channels_for_package([pack.name, \
@@ -137,7 +142,7 @@ class RepoSync:
if len(to_download) == 0:
self.print_msg("No new packages to download.")
- is_non_local_repo = (self.url.find("file://") < 0)
+ is_non_local_repo = (url.find("file://") < 0)
for (index, pack) in enumerate(to_download):
"""download each package"""
# try/except/finally doesn't work in python 2.4 (RHEL5), so here's a hack
@@ -145,7 +150,7 @@ class RepoSync:
try:
self.print_msg(str(index+1) + "/" + str(len(to_download)) + " : "+ \
pack.getNVREA())
- path = self.plugin.get_package(pack)
+ path = plug.get_package(pack)
self.upload_package(pack, path)
self.associate_package(pack)
except KeyboardInterrupt:
13 years, 10 months
2 commits - backend/server
by Miroslav Suchý
backend/server/rhnDependency.py | 18 +++++++++---------
backend/server/rhnSQL/driver_cx_Oracle.py | 2 +-
2 files changed, 10 insertions(+), 10 deletions(-)
New commits:
commit 207518cf37a3e9c909b279f7ec49c049e4c45b21
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Thu Jun 24 14:37:40 2010 +0200
do need to check date, we can get anything
diff --git a/backend/server/rhnSQL/driver_cx_Oracle.py b/backend/server/rhnSQL/driver_cx_Oracle.py
index dba0a32..4ea0096 100644
--- a/backend/server/rhnSQL/driver_cx_Oracle.py
+++ b/backend/server/rhnSQL/driver_cx_Oracle.py
@@ -482,7 +482,7 @@ class Database(sql_base.Database):
def check_connection(self):
try:
- h = self.prepare("select sysdate as ID from dual")
+ h = self.prepare("select 1 from dual")
h.execute()
except: # try to reconnect, that one MUST WORK always
log_error("DATABASE CONNECTION TO '%s' LOST" % self.dbtxt,
commit 23d5fa8a83df5898cf88a4f7bb941d754bda7974
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Thu Jun 24 14:06:19 2010 +0200
evr should be parsed from the end
addressing incorectly parsing of packages with - in name. eg:
>>> rhnDependency.make_evr(systemtap-runtime-0.5.12-1)
{'release': '0.5.12', 'epoch': None, 'version': 'runtime', 'name': 'systemtap'}
diff --git a/backend/server/rhnDependency.py b/backend/server/rhnDependency.py
index 111f088..a7be48c 100644
--- a/backend/server/rhnDependency.py
+++ b/backend/server/rhnDependency.py
@@ -339,18 +339,18 @@ def make_evr(nvre):
if string.find(holder[0], '-') != -1:
holder[0] = string.split(holder[0], '-')
ret = {
- 'name' : holder[0][0],
- 'version' : holder[0][1],
- 'release' : holder[0][2],
+ 'name' : '-'.join(holder[0][:-2]),
+ 'version' : holder[0][-2],
+ 'release' : holder[0][-1],
'epoch' : holder[1]
}
return ret
elif string.find(holder[1], '-') != -1:
holder[1] = string.split(holder[1], '-')
ret = {
- 'name' : holder[1][0],
- 'version' : holder[1][1],
- 'release' : holder[1][2],
+ 'name' : '-'.join(holder[1][:-2]),
+ 'version' : holder[1][-2],
+ 'release' : holder[1][-1],
'epoch' : holder[0]
}
return ret
@@ -360,9 +360,9 @@ def make_evr(nvre):
elif string.find(nvre, '-') != -1:
nvre = string.split(nvre, '-')
ret = {
- 'name' : nvre[0],
- 'version' : nvre[1],
- 'release' : nvre[2],
+ 'name' : '-'.join(nvre[:-2]),
+ 'version' : nvre[-2],
+ 'release' : nvre[-1],
'epoch' : None
}
return ret
13 years, 10 months
Branch 'yum-repo-sync' - java/code
by Shannon Hughes
java/code/src/com/redhat/rhn/domain/channel/test/ChannelTest.java | 9 +++++----
java/code/src/com/redhat/rhn/taskomatic/task/RepoSyncTask.java | 2 +-
2 files changed, 6 insertions(+), 5 deletions(-)
New commits:
commit b2d26961e9bad06edf0a05ab338ebe9275312de2
Author: Shannon Hughes <shughes(a)redhat.com>
Date: Thu Jun 24 15:45:24 2010 -0400
junit modification for repo sync
diff --git a/java/code/src/com/redhat/rhn/domain/channel/test/ChannelTest.java b/java/code/src/com/redhat/rhn/domain/channel/test/ChannelTest.java
index ac763ca..c61bef6 100644
--- a/java/code/src/com/redhat/rhn/domain/channel/test/ChannelTest.java
+++ b/java/code/src/com/redhat/rhn/domain/channel/test/ChannelTest.java
@@ -181,11 +181,12 @@ public class ChannelTest extends BaseTestCaseWithUser {
Channel c = ChannelFactoryTest.createTestChannel(user);
ContentSource cs = new ContentSource();
cs.setLabel("repo_label-" + c.getLabel());
- cs.setSourceUrl("fake url");
- cs.getChannels().add(c);
+ cs.setSourceUrl("fake url");
cs.setType(ChannelFactory.CONTENT_SOURCE_TYPE_YUM);
- //c.getSources().add(cs);
- c = (Channel) TestUtils.saveAndReload(c);
+ cs.setOrg(user.getOrg());
+ cs = (ContentSource) TestUtils.saveAndReload(cs);
+ c.getSources().add(cs);
+ c = (Channel) TestUtils.saveAndReload(c);
assertNotEmpty(c.getSources());
}
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 542d67e..4f36783 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/task/RepoSyncTask.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/task/RepoSyncTask.java
@@ -80,7 +80,7 @@ public class RepoSyncTask implements Job {
}
TaskFactory.removeTask(task);
- try {
+ try {
Process p = Runtime.getRuntime().exec(
getSyncCommand(c).toArray(new String[0]));
c.setLastSynced(new Date());
13 years, 10 months
Branch 'taskomatic' - 17 commits - java/code schema/spacewalk
by Tomas Lestach
java/code/src/com/redhat/rhn/frontend/xmlrpc/handler-manifest.xml | 1
java/code/src/com/redhat/rhn/frontend/xmlrpc/taskomatic/TaskomaticHandler.java | 33 -
java/code/src/com/redhat/rhn/taskomatic/InvalidJobLabelException.java | 29 -
java/code/src/com/redhat/rhn/taskomatic/InvalidParamException.java | 28 +
java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.hbm.xml | 18
java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.java | 17
java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java | 149 +++--
java/code/src/com/redhat/rhn/taskomatic/TaskoRun.hbm.xml | 21
java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java | 77 +-
java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.hbm.xml | 21
java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.java | 74 +-
java/code/src/com/redhat/rhn/taskomatic/TaskoSerializerRegistry.java | 54 +
java/code/src/com/redhat/rhn/taskomatic/TaskoTask.hbm.xml | 4
java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.hbm.xml | 3
java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java | 278 ++++++----
java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcInvocationInterceptor.java | 56 ++
java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcServer.java | 20
java/code/src/com/redhat/rhn/taskomatic/core/RhnJobFactory.java | 7
java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoBunchSerializer.java | 56 ++
java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoRunSerializer.java | 60 ++
java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoScheduleSerializer.java | 61 ++
java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoTemplateSerializer.java | 55 +
schema/spacewalk/common/tables/rhnTaskoRun.sql | 4
schema/spacewalk/common/tables/rhnTaskoSchedule.sql | 2
24 files changed, 834 insertions(+), 294 deletions(-)
New commits:
commit e435c952530c860c246ec4c79b06ded00382199b
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Thu Jun 24 16:49:32 2010 +0200
do not require jobLabel for singleRuns
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
index 838b36e..2124216 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
@@ -48,7 +48,7 @@ public class TaskoXmlRpcHandler {
try {
bunch = doBasicCheck(orgId, bunchName, jobLabel);
}
- catch (SchedulerException se){
+ catch (SchedulerException se) {
return null;
}
// create schedule
@@ -90,7 +90,8 @@ public class TaskoXmlRpcHandler {
throws NoSuchBunchTaskException, InvalidParamException, SchedulerException {
TaskoBunch bunch = checkBunchName(bunchName);
if (!TaskoFactory.listActiveSchedulesByOrgAndLabel(orgId, jobLabel).isEmpty() ||
- (SchedulerKernel.getScheduler().getTrigger(jobLabel, orgId.toString()) != null)) {
+ (SchedulerKernel.getScheduler().getTrigger(jobLabel, orgId.toString()) !=
+ null)) {
throw new InvalidParamException("jobLabel already in use");
}
return bunch;
@@ -126,15 +127,17 @@ public class TaskoXmlRpcHandler {
return unscheduleBunch(null, jobLabel);
}
- public Date scheduleSingleBunchRun(Integer orgId, String bunchName, String jobLabel,
- Map params, Date start)
+ public Date scheduleSingleBunchRun(Integer orgId, String bunchName, Map params,
+ Date start)
throws NoSuchBunchTaskException,
InvalidParamException {
+ String jobLabel = null;
TaskoBunch bunch = null;
try {
+ jobLabel = getUniqueSingleJobLabel(orgId, bunchName);
bunch = doBasicCheck(orgId, bunchName, jobLabel);
}
- catch (SchedulerException se){
+ catch (SchedulerException se) {
return null;
}
// create schedule
@@ -143,29 +146,26 @@ public class TaskoXmlRpcHandler {
start, null, "");
TaskoFactory.save(schedule);
// create job
- Date scheduleDate= createJob(schedule);
+ Date scheduleDate = createJob(schedule);
if (scheduleDate == null) {
TaskoFactory.delete(schedule);
}
return scheduleDate;
}
- public Date scheduleSingleBunchRun(Integer orgId, String bunchName, String jobLabel,
- Map params)
- throws NoSuchBunchTaskException, InvalidParamException {
- return scheduleSingleBunchRun(orgId, bunchName, jobLabel, params, new Date());
- }
-
public Date scheduleSingleBunchRun(Integer orgId, String bunchName, Map params)
throws NoSuchBunchTaskException, InvalidParamException {
- String jobLabel = getUniqueJobLabel(orgId, bunchName);
- return scheduleSingleBunchRun(orgId, bunchName, jobLabel, params, new Date());
+ return scheduleSingleBunchRun(orgId, bunchName, params, new Date());
}
- private String getUniqueJobLabel(Integer orgId, String bunchName) {
+ private String getUniqueSingleJobLabel(Integer orgId, String bunchName)
+ throws SchedulerException {
String jobLabel = "single-" + bunchName + "-";
Integer count = 0;
- while (!TaskoFactory.listSchedulesByOrgAndLabel(orgId, jobLabel).isEmpty()) {
+ while (!TaskoFactory.listSchedulesByOrgAndLabel(orgId,
+ jobLabel + count.toString()).isEmpty() ||
+ (SchedulerKernel.getScheduler().getTrigger(jobLabel + count.toString(),
+ orgId.toString()) != null)) {
count++;
}
return jobLabel + count.toString();
commit 367cc4c6f7cffc784bba197cb2442ff4ad6e10cb
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Thu Jun 24 16:25:24 2010 +0200
add extra consistency check
if job won't get scheduled by quartz, delete the schedule object
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
index e242195..c39f04b 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
@@ -78,7 +78,7 @@ public class TaskoFactory extends HibernateFactory {
singleton.removeObject(taskoRun);
}
- private static void delete(TaskoSchedule taskoSchedule) {
+ public static void delete(TaskoSchedule taskoSchedule) {
singleton.removeObject(taskoSchedule);
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
index 957ddc4..838b36e 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
@@ -44,14 +44,24 @@ public class TaskoXmlRpcHandler {
public Date scheduleBunch(Integer orgId, String bunchName, String jobLabel,
Date startTime, Date endTime, String cronExpression, Map params)
throws NoSuchBunchTaskException, InvalidParamException {
- TaskoBunch bunch = doBasicCheck(orgId, bunchName, jobLabel);
+ TaskoBunch bunch = null;
+ try {
+ bunch = doBasicCheck(orgId, bunchName, jobLabel);
+ }
+ catch (SchedulerException se){
+ return null;
+ }
// create schedule
TaskoSchedule schedule = null;
schedule = new TaskoSchedule(orgId, bunch, jobLabel, params,
startTime, endTime, cronExpression);
TaskoFactory.save(schedule);
// create job
- return createJob(schedule);
+ Date scheduleDate = createJob(schedule);
+ if (scheduleDate == null) {
+ TaskoFactory.delete(schedule);
+ }
+ return scheduleDate;
}
public Date scheduleSatBunch(String bunchName, String jobLabel,
@@ -77,9 +87,10 @@ public class TaskoXmlRpcHandler {
private TaskoBunch doBasicCheck(Integer orgId, String bunchName,
String jobLabel)
- throws NoSuchBunchTaskException, InvalidParamException {
+ throws NoSuchBunchTaskException, InvalidParamException, SchedulerException {
TaskoBunch bunch = checkBunchName(bunchName);
- if (!TaskoFactory.listActiveSchedulesByOrgAndLabel(orgId, jobLabel).isEmpty()) {
+ if (!TaskoFactory.listActiveSchedulesByOrgAndLabel(orgId, jobLabel).isEmpty() ||
+ (SchedulerKernel.getScheduler().getTrigger(jobLabel, orgId.toString()) != null)) {
throw new InvalidParamException("jobLabel already in use");
}
return bunch;
@@ -119,14 +130,24 @@ public class TaskoXmlRpcHandler {
Map params, Date start)
throws NoSuchBunchTaskException,
InvalidParamException {
- TaskoBunch bunch = doBasicCheck(orgId, bunchName, jobLabel);
+ TaskoBunch bunch = null;
+ try {
+ bunch = doBasicCheck(orgId, bunchName, jobLabel);
+ }
+ catch (SchedulerException se){
+ return null;
+ }
// create schedule
TaskoSchedule schedule = null;
schedule = new TaskoSchedule(orgId, bunch, jobLabel, params,
start, null, "");
TaskoFactory.save(schedule);
// create job
- return createJob(schedule);
+ Date scheduleDate= createJob(schedule);
+ if (scheduleDate == null) {
+ TaskoFactory.delete(schedule);
+ }
+ return scheduleDate;
}
public Date scheduleSingleBunchRun(Integer orgId, String bunchName, String jobLabel,
commit b1d0f20765bdd0c0c07e111fd2657be0e5af35a7
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Thu Jun 24 15:47:58 2010 +0200
separate sat and org api
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/handler-manifest.xml b/java/code/src/com/redhat/rhn/frontend/xmlrpc/handler-manifest.xml
index 6d22964..e4fe763 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/handler-manifest.xml
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/handler-manifest.xml
@@ -36,4 +36,5 @@
<template name="schedule" classname="com.redhat.rhn.frontend.xmlrpc.schedule.ScheduleHandler" />
<template name="distchannel" classname="com.redhat.rhn.frontend.xmlrpc.distchannel.DistChannelHandler" />
<template name="taskomatic" classname="com.redhat.rhn.frontend.xmlrpc.taskomatic.TaskomaticHandler" />
+ <template name="taskomatic.org" classname="com.redhat.rhn.frontend.xmlrpc.taskomatic.TaskomaticOrgHandler" />
</factory>
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/taskomatic/TaskomaticHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/taskomatic/TaskomaticHandler.java
index 92afe06..a97c775 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/taskomatic/TaskomaticHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/taskomatic/TaskomaticHandler.java
@@ -53,9 +53,9 @@ public class TaskomaticHandler extends BaseHandler {
List params = new ArrayList(arguments);
String sessionKey = (String) params.remove(0);
User loggedInUser = getLoggedInUser(sessionKey);
- ensureUserRole(loggedInUser, RoleFactory.ORG_ADMIN);
+ checkUserRole(loggedInUser);
- params.add(0, loggedInUser.getOrg().getId());
+ addParameters(loggedInUser, params);
log.info("Translating " + methodCalled);
@@ -67,4 +67,12 @@ public class TaskomaticHandler extends BaseHandler {
throw new XmlRpcFault(1, e.getMessage());
}
}
+
+ protected void checkUserRole(User user) {
+ ensureUserRole(user, RoleFactory.SAT_ADMIN);
+ }
+
+ protected void addParameters(User user, List params) {
+ // empty
+ }
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.hbm.xml b/java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.hbm.xml
index acfd72e..e933523 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.hbm.xml
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.hbm.xml
@@ -24,7 +24,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<property name="modified" column="modified" type="timestamp"
insert="false" update="false"/>
- <list name="templates" inverse="true" table="rhnTaskoTemplate">
+ <list name="templates" inverse="true" lazy="false" table="rhnTaskoTemplate">
<key column="bunch_id"/>
<index column="ordering"/>
<one-to-many class="com.redhat.rhn.taskomatic.TaskoTemplate"/>
@@ -48,8 +48,12 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<![CDATA[FROM com.redhat.rhn.taskomatic.TaskoBunch WHERE orgBunch is null AND name = :name]]>
</query>
- <query name="TaskoBunch.listBunches">
- <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoBunch as b]]>
+ <query name="TaskoBunch.listOrgBunches">
+ <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoBunch WHERE orgBunch is not null]]>
+ </query>
+
+ <query name="TaskoBunch.listSatBunches">
+ <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoBunch WHERE orgBunch is null]]>
</query>
</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
index 47d29ba..e242195 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
@@ -60,9 +60,14 @@ public class TaskoFactory extends HibernateFactory {
"TaskoTemplate.lookupByBunchAndOrder", params);
}
- public static List<TaskoBunch> listBunches() {
+ public static List<TaskoBunch> listOrgBunches() {
return (List) singleton.listObjectsByNamedQuery(
- "TaskoBunch.listBunches", null);
+ "TaskoBunch.listOrgBunches", null);
+ }
+
+ public static List<TaskoBunch> listSatBunches() {
+ return (List) singleton.listObjectsByNamedQuery(
+ "TaskoBunch.listSatBunches", null);
}
public static void save(TaskoRun taskoRun) {
@@ -107,7 +112,8 @@ public class TaskoFactory extends HibernateFactory {
"TaskoRun.listOlderThan", params);
}
- public static void clearRunHistory(Integer orgId, Date limitTime) throws InvalidParamException {
+ public static void clearOrgRunHistory(Integer orgId, Date limitTime)
+ throws InvalidParamException {
if (limitTime == null) {
throw new InvalidParamException("Invalid limit date");
}
@@ -122,8 +128,8 @@ public class TaskoFactory extends HibernateFactory {
List<TaskoSchedule> scheduleList = listSchedulesByOrg(orgId);
for (TaskoSchedule schedule : scheduleList) {
Date endTime = schedule.getActiveTill();
- if ((endTime != null) && (endTime.before(limitTime))
- && TaskoFactory.listRunsBySchedule(schedule.getId()).isEmpty()) {
+ if ((endTime != null) && (endTime.before(limitTime)) &&
+ TaskoFactory.listRunsBySchedule(schedule.getId()).isEmpty()) {
TaskoFactory.delete(schedule);
}
}
@@ -198,7 +204,8 @@ public class TaskoFactory extends HibernateFactory {
"TaskoSchedule.listByOrgAndBunch", params);
}
- public static List<TaskoSchedule> listSchedulesByOrgAndLabel(Integer orgId, String jobLabel) {
+ public static List<TaskoSchedule> listSchedulesByOrgAndLabel(Integer orgId,
+ String jobLabel) {
Map params = new HashMap();
params.put("org_id", orgId);
params.put("job_label", jobLabel);
@@ -241,7 +248,8 @@ public class TaskoFactory extends HibernateFactory {
}
}
- public static TaskoRun getRunByOrgAndId(Integer orgId, Long runId) throws InvalidParamException {
+ public static TaskoRun getRunByOrgAndId(Integer orgId, Long runId)
+ throws InvalidParamException {
TaskoRun run = lookupRunById(runId);
if ((run == null) || (!run.getOrgId().equals(orgId))) {
throw new InvalidParamException("No such run id");
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.hbm.xml b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.hbm.xml
index aea74dc..f3b4058 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.hbm.xml
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.hbm.xml
@@ -42,7 +42,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
</query>
<query name="TaskoRun.listRunsWithStatus">
- <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoRun AS r WHERE r.template.task.id = :task_id AND (r.status = :status1 OR status = :status2)]]>
+ <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoRun WHERE template.task.id = :task_id AND (status = :status1 OR status = :status2)]]>
</query>
<query name="TaskoRun.listOlderThan">
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java
index b04b263..387fe89 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java
@@ -379,7 +379,7 @@ public class TaskoRun implements Job {
}
/**
- * @param jobLabelIn The jobLabel to set.
+ * @param scheduleIdIn The jobLabel to set.
*/
public void setScheduleId(Long scheduleIdIn) {
this.scheduleId = scheduleIdIn;
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
index 5065873..957ddc4 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
@@ -33,13 +33,12 @@ public class TaskoXmlRpcHandler {
return 1;
}
- public String[] listBunches(Integer orgId) {
- try {
- return SchedulerKernel.getScheduler().getTriggerNames(orgId.toString());
- }
- catch (SchedulerException e) {
- return null;
- }
+ public List<TaskoBunch> listBunches(Integer orgId) {
+ return TaskoFactory.listOrgBunches();
+ }
+
+ public List<TaskoBunch> listSatBunches() {
+ return TaskoFactory.listSatBunches();
}
public Date scheduleBunch(Integer orgId, String bunchName, String jobLabel,
@@ -55,6 +54,13 @@ public class TaskoXmlRpcHandler {
return createJob(schedule);
}
+ public Date scheduleSatBunch(String bunchName, String jobLabel,
+ Date startTime, Date endTime, String cronExpression, Map params)
+ throws NoSuchBunchTaskException, InvalidParamException {
+ return scheduleBunch(null, bunchName, jobLabel, startTime, endTime,
+ cronExpression, params);
+ }
+
public Date scheduleBunch(Integer orgId, String bunchName, String jobLabel,
String cronExpression, Map params)
throws NoSuchBunchTaskException, InvalidParamException {
@@ -62,6 +68,13 @@ public class TaskoXmlRpcHandler {
cronExpression, params);
}
+ public Date scheduleSatBunch(String bunchName, String jobLabel,
+ String cronExpression, Map params)
+ throws NoSuchBunchTaskException, InvalidParamException {
+ return scheduleBunch(null, bunchName, jobLabel,
+ cronExpression, params);
+ }
+
private TaskoBunch doBasicCheck(Integer orgId, String bunchName,
String jobLabel)
throws NoSuchBunchTaskException, InvalidParamException {
@@ -72,7 +85,8 @@ public class TaskoXmlRpcHandler {
return bunch;
}
- public Integer unscheduleBunch(Integer orgId, String jobLabel) throws InvalidParamException {
+ public Integer unscheduleBunch(Integer orgId, String jobLabel)
+ throws InvalidParamException {
List<TaskoSchedule> scheduleList =
TaskoFactory.listActiveSchedulesByOrgAndLabel(orgId, jobLabel);
Trigger trigger;
@@ -97,6 +111,10 @@ public class TaskoXmlRpcHandler {
return 1;
}
+ public Integer unscheduleSatBunch(String jobLabel) throws InvalidParamException {
+ return unscheduleBunch(null, jobLabel);
+ }
+
public Date scheduleSingleBunchRun(Integer orgId, String bunchName, String jobLabel,
Map params, Date start)
throws NoSuchBunchTaskException,
@@ -117,6 +135,21 @@ public class TaskoXmlRpcHandler {
return scheduleSingleBunchRun(orgId, bunchName, jobLabel, params, new Date());
}
+ public Date scheduleSingleBunchRun(Integer orgId, String bunchName, Map params)
+ throws NoSuchBunchTaskException, InvalidParamException {
+ String jobLabel = getUniqueJobLabel(orgId, bunchName);
+ return scheduleSingleBunchRun(orgId, bunchName, jobLabel, params, new Date());
+ }
+
+ private String getUniqueJobLabel(Integer orgId, String bunchName) {
+ String jobLabel = "single-" + bunchName + "-";
+ Integer count = 0;
+ while (!TaskoFactory.listSchedulesByOrgAndLabel(orgId, jobLabel).isEmpty()) {
+ count++;
+ }
+ return jobLabel + count.toString();
+ }
+
private Date createJob(TaskoSchedule schedule) throws InvalidParamException {
// create trigger
Trigger trigger = null;
@@ -172,14 +205,13 @@ public class TaskoXmlRpcHandler {
return bunch;
}
- public int listBunchRuns(Integer orgId, String triggerName)
- throws SchedulerException {
- return SchedulerKernel.getScheduler().unscheduleJob(triggerName,
- orgId.toString()) ? 1 : 0;
+ public int clearRunHistory(Integer orgId, Date limitTime) throws InvalidParamException {
+ TaskoFactory.clearOrgRunHistory(orgId, limitTime);
+ return 1;
}
- public int clearRunHistory(Integer orgId, Date limitTime) throws InvalidParamException {
- TaskoFactory.clearRunHistory(orgId, limitTime);
+ public int clearSatRunHistory(Date limitTime) throws InvalidParamException {
+ TaskoFactory.clearOrgRunHistory(null, limitTime);
return 1;
}
@@ -187,23 +219,45 @@ public class TaskoXmlRpcHandler {
return TaskoFactory.listSchedulesByOrg(orgId);
}
+ public List<TaskoSchedule> listAllSatSchedules() {
+ return listAllSchedules(null);
+ }
+
public List<TaskoSchedule> listActiveSchedules(Integer orgId) {
return TaskoFactory.listActiveSchedulesByOrg(orgId);
}
+ public List<TaskoSchedule> listActiveSatSchedules() {
+ return listActiveSchedules(null);
+ }
+
public List<TaskoRun> listScheduleRuns(Integer orgId, Integer scheduleId) {
return TaskoFactory.getRunsByOrgAndSchedule(orgId, scheduleId);
}
+ public List<TaskoRun> listScheduleSatRuns(Integer scheduleId) {
+ return listScheduleRuns(null, scheduleId);
+ }
+
public String getRunStdOutputLog(Integer orgId, Long runId, Long nBytes)
throws InvalidParamException {
TaskoRun run = TaskoFactory.getRunByOrgAndId(orgId, runId);
return run.getTailOfStdOutput(nBytes);
}
+ public String getSatRunStdOutputLog(Long runId, Long nBytes)
+ throws InvalidParamException {
+ return getRunStdOutputLog(null, runId, nBytes);
+ }
+
public String getRunStdErrorLog(Integer orgId, Long runId, Long nBytes)
throws InvalidParamException {
TaskoRun run = TaskoFactory.getRunByOrgAndId(orgId, runId);
return run.getTailOfStdError(nBytes);
}
+
+ public String getSatRunStdErrorLog(Long runId, Long nBytes)
+ throws InvalidParamException {
+ return getRunStdErrorLog(null, runId, nBytes);
+ }
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcServer.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcServer.java
index 19ecdf8..6bf4c2d 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcServer.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcServer.java
@@ -102,7 +102,8 @@ public class TaskoXmlRpcServer {
private void addTaskoSerializers() {
for (Class clazz : TaskoSerializerRegistry.getSerializationClasses()) {
try {
- xmlrpcServer.getSerializer().addCustomSerializer((XmlRpcCustomSerializer)clazz.newInstance());
+ xmlrpcServer.getSerializer().addCustomSerializer(
+ (XmlRpcCustomSerializer)clazz.newInstance());
}
catch (InstantiationException e) {
e.printStackTrace(System.out);
commit 0622da21741fe6fba2c726518b7f22a4dd8069c1
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Thu Jun 24 14:32:08 2010 +0200
add serializers for TaskoTemplate and TaskoBunch
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoSerializerRegistry.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoSerializerRegistry.java
index cb815e6..ab0d19c 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoSerializerRegistry.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoSerializerRegistry.java
@@ -14,8 +14,10 @@
*/
package com.redhat.rhn.taskomatic;
+import com.redhat.rhn.taskomatic.serializer.TaskoBunchSerializer;
import com.redhat.rhn.taskomatic.serializer.TaskoRunSerializer;
import com.redhat.rhn.taskomatic.serializer.TaskoScheduleSerializer;
+import com.redhat.rhn.taskomatic.serializer.TaskoTemplateSerializer;
import java.util.LinkedList;
import java.util.List;
@@ -34,6 +36,8 @@ public class TaskoSerializerRegistry {
TASKO_SERIALIZER_CLASSES = new LinkedList<Class>();
TASKO_SERIALIZER_CLASSES.add(TaskoScheduleSerializer.class);
TASKO_SERIALIZER_CLASSES.add(TaskoRunSerializer.class);
+ TASKO_SERIALIZER_CLASSES.add(TaskoBunchSerializer.class);
+ TASKO_SERIALIZER_CLASSES.add(TaskoTemplateSerializer.class);
}
private TaskoSerializerRegistry() {
diff --git a/java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoBunchSerializer.java b/java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoBunchSerializer.java
new file mode 100644
index 0000000..6a0f459
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoBunchSerializer.java
@@ -0,0 +1,56 @@
+/**
+ * Copyright (c) 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.serializer;
+
+import com.redhat.rhn.frontend.xmlrpc.serializer.util.SerializerHelper;
+import com.redhat.rhn.taskomatic.TaskoBunch;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import redstone.xmlrpc.XmlRpcCustomSerializer;
+import redstone.xmlrpc.XmlRpcException;
+import redstone.xmlrpc.XmlRpcSerializer;
+
+
+/**
+ * TaskoBunchSerializer
+ * @version $Rev$
+ */
+public class TaskoBunchSerializer implements XmlRpcCustomSerializer {
+
+ /**
+ * {@inheritDoc}
+ */
+ public Class getSupportedClass() {
+ return TaskoBunch.class;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void serialize(Object value, Writer output,
+ XmlRpcSerializer builtInSerializer)
+ throws XmlRpcException, IOException {
+
+ TaskoBunch bunch = (TaskoBunch) value;
+ SerializerHelper helper = new SerializerHelper(builtInSerializer);
+
+ helper.add("name", bunch.getName());
+ helper.add("description", bunch.getDescription());
+ helper.add("templates", bunch.getTemplates());
+ helper.writeTo(output);
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoScheduleSerializer.java b/java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoScheduleSerializer.java
index e7885be..1ed24ee 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoScheduleSerializer.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoScheduleSerializer.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2008 Red Hat, Inc.
+ * Copyright (c) 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
diff --git a/java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoTemplateSerializer.java b/java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoTemplateSerializer.java
new file mode 100644
index 0000000..4eea009
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoTemplateSerializer.java
@@ -0,0 +1,55 @@
+/**
+ * Copyright (c) 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.serializer;
+
+import com.redhat.rhn.frontend.xmlrpc.serializer.util.SerializerHelper;
+import com.redhat.rhn.taskomatic.TaskoTemplate;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import redstone.xmlrpc.XmlRpcCustomSerializer;
+import redstone.xmlrpc.XmlRpcException;
+import redstone.xmlrpc.XmlRpcSerializer;
+
+
+/**
+ * TaskoTemplateSerializer
+ * @version $Rev$
+ */
+public class TaskoTemplateSerializer implements XmlRpcCustomSerializer {
+
+ /**
+ * {@inheritDoc}
+ */
+ public Class getSupportedClass() {
+ return TaskoTemplate.class;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void serialize(Object value, Writer output,
+ XmlRpcSerializer builtInSerializer)
+ throws XmlRpcException, IOException {
+
+ TaskoTemplate template = (TaskoTemplate) value;
+ SerializerHelper helper = new SerializerHelper(builtInSerializer);
+
+ helper.add("name", template.getTask().getName());
+ helper.writeTo(output);
+ }
+
+}
commit 59f52e53cdb9e22fdf5fee529ef6243143c24cfa
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Thu Jun 24 13:49:11 2010 +0200
remove orgTask
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.java
index 20872d9..780e0a7 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.java
@@ -27,7 +27,6 @@ public class TaskoBunch {
private Long id;
private String name;
private String description;
- private String orgTask;
private Date activeFrom;
private Date activeTill;
private String orgBunch;
@@ -147,22 +146,6 @@ public class TaskoBunch {
this.templates = templatesIn;
}
-
- /**
- * @return Returns the orgTask.
- */
- public String getOrgTask() {
- return orgTask;
- }
-
-
- /**
- * @param orgTaskIn The orgTask to set.
- */
- public void setOrgTask(String orgTaskIn) {
- this.orgTask = orgTaskIn;
- }
-
/**
* @return Returns the orgBunch.
*/
commit 70c7826446a890b5a13da91dd6eae4f8b1e7b22b
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Thu Jun 24 11:38:47 2010 +0200
make conform hibernate query names
rename find -> lookup/list
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.hbm.xml b/java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.hbm.xml
index 2b8a2df..acfd72e 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.hbm.xml
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoBunch.hbm.xml
@@ -32,19 +32,19 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
</class>
- <query name="TaskoBunch.findById">
+ <query name="TaskoBunch.lookupById">
<![CDATA[FROM com.redhat.rhn.taskomatic.TaskoBunch WHERE id = :id]]>
</query>
- <query name="TaskoBunch.findByName">
+ <query name="TaskoBunch.lookupByName">
<![CDATA[FROM com.redhat.rhn.taskomatic.TaskoBunch WHERE name = :name]]>
</query>
- <query name="TaskoBunch.findOrgBunchByName">
+ <query name="TaskoBunch.lookupOrgBunchByName">
<![CDATA[FROM com.redhat.rhn.taskomatic.TaskoBunch WHERE orgBunch is not null AND name = :name]]>
</query>
- <query name="TaskoBunch.findSatBunchByName">
+ <query name="TaskoBunch.lookupSatBunchByName">
<![CDATA[FROM com.redhat.rhn.taskomatic.TaskoBunch WHERE orgBunch is null AND name = :name]]>
</query>
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
index 040f884..47d29ba 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
@@ -49,7 +49,7 @@ public class TaskoFactory extends HibernateFactory {
Map params = new HashMap();
params.put("name", bunchName);
return (TaskoBunch) singleton.lookupObjectByNamedQuery(
- "TaskoBunch.findOrgBunchByName", params);
+ "TaskoBunch.lookupOrgBunchByName", params);
}
public static TaskoTemplate lookupTemplateByBunchAndOrder(Long bunchId, Long order) {
@@ -57,7 +57,7 @@ public class TaskoFactory extends HibernateFactory {
params.put("bunch_id", bunchId);
params.put("order", order);
return (TaskoTemplate) singleton.lookupObjectByNamedQuery(
- "TaskoTemplate.findByBunchAndOrder", params);
+ "TaskoTemplate.lookupByBunchAndOrder", params);
}
public static List<TaskoBunch> listBunches() {
@@ -155,7 +155,7 @@ public class TaskoFactory extends HibernateFactory {
params.put("org_id", orgId);
params.put("timestamp", new Date()); // use server time, not DB time
return (List<TaskoSchedule>) singleton.listObjectsByNamedQuery(
- "TaskoSchedule.findActiveByOrg", params);
+ "TaskoSchedule.listActiveByOrg", params);
}
public static List<TaskoSchedule> listActiveSchedulesByOrgAndLabel(Integer orgId,
@@ -165,7 +165,7 @@ public class TaskoFactory extends HibernateFactory {
params.put("job_label", jobLabel);
params.put("timestamp", new Date()); // use server time, not DB time
return (List<TaskoSchedule>) singleton.listObjectsByNamedQuery(
- "TaskoSchedule.findActiveByOrgAndLabel", params);
+ "TaskoSchedule.listActiveByOrgAndLabel", params);
}
public static TaskoSchedule lookupScheduleById(Long scheduleId) {
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.hbm.xml b/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.hbm.xml
index a8bf72f..f8312f8 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.hbm.xml
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.hbm.xml
@@ -48,11 +48,11 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<![CDATA[FROM com.redhat.rhn.taskomatic.TaskoSchedule WHERE orgId = :org_id AND bunch.id = :bunch_id]]>
</query>
- <query name="TaskoSchedule.findActiveByOrg">
+ <query name="TaskoSchedule.listActiveByOrg">
<![CDATA[FROM com.redhat.rhn.taskomatic.TaskoSchedule WHERE orgId = :org_id AND (activeFrom < :timestamp AND (activeTill is null OR :timestamp < activeTill))]]>
</query>
- <query name="TaskoSchedule.findActiveByOrgAndLabel">
+ <query name="TaskoSchedule.listActiveByOrgAndLabel">
<![CDATA[FROM com.redhat.rhn.taskomatic.TaskoSchedule WHERE orgId = :org_id AND jobLabel = :job_label AND (activeFrom < :timestamp AND (activeTill is null OR :timestamp < activeTill))]]>
</query>
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoTask.hbm.xml b/java/code/src/com/redhat/rhn/taskomatic/TaskoTask.hbm.xml
index b127f30..990569c 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoTask.hbm.xml
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoTask.hbm.xml
@@ -22,11 +22,11 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
insert="false" update="false"/>
</class>
- <query name="TaskoTask.findById">
+ <query name="TaskoTask.lookupById">
<![CDATA[from com.redhat.rhn.taskomatic.TaskoTask as t where t.id = :id]]>
</query>
- <query name="TaskoTask.findByName">
+ <query name="TaskoTask.lookupByName">
<![CDATA[from com.redhat.rhn.taskomatic.TaskoTask as t where t.name = :name]]>
</query>
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.hbm.xml b/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.hbm.xml
index a18e358..2051d05 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.hbm.xml
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.hbm.xml
@@ -36,7 +36,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
insert="false" update="false"/>
</class>
- <query name="TaskoTemplate.findByBunchAndOrder">
+ <query name="TaskoTemplate.lookupByBunchAndOrder">
<![CDATA[from com.redhat.rhn.taskomatic.TaskoTemplate where bunch.id = :bunch_id and ordering = :order]]>
</query>
commit b21323589957983f75c7cec2d0155da1221030f7
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Thu Jun 24 11:25:04 2010 +0200
change lookup for active schedules
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
index 316e318..040f884 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
@@ -150,12 +150,21 @@ public class TaskoFactory extends HibernateFactory {
return false;
}
- public static TaskoSchedule lookupActiveScheduleByOrgAndLabel(Integer orgId,
+ public static List<TaskoSchedule> listActiveSchedulesByOrg(Integer orgId) {
+ Map params = new HashMap();
+ params.put("org_id", orgId);
+ params.put("timestamp", new Date()); // use server time, not DB time
+ return (List<TaskoSchedule>) singleton.listObjectsByNamedQuery(
+ "TaskoSchedule.findActiveByOrg", params);
+ }
+
+ public static List<TaskoSchedule> listActiveSchedulesByOrgAndLabel(Integer orgId,
String jobLabel) {
Map params = new HashMap();
params.put("org_id", orgId);
params.put("job_label", jobLabel);
- return (TaskoSchedule) singleton.lookupObjectByNamedQuery(
+ params.put("timestamp", new Date()); // use server time, not DB time
+ return (List<TaskoSchedule>) singleton.listObjectsByNamedQuery(
"TaskoSchedule.findActiveByOrgAndLabel", params);
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.hbm.xml b/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.hbm.xml
index 8c7f8f4..a8bf72f 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.hbm.xml
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.hbm.xml
@@ -48,8 +48,12 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<![CDATA[FROM com.redhat.rhn.taskomatic.TaskoSchedule WHERE orgId = :org_id AND bunch.id = :bunch_id]]>
</query>
+ <query name="TaskoSchedule.findActiveByOrg">
+ <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoSchedule WHERE orgId = :org_id AND (activeFrom < :timestamp AND (activeTill is null OR :timestamp < activeTill))]]>
+ </query>
+
<query name="TaskoSchedule.findActiveByOrgAndLabel">
- <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoSchedule WHERE orgId = :org_id AND jobLabel = :job_label AND (activeFrom < sysdate AND (activeTill is null OR sysdate < activeTill))]]>
+ <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoSchedule WHERE orgId = :org_id AND jobLabel = :job_label AND (activeFrom < :timestamp AND (activeTill is null OR :timestamp < activeTill))]]>
</query>
</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
index bf62cf3..5065873 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
@@ -66,15 +66,15 @@ public class TaskoXmlRpcHandler {
String jobLabel)
throws NoSuchBunchTaskException, InvalidParamException {
TaskoBunch bunch = checkBunchName(bunchName);
- if (TaskoFactory.lookupActiveScheduleByOrgAndLabel(orgId, jobLabel) != null) {
+ if (!TaskoFactory.listActiveSchedulesByOrgAndLabel(orgId, jobLabel).isEmpty()) {
throw new InvalidParamException("jobLabel already in use");
}
return bunch;
}
public Integer unscheduleBunch(Integer orgId, String jobLabel) throws InvalidParamException {
- TaskoSchedule schedule =
- TaskoFactory.lookupActiveScheduleByOrgAndLabel(orgId, jobLabel);
+ List<TaskoSchedule> scheduleList =
+ TaskoFactory.listActiveSchedulesByOrgAndLabel(orgId, jobLabel);
Trigger trigger;
try {
trigger = SchedulerKernel.getScheduler().getTrigger(jobLabel, orgId.toString());
@@ -85,10 +85,10 @@ public class TaskoXmlRpcHandler {
// check for inconsistencies
// quartz unschedules job after trigger end time
// so better handle quartz and schedules separately
- if ((schedule == null) && (trigger == null)) {
+ if ((scheduleList.isEmpty()) && (trigger == null)) {
throw new InvalidParamException("No such jobLabel");
}
- if (schedule != null) {
+ for (TaskoSchedule schedule : scheduleList) {
schedule.unschedule();
}
if (trigger != null) {
@@ -183,10 +183,14 @@ public class TaskoXmlRpcHandler {
return 1;
}
- public List<TaskoSchedule> listSchedules(Integer orgId) {
+ public List<TaskoSchedule> listAllSchedules(Integer orgId) {
return TaskoFactory.listSchedulesByOrg(orgId);
}
+ public List<TaskoSchedule> listActiveSchedules(Integer orgId) {
+ return TaskoFactory.listActiveSchedulesByOrg(orgId);
+ }
+
public List<TaskoRun> listScheduleRuns(Integer orgId, Integer scheduleId) {
return TaskoFactory.getRunsByOrgAndSchedule(orgId, scheduleId);
}
commit 5d824c7b22883c9c39247f0907c3267b9338eee9
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Wed Jun 23 15:54:54 2010 +0200
adding TaskoXmlRpcInvocationInterceptor
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcInvocationInterceptor.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcInvocationInterceptor.java
new file mode 100644
index 0000000..4a6cdbb
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcInvocationInterceptor.java
@@ -0,0 +1,56 @@
+/**
+ * Copyright (c) 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;
+
+import com.redhat.rhn.common.hibernate.HibernateFactory;
+
+import redstone.xmlrpc.XmlRpcInvocation;
+import redstone.xmlrpc.XmlRpcInvocationInterceptor;
+
+
+/**
+ * TaskoXmlRpcInvocationInterceptor
+ * @version $Rev$
+ */
+public class TaskoXmlRpcInvocationInterceptor implements
+ XmlRpcInvocationInterceptor {
+
+ /**
+ * {@inheritDoc}
+ */
+ public Object after(XmlRpcInvocation invocation, Object returnValue) {
+ if (HibernateFactory.getSession().getTransaction().isActive()) {
+ HibernateFactory.commitTransaction();
+ }
+ HibernateFactory.closeSession();
+ return returnValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean before(XmlRpcInvocation invocation) {
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void onException(XmlRpcInvocation incovation, Throwable exception) {
+ HibernateFactory.rollbackTransaction();
+ HibernateFactory.closeSession();
+ }
+
+}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcServer.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcServer.java
index d7b0413..19ecdf8 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcServer.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcServer.java
@@ -62,6 +62,7 @@ public class TaskoXmlRpcServer {
public void start() {
xmlrpcServer = new XmlRpcServer();
xmlrpcServer.addInvocationHandler("tasko", new TaskoXmlRpcHandler());
+ xmlrpcServer.addInvocationInterceptor(new TaskoXmlRpcInvocationInterceptor());
addTaskoSerializers();
TaskoXmlRpcInvoker invoker = new TaskoXmlRpcInvoker(xmlrpcServer);
@@ -81,6 +82,7 @@ public class TaskoXmlRpcServer {
catch (IOException e) {
throw new RuntimeException(e);
}
+
}
/**
commit cee762bf87eab3da9a9c1c1567d6afd5fac1bef6
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Wed Jun 23 15:36:15 2010 +0200
various backend changes
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
index f65f88c..316e318 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
@@ -18,13 +18,13 @@ package com.redhat.rhn.taskomatic;
import com.redhat.rhn.common.hibernate.HibernateFactory;
import org.apache.log4j.Logger;
-import org.hibernate.Transaction;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -104,7 +104,7 @@ public class TaskoFactory extends HibernateFactory {
params.put("org_id", orgId);
params.put("limit_time", limitTime);
return (List<TaskoRun>) singleton.listObjectsByNamedQuery(
- "TaskoRun.listRunsOlderThan", params);
+ "TaskoRun.listOlderThan", params);
}
public static void clearRunHistory(Integer orgId, Date limitTime) throws InvalidParamException {
@@ -112,24 +112,21 @@ public class TaskoFactory extends HibernateFactory {
throw new InvalidParamException("Invalid limit date");
}
List<TaskoRun> runList = listRunsOlderThan(orgId, limitTime);
- Transaction trns = TaskoFactory.getSession().beginTransaction();
for (TaskoRun run : runList) {
// delete history of runs
TaskoFactory.deleteLogFiles(run);
TaskoFactory.delete(run);
}
- trns.commit();
// delete outdated schedules
List<TaskoSchedule> scheduleList = listSchedulesByOrg(orgId);
- trns = TaskoFactory.getSession().beginTransaction();
for (TaskoSchedule schedule : scheduleList) {
Date endTime = schedule.getActiveTill();
- if ((endTime != null) && (endTime.before(limitTime))) {
+ if ((endTime != null) && (endTime.before(limitTime))
+ && TaskoFactory.listRunsBySchedule(schedule.getId()).isEmpty()) {
TaskoFactory.delete(schedule);
}
}
- trns.commit();
}
public static void deleteLogFiles(TaskoRun run) {
@@ -176,6 +173,13 @@ public class TaskoFactory extends HibernateFactory {
"TaskoSchedule.listByOrg", params);
}
+ public static List<TaskoRun> listRunsBySchedule(Long scheduleId) {
+ Map params = new HashMap();
+ params.put("schedule_id", scheduleId);
+ return singleton.listObjectsByNamedQuery(
+ "TaskoRun.listBySchedule", params);
+ }
+
public static List<TaskoSchedule> listSchedulesByOrgAndBunch(Integer orgId,
TaskoBunch bunch) {
Map params = new HashMap();
@@ -206,7 +210,7 @@ public class TaskoFactory extends HibernateFactory {
taskClass = Class.forName(task.getTaskClass());
Method isParallelizableMethod = taskClass.getMethod("isParallelizable",
(Class[]) null);
- return (Boolean) isParallelizableMethod.invoke(null, null);
+ return (Boolean) isParallelizableMethod.invoke(null, (Object[]) null);
}
catch (ClassNotFoundException e) {
return false;
@@ -244,4 +248,16 @@ public class TaskoFactory extends HibernateFactory {
}
return schedule;
}
+
+ public static List<TaskoRun> getRunsByOrgAndSchedule(Integer orgId,
+ Integer scheduleId) {
+ List<TaskoRun> runs = listRunsBySchedule(scheduleId.longValue());
+ // verify it belongs to the right org
+ for (Iterator<TaskoRun> iter = runs.iterator(); iter.hasNext();) {
+ if (!iter.next().getOrgId().equals(orgId)) {
+ iter.remove();
+ }
+ }
+ return runs;
+ }
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.hbm.xml b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.hbm.xml
index 9b78d50..aea74dc 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.hbm.xml
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.hbm.xml
@@ -16,9 +16,10 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<property name="orgId" type="integer" column="org_id"/>
<many-to-one
name="template"
+ lazy="false"
class="com.redhat.rhn.taskomatic.TaskoTemplate"
column="template_id"/>
- <property name="jobLabel" type="string" column="job_label"/>
+ <property name="scheduleId" type="long" column="schedule_id"/>
<property name="startTime" type="timestamp" column="start_time"/>
<property name="endTime" type="timestamp" column="end_time"/>
<property name="stdOutputPath" type="string" column="std_output_path"/>
@@ -36,12 +37,16 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<![CDATA[FROM com.redhat.rhn.taskomatic.TaskoRun WHERE id = :id]]>
</query>
+ <query name="TaskoRun.listBySchedule">
+ <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoRun WHERE scheduleId = :schedule_id]]>
+ </query>
+
<query name="TaskoRun.listRunsWithStatus">
<![CDATA[FROM com.redhat.rhn.taskomatic.TaskoRun AS r WHERE r.template.task.id = :task_id AND (r.status = :status1 OR status = :status2)]]>
</query>
- <query name="TaskoRun.listRunsOlderThan">
- <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoRun AS r WHERE r.orgId = :org_id and r.endTime < :limit_time]]>
+ <query name="TaskoRun.listOlderThan">
+ <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoRun WHERE orgId = :org_id AND endTime < :limit_time]]>
</query>
</hibernate-mapping>
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java
index d59b8e6..b04b263 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java
@@ -45,7 +45,7 @@ public class TaskoRun implements Job {
private Long id;
private Integer orgId;
private TaskoTemplate template;
- private String jobLabel;
+ private Long scheduleId;
private Date startTime;
private Date endTime;
private String stdOutputPath = null;
@@ -57,10 +57,10 @@ public class TaskoRun implements Job {
public TaskoRun() {
}
- public TaskoRun(Integer orgIdIn, TaskoTemplate templateIn, String jobLabelIn) {
+ public TaskoRun(Integer orgIdIn, TaskoTemplate templateIn, Long scheduleIdIn) {
setOrgId(orgIdIn);
setTemplate(templateIn);
- setJobLabel(jobLabelIn);
+ setScheduleId(scheduleIdIn);
File logDir = new File(getStdLogDirName(orgId));
if (!logDir.isDirectory()) {
if (!logDir.exists()) {
@@ -71,13 +71,6 @@ public class TaskoRun implements Job {
}
public void start() {
- if (new File(getStdLogDirName(orgId)).isDirectory()) {
- setStdOutputPath(getStdOutputLog(orgId, template, this));
- setStdErrorPath(getStdErrorLog(orgId, template, this));
- }
- else {
- log.warn("Logging disabled. No directory " + STD_LOG_PREFIX);
- }
setStartTime(new Date());
saveStatus(STATUS_RUNNING);
}
@@ -85,18 +78,25 @@ public class TaskoRun implements Job {
public void finished(JobExecutionContext context) {
setEndTime(new Date());
String out = (String) context.getJobDetail().getJobDataMap().get("stdOutput");
- if ((out != null) && (!out.isEmpty())) {
- saveLogToFile(getStdOutputPath(), out);
- }
- else {
- setStdOutputPath("");
- }
- String err = (String) context.getJobDetail().getJobDataMap().get("stdError");
- if ((err != null) && (!err.isEmpty())) {
- saveLogToFile(getStdErrorPath(), err);
+ if (new File(getStdLogDirName(orgId)).isDirectory()) {
+ if ((out != null) && (!out.isEmpty())) {
+ setStdOutputPath(getStdOutputLog(orgId, template, this));
+ saveLogToFile(getStdOutputPath(), out);
+ }
+ else {
+ setStdOutputPath("");
+ }
+ String err = (String) context.getJobDetail().getJobDataMap().get("stdError");
+ if ((err != null) && (!err.isEmpty())) {
+ setStdErrorPath(getStdErrorLog(orgId, template, this));
+ saveLogToFile(getStdErrorPath(), err);
+ }
+ else {
+ setStdErrorPath("");
+ }
}
else {
- setStdErrorPath("");
+ log.warn("Logging disabled. No directory " + getStdLogDirName(orgId));
}
saveStatus(STATUS_FINISHED);
}
@@ -374,14 +374,14 @@ public class TaskoRun implements Job {
/**
* @return Returns the jobLabel.
*/
- public String getJobLabel() {
- return jobLabel;
+ public Long getScheduleId() {
+ return scheduleId;
}
/**
* @param jobLabelIn The jobLabel to set.
*/
- public void setJobLabel(String jobLabelIn) {
- this.jobLabel = jobLabelIn;
+ public void setScheduleId(Long scheduleIdIn) {
+ this.scheduleId = scheduleIdIn;
}
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.hbm.xml b/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.hbm.xml
index 5547e53..8c7f8f4 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.hbm.xml
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.hbm.xml
@@ -16,10 +16,10 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<property name="jobLabel" type="string" column="job_label"/>
<many-to-one
name="bunch"
+ lazy="false"
class="com.redhat.rhn.taskomatic.TaskoBunch"
column="bunch_id"/>
<property name="orgId" type="integer" column="org_id"/>
- <property name="active" type="string" column="active"/>
<property name="activeFrom" type="timestamp" column="active_from"/>
<property name="activeTill" type="timestamp" column="active_till"/>
<property name="cronExpr" type="string" column="cron_expr"/>
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.java
index ec63175..f48463c 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.apache.log4j.Logger;
import org.hibernate.Hibernate;
import org.quartz.Job;
@@ -27,15 +29,13 @@ import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.sql.Blob;
import java.sql.SQLException;
-import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
public class TaskoSchedule implements Job {
- private static final String TASKO_SCHEDULE_ACTIVE = "Y";
+
private static Logger log = Logger.getLogger(TaskoBunch.class);
private static Map<String, Integer> tasks = new HashMap<String, Integer>();
@@ -43,12 +43,10 @@ public class TaskoSchedule implements Job {
private String jobLabel;
private TaskoBunch bunch;
private Integer orgId;
- private String active;
private Date activeFrom;
private Date activeTill;
private String cronExpr;
private byte[] data;
- private List<TaskoRun> runs = new ArrayList<TaskoRun>();
private Date created;
private Date modified;
@@ -67,7 +65,6 @@ public class TaskoSchedule implements Job {
setBunch(bunchIn);
setJobLabel(jobLabelIn);
data = serializeMap(dataIn);
- setActive(TASKO_SCHEDULE_ACTIVE);
setCronExpr(cronExprIn);
if (activeFromIn == null) {
setActiveFrom(new Date());
@@ -125,8 +122,10 @@ public class TaskoSchedule implements Job {
}
}
markTaskRunning(template.getTask());
- TaskoRun taskRun = new TaskoRun(this.orgId, template, this.jobLabel);
+ TaskoRun taskRun = new TaskoRun(this.orgId, template, this.id);
+ TaskoFactory.save(taskRun);
taskRun.execute(context);
+ TaskoFactory.commitTransaction();
unmarkTaskRunning(template.getTask());
log.debug(template.getTask().getName() + " ... " + taskRun.getStatus());
previousRun = taskRun;
@@ -136,14 +135,13 @@ public class TaskoSchedule implements Job {
break;
}
}
- TaskoFactory.commitTransaction();
+ HibernateFactory.closeSession();
log.info("Finishing " + bunch.getName() + " (" + jobLabel + ") at " + new Date());
}
public void unschedule() {
setActiveTill(new Date());
- setActive(null);
}
private byte[] serializeMap(Map dataMap) {
@@ -320,20 +318,6 @@ public class TaskoSchedule implements Job {
}
/**
- * @return Returns the runs.
- */
- public List<TaskoRun> getRuns() {
- return runs;
- }
-
- /**
- * @param runsIn The runs to set.
- */
- public void setRuns(List<TaskoRun> runsIn) {
- runs = runsIn;
- }
-
- /**
* @return Returns the created.
*/
public Date getCreated() {
@@ -362,20 +346,6 @@ public class TaskoSchedule implements Job {
}
/**
- * @return Returns the active.
- */
- public String getActive() {
- return active;
- }
-
- /**
- * @param activeIn The active to set.
- */
- public void setActive(String activeIn) {
- active = activeIn;
- }
-
- /**
* @return Returns the cronExpr.
*/
public String getCronExpr() {
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.hbm.xml b/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.hbm.xml
index edcaed8..a18e358 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.hbm.xml
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoTemplate.hbm.xml
@@ -19,6 +19,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
column="bunch_id"/>
<many-to-one
name="task"
+ lazy="false"
class="com.redhat.rhn.taskomatic.TaskoTask"
column="task_id"/>
<property name="ordering" type="long" column="ordering"/>
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
index 73d01e0..bf62cf3 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
@@ -16,7 +16,6 @@ package com.redhat.rhn.taskomatic;
import com.redhat.rhn.taskomatic.core.SchedulerKernel;
-import org.hibernate.HibernateException;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.SchedulerException;
@@ -30,11 +29,6 @@ import java.util.Map;
public class TaskoXmlRpcHandler {
- private Boolean checkUniqueName(String name, String group) throws SchedulerException {
- return ((SchedulerKernel.getScheduler().getTrigger(name, group) == null) &&
- (SchedulerKernel.getScheduler().getJobDetail(name, group) == null));
- }
-
public int one(Integer orgId) {
return 1;
}
@@ -51,26 +45,14 @@ public class TaskoXmlRpcHandler {
public Date scheduleBunch(Integer orgId, String bunchName, String jobLabel,
Date startTime, Date endTime, String cronExpression, Map params)
throws NoSuchBunchTaskException, InvalidParamException {
- try {
- TaskoBunch bunch = doBasicCheck(orgId, bunchName, jobLabel);
- // create schedule
- TaskoSchedule schedule = null;
- try {
- schedule = new TaskoSchedule(orgId, bunch, jobLabel, params,
- startTime, endTime, cronExpression);
- TaskoFactory.save(schedule);
- TaskoFactory.commitTransaction();
- }
- catch (HibernateException he) {
- TaskoFactory.rollbackTransaction();
- return null;
- }
- // create job
- return createJob(schedule);
- }
- catch (SchedulerException e) {
- return null;
- }
+ TaskoBunch bunch = doBasicCheck(orgId, bunchName, jobLabel);
+ // create schedule
+ TaskoSchedule schedule = null;
+ schedule = new TaskoSchedule(orgId, bunch, jobLabel, params,
+ startTime, endTime, cronExpression);
+ TaskoFactory.save(schedule);
+ // create job
+ return createJob(schedule);
}
public Date scheduleBunch(Integer orgId, String bunchName, String jobLabel,
@@ -82,29 +64,15 @@ public class TaskoXmlRpcHandler {
private TaskoBunch doBasicCheck(Integer orgId, String bunchName,
String jobLabel)
- throws NoSuchBunchTaskException, SchedulerException,
- InvalidParamException {
+ throws NoSuchBunchTaskException, InvalidParamException {
TaskoBunch bunch = checkBunchName(bunchName);
- if (!checkUniqueName(jobLabel, orgId.toString())) {
+ if (TaskoFactory.lookupActiveScheduleByOrgAndLabel(orgId, jobLabel) != null) {
throw new InvalidParamException("jobLabel already in use");
}
return bunch;
}
public Integer unscheduleBunch(Integer orgId, String jobLabel) throws InvalidParamException {
- /*
- try {
- Trigger trigger = SchedulerKernel.getScheduler().getTrigger(
- jobLabel, orgId.toString());
- Trigger newTrigger = (Trigger) trigger.clone();
- newTrigger.setEndTime(new Date());
- SchedulerKernel.getScheduler().rescheduleJob(jobLabel, orgId.toString(),
- newTrigger);
- }
- catch (SchedulerException e) {
- throw new NoSuchTaskoTriggerException();
- }
- */
TaskoSchedule schedule =
TaskoFactory.lookupActiveScheduleByOrgAndLabel(orgId, jobLabel);
Trigger trigger;
@@ -121,10 +89,7 @@ public class TaskoXmlRpcHandler {
throw new InvalidParamException("No such jobLabel");
}
if (schedule != null) {
- Transaction trns = TaskoFactory.getSession().beginTransaction();
schedule.unschedule();
- TaskoFactory.save(schedule);
- trns.commit();
}
if (trigger != null) {
return destroyJob(orgId, jobLabel);
@@ -136,26 +101,14 @@ public class TaskoXmlRpcHandler {
Map params, Date start)
throws NoSuchBunchTaskException,
InvalidParamException {
- try {
- TaskoBunch bunch = doBasicCheck(orgId, bunchName, jobLabel);
- // create schedule
- TaskoSchedule schedule = null;
- try {
- schedule = new TaskoSchedule(orgId, bunch, jobLabel, params,
- start, null, "");
- TaskoFactory.save(schedule);
- TaskoFactory.commitTransaction();
- }
- catch (HibernateException he) {
- TaskoFactory.rollbackTransaction();
- return null;
- }
- // create job
- return createJob(schedule);
- }
- catch (SchedulerException e) {
- return null;
- }
+ TaskoBunch bunch = doBasicCheck(orgId, bunchName, jobLabel);
+ // create schedule
+ TaskoSchedule schedule = null;
+ schedule = new TaskoSchedule(orgId, bunch, jobLabel, params,
+ start, null, "");
+ TaskoFactory.save(schedule);
+ // create job
+ return createJob(schedule);
}
public Date scheduleSingleBunchRun(Integer orgId, String bunchName, String jobLabel,
@@ -234,9 +187,8 @@ public class TaskoXmlRpcHandler {
return TaskoFactory.listSchedulesByOrg(orgId);
}
- public List<TaskoRun> listScheduleRuns(Integer orgId, Long scheduleId) throws InvalidParamException {
- TaskoSchedule schedule = TaskoFactory.getScheduleByOrgAndId(orgId, scheduleId);
- return schedule.getRuns();
+ public List<TaskoRun> listScheduleRuns(Integer orgId, Integer scheduleId) {
+ return TaskoFactory.getRunsByOrgAndSchedule(orgId, scheduleId);
}
public String getRunStdOutputLog(Integer orgId, Long runId, Long nBytes)
diff --git a/java/code/src/com/redhat/rhn/taskomatic/core/RhnJobFactory.java b/java/code/src/com/redhat/rhn/taskomatic/core/RhnJobFactory.java
index 4886aae..a95d992 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/core/RhnJobFactory.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/core/RhnJobFactory.java
@@ -14,7 +14,6 @@
*/
package com.redhat.rhn.taskomatic.core;
-import com.redhat.rhn.common.hibernate.HibernateRuntimeException;
import com.redhat.rhn.taskomatic.TaskoFactory;
import com.redhat.rhn.taskomatic.TaskoSchedule;
@@ -38,10 +37,8 @@ public class RhnJobFactory implements JobFactory {
TaskoSchedule schedule = null;
Long scheduleId = trigger.getJobDetail().getJobDataMap().getLong("schedule_id");
- try {
- schedule = TaskoFactory.lookupScheduleById(scheduleId);
- }
- catch (HibernateRuntimeException re) {
+ schedule = TaskoFactory.lookupScheduleById(scheduleId);
+ if (schedule == null) {
throw new SchedulerException("No such schedule with id " + scheduleId);
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoRunSerializer.java b/java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoRunSerializer.java
index 0e9d0cc..139a360 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoRunSerializer.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoRunSerializer.java
@@ -49,7 +49,7 @@ public class TaskoRunSerializer implements XmlRpcCustomSerializer {
SerializerHelper helper = new SerializerHelper(builtInSerializer);
helper.add("id", run.getId());
- helper.add("job_label", run.getJobLabel());
+ helper.add("schedule_id", run.getScheduleId());
helper.add("task", run.getTemplate().getTask().getName());
helper.add("start_time", run.getStartTime());
helper.add("end_time", run.getEndTime());
diff --git a/schema/spacewalk/common/tables/rhnTaskoRun.sql b/schema/spacewalk/common/tables/rhnTaskoRun.sql
index d068775..32f5b9a 100644
--- a/schema/spacewalk/common/tables/rhnTaskoRun.sql
+++ b/schema/spacewalk/common/tables/rhnTaskoRun.sql
@@ -21,7 +21,9 @@ CREATE TABLE rhnTaskoRun
template_id NUMBER NOT NULL
CONSTRAINT rhn_tasko_run_template_fk
REFERENCES rhnTaskoTemplate (id),
- job_label VARCHAR(50),
+ schedule_id NUMBER NOT NULL
+ CONSTRAINT rhn_tasko_run_schedule_fk
+ REFERENCES rhnTaskoSchedule (id),
org_id NUMBER,
start_time DATE,
end_time DATE,
diff --git a/schema/spacewalk/common/tables/rhnTaskoSchedule.sql b/schema/spacewalk/common/tables/rhnTaskoSchedule.sql
index 1152dcf..09ae6de 100644
--- a/schema/spacewalk/common/tables/rhnTaskoSchedule.sql
+++ b/schema/spacewalk/common/tables/rhnTaskoSchedule.sql
@@ -23,7 +23,6 @@ CREATE TABLE rhnTaskoSchedule
CONSTRAINT rhn_tasko_schedule_bunch_fk
REFERENCES rhnTaskoBunch (id),
org_id NUMBER,
- active VARCHAR2(1),
active_from DATE,
active_till DATE,
cron_expr VARCHAR2(20),
commit 3b340cb98f653238901bed2fd94931a795331941
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Tue Jun 22 18:10:48 2010 +0200
store xmlrpcclient as a private attribute of TaskomaticHandler
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/taskomatic/TaskomaticHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/taskomatic/TaskomaticHandler.java
index 88be05f..92afe06 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/taskomatic/TaskomaticHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/taskomatic/TaskomaticHandler.java
@@ -37,8 +37,18 @@ import redstone.xmlrpc.XmlRpcFault;
public class TaskomaticHandler extends BaseHandler {
private String TASKOMATIC_NAMESPACE = "tasko";
+ private XmlRpcClient client;
private static Logger log = Logger.getLogger(TaskomaticHandler.class);
+ public TaskomaticHandler() {
+ try {
+ client = new XmlRpcClient(ConfigDefaults.get().getTaskoServerUrl(), false);
+ }
+ catch (MalformedURLException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
public Object invoke(String methodCalled, List arguments) throws XmlRpcFault {
List params = new ArrayList(arguments);
String sessionKey = (String) params.remove(0);
@@ -47,23 +57,14 @@ public class TaskomaticHandler extends BaseHandler {
params.add(0, loggedInUser.getOrg().getId());
- XmlRpcClient client;
log.info("Translating " + methodCalled);
try {
- client = new XmlRpcClient(ConfigDefaults.get().getTaskoServerUrl(), false);
- }
- catch (MalformedURLException e) {
- e.printStackTrace();
- throw new XmlRpcFault(0, "Malformed URL");
- }
-
- try {
Object obj = client.invoke(TASKOMATIC_NAMESPACE + "." + methodCalled, params);
return obj;
}
catch (XmlRpcException e) {
- throw new XmlRpcFault(1, "Taskomatic not accessible");
+ throw new XmlRpcFault(1, e.getMessage());
}
}
}
commit 6b8a84e8cd5284991b78453f1d186d90c6f14e25
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Fri Jun 18 11:15:45 2010 +0200
add more apis
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
index 3bab5af..73d01e0 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
@@ -25,6 +25,7 @@ import org.quartz.Trigger;
import java.text.ParseException;
import java.util.Date;
+import java.util.List;
import java.util.Map;
public class TaskoXmlRpcHandler {
@@ -224,8 +225,29 @@ public class TaskoXmlRpcHandler {
orgId.toString()) ? 1 : 0;
}
- public int clearRunHistory(Integer orgId, Date limitTime) {
+ public int clearRunHistory(Integer orgId, Date limitTime) throws InvalidParamException {
TaskoFactory.clearRunHistory(orgId, limitTime);
return 1;
}
+
+ public List<TaskoSchedule> listSchedules(Integer orgId) {
+ return TaskoFactory.listSchedulesByOrg(orgId);
+ }
+
+ public List<TaskoRun> listScheduleRuns(Integer orgId, Long scheduleId) throws InvalidParamException {
+ TaskoSchedule schedule = TaskoFactory.getScheduleByOrgAndId(orgId, scheduleId);
+ return schedule.getRuns();
+ }
+
+ public String getRunStdOutputLog(Integer orgId, Long runId, Long nBytes)
+ throws InvalidParamException {
+ TaskoRun run = TaskoFactory.getRunByOrgAndId(orgId, runId);
+ return run.getTailOfStdOutput(nBytes);
+ }
+
+ public String getRunStdErrorLog(Integer orgId, Long runId, Long nBytes)
+ throws InvalidParamException {
+ TaskoRun run = TaskoFactory.getRunByOrgAndId(orgId, runId);
+ return run.getTailOfStdError(nBytes);
+ }
}
commit 8c1042caf9aee999e9939f8cd52b524e176d1998
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Fri Jun 18 11:14:42 2010 +0200
change unscheduleBunch
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
index 809223b..3bab5af 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
@@ -90,7 +90,7 @@ public class TaskoXmlRpcHandler {
return bunch;
}
- public Integer unscheduleBunch(Integer orgId, String jobLabel) {
+ public Integer unscheduleBunch(Integer orgId, String jobLabel) throws InvalidParamException {
/*
try {
Trigger trigger = SchedulerKernel.getScheduler().getTrigger(
@@ -106,9 +106,29 @@ public class TaskoXmlRpcHandler {
*/
TaskoSchedule schedule =
TaskoFactory.lookupActiveScheduleByOrgAndLabel(orgId, jobLabel);
- schedule.unschedule();
- TaskoFactory.commitTransaction();
- return destroyJob(schedule);
+ Trigger trigger;
+ try {
+ trigger = SchedulerKernel.getScheduler().getTrigger(jobLabel, orgId.toString());
+ }
+ catch (SchedulerException e) {
+ trigger = null;
+ }
+ // check for inconsistencies
+ // quartz unschedules job after trigger end time
+ // so better handle quartz and schedules separately
+ if ((schedule == null) && (trigger == null)) {
+ throw new InvalidParamException("No such jobLabel");
+ }
+ if (schedule != null) {
+ Transaction trns = TaskoFactory.getSession().beginTransaction();
+ schedule.unschedule();
+ TaskoFactory.save(schedule);
+ trns.commit();
+ }
+ if (trigger != null) {
+ return destroyJob(orgId, jobLabel);
+ }
+ return 1;
}
public Date scheduleSingleBunchRun(Integer orgId, String bunchName, String jobLabel,
@@ -179,10 +199,9 @@ public class TaskoXmlRpcHandler {
}
}
- private Integer destroyJob(TaskoSchedule schedule) {
+ private Integer destroyJob(Integer orgId, String jobLabel) {
try {
- SchedulerKernel.getScheduler().unscheduleJob(schedule.getJobLabel(),
- schedule.getOrgId().toString());
+ SchedulerKernel.getScheduler().unscheduleJob(jobLabel, orgId.toString());
return 1;
}
catch (SchedulerException e) {
commit 1c811e5b777ccef3bb67a03fa831d201f7fc660d
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Fri Jun 18 11:09:26 2010 +0200
sett activeTill for single runs
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.java
index c88d0bf..ec63175 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.java
@@ -75,6 +75,10 @@ public class TaskoSchedule implements Job {
else {
setActiveFrom(activeFromIn);
}
+ if (cronExprIn.isEmpty()) {
+ // set activeFrom for single runs
+ setActiveTill(getActiveFrom());
+ }
if (activeTillIn != null) {
setActiveTill(activeTillIn);
}
commit c8a351d9d03ee6f1f335842113bf8137f2d59ebb
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Fri Jun 18 10:49:40 2010 +0200
update queries
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
index 86e0aec..f65f88c 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
@@ -16,11 +16,9 @@ package com.redhat.rhn.taskomatic;
import com.redhat.rhn.common.hibernate.HibernateFactory;
-import com.redhat.rhn.taskomatic.core.SchedulerKernel;
import org.apache.log4j.Logger;
-import org.quartz.SchedulerException;
-import org.quartz.Trigger;
+import org.hibernate.Transaction;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
@@ -75,6 +73,10 @@ public class TaskoFactory extends HibernateFactory {
singleton.removeObject(taskoRun);
}
+ private static void delete(TaskoSchedule taskoSchedule) {
+ singleton.removeObject(taskoSchedule);
+ }
+
public static void save(TaskoTemplate taskoTemplate) {
singleton.saveObject(taskoTemplate);
}
@@ -105,34 +107,29 @@ public class TaskoFactory extends HibernateFactory {
"TaskoRun.listRunsOlderThan", params);
}
- public static void clearRunHistory(Integer orgId, Date limitTime) {
- try {
- String[] triggerNames = SchedulerKernel.getScheduler().
- getTriggerNames(orgId.toString());
- // triggerName == jobLabel
- for (String jobLabel : triggerNames) {
- // delete history of runs
- List<TaskoRun> runList =
- TaskoFactory.listRunsOlderThan(orgId, limitTime);
- for (TaskoRun run : runList) {
- TaskoFactory.deleteLogFiles(run);
- TaskoFactory.delete(run);
- }
-
- // unschedule outdated jobs
- Trigger trigger = SchedulerKernel.getScheduler().getTrigger(
- jobLabel, orgId.toString());
- Date endTime = trigger.getEndTime();
- if ((endTime != null) && (endTime.before(limitTime))) {
- SchedulerKernel.getScheduler().unscheduleJob(trigger.getName(),
- orgId.toString());
- }
- }
- TaskoFactory.commitTransaction();
+ public static void clearRunHistory(Integer orgId, Date limitTime) throws InvalidParamException {
+ if (limitTime == null) {
+ throw new InvalidParamException("Invalid limit date");
+ }
+ List<TaskoRun> runList = listRunsOlderThan(orgId, limitTime);
+ Transaction trns = TaskoFactory.getSession().beginTransaction();
+ for (TaskoRun run : runList) {
+ // delete history of runs
+ TaskoFactory.deleteLogFiles(run);
+ TaskoFactory.delete(run);
}
- catch (SchedulerException e) {
- TaskoFactory.rollbackTransaction();
+ trns.commit();
+
+ // delete outdated schedules
+ List<TaskoSchedule> scheduleList = listSchedulesByOrg(orgId);
+ trns = TaskoFactory.getSession().beginTransaction();
+ for (TaskoSchedule schedule : scheduleList) {
+ Date endTime = schedule.getActiveTill();
+ if ((endTime != null) && (endTime.before(limitTime))) {
+ TaskoFactory.delete(schedule);
+ }
}
+ trns.commit();
}
public static void deleteLogFiles(TaskoRun run) {
@@ -162,7 +159,7 @@ public class TaskoFactory extends HibernateFactory {
params.put("org_id", orgId);
params.put("job_label", jobLabel);
return (TaskoSchedule) singleton.lookupObjectByNamedQuery(
- "TaskoSchedule.findActiveScheduleByOrgAndLabel", params);
+ "TaskoSchedule.findActiveByOrgAndLabel", params);
}
public static TaskoSchedule lookupScheduleById(Long scheduleId) {
@@ -172,23 +169,37 @@ public class TaskoFactory extends HibernateFactory {
"TaskoSchedule.lookupById", params);
}
- public static TaskoSchedule listSchedulesByOrgAndBunch(Integer orgId,
+ public static List<TaskoSchedule> listSchedulesByOrg(Integer orgId) {
+ Map params = new HashMap();
+ params.put("org_id", orgId);
+ return singleton.listObjectsByNamedQuery(
+ "TaskoSchedule.listByOrg", params);
+ }
+
+ public static List<TaskoSchedule> listSchedulesByOrgAndBunch(Integer orgId,
TaskoBunch bunch) {
Map params = new HashMap();
params.put("org_id", orgId);
params.put("bunch_id", bunch.getId());
- return (TaskoSchedule) singleton.listObjectsByNamedQuery(
+ return singleton.listObjectsByNamedQuery(
"TaskoSchedule.listByOrgAndBunch", params);
}
- public static TaskoSchedule listSchedulesByOrgAndLabel(Integer orgId, String jobLabel) {
+ public static List<TaskoSchedule> listSchedulesByOrgAndLabel(Integer orgId, String jobLabel) {
Map params = new HashMap();
params.put("org_id", orgId);
params.put("job_label", jobLabel);
- return (TaskoSchedule) singleton.listObjectsByNamedQuery(
+ return singleton.listObjectsByNamedQuery(
"TaskoSchedule.listByOrgAndLabel", params);
}
+ public static TaskoRun lookupRunById(Long runId) {
+ Map params = new HashMap();
+ params.put("run_id", runId);
+ return (TaskoRun) singleton.lookupObjectByNamedQuery(
+ "TaskoRun.lookupById", params);
+ }
+
public static Boolean isTaskParalelizable(TaskoTask task) {
Class taskClass;
try {
@@ -216,4 +227,21 @@ public class TaskoFactory extends HibernateFactory {
return false;
}
}
+
+ public static TaskoRun getRunByOrgAndId(Integer orgId, Long runId) throws InvalidParamException {
+ TaskoRun run = lookupRunById(runId);
+ if ((run == null) || (!run.getOrgId().equals(orgId))) {
+ throw new InvalidParamException("No such run id");
+ }
+ return run;
+ }
+
+ public static TaskoSchedule getScheduleByOrgAndId(Integer orgId,
+ Long scheduleId) throws InvalidParamException {
+ TaskoSchedule schedule = lookupScheduleById(scheduleId);
+ if ((schedule == null) || (!schedule.getOrgId().equals(orgId))) {
+ throw new InvalidParamException("No such schedule id");
+ }
+ return schedule;
+ }
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.hbm.xml b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.hbm.xml
index bb316e3..9b78d50 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.hbm.xml
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.hbm.xml
@@ -19,8 +19,8 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
class="com.redhat.rhn.taskomatic.TaskoTemplate"
column="template_id"/>
<property name="jobLabel" type="string" column="job_label"/>
- <property name="startTime" type="date" column="start_time"/>
- <property name="endTime" type="date" column="end_time"/>
+ <property name="startTime" type="timestamp" column="start_time"/>
+ <property name="endTime" type="timestamp" column="end_time"/>
<property name="stdOutputPath" type="string" column="std_output_path"/>
<property name="stdErrorPath" type="string" column="std_error_path"/>
<property name="status" type="string" column="status"/>
@@ -32,6 +32,10 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
</class>
+ <query name="TaskoRun.lookupById">
+ <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoRun WHERE id = :id]]>
+ </query>
+
<query name="TaskoRun.listRunsWithStatus">
<![CDATA[FROM com.redhat.rhn.taskomatic.TaskoRun AS r WHERE r.template.task.id = :task_id AND (r.status = :status1 OR status = :status2)]]>
</query>
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java
index 36b650e..d59b8e6 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoRun.java
@@ -21,8 +21,10 @@ import org.quartz.JobExecutionException;
import java.io.BufferedWriter;
import java.io.File;
+import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
+import java.io.RandomAccessFile;
import java.util.Date;
@@ -149,6 +151,31 @@ public class TaskoRun implements Job {
TaskoFactory.save(this);
}
+ public String getTailOfStdOutput(Long nBytes) {
+ return getTailOfFile(getStdOutputPath(), nBytes);
+ }
+
+ public String getTailOfStdError(Long nBytes) {
+ return getTailOfFile(getStdErrorPath(), nBytes);
+ }
+
+ private String getTailOfFile(String fileName, Long nBytes) {
+ RandomAccessFile file;
+ try {
+ file = new RandomAccessFile(fileName, "r");
+ file.seek(file.length() - nBytes);
+ String tail = file.readLine();
+ file.close();
+ return tail;
+ }
+ catch (FileNotFoundException e) {
+ return "";
+ }
+ catch (IOException e) {
+ return "";
+ }
+ }
+
public static String getStdOutputLog(Integer orgId, TaskoTemplate templ, TaskoRun run) {
return getStdLogDirName(orgId) + getStdLogFileName(templ, run) + "_out";
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.hbm.xml b/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.hbm.xml
index 7bf5111..5547e53 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.hbm.xml
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.hbm.xml
@@ -20,8 +20,8 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
column="bunch_id"/>
<property name="orgId" type="integer" column="org_id"/>
<property name="active" type="string" column="active"/>
- <property name="activeFrom" type="date" column="active_from"/>
- <property name="activeTill" type="date" column="active_till"/>
+ <property name="activeFrom" type="timestamp" column="active_from"/>
+ <property name="activeTill" type="timestamp" column="active_till"/>
<property name="cronExpr" type="string" column="cron_expr"/>
<property name="data" type="blob" column="data"/>
@@ -36,16 +36,20 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<![CDATA[FROM com.redhat.rhn.taskomatic.TaskoSchedule WHERE id = :schedule_id]]>
</query>
+ <query name="TaskoSchedule.listByOrg">
+ <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoSchedule WHERE orgId = :org_id]]>
+ </query>
+
<query name="TaskoSchedule.listByOrgAndLabel">
- <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoSchedule WHERE org_id = :org_id AND jobLabel = :job_label]]>
+ <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoSchedule WHERE orgId = :org_id AND jobLabel = :job_label]]>
</query>
<query name="TaskoSchedule.listByOrgAndBunch">
<![CDATA[FROM com.redhat.rhn.taskomatic.TaskoSchedule WHERE orgId = :org_id AND bunch.id = :bunch_id]]>
</query>
- <query name="TaskoSchedule.findActiveScheduleByOrgAndLabel">
- <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoSchedule WHERE orgId = :org_id AND active is not null AND jobLabel = :job_label]]>
+ <query name="TaskoSchedule.findActiveByOrgAndLabel">
+ <![CDATA[FROM com.redhat.rhn.taskomatic.TaskoSchedule WHERE orgId = :org_id AND jobLabel = :job_label AND (activeFrom < sysdate AND (activeTill is null OR sysdate < activeTill))]]>
</query>
</hibernate-mapping>
commit 8d015f46abd172aa7315ff39a4eff1c787a3cc48
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Fri Jun 18 10:41:49 2010 +0200
add tasko serializers
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoSerializerRegistry.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoSerializerRegistry.java
new file mode 100644
index 0000000..cb815e6
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoSerializerRegistry.java
@@ -0,0 +1,50 @@
+/**
+ * Copyright (c) 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;
+
+import com.redhat.rhn.taskomatic.serializer.TaskoRunSerializer;
+import com.redhat.rhn.taskomatic.serializer.TaskoScheduleSerializer;
+
+import java.util.LinkedList;
+import java.util.List;
+
+
+/**
+ * TaskoSerializerFactory
+ * @version $Rev$
+ */
+// Note: Cannot extend SerializerRegistry, had to define a new class
+// it's not possible to override static methods / attributes
+public class TaskoSerializerRegistry {
+
+ private static final List<Class> TASKO_SERIALIZER_CLASSES;
+ static {
+ TASKO_SERIALIZER_CLASSES = new LinkedList<Class>();
+ TASKO_SERIALIZER_CLASSES.add(TaskoScheduleSerializer.class);
+ TASKO_SERIALIZER_CLASSES.add(TaskoRunSerializer.class);
+ }
+
+ private TaskoSerializerRegistry() {
+ // hide contructor
+ }
+
+ /**
+ * Returns the list of all available custom XMLRPC serializers.
+ * @return List of serializer classes.
+ */
+ public static List<Class> getSerializationClasses() {
+ return TASKO_SERIALIZER_CLASSES;
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcServer.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcServer.java
index 062be3e..d7b0413 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcServer.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcServer.java
@@ -15,7 +15,6 @@
package com.redhat.rhn.taskomatic;
import com.redhat.rhn.common.conf.Config;
-
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
@@ -23,6 +22,7 @@ import java.net.ServerSocket;
import java.net.SocketAddress;
import java.net.UnknownHostException;
+import redstone.xmlrpc.XmlRpcCustomSerializer;
import redstone.xmlrpc.XmlRpcServer;
import simple.http.connect.Connection;
import simple.http.connect.ConnectionFactory;
@@ -62,6 +62,7 @@ public class TaskoXmlRpcServer {
public void start() {
xmlrpcServer = new XmlRpcServer();
xmlrpcServer.addInvocationHandler("tasko", new TaskoXmlRpcHandler());
+ addTaskoSerializers();
TaskoXmlRpcInvoker invoker = new TaskoXmlRpcInvoker(xmlrpcServer);
Connection connection = ConnectionFactory.getConnection(invoker);
@@ -95,4 +96,18 @@ public class TaskoXmlRpcServer {
throw new RuntimeException(e);
}
}
+
+ private void addTaskoSerializers() {
+ for (Class clazz : TaskoSerializerRegistry.getSerializationClasses()) {
+ try {
+ xmlrpcServer.getSerializer().addCustomSerializer((XmlRpcCustomSerializer)clazz.newInstance());
+ }
+ catch (InstantiationException e) {
+ e.printStackTrace(System.out);
+ }
+ catch (IllegalAccessException e) {
+ e.printStackTrace(System.out);
+ }
+ }
+ }
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoRunSerializer.java b/java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoRunSerializer.java
new file mode 100644
index 0000000..0e9d0cc
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoRunSerializer.java
@@ -0,0 +1,60 @@
+/**
+ * Copyright (c) 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.serializer;
+
+import com.redhat.rhn.frontend.xmlrpc.serializer.util.SerializerHelper;
+import com.redhat.rhn.taskomatic.TaskoRun;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import redstone.xmlrpc.XmlRpcCustomSerializer;
+import redstone.xmlrpc.XmlRpcException;
+import redstone.xmlrpc.XmlRpcSerializer;
+
+
+/**
+ * TaskoRunSerializer
+ * @version $Rev$
+ */
+public class TaskoRunSerializer implements XmlRpcCustomSerializer {
+
+ /**
+ * {@inheritDoc}
+ */
+ public Class getSupportedClass() {
+ return TaskoRun.class;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void serialize(Object value, Writer output,
+ XmlRpcSerializer builtInSerializer)
+ throws XmlRpcException, IOException {
+
+ TaskoRun run = (TaskoRun) value;
+ SerializerHelper helper = new SerializerHelper(builtInSerializer);
+
+ helper.add("id", run.getId());
+ helper.add("job_label", run.getJobLabel());
+ helper.add("task", run.getTemplate().getTask().getName());
+ helper.add("start_time", run.getStartTime());
+ helper.add("end_time", run.getEndTime());
+ helper.add("status", run.getStatus());
+
+ helper.writeTo(output);
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoScheduleSerializer.java b/java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoScheduleSerializer.java
new file mode 100644
index 0000000..e7885be
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/taskomatic/serializer/TaskoScheduleSerializer.java
@@ -0,0 +1,61 @@
+/**
+ * Copyright (c) 2008 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.serializer;
+
+import com.redhat.rhn.frontend.xmlrpc.serializer.util.SerializerHelper;
+import com.redhat.rhn.taskomatic.TaskoSchedule;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import redstone.xmlrpc.XmlRpcCustomSerializer;
+import redstone.xmlrpc.XmlRpcException;
+import redstone.xmlrpc.XmlRpcSerializer;
+
+
+/**
+ * TaskoScheduleSerializer
+ * @version $Rev$
+ */
+public class TaskoScheduleSerializer implements XmlRpcCustomSerializer {
+
+ /**
+ * {@inheritDoc}
+ */
+ public Class getSupportedClass() {
+ return TaskoSchedule.class;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void serialize(Object value, Writer output,
+ XmlRpcSerializer builtInSerializer)
+ throws XmlRpcException, IOException {
+
+ TaskoSchedule schedule = (TaskoSchedule) value;
+ SerializerHelper helper = new SerializerHelper(builtInSerializer);
+
+ helper.add("id", schedule.getId());
+ helper.add("job_label", schedule.getJobLabel());
+ helper.add("bunch", schedule.getBunch().getName());
+ helper.add("active_from", schedule.getActiveFrom());
+ helper.add("active_till", schedule.getActiveTill());
+ helper.add("cron_expr", schedule.getCronExpr());
+ helper.add("data_map", schedule.getDataMap());
+
+ helper.writeTo(output);
+ }
+}
commit 380b6df94a4f019d0db2305b6e63a09aec80b9c5
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Thu Jun 17 10:38:02 2010 +0200
replace InvalidJobLabelException by InvalidParamException
diff --git a/java/code/src/com/redhat/rhn/taskomatic/InvalidJobLabelException.java b/java/code/src/com/redhat/rhn/taskomatic/InvalidJobLabelException.java
deleted file mode 100644
index b6dd32e..0000000
--- a/java/code/src/com/redhat/rhn/taskomatic/InvalidJobLabelException.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Copyright (c) 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;
-
-
-public class InvalidJobLabelException extends Exception {
-
- public InvalidJobLabelException(String message) {
- super(message);
- }
-
- /**
- * Comment for <code>serialVersionUID</code>
- */
- private static final long serialVersionUID = -7535142850830686483L;
-
-}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
index e9d7ba0..809223b 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
@@ -49,8 +49,7 @@ public class TaskoXmlRpcHandler {
public Date scheduleBunch(Integer orgId, String bunchName, String jobLabel,
Date startTime, Date endTime, String cronExpression, Map params)
- throws InvalidJobLabelException, NoSuchBunchTaskException,
- InvalidParamException {
+ throws NoSuchBunchTaskException, InvalidParamException {
try {
TaskoBunch bunch = doBasicCheck(orgId, bunchName, jobLabel);
// create schedule
@@ -75,8 +74,7 @@ public class TaskoXmlRpcHandler {
public Date scheduleBunch(Integer orgId, String bunchName, String jobLabel,
String cronExpression, Map params)
- throws InvalidJobLabelException, NoSuchBunchTaskException,
- InvalidParamException {
+ throws NoSuchBunchTaskException, InvalidParamException {
return scheduleBunch(orgId, bunchName, jobLabel, new Date(), null,
cronExpression, params);
}
@@ -84,10 +82,10 @@ public class TaskoXmlRpcHandler {
private TaskoBunch doBasicCheck(Integer orgId, String bunchName,
String jobLabel)
throws NoSuchBunchTaskException, SchedulerException,
- InvalidJobLabelException {
+ InvalidParamException {
TaskoBunch bunch = checkBunchName(bunchName);
if (!checkUniqueName(jobLabel, orgId.toString())) {
- throw new InvalidJobLabelException("jobLabel already in use");
+ throw new InvalidParamException("jobLabel already in use");
}
return bunch;
}
@@ -115,7 +113,7 @@ public class TaskoXmlRpcHandler {
public Date scheduleSingleBunchRun(Integer orgId, String bunchName, String jobLabel,
Map params, Date start)
- throws InvalidJobLabelException, NoSuchBunchTaskException,
+ throws NoSuchBunchTaskException,
InvalidParamException {
try {
TaskoBunch bunch = doBasicCheck(orgId, bunchName, jobLabel);
@@ -141,8 +139,7 @@ public class TaskoXmlRpcHandler {
public Date scheduleSingleBunchRun(Integer orgId, String bunchName, String jobLabel,
Map params)
- throws InvalidJobLabelException, NoSuchBunchTaskException,
- InvalidParamException {
+ throws NoSuchBunchTaskException, InvalidParamException {
return scheduleSingleBunchRun(orgId, bunchName, jobLabel, params, new Date());
}
commit c687677523d8724b947ee9f626f6cd33f5b5d5d8
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Thu Jun 17 10:34:43 2010 +0200
store also cron expression to DB
diff --git a/java/code/src/com/redhat/rhn/taskomatic/InvalidParamException.java b/java/code/src/com/redhat/rhn/taskomatic/InvalidParamException.java
new file mode 100644
index 0000000..8e34c6d
--- /dev/null
+++ b/java/code/src/com/redhat/rhn/taskomatic/InvalidParamException.java
@@ -0,0 +1,28 @@
+/**
+ * Copyright (c) 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;
+
+
+public class InvalidParamException extends Exception {
+
+ /**
+ * Comment for <code>serialVersionUID</code>
+ */
+ private static final long serialVersionUID = -3100819288563720249L;
+
+ public InvalidParamException(String message) {
+ super(message);
+ }
+}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
index 1758287..86e0aec 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoFactory.java
@@ -172,7 +172,8 @@ public class TaskoFactory extends HibernateFactory {
"TaskoSchedule.lookupById", params);
}
- public static TaskoSchedule listSchedulesByOrgAndBunch(Integer orgId, TaskoBunch bunch) {
+ public static TaskoSchedule listSchedulesByOrgAndBunch(Integer orgId,
+ TaskoBunch bunch) {
Map params = new HashMap();
params.put("org_id", orgId);
params.put("bunch_id", bunch.getId());
@@ -192,7 +193,8 @@ public class TaskoFactory extends HibernateFactory {
Class taskClass;
try {
taskClass = Class.forName(task.getTaskClass());
- Method isParallelizableMethod = taskClass.getMethod("isParallelizable", null);
+ Method isParallelizableMethod = taskClass.getMethod("isParallelizable",
+ (Class[]) null);
return (Boolean) isParallelizableMethod.invoke(null, null);
}
catch (ClassNotFoundException e) {
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.hbm.xml b/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.hbm.xml
index 7ff114f..7bf5111 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.hbm.xml
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.hbm.xml
@@ -22,6 +22,7 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<property name="active" type="string" column="active"/>
<property name="activeFrom" type="date" column="active_from"/>
<property name="activeTill" type="date" column="active_till"/>
+ <property name="cronExpr" type="string" column="cron_expr"/>
<property name="data" type="blob" column="data"/>
<property name="created" column="created" type="timestamp"
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.java
index 4b82d34..c88d0bf 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoSchedule.java
@@ -19,7 +19,6 @@ import org.hibernate.Hibernate;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
-import org.quartz.Trigger;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -47,28 +46,37 @@ public class TaskoSchedule implements Job {
private String active;
private Date activeFrom;
private Date activeTill;
+ private String cronExpr;
private byte[] data;
private List<TaskoRun> runs = new ArrayList<TaskoRun>();
private Date created;
private Date modified;
+ static {
+ for (TaskoTask task : TaskoFactory.listTasks()) {
+ tasks.put(task.getName(), 0);
+ }
+ }
+
public TaskoSchedule() {
}
- public TaskoSchedule(Integer orgIdIn, TaskoBunch bunchIn,
- String jobLabelIn, Map dataIn, Trigger trigger) {
+ public TaskoSchedule(Integer orgIdIn, TaskoBunch bunchIn, String jobLabelIn,
+ Map dataIn, Date activeFromIn, Date activeTillIn, String cronExprIn) {
setOrgId(orgIdIn);
setBunch(bunchIn);
setJobLabel(jobLabelIn);
data = serializeMap(dataIn);
setActive(TASKO_SCHEDULE_ACTIVE);
- setActiveFrom(trigger.getStartTime());
- setActiveTill(trigger.getEndTime());
- }
-
- static {
- for (TaskoTask task : TaskoFactory.listTasks()) {
- tasks.put(task.getName(), 0);
+ setCronExpr(cronExprIn);
+ if (activeFromIn == null) {
+ setActiveFrom(new Date());
+ }
+ else {
+ setActiveFrom(activeFromIn);
+ }
+ if (activeTillIn != null) {
+ setActiveTill(activeTillIn);
}
}
@@ -362,4 +370,18 @@ public class TaskoSchedule implements Job {
public void setActive(String activeIn) {
active = activeIn;
}
+
+ /**
+ * @return Returns the cronExpr.
+ */
+ public String getCronExpr() {
+ return cronExpr;
+ }
+
+ /**
+ * @param cronExprIn The cronExpr to set.
+ */
+ public void setCronExpr(String cronExprIn) {
+ cronExpr = cronExprIn;
+ }
}
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
index 34a641f..e9d7ba0 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskoXmlRpcHandler.java
@@ -49,25 +49,15 @@ public class TaskoXmlRpcHandler {
public Date scheduleBunch(Integer orgId, String bunchName, String jobLabel,
Date startTime, Date endTime, String cronExpression, Map params)
- throws InvalidJobLabelException, NoSuchBunchTaskException, ParseException {
+ throws InvalidJobLabelException, NoSuchBunchTaskException,
+ InvalidParamException {
try {
TaskoBunch bunch = doBasicCheck(orgId, bunchName, jobLabel);
- // create trigger
- CronTrigger ct = new CronTrigger(jobLabel, orgId.toString(),
- cronExpression);
- if (startTime == null) {
- ct.setStartTime(startTime);
- }
- else {
- ct.setStartTime(new Date());
- }
- if (endTime != null) {
- ct.setEndTime(endTime);
- }
// create schedule
TaskoSchedule schedule = null;
try {
- schedule = new TaskoSchedule(orgId, bunch, jobLabel, params, ct);
+ schedule = new TaskoSchedule(orgId, bunch, jobLabel, params,
+ startTime, endTime, cronExpression);
TaskoFactory.save(schedule);
TaskoFactory.commitTransaction();
}
@@ -76,7 +66,7 @@ public class TaskoXmlRpcHandler {
return null;
}
// create job
- return createJob(schedule, ct);
+ return createJob(schedule);
}
catch (SchedulerException e) {
return null;
@@ -85,9 +75,10 @@ public class TaskoXmlRpcHandler {
public Date scheduleBunch(Integer orgId, String bunchName, String jobLabel,
String cronExpression, Map params)
- throws ParseException, InvalidJobLabelException, NoSuchBunchTaskException {
- return scheduleBunch(orgId, bunchName, jobLabel, new Date(), null, cronExpression,
- params);
+ throws InvalidJobLabelException, NoSuchBunchTaskException,
+ InvalidParamException {
+ return scheduleBunch(orgId, bunchName, jobLabel, new Date(), null,
+ cronExpression, params);
}
private TaskoBunch doBasicCheck(Integer orgId, String bunchName,
@@ -124,15 +115,15 @@ public class TaskoXmlRpcHandler {
public Date scheduleSingleBunchRun(Integer orgId, String bunchName, String jobLabel,
Map params, Date start)
- throws InvalidJobLabelException, NoSuchBunchTaskException {
+ throws InvalidJobLabelException, NoSuchBunchTaskException,
+ InvalidParamException {
try {
TaskoBunch bunch = doBasicCheck(orgId, bunchName, jobLabel);
- SimpleTrigger st = new SimpleTrigger(jobLabel, orgId.toString(), 1, 1);
- st.setEndTime(new Date());
// create schedule
TaskoSchedule schedule = null;
try {
- schedule = new TaskoSchedule(orgId, bunch, jobLabel, params, st);
+ schedule = new TaskoSchedule(orgId, bunch, jobLabel, params,
+ start, null, "");
TaskoFactory.save(schedule);
TaskoFactory.commitTransaction();
}
@@ -141,7 +132,7 @@ public class TaskoXmlRpcHandler {
return null;
}
// create job
- return createJob(schedule, st);
+ return createJob(schedule);
}
catch (SchedulerException e) {
return null;
@@ -150,14 +141,34 @@ public class TaskoXmlRpcHandler {
public Date scheduleSingleBunchRun(Integer orgId, String bunchName, String jobLabel,
Map params)
- throws InvalidJobLabelException, NoSuchBunchTaskException {
+ throws InvalidJobLabelException, NoSuchBunchTaskException,
+ InvalidParamException {
return scheduleSingleBunchRun(orgId, bunchName, jobLabel, params, new Date());
}
- private Date createJob(TaskoSchedule schedule, Trigger trigger) {
+ private Date createJob(TaskoSchedule schedule) throws InvalidParamException {
+ // create trigger
+ Trigger trigger = null;
+ if (schedule.getCronExpr().isEmpty()) {
+ trigger = new SimpleTrigger(schedule.getJobLabel(),
+ schedule.getOrgId().toString(), 1, 1);
+ trigger.setEndTime(new Date());
+ }
+ else {
+ try {
+ trigger = new CronTrigger(schedule.getJobLabel(),
+ schedule.getOrgId().toString(), schedule.getCronExpr());
+ trigger.setStartTime(schedule.getActiveFrom());
+ trigger.setEndTime(schedule.getActiveTill());
+ }
+ catch (ParseException e) {
+ throw new InvalidParamException("Invalid cron expression");
+ }
+
+ }
// create job
- JobDetail jobDetail = new JobDetail(schedule.getJobLabel(), schedule.getOrgId().toString(),
- TaskoSchedule.class);
+ JobDetail jobDetail = new JobDetail(schedule.getJobLabel(),
+ schedule.getOrgId().toString(), TaskoSchedule.class);
// set job params
jobDetail.getJobDataMap().putAll(schedule.getDataMap());
jobDetail.getJobDataMap().put("schedule_id", schedule.getId());
diff --git a/schema/spacewalk/common/tables/rhnTaskoSchedule.sql b/schema/spacewalk/common/tables/rhnTaskoSchedule.sql
index fe69ab3..1152dcf 100644
--- a/schema/spacewalk/common/tables/rhnTaskoSchedule.sql
+++ b/schema/spacewalk/common/tables/rhnTaskoSchedule.sql
@@ -26,6 +26,7 @@ CREATE TABLE rhnTaskoSchedule
active VARCHAR2(1),
active_from DATE,
active_till DATE,
+ cron_expr VARCHAR2(20),
data BLOB,
created DATE
DEFAULT (sysdate) NOT NULL,
13 years, 10 months
Branch 'fve' - 15 commits - backend/server java/spacewalk-java.spec rel-eng/build-missing-builds-in-koji.sh rel-eng/packages rel-eng/tito.props schema/spacewalk spacewalk/admin spacewalk/setup
by Partha Aji
backend/server/rhnSQL/__init__.py | 18 +++
java/spacewalk-java.spec | 5
rel-eng/build-missing-builds-in-koji.sh | 4
rel-eng/packages/spacewalk-admin | 2
rel-eng/packages/spacewalk-java | 2
rel-eng/tito.props | 6 -
schema/spacewalk/Makefile | 1
schema/spacewalk/oracle/packages/rhn_entitlements.pkb | 2
schema/spacewalk/postgres/packages/rhn_entitlements.pkb | 82 ++++++++--------
spacewalk/admin/rhn-populate-database.pl | 2
spacewalk/admin/spacewalk-admin.spec | 6 -
spacewalk/setup/bin/spacewalk-setup | 27 +++--
spacewalk/setup/lib/Spacewalk/Setup.pm | 54 ++++++----
13 files changed, 135 insertions(+), 76 deletions(-)
New commits:
commit 4c1e900fae353aafe00d955b401ace65fe72bd29
Merge: 3be2fd8... 3912327...
Author: Partha Aji <paji(a)redhat.com>
Date: Thu Jun 24 12:50:34 2010 -0400
Merge branch 'master' into fve
diff --cc schema/spacewalk/oracle/packages/rhn_entitlements.pkb
index 80d963b,f29cebe..b26fdf9
--- a/schema/spacewalk/oracle/packages/rhn_entitlements.pkb
+++ b/schema/spacewalk/oracle/packages/rhn_entitlements.pkb
@@@ -933,39 -925,39 +933,39 @@@ i
-- limit.
-- Called by: set_group_count, prune_everything, repoll_virt_guest_entitlements
-- *******************************************************************
- procedure prune_group (
- group_id_in in number,
- type_in in char,
- quantity_in in number,
+ procedure prune_group (
+ group_id_in in number,
+ type_in in char,
+ quantity_in in number,
update_family_countsYN in number := 1
- ) is
- cursor usergroups is
- select user_id, user_group_id, ugt.label
- from rhnUserGroupType ugt,
- rhnUserGroup ug,
- rhnUserGroupMembers ugm
- where 1=1
- and ugm.user_group_id = group_id_in
- and ugm.user_id in (
- select user_id
- from (
- select rownum row_number,
- user_id,
- time
- from (
- select user_id,
- modified time
- from rhnUserGroupMembers
- where user_group_id = group_id_in
- order by time asc
- )
- )
- where row_number > quantity_in
- )
- and ugm.user_group_id = ug.id
- and ug.group_type = ugt.id;
+ ) is
+ cursor usergroups is
+ select user_id, user_group_id, ugt.label
+ from rhnUserGroupType ugt,
+ rhnUserGroup ug,
+ rhnUserGroupMembers ugm
+ where 1=1
+ and ugm.user_group_id = group_id_in
+ and ugm.user_id in (
+ select user_id
+ from (
+ select rownum row_number,
+ user_id,
+ time
+ from (
+ select user_id,
+ modified time
+ from rhnUserGroupMembers
+ where user_group_id = group_id_in
+ order by time asc
+ )
+ )
+ where row_number > quantity_in
+ )
+ and ugm.user_group_id = ug.id
+ and ug.group_type = ugt.id;
cursor servergroups is
- select server_id, server_group_id, sgt.id group_type_id, sgt.label
+ select server_id, server_group_id, sgt.id as group_type_id, sgt.label
from rhnServerGroupType sgt,
rhnServerGroup sg,
rhnServerGroupMembers sgm
commit 3912327aa8e624537c346e9e05b2b417e6f2e075
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Thu Jun 24 17:17:26 2010 +0200
Automatic commit of package [spacewalk-admin] release [1.1.3-1].
diff --git a/rel-eng/packages/spacewalk-admin b/rel-eng/packages/spacewalk-admin
index ae2ca3c..887fb00 100644
--- a/rel-eng/packages/spacewalk-admin
+++ b/rel-eng/packages/spacewalk-admin
@@ -1 +1 @@
-1.1.2-1 spacewalk/admin/
+1.1.3-1 spacewalk/admin/
diff --git a/spacewalk/admin/spacewalk-admin.spec b/spacewalk/admin/spacewalk-admin.spec
index 8f276e5..0ee158b 100644
--- a/spacewalk/admin/spacewalk-admin.spec
+++ b/spacewalk/admin/spacewalk-admin.spec
@@ -2,7 +2,7 @@
Summary: Various utility scripts and data files for RHN Satellite installations
Name: spacewalk-admin
URL: https://fedorahosted.org/spacewalk
-Version: 1.1.2
+Version: 1.1.3
Release: 1%{?dist}
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
License: GPLv2
@@ -60,6 +60,10 @@ rm -rf $RPM_BUILD_ROOT
%{_mandir}/man3/validate-sat-cert.3.gz
%changelog
+* Thu Jun 24 2010 Jan Pazdziora 1.1.3-1
+- To allow database population to create at least some database schema, do not
+ stop on error for now.
+
* Mon Jun 21 2010 Jan Pazdziora 1.1.2-1
- For PostgreSQL, add support for connects to nondefault port; also, avoid
using shell.
commit 2ff5e3eca1ea77b2eee887c65ba35534cafe2924
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Thu Jun 24 14:36:10 2010 +0200
Fix cursors in PostgreSQL version of prune_group.
diff --git a/schema/spacewalk/postgres/packages/rhn_entitlements.pkb b/schema/spacewalk/postgres/packages/rhn_entitlements.pkb
index e246223..225561b 100644
--- a/schema/spacewalk/postgres/packages/rhn_entitlements.pkb
+++ b/schema/spacewalk/postgres/packages/rhn_entitlements.pkb
@@ -946,40 +946,8 @@ language plpgsql;
) returns void
as $$
declare
- usergroups cursor for
- select user_id, user_group_id, ugt.label
- from rhnUserGroupType ugt,
- rhnUserGroup ug,
- rhnUserGroupMembers ugm
- where 1=1
- and ugm.user_group_id = group_id_in
- and ugm.user_id in (
- select user_id
- from rhnUserGroupMembers
- where user_group_id = group_id_in
- order by modified asc
- offset quantity_in
- )
- and ugm.user_group_id = ug.id
- and ug.group_type = ugt.id;
- servergroups cursor for
- select server_id, server_group_id, sgt.id as group_type_id, sgt.label
- from rhnServerGroupType sgt,
- rhnServerGroup sg,
- rhnServerGroupMembers sgm
- where 1=1
- and sgm.server_group_id = group_id_in
- and sgm.server_id in (
- select sep.server_id
- from
- rhnServerEntitlementPhysical sep
- where
- sep.server_group_id = group_id_in
- order by sep.modified asc
- offset quantity_in
- )
- and sgm.server_group_id = sg.id
- and sg.group_type = sgt.id;
+ ugrecord record;
+ sgrecord record;
type_is_base char;
begin
if type_in = 'U' then
@@ -987,26 +955,60 @@ as $$
set max_members = quantity_in
where id = group_id_in;
- for ug in usergroups loop
- perform rhn_user.remove_from_usergroup(ug.user_id, ug.user_group_id);
+ for ugrecord in (
+ select user_id, user_group_id, ugt.label
+ from rhnUserGroupType ugt,
+ rhnUserGroup ug,
+ rhnUserGroupMembers ugm
+ where 1=1
+ and ugm.user_group_id = group_id_in
+ and ugm.user_id in (
+ select user_id
+ from rhnUserGroupMembers
+ where user_group_id = group_id_in
+ order by modified asc
+ offset quantity_in
+ )
+ and ugm.user_group_id = ug.id
+ and ug.group_type = ugt.id
+ ) loop
+ perform rhn_user.remove_from_usergroup(ugrecord.user_id, ugrecord.user_group_id);
end loop;
elsif type_in = 'S' then
update rhnServerGroup
set max_members = quantity_in
where id = group_id_in;
- for sg in servergroups loop
- perform rhn_entitlements.remove_server_entitlement(sg.server_id, sg.label);
+ for sgrecord in (
+ select server_id, server_group_id, sgt.id as group_type_id, sgt.label
+ from rhnServerGroupType sgt,
+ rhnServerGroup sg,
+ rhnServerGroupMembers sgm
+ where 1=1
+ and sgm.server_group_id = group_id_in
+ and sgm.server_id in (
+ select sep.server_id
+ from
+ rhnServerEntitlementPhysical sep
+ where
+ sep.server_group_id = group_id_in
+ order by sep.modified asc
+ offset quantity_in
+ )
+ and sgm.server_group_id = sg.id
+ and sg.group_type = sgt.id
+ ) loop
+ perform rhn_entitlements.remove_server_entitlement(sgrecord.server_id, sgrecord.label);
select is_base
into type_is_base
from rhnServerGroupType sgt
- where sgt.id = sg.group_type_id;
+ where sgt.id = sgrecord.group_type_id;
-- if we're removing a base ent, then be sure to
-- remove the server's channel subscriptions.
if ( type_is_base = 'Y' ) then
- perform rhn_channel.clear_subscriptions(sg.server_id);
+ perform rhn_channel.clear_subscriptions(sgrecord.server_id);
end if;
end loop;
commit 0fce1f3a4145c143eb2448983a53cd60dd574d78
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Thu Jun 24 14:23:39 2010 +0200
Use AS with column alias.
diff --git a/schema/spacewalk/oracle/packages/rhn_entitlements.pkb b/schema/spacewalk/oracle/packages/rhn_entitlements.pkb
index 7ecb95b..f29cebe 100644
--- a/schema/spacewalk/oracle/packages/rhn_entitlements.pkb
+++ b/schema/spacewalk/oracle/packages/rhn_entitlements.pkb
@@ -957,7 +957,7 @@ is
and ugm.user_group_id = ug.id
and ug.group_type = ugt.id;
cursor servergroups is
- select server_id, server_group_id, sgt.id group_type_id, sgt.label
+ select server_id, server_group_id, sgt.id as group_type_id, sgt.label
from rhnServerGroupType sgt,
rhnServerGroup sg,
rhnServerGroupMembers sgm
diff --git a/schema/spacewalk/postgres/packages/rhn_entitlements.pkb b/schema/spacewalk/postgres/packages/rhn_entitlements.pkb
index f8f9d29..e246223 100644
--- a/schema/spacewalk/postgres/packages/rhn_entitlements.pkb
+++ b/schema/spacewalk/postgres/packages/rhn_entitlements.pkb
@@ -963,7 +963,7 @@ as $$
and ugm.user_group_id = ug.id
and ug.group_type = ugt.id;
servergroups cursor for
- select server_id, server_group_id, sgt.id group_type_id, sgt.label
+ select server_id, server_group_id, sgt.id as group_type_id, sgt.label
from rhnServerGroupType sgt,
rhnServerGroup sg,
rhnServerGroupMembers sgm
commit 39a78e2b6192e384996310c06c22e2a481a3b663
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Thu Jun 24 13:04:44 2010 +0200
Parse the default_db; the DNS part (the one after @) is DBI-style connect string.
diff --git a/backend/server/rhnSQL/__init__.py b/backend/server/rhnSQL/__init__.py
index de6303a..e7c7df2 100644
--- a/backend/server/rhnSQL/__init__.py
+++ b/backend/server/rhnSQL/__init__.py
@@ -92,6 +92,24 @@ def initDB(dsn=None, backend=ORACLE, host="localhost", port=None, username=None,
(username, temp) = dsn.split("/")
(password, database) = temp.split("@")
+ if backend == POSTGRESQL:
+ host = None
+ port = None
+ dsn = CFG.DEFAULT_DB
+ print "dsn [%s]" % dsn
+ (username, temp) = dsn.split("/")
+ (password, dsn) = temp.split("@")
+ for i in dsn.split(';'):
+ (k, v) = i.split('=')
+ if k == 'dbname':
+ database = v
+ elif k == 'host':
+ host = v
+ elif k == 'port':
+ port = v
+ else:
+ raise rhnException("Unknown piece in default_db string", i)
+
# Hide the password
add_to_seclist(dsn)
try:
commit df17a3ab507cc17d8c336c373b389b67437f5866
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Thu Jun 24 12:06:47 2010 +0200
The default_db has username and password in Oracle case, let's make it the same for PostgreSQL.
For now.
diff --git a/spacewalk/setup/bin/spacewalk-setup b/spacewalk/setup/bin/spacewalk-setup
index ab7752a..4fe82a5 100755
--- a/spacewalk/setup/bin/spacewalk-setup
+++ b/spacewalk/setup/bin/spacewalk-setup
@@ -956,7 +956,7 @@ sub populate_initial_configs {
$hibernate_dialect = "org.hibernate.dialect.PostgreSQLDialect";
$hibernate_driver = "org.postgresql.Driver";
$hibernate_url = "jdbc:postgresql://";
- $default_db = "dbname=$answers->{'db-name'}";
+ $default_db = "$answers->{'db-user'}/$answers->{'db-password'}\@dbname=$answers->{'db-name'}";
if (defined $answers->{"db-host"} and $answers->{"db-host"} ne '') {
$hibernate_url .= $answers->{"db-host"};
$default_db .= ";host=$answers->{'db-host'}";
commit c14d55fb1e6f0c2d66e257744128be3647378af2
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Wed Jun 23 16:11:57 2010 +0200
start building for Fedora 13
diff --git a/rel-eng/tito.props b/rel-eng/tito.props
index bf14015..9236bdd 100644
--- a/rel-eng/tito.props
+++ b/rel-eng/tito.props
@@ -3,7 +3,7 @@ default_builder = spacewalk.releng.builder.Builder
default_tagger = spacewalk.releng.tagger.VersionTagger
[koji]
-autobuild_tags = dist-f11-sw-1.1-candidate dist-5E-sw-1.1-candidate dist-f12-sw-1.1-candidate
+autobuild_tags = dist-f11-sw-1.1-candidate dist-5E-sw-1.1-candidate dist-f12-sw-1.1-candidate dist-f13-sw-1.1-candidate
[dist-f11-sw-1.1-candidate]
disttag = .fc11
@@ -15,3 +15,7 @@ disttag = .el5
[dist-f12-sw-1.1-candidate]
disttag = .fc12
blacklist=jabberd-selinux
+
+[dist-f13-sw-1.1-candidate]
+disttag = .fc13
+blacklist=jabberd-selinux
commit b9d38ff4da55f3bcb370b40e2c1434da438a33cc
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Wed Jun 23 15:47:44 2010 +0200
start building for Fedora 13
diff --git a/rel-eng/build-missing-builds-in-koji.sh b/rel-eng/build-missing-builds-in-koji.sh
index 88bb144..443020a 100755
--- a/rel-eng/build-missing-builds-in-koji.sh
+++ b/rel-eng/build-missing-builds-in-koji.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-TAGS=([0]="dist-5E-sw-1.1-candidate" [1]="dist-f11-sw-1.1-candidate" [2]="dist-f12-sw-1.1-candidate")
+TAGS=([0]="dist-5E-sw-1.1-candidate" [1]="dist-f11-sw-1.1-candidate" [2]="dist-f12-sw-1.1-candidate" [3]="dist-f13-sw-1.1-candidate")
pushd `pwd`
@@ -9,7 +9,7 @@ cd `dirname $0`/..
# say python to be nice to pipe
export PYTHONUNBUFFERED=1
-for tag in 0 1 2; do
+for tag in 0 1 2 3; do
rel-eng/koji-missing-builds.py --no-extra ${TAGS[$tag]} | \
awk '!(/buildsys-macros/ || /oracle-server-admin/ || /oracle-server-scripts/ || /heirloom-pkgtools/) {
if (x==1) { print gensub(" *([a-zA-Z_-]+)-.*", "\\1", "g")}
commit 98e0c0cb1247b0c39771c33626d157905f331b33
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Wed Jun 23 14:53:15 2010 +0200
Automatic commit of package [spacewalk-java] release [1.1.15-1].
diff --git a/java/spacewalk-java.spec b/java/spacewalk-java.spec
index beaa193..ecbbf3a 100644
--- a/java/spacewalk-java.spec
+++ b/java/spacewalk-java.spec
@@ -19,7 +19,7 @@ Name: spacewalk-java
Summary: Spacewalk Java site packages
Group: Applications/Internet
License: GPLv2
-Version: 1.1.14
+Version: 1.1.15
Release: 1%{?dist}
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
@@ -321,6 +321,9 @@ fi
%{jardir}/postgresql-jdbc.jar
%changelog
+* Wed Jun 23 2010 Jan Pazdziora 1.1.15-1
+- Fixed a couple of checkstyle errors (paji(a)redhat.com)
+
* Mon Jun 21 2010 Jan Pazdziora 1.1.14-1
- updating rhnPackageRepodata table to not use a reserved word.
(jsherril(a)redhat.com)
diff --git a/rel-eng/packages/spacewalk-java b/rel-eng/packages/spacewalk-java
index 4588215..ab8d625 100644
--- a/rel-eng/packages/spacewalk-java
+++ b/rel-eng/packages/spacewalk-java
@@ -1 +1 @@
-1.1.14-1 java/
+1.1.15-1 java/
commit 593420c807048f59b00330880164cc70388dd7b1
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Wed Jun 23 14:07:18 2010 +0200
Some values (db-sid) can be undef, do not pass them to rhn-config-satellite.pl.
diff --git a/spacewalk/setup/bin/spacewalk-setup b/spacewalk/setup/bin/spacewalk-setup
index b923ddb..ab7752a 100755
--- a/spacewalk/setup/bin/spacewalk-setup
+++ b/spacewalk/setup/bin/spacewalk-setup
@@ -1116,7 +1116,7 @@ sub write_config {
my $options = shift;
my $target = shift || Spacewalk::Setup::DEFAULT_RHN_CONF_LOCATION;
- my @opt_strings = map { "--option=${_}=" . $options->{$_} } keys %{$options};
+ my @opt_strings = map { "--option=${_}=" . $options->{$_} } grep { defined $options->{$_} } keys %{$options};
Spacewalk::Setup::system_or_exit([ "/usr/bin/rhn-config-satellite.pl",
"--target=$target",
commit ef76f21dae3aab9b1dd1841b25636c924765e90d
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Wed Jun 23 14:06:44 2010 +0200
Some values (db-sid) can be undef, leading to warnings, there does not need to be a host a port, and the default_db is different for PostgreSQL.
diff --git a/spacewalk/setup/bin/spacewalk-setup b/spacewalk/setup/bin/spacewalk-setup
index d851cfa..b923ddb 100755
--- a/spacewalk/setup/bin/spacewalk-setup
+++ b/spacewalk/setup/bin/spacewalk-setup
@@ -946,13 +946,26 @@ sub populate_initial_configs {
}
# Define some db specific settings:
- my $hibernate_dialect = "org.hibernate.dialect.Oracle9iDialect";
- my $hibernate_driver = "oracle.jdbc.driver.OracleDriver";
- my $hibernate_url = "jdbc:oracle:thin:@" . $answers->{"db-host"} . ":" . $answers->{"db-port"} . ":" . $answers->{"db-sid"};
- if ($answers->{'db-backend'} eq 'postgresql') {
+ my ($hibernate_dialect, $hibernate_driver, $hibernate_url, $default_db);
+ if ($answers->{'db-backend'} eq 'oracle') {
+ $hibernate_dialect = "org.hibernate.dialect.Oracle9iDialect";
+ $hibernate_driver = "oracle.jdbc.driver.OracleDriver";
+ $hibernate_url = "jdbc:oracle:thin:@" . $answers->{"db-host"} . ":" . $answers->{"db-port"} . ":" . $answers->{"db-sid"};
+ $default_db = sprintf('%s/%s@%s', @{$answers}{qw/db-user db-password db-sid/}),
+ } elsif ($answers->{'db-backend'} eq 'postgresql') {
$hibernate_dialect = "org.hibernate.dialect.PostgreSQLDialect";
$hibernate_driver = "org.postgresql.Driver";
- $hibernate_url = "jdbc:postgresql://" . $answers->{"db-host"} . ":" . $answers->{"db-port"} . "/" . $answers->{"db-sid"};
+ $hibernate_url = "jdbc:postgresql://";
+ $default_db = "dbname=$answers->{'db-name'}";
+ if (defined $answers->{"db-host"} and $answers->{"db-host"} ne '') {
+ $hibernate_url .= $answers->{"db-host"};
+ $default_db .= ";host=$answers->{'db-host'}";
+ if (defined $answers->{"db-port"} and $answers->{"db-port"} ne '') {
+ $hibernate_url .= ':' . $answers->{"db-port"};
+ $default_db .= ";port=$answers->{'db-port'}";
+ }
+ }
+ $hibernate_url .= "/" . $answers->{"db-name"};
}
my %config_opts =
@@ -967,7 +980,7 @@ sub populate_initial_configs {
webDOTenable_solaris_support => 0,
osadispatcherDOTosa_ssl_cert => '/var/www/html/pub/RHN-ORG-TRUSTED-SSL-CERT',
encrypted_passwords => 1,
- default_db => sprintf('%s/%s@%s', @{$answers}{qw/db-user db-password db-sid/}),
+ default_db => $default_db,
db_backend => $answers->{'db-backend'},
db_user => $answers->{'db-user'},
db_password => $answers->{'db-password'},
commit 1e9a2e4ac4ab2a3e44bb53dad94170a05bbf3ddb
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Wed Jun 23 14:03:07 2010 +0200
Let's do a slightly better formatting of our terminal output.
diff --git a/spacewalk/setup/lib/Spacewalk/Setup.pm b/spacewalk/setup/lib/Spacewalk/Setup.pm
index 0cd5856..0a49712 100644
--- a/spacewalk/setup/lib/Spacewalk/Setup.pm
+++ b/spacewalk/setup/lib/Spacewalk/Setup.pm
@@ -809,7 +809,7 @@ sub postgresql_populate_db {
print Spacewalk::Setup::loc("** Database: Re-populating database.\n");
}
else {
- print Spacewalk::Setup::loc("**Database: The database already has schema. Skipping database population.");
+ print Spacewalk::Setup::loc("** Database: The database already has schema. Skipping database population.\n");
return 1;
}
}
@@ -1288,7 +1288,7 @@ sub oracle_populate_db {
print loc("** Database: Re-populating database.\n");
}
else {
- print loc("**Database: The database already has schema. Skipping database population.");
+ print loc("** Database: The database already has schema. Skipping database population.\n");
return 1;
}
commit e2487b374fa5156f5e03736ebf4a5c496f505b0a
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Wed Jun 23 13:55:57 2010 +0200
To allow database population to create at least some database schema, do not stop on error for now.
diff --git a/spacewalk/admin/rhn-populate-database.pl b/spacewalk/admin/rhn-populate-database.pl
index 7e98d11..1841ab4 100755
--- a/spacewalk/admin/rhn-populate-database.pl
+++ b/spacewalk/admin/rhn-populate-database.pl
@@ -113,7 +113,7 @@ my @command;
if ($postgresql) {
print "*** Installing PostgreSQL schema from [$schema_deploy_file].\n";
chdir("/usr/share/spacewalk/schema/postgresql/");
- @command = ( 'psql', '-U', $user, '-d', $database, '-v', 'ON_ERROR_STOP=', '-f', $schema_deploy_file );
+ @command = ( 'psql', '-U', $user, '-d', $database, '-v', 'ON_ERROR_ROLLBACK=ON', '-f', $schema_deploy_file );
if (defined $host) {
push @command, '-h', $host;
if (defined $port) {
commit d44bef006b38b42031d5865ce9098467b2402c6e
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Tue Jun 22 16:28:30 2010 +0200
TOP declaration seems to be needed, for Makefile to be useful at all.
diff --git a/schema/spacewalk/Makefile b/schema/spacewalk/Makefile
index f38bdd1..514b8bb 100644
--- a/schema/spacewalk/Makefile
+++ b/schema/spacewalk/Makefile
@@ -1,5 +1,6 @@
include ../../rel-eng/Makefile
+TOP := .
SPECFILE := $(firstword $(wildcard *.spec))
NAME := $(shell rpm -q --qf '%{name}\n' --specfile $(SPECFILE))
VERSION := $(shell rpm -q --qf '%{version}\n' --specfile $(SPECFILE))
commit 7138db043d2d370abd75b3db8043620cb6e2f44e
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Wed Jun 23 11:00:32 2010 +0200
Fix postgresql_clear_db to clear the content of the PostgreSQL database.
diff --git a/spacewalk/setup/lib/Spacewalk/Setup.pm b/spacewalk/setup/lib/Spacewalk/Setup.pm
index b0019ed..0cd5856 100644
--- a/spacewalk/setup/lib/Spacewalk/Setup.pm
+++ b/spacewalk/setup/lib/Spacewalk/Setup.pm
@@ -854,27 +854,41 @@ sub postgresql_test_db_schema {
}
# Clear the PostgreSQL schema by deleting the 'public' schema with cascade,
-# then re-creating it.
+# then re-creating it. Also delete all the other known schemas that
+# Spacewalk might have created.
+
+my $POSTGRESQL_CLEAR_SCHEMA = <<EOS;
+ drop schema rpm cascade ;
+ drop schema rhn_exception cascade ;
+ drop schema rhn_quota cascade ;
+ drop schema rhn_config cascade ;
+ drop schema rhn_server cascade ;
+ drop schema rhn_entitlements cascade ;
+ drop schema rhn_bel cascade ;
+ drop schema rhn_cache cascade ;
+ drop schema rhn_channel cascade ;
+ drop schema rhn_config_channel cascade ;
+ drop schema rhn_org cascade ;
+ drop schema rhn_package cascade ;
+ drop schema rhn_user cascade ;
+ drop schema public cascade ;
+ create schema public authorization postgres ;
+EOS
sub postgresql_clear_db {
- my $answers = shift;
-
+ my $answers = shift;
+
+ my $dbh = get_dbh($answers);
+ local $dbh->{RaiseError} = 0;
+ local $dbh->{PrintError} = 1;
+ local $dbh->{AutoCommit} = 1;
+ for my $c (split /\n/, $POSTGRESQL_CLEAR_SCHEMA) {
+ $dbh->do($c);
+ }
+ $dbh->disconnect;
+ return 1;
+}
- # Only way to clear a PostgreSQL db we've found so far is to wipe it out
- # completely:
- my $password = @{$answers}{'db-password'};
- my $user = @{$answers}{'db-user'};
- my $host = @{$answers}{'db-host'};
- my $port = @{$answers}{'db-port'};
- my $database = @{$answers}{'db-sid'};
- my $clear_db_cmd = "PGPASSWORD=$password dropdb -U $user -h $host -p $port $database";
- system($clear_db_cmd);
- $clear_db_cmd = "PGPASSWORD=$password createdb -U $user -h $host $database";
- system($clear_db_cmd);
- $clear_db_cmd = "PGPASSWORD=$password createlang -U $user -h $host plpgsql $database";
- system($clear_db_cmd);
- return 1;
-}
13 years, 10 months
Branch 'fve' - java/code
by Partha Aji
java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml | 14 ++--
java/code/webapp/WEB-INF/pages/admin/multiorg/orgsoftwaresubs.jsp | 31 ++++++++--
java/code/webapp/WEB-INF/pages/admin/multiorg/softwareentitlements.jsp | 6 -
java/code/webapp/WEB-INF/pages/admin/multiorg/softwareentitlementsubs.jsp | 6 -
4 files changed, 38 insertions(+), 19 deletions(-)
New commits:
commit 3be2fd83b9d88da8315f61fc7b2422194217a353
Author: Partha Aji <paji(a)redhat.com>
Date: Thu Jun 24 12:24:37 2010 -0400
Fixed some typos
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
index 559206f..b317046 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/jsp/StringResource_en_US.xml
@@ -4465,14 +4465,14 @@ button below, and <b>will be unable to log back in</b>.</source>
<context context-type="sourcefile">/rhn/admin/multiorg/SoftwareEntitlements</context>
</context-group>
</trans-unit>
- <trans-unit id="Used/Alloted">
-<source>Used/Alloted</source>
+ <trans-unit id="Used/Allotted">
+<source>Used/Allotted</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/admin/multiorg/SoftwareEntitlements</context>
</context-group>
</trans-unit>
<trans-unit id="None Allocated">
-<source>None Alloted</source>
+<source>None Allotted</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/admin/multiorg/SoftwareEntitlements</context>
</context-group>
@@ -4516,8 +4516,8 @@ button below, and <b>will be unable to log back in</b>.</source>
</context-group>
</trans-unit>
- <trans-unit id="Used/Alloted.tip">
-<source>'Alloted' refers to the total number of entitlements allocated to any organization from initial pool as reflected in this @@PRODUCT_NAME@@'s certificate. 'Used' refers to entitlements that have been consumed by systems in various organizations.</source>
+ <trans-unit id="Used/Allotted.tip">
+<source>'Allotted' refers to the total number of entitlements allocated to any organization from initial pool as reflected in this @@PRODUCT_NAME@@'s certificate. 'Used' refers to entitlements that have been consumed by systems in various organizations.</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/admin/multiorg/SoftwareEntitlementSubscriptions</context>
</context-group>
@@ -4732,8 +4732,8 @@ deducted from the default organization.</source>
</context-group>
</trans-unit>
- <trans-unit id="softwareEntitlementSubs.Used/Alloted">
-<source>'Alloted' refers to the total available entitlements to the organizations (excluding the default @@PRODUCT_NAME@@ organization) on this @@PRODUCT_NAME@@. It is not equal to the total available in the @@PRODUCT_NAME@@ certificate.</source>
+ <trans-unit id="softwareEntitlementSubs.Used/Allotted">
+<source>'Allotted' refers to the total available entitlements to the organizations (excluding the default @@PRODUCT_NAME@@ organization) on this @@PRODUCT_NAME@@. It is not equal to the total available in the @@PRODUCT_NAME@@ certificate.</source>
<context-group name="ctx">
<context context-type="sourcefile">/rhn/admin/multiorg/SoftwareEntitlementSubscriptions</context>
</context-group>
diff --git a/java/code/webapp/WEB-INF/pages/admin/multiorg/orgsoftwaresubs.jsp b/java/code/webapp/WEB-INF/pages/admin/multiorg/orgsoftwaresubs.jsp
index f2b3505..f0ac87f 100644
--- a/java/code/webapp/WEB-INF/pages/admin/multiorg/orgsoftwaresubs.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/multiorg/orgsoftwaresubs.jsp
@@ -57,9 +57,17 @@
<a href="/rhn/admin/multiorg/SoftwareEntitlementDetails.do?cfid=${current.id}" tabindex="-1"><c:out value="${current.name}" /></a>
</rl:column>
<rl:column styleclass="center"
- headertext="${rhn:localize('Regular Usage')} <br/>(${rhn:localize('Entitlement Usage Type')})">
- <c:out value="${current.currentMembers} / ${current.maxMembers}" />
- </rl:column>
+ headertext="${rhn:localize('Regular Usage')} <br/>(${rhn:localize('Used/Allotted')})*">
+ <c:choose>
+ <c:when test="${empty current.maxMembers or current.maxMembers == 0}">
+ <bean:message key="None Allocated"/>
+ </c:when>
+ <c:otherwise>
+ <c:out value="${current.currentMembers} / ${current.maxMembers}" />
+ </c:otherwise>
+ </c:choose>
+ </rl:column>
+
<rl:column
headerkey="Regular Proposed Total">
<c:choose>
@@ -83,8 +91,18 @@
</c:choose>
</rl:column>
<rl:column styleclass="center"
- headertext="${rhn:localize('Flex Usage')} <br/>(${rhn:localize('Entitlement Usage Type')})">
- <c:out value="${current.currentFlex} / ${current.maxFlex}" />
+ headertext="${rhn:localize('Flex Usage')} <br/>(${rhn:localize('Used/Allotted')})*">
+
+ <c:choose>
+ <c:when test="${empty current.maxFlex or current.maxFlex == 0}">
+ <bean:message key="None Allocated"/>
+ </c:when>
+ <c:otherwise>
+ <c:out value="${current.currentFlex} / ${current.maxFlex}" />
+ </c:otherwise>
+ </c:choose>
+
+
</rl:column>
<rl:column bound="false"
@@ -110,7 +128,8 @@
</c:otherwise>
</c:choose>
</rl:column>
- </rl:list>
+ </rl:list>
+<p><rhn:tooltip>*-<bean:message key = "Used/Allotted.tip"/></rhn:tooltip></p>
<c:if test="${param.oid != 1}">
<div align="right">
<hr/>
diff --git a/java/code/webapp/WEB-INF/pages/admin/multiorg/softwareentitlements.jsp b/java/code/webapp/WEB-INF/pages/admin/multiorg/softwareentitlements.jsp
index 3443ed8..e449ace 100644
--- a/java/code/webapp/WEB-INF/pages/admin/multiorg/softwareentitlements.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/multiorg/softwareentitlements.jsp
@@ -65,7 +65,7 @@
<c:if test="${orgCount > 1}">
<rl:column
- headertext="${rhn:localize('Regular Usage')} <br/> (${rhn:localize('Used/Alloted')})**">
+ headertext="${rhn:localize('Regular Usage')} <br/> (${rhn:localize('Used/Allotted')})**">
<c:choose>
<c:when test="${empty current.allocated or current.allocated == 0}">
<bean:message key="None Allocated"/>
@@ -92,7 +92,7 @@
<c:if test="${orgCount > 1}">
<rl:column bound="false"
- headertext="${rhn:localize('Flex Usage')} <br/> (${rhn:localize('Used/Alloted')})**"
+ headertext="${rhn:localize('Flex Usage')} <br/> (${rhn:localize('Used/Allotted')})**"
styleclass="${usagestyle}">
<c:choose>
@@ -110,6 +110,6 @@
</rl:listset>
<rhn:tooltip typeKey="Tip">*-<bean:message key = "Available/Total.tip"/></rhn:tooltip>
-<rhn:tooltip typeKey="Tip">**-<bean:message key = "Used/Alloted.tip"/></rhn:tooltip>
+<rhn:tooltip typeKey="Tip">**-<bean:message key = "Used/Allotted.tip"/></rhn:tooltip>
</body>
</html:html>
diff --git a/java/code/webapp/WEB-INF/pages/admin/multiorg/softwareentitlementsubs.jsp b/java/code/webapp/WEB-INF/pages/admin/multiorg/softwareentitlementsubs.jsp
index a19ce7d..9165ebf 100644
--- a/java/code/webapp/WEB-INF/pages/admin/multiorg/softwareentitlementsubs.jsp
+++ b/java/code/webapp/WEB-INF/pages/admin/multiorg/softwareentitlementsubs.jsp
@@ -50,7 +50,7 @@
</rl:column>
<c:if test="${not empty requestScope.regularAvailable}">
<rl:column
- headertext="${rhn:localize('Regular Usage')} <br/> (${rhn:localize('Used/Alloted')})*"
+ headertext="${rhn:localize('Regular Usage')} <br/> (${rhn:localize('Used/Allotted')})*"
>
<c:choose>
<c:when test="${empty current.maxMembers or current.maxMembers == 0}">
@@ -86,7 +86,7 @@
</c:if>
<c:if test="${not empty requestScope.flexAvailable}">
<rl:column
- headertext="${rhn:localize('Flex Usage')} <br/> (${rhn:localize('Used/Alloted')})*"
+ headertext="${rhn:localize('Flex Usage')} <br/> (${rhn:localize('Used/Allotted')})*"
>
<c:choose>
<c:when test="${empty current.maxFlex or current.maxFlex == 0}">
@@ -136,7 +136,7 @@
</rl:list>
</rl:listset>
</p>
-<rhn:tooltip key="softwareEntitlementSubs.Used/Alloted"/>
+<rhn:tooltip key="softwareEntitlementSubs.Used/Allotted"/>
<c:if test="${not empty requestScope.regularAvailable}">
<h2><bean:message key="softwareEntitlementSubs.systemWideCounts.header.regular"/></h2>
13 years, 10 months
Changes to 'refs/tags/spacewalk-admin-1.1.3-1'
by Jan Pazdziora
Tag 'spacewalk-admin-1.1.3-1' created by Jan Pazdziora <jpazdziora(a)redhat.com> at 2010-06-24 15:17 +0000
Tagging package [spacewalk-admin] version [1.1.3-1] in directory [spacewalk/admin/].
Changes since spacewalk-java-1.1.15-1:
Jan Pazdziora (5):
The default_db has username and password in Oracle case, let's make it the same for PostgreSQL.
Parse the default_db; the DNS part (the one after @) is DBI-style connect string.
Use AS with column alias.
Fix cursors in PostgreSQL version of prune_group.
Automatic commit of package [spacewalk-admin] release [1.1.3-1].
Miroslav Suchý (2):
start building for Fedora 13
start building for Fedora 13
---
backend/server/rhnSQL/__init__.py | 18 +++
rel-eng/build-missing-builds-in-koji.sh | 4
rel-eng/packages/spacewalk-admin | 2
rel-eng/tito.props | 6 -
schema/spacewalk/oracle/packages/rhn_entitlements.pkb | 2
schema/spacewalk/postgres/packages/rhn_entitlements.pkb | 82 ++++++++--------
spacewalk/admin/spacewalk-admin.spec | 6 -
spacewalk/setup/bin/spacewalk-setup | 2
8 files changed, 75 insertions(+), 47 deletions(-)
---
13 years, 10 months
rel-eng/packages spacewalk/admin
by Jan Pazdziora
rel-eng/packages/spacewalk-admin | 2 +-
spacewalk/admin/spacewalk-admin.spec | 6 +++++-
2 files changed, 6 insertions(+), 2 deletions(-)
New commits:
commit 3912327aa8e624537c346e9e05b2b417e6f2e075
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Thu Jun 24 17:17:26 2010 +0200
Automatic commit of package [spacewalk-admin] release [1.1.3-1].
diff --git a/rel-eng/packages/spacewalk-admin b/rel-eng/packages/spacewalk-admin
index ae2ca3c..887fb00 100644
--- a/rel-eng/packages/spacewalk-admin
+++ b/rel-eng/packages/spacewalk-admin
@@ -1 +1 @@
-1.1.2-1 spacewalk/admin/
+1.1.3-1 spacewalk/admin/
diff --git a/spacewalk/admin/spacewalk-admin.spec b/spacewalk/admin/spacewalk-admin.spec
index 8f276e5..0ee158b 100644
--- a/spacewalk/admin/spacewalk-admin.spec
+++ b/spacewalk/admin/spacewalk-admin.spec
@@ -2,7 +2,7 @@
Summary: Various utility scripts and data files for RHN Satellite installations
Name: spacewalk-admin
URL: https://fedorahosted.org/spacewalk
-Version: 1.1.2
+Version: 1.1.3
Release: 1%{?dist}
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
License: GPLv2
@@ -60,6 +60,10 @@ rm -rf $RPM_BUILD_ROOT
%{_mandir}/man3/validate-sat-cert.3.gz
%changelog
+* Thu Jun 24 2010 Jan Pazdziora 1.1.3-1
+- To allow database population to create at least some database schema, do not
+ stop on error for now.
+
* Mon Jun 21 2010 Jan Pazdziora 1.1.2-1
- For PostgreSQL, add support for connects to nondefault port; also, avoid
using shell.
13 years, 10 months
2 commits - schema/spacewalk
by Jan Pazdziora
schema/spacewalk/oracle/packages/rhn_entitlements.pkb | 2
schema/spacewalk/postgres/packages/rhn_entitlements.pkb | 82 ++++++++--------
2 files changed, 43 insertions(+), 41 deletions(-)
New commits:
commit 2ff5e3eca1ea77b2eee887c65ba35534cafe2924
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Thu Jun 24 14:36:10 2010 +0200
Fix cursors in PostgreSQL version of prune_group.
diff --git a/schema/spacewalk/postgres/packages/rhn_entitlements.pkb b/schema/spacewalk/postgres/packages/rhn_entitlements.pkb
index e246223..225561b 100644
--- a/schema/spacewalk/postgres/packages/rhn_entitlements.pkb
+++ b/schema/spacewalk/postgres/packages/rhn_entitlements.pkb
@@ -946,40 +946,8 @@ language plpgsql;
) returns void
as $$
declare
- usergroups cursor for
- select user_id, user_group_id, ugt.label
- from rhnUserGroupType ugt,
- rhnUserGroup ug,
- rhnUserGroupMembers ugm
- where 1=1
- and ugm.user_group_id = group_id_in
- and ugm.user_id in (
- select user_id
- from rhnUserGroupMembers
- where user_group_id = group_id_in
- order by modified asc
- offset quantity_in
- )
- and ugm.user_group_id = ug.id
- and ug.group_type = ugt.id;
- servergroups cursor for
- select server_id, server_group_id, sgt.id as group_type_id, sgt.label
- from rhnServerGroupType sgt,
- rhnServerGroup sg,
- rhnServerGroupMembers sgm
- where 1=1
- and sgm.server_group_id = group_id_in
- and sgm.server_id in (
- select sep.server_id
- from
- rhnServerEntitlementPhysical sep
- where
- sep.server_group_id = group_id_in
- order by sep.modified asc
- offset quantity_in
- )
- and sgm.server_group_id = sg.id
- and sg.group_type = sgt.id;
+ ugrecord record;
+ sgrecord record;
type_is_base char;
begin
if type_in = 'U' then
@@ -987,26 +955,60 @@ as $$
set max_members = quantity_in
where id = group_id_in;
- for ug in usergroups loop
- perform rhn_user.remove_from_usergroup(ug.user_id, ug.user_group_id);
+ for ugrecord in (
+ select user_id, user_group_id, ugt.label
+ from rhnUserGroupType ugt,
+ rhnUserGroup ug,
+ rhnUserGroupMembers ugm
+ where 1=1
+ and ugm.user_group_id = group_id_in
+ and ugm.user_id in (
+ select user_id
+ from rhnUserGroupMembers
+ where user_group_id = group_id_in
+ order by modified asc
+ offset quantity_in
+ )
+ and ugm.user_group_id = ug.id
+ and ug.group_type = ugt.id
+ ) loop
+ perform rhn_user.remove_from_usergroup(ugrecord.user_id, ugrecord.user_group_id);
end loop;
elsif type_in = 'S' then
update rhnServerGroup
set max_members = quantity_in
where id = group_id_in;
- for sg in servergroups loop
- perform rhn_entitlements.remove_server_entitlement(sg.server_id, sg.label);
+ for sgrecord in (
+ select server_id, server_group_id, sgt.id as group_type_id, sgt.label
+ from rhnServerGroupType sgt,
+ rhnServerGroup sg,
+ rhnServerGroupMembers sgm
+ where 1=1
+ and sgm.server_group_id = group_id_in
+ and sgm.server_id in (
+ select sep.server_id
+ from
+ rhnServerEntitlementPhysical sep
+ where
+ sep.server_group_id = group_id_in
+ order by sep.modified asc
+ offset quantity_in
+ )
+ and sgm.server_group_id = sg.id
+ and sg.group_type = sgt.id
+ ) loop
+ perform rhn_entitlements.remove_server_entitlement(sgrecord.server_id, sgrecord.label);
select is_base
into type_is_base
from rhnServerGroupType sgt
- where sgt.id = sg.group_type_id;
+ where sgt.id = sgrecord.group_type_id;
-- if we're removing a base ent, then be sure to
-- remove the server's channel subscriptions.
if ( type_is_base = 'Y' ) then
- perform rhn_channel.clear_subscriptions(sg.server_id);
+ perform rhn_channel.clear_subscriptions(sgrecord.server_id);
end if;
end loop;
commit 0fce1f3a4145c143eb2448983a53cd60dd574d78
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Thu Jun 24 14:23:39 2010 +0200
Use AS with column alias.
diff --git a/schema/spacewalk/oracle/packages/rhn_entitlements.pkb b/schema/spacewalk/oracle/packages/rhn_entitlements.pkb
index 7ecb95b..f29cebe 100644
--- a/schema/spacewalk/oracle/packages/rhn_entitlements.pkb
+++ b/schema/spacewalk/oracle/packages/rhn_entitlements.pkb
@@ -957,7 +957,7 @@ is
and ugm.user_group_id = ug.id
and ug.group_type = ugt.id;
cursor servergroups is
- select server_id, server_group_id, sgt.id group_type_id, sgt.label
+ select server_id, server_group_id, sgt.id as group_type_id, sgt.label
from rhnServerGroupType sgt,
rhnServerGroup sg,
rhnServerGroupMembers sgm
diff --git a/schema/spacewalk/postgres/packages/rhn_entitlements.pkb b/schema/spacewalk/postgres/packages/rhn_entitlements.pkb
index f8f9d29..e246223 100644
--- a/schema/spacewalk/postgres/packages/rhn_entitlements.pkb
+++ b/schema/spacewalk/postgres/packages/rhn_entitlements.pkb
@@ -963,7 +963,7 @@ as $$
and ugm.user_group_id = ug.id
and ug.group_type = ugt.id;
servergroups cursor for
- select server_id, server_group_id, sgt.id group_type_id, sgt.label
+ select server_id, server_group_id, sgt.id as group_type_id, sgt.label
from rhnServerGroupType sgt,
rhnServerGroup sg,
rhnServerGroupMembers sgm
13 years, 10 months