.gitignore
| 4
etc/scripts/rhqctl-completion.sh
| 10 -
modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/operation/OperationManagerBeanTest.java
| 35 +---
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerBean.java
| 87 +++++++---
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerLocal.java
| 11 +
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java
| 4
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerBean.java
| 1
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerRemote.java
| 21 +-
modules/plugins/rhq-storage/src/main/java/org/rhq/plugins/storage/StorageNodeComponent.java
| 72 ++++++++
modules/plugins/rhq-storage/src/main/resources/META-INF/rhq-plugin.xml
| 10 +
10 files changed, 191 insertions(+), 64 deletions(-)
New commits:
commit c4725c2fa971bb1e38fe66603e09c128d802b725
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Fri Jun 21 00:28:53 2013 +0200
Simplifying bash script for rhqctl completion.
diff --git a/etc/scripts/rhqctl-completion.sh b/etc/scripts/rhqctl-completion.sh
index ee0d0cc..68adf2b 100755
--- a/etc/scripts/rhqctl-completion.sh
+++ b/etc/scripts/rhqctl-completion.sh
@@ -41,8 +41,7 @@ _rhqctl() {
COMPREPLY=( $(compgen -W "${dataMigratorSubopts}" -- ${cur}) )
return 0
else
- checkForBooleanSubopt ${prev}
- [[ "x$boolean" == "x1" ]] && return 0
+ checkForBooleanSubopt ${prev} && return 0
completePath ${cur}
return 0
fi
@@ -65,8 +64,7 @@ _rhqctl() {
return 0
elif [[ "x${second}" == "x--agent" ]] ; then
if [[ "${agentInstallSubopts}" == *" ${prev} "* ]] ;
then
- checkForBooleanSubopt ${prev}
- [[ "x$boolean" == "x1" ]] && return 0
+ checkForBooleanSubopt ${prev} && return 0
completePath ${cur}
return 0
fi
@@ -101,9 +99,9 @@ function completePath(){
function checkForBooleanSubopt(){
if [[ "${booleanSubopts}" == *" ${prev} "* ]] ; then
COMPREPLY=( $(compgen -W "${trueFalse}" -- ${cur} ) )
- boolean="1"
+ return 0
else
- boolean="0"
+ return 1
fi
}
commit bd325e77aa3f9633a13a80fbb97a233e90693747
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Thu Jun 20 12:16:06 2013 +0200
Removing "./cassandra" and "/cassandra/" from .gitigore.
diff --git a/.gitignore b/.gitignore
index 6e09f517..359687a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,8 +4,6 @@ eclipse-classes/
logs/
antlr-generated/
gwt-tmp/
-./cassandra/
-/cassandra/
dev-container/
rhq-data/
rhq-agent/
@@ -14,8 +12,10 @@ dev-cli/
modules/enterprise/gui/portal-war/build/classes/
modules/enterprise/gui/coregui/build/classes/
modules/enterprise/gui/content_http-war/build/classes/
+
#created by rhq-enterprise-server's unit tests
modules/enterprise/server/jar/transaction.log
+
.idea/
.metadata/
*cache.html
commit 8f077b85111f3e18fe3093b768e2e6135fd39c2a
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Thu Jun 20 11:55:59 2013 +0200
Adding the "prepareForUpgrade" operation to the storage node (top level
resource). This operation should be run rightbefore the upgrade to the newer version. It
backs up all the keyspaces and make the server and storage stop accepting the metrics.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerBean.java
index fad3877..7b2d8dc 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerBean.java
@@ -35,7 +35,6 @@ import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
-import javax.persistence.Query;
import javax.persistence.TypedQuery;
import org.apache.commons.logging.Log;
@@ -45,14 +44,19 @@ import org.quartz.Trigger;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.authz.Permission;
+import org.rhq.core.domain.cloud.Server;
import org.rhq.core.domain.cloud.StorageNode;
import org.rhq.core.domain.cloud.StorageNode.OperationMode;
import org.rhq.core.domain.cloud.StorageNodeLoadComposite;
import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.criteria.ResourceCriteria;
import org.rhq.core.domain.criteria.StorageNodeCriteria;
import org.rhq.core.domain.measurement.AvailabilityType;
import org.rhq.core.domain.measurement.MeasurementAggregate;
import org.rhq.core.domain.measurement.MeasurementUnits;
+import org.rhq.core.domain.operation.OperationDefinition;
+import org.rhq.core.domain.operation.ResourceOperationHistory;
+import org.rhq.core.domain.operation.bean.OperationSchedule;
import org.rhq.core.domain.resource.InventoryStatus;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceType;
@@ -60,12 +64,17 @@ import org.rhq.core.domain.util.PageList;
import org.rhq.core.util.StringUtil;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.authz.RequiredPermission;
+import org.rhq.enterprise.server.authz.RequiredPermissions;
+import org.rhq.enterprise.server.cloud.instance.ServerManagerLocal;
import org.rhq.enterprise.server.measurement.MeasurementDataManagerLocal;
+import org.rhq.enterprise.server.operation.OperationManagerLocal;
+import org.rhq.enterprise.server.resource.ResourceManagerLocal;
import org.rhq.enterprise.server.rest.reporting.MeasurementConverter;
import org.rhq.enterprise.server.scheduler.SchedulerLocal;
import org.rhq.enterprise.server.scheduler.jobs.StorageNodeMaintenanceJob;
import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
import org.rhq.enterprise.server.util.CriteriaQueryRunner;
+import org.rhq.enterprise.server.util.LookupUtil;
/**
*
@@ -94,6 +103,7 @@ public class StorageNodeManagerBean implements StorageNodeManagerLocal,
StorageN
@EJB
private SchedulerLocal quartzScheduler;
+ @Override
public synchronized List<StorageNode> scanForStorageNodes() {
List<StorageNode> existingStorageNodes = getStorageNodes();
if (log.isDebugEnabled()) {
@@ -165,6 +175,7 @@ public class StorageNodeManagerBean implements
StorageNodeManagerLocal, StorageN
return new ArrayList<StorageNode>(storageNodeMap.values());
}
+ @Override
public void linkResource(Resource resource) {
List<StorageNode> storageNodes = this.getStorageNodes();
@@ -202,20 +213,14 @@ public class StorageNodeManagerBean implements
StorageNodeManagerLocal, StorageN
}
}
+ @Override
@RequiredPermission(Permission.MANAGE_SETTINGS)
public StorageNodeLoadComposite getLoad(Subject subject, StorageNode node, long
beginTime, long endTime) {
StorageNodeLoadComposite result = new StorageNodeLoadComposite(node, beginTime,
endTime);
final String tokensMetric = "Tokens", ownershipMetric =
"Ownership", loadMetric = "Load", diskUsedPercentageMetric =
"Calculated.DiskSpaceUsedPercentage";
final String heapCommittedMetric = "{HeapMemoryUsage.committed}",
heapUsedMetric = "{HeapMemoryUsage.used}", heapUsedPercentageMetric =
"Calculated.HeapUsagePercentage";
- int resourceId;
- if (node.getResource() == null) {
- node = entityManager.find(StorageNode.class, node.getId());
- if (node.getResource() == null) { // no associated resource
- throw new IllegalStateException("This storage node [" +
node.getId() + "] has no associated resource.");
- }
- }
- resourceId = node.getResource().getId();
+ int resourceId = getResourceIdFromStorageNode(node);
// get the schedule ids for Storage Service resource
TypedQuery<Object[]> query = entityManager.<Object[]>
createNamedQuery(
@@ -284,22 +289,14 @@ public class StorageNodeManagerBean implements
StorageNodeManagerLocal, StorageN
return result;
}
- private StorageNodeLoadComposite.MeasurementAggregateWithUnits
getMeasurementAggregateWithUnits(Subject subject,
- int schedId, MeasurementUnits units, long beginTime, long endTime) {
- MeasurementAggregate measurementAggregate =
measurementManager.getAggregate(subject, schedId, beginTime,
- endTime);
- StorageNodeLoadComposite.MeasurementAggregateWithUnits
measurementAggregateWithUnits = new
StorageNodeLoadComposite.MeasurementAggregateWithUnits(
- measurementAggregate, units);
-
measurementAggregateWithUnits.setFormattedValue(getSummaryString(measurementAggregate,
units));
- return measurementAggregateWithUnits;
- }
-
+ @Override
public List<StorageNode> getStorageNodes() {
TypedQuery<StorageNode> query = entityManager.<StorageNode>
createNamedQuery(StorageNode.QUERY_FIND_ALL,
StorageNode.class);
return query.getResultList();
}
-
+
+ @Override
@RequiredPermission(Permission.MANAGE_SETTINGS)
public PageList<StorageNode> findStorageNodesByCriteria(Subject subject,
StorageNodeCriteria criteria) {
CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject,
criteria);
@@ -308,6 +305,25 @@ public class StorageNodeManagerBean implements
StorageNodeManagerLocal, StorageN
return runner.execute();
}
+ @Override
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
+ public void prepareNodeForUpgrade(Subject subject, StorageNode storageNode) {
+ int storageNodeResourceId = getResourceIdFromStorageNode(storageNode);
+ TopologyManagerLocal topologyManager = LookupUtil.getTopologyManager();
+ ServerManagerLocal serverManager = LookupUtil.getServerManager();
+ OperationManagerLocal operationManager = LookupUtil.getOperationManager();
+ Server server = serverManager.getServer();
+ // setting the server mode to maintenance
+ topologyManager.updateServerMode(subject, new Integer[] { server.getId() },
Server.OperationMode.MAINTENANCE);
+
+ Configuration parameters = new Configuration();
+ parameters.setSimpleValue("snapshotName",
String.valueOf(System.currentTimeMillis()));
+ // scheduling the operation
+ operationManager.scheduleResourceOperation(subject, storageNodeResourceId,
"prepareForUpgrade", 0, 0, 0, 0,
+ parameters, "Run by
StorageNodeManagerBean.prepareNodeForUpgrade()");
+ }
+
private String getSummaryString(MeasurementAggregate aggregate, MeasurementUnits
units) {
String formattedValue = "Min: " +
MeasurementConverter.format(aggregate.getMin(), units, true) + ", Max: "
+ MeasurementConverter.format(aggregate.getMax(), units, true) + ", Avg:
"
@@ -377,19 +393,18 @@ public class StorageNodeManagerBean implements
StorageNodeManagerLocal, StorageN
entityManager.flush();
}
- @SuppressWarnings("unchecked")
private void discoverResourceInformation(Map<String, StorageNode>
storageNodeMap) {
- Query query =
entityManager.createNamedQuery(ResourceType.QUERY_FIND_BY_NAME_AND_PLUGIN)
+ TypedQuery<ResourceType> query =
entityManager.<ResourceType>createNamedQuery(ResourceType.QUERY_FIND_BY_NAME_AND_PLUGIN,
ResourceType.class)
.setParameter("name",
RHQ_STORAGE_RESOURCE_TYPE).setParameter("plugin", RHQ_STORAGE_PLUGIN);
- List<ResourceType> resourceTypes = (List<ResourceType>)
query.getResultList();
+ List<ResourceType> resourceTypes = query.getResultList();
if (resourceTypes.isEmpty()) {
return;
}
- query =
entityManager.createNamedQuery(Resource.QUERY_FIND_BY_TYPE_ADMIN).setParameter("type",
+ TypedQuery<Resource> resourceQuery =
entityManager.<Resource>createNamedQuery(Resource.QUERY_FIND_BY_TYPE_ADMIN,
Resource.class).setParameter("type",
resourceTypes.get(0));
- List<Resource> cassandraResources = (List<Resource>)
query.getResultList();
+ List<Resource> cassandraResources = resourceQuery.getResultList();
for (Resource resource : cassandraResources) {
Configuration resourceConfiguration = resource.getPluginConfiguration();
@@ -408,4 +423,26 @@ public class StorageNodeManagerBean implements
StorageNodeManagerLocal, StorageN
}
}
}
+
+ private StorageNodeLoadComposite.MeasurementAggregateWithUnits
getMeasurementAggregateWithUnits(Subject subject,
+ int schedId, MeasurementUnits units, long beginTime, long endTime) {
+ MeasurementAggregate measurementAggregate =
measurementManager.getAggregate(subject, schedId, beginTime,
+ endTime);
+ StorageNodeLoadComposite.MeasurementAggregateWithUnits
measurementAggregateWithUnits = new
StorageNodeLoadComposite.MeasurementAggregateWithUnits(
+ measurementAggregate, units);
+
measurementAggregateWithUnits.setFormattedValue(getSummaryString(measurementAggregate,
units));
+ return measurementAggregateWithUnits;
+ }
+
+ private int getResourceIdFromStorageNode(StorageNode storageNode) {
+ int resourceId;
+ if (storageNode.getResource() == null) {
+ storageNode = entityManager.find(StorageNode.class, storageNode.getId());
+ if (storageNode.getResource() == null) { // no associated resource
+ throw new IllegalStateException("This storage node [" +
storageNode.getId() + "] has no associated resource.");
+ }
+ }
+ resourceId = storageNode.getResource().getId();
+ return resourceId;
+ }
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerLocal.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerLocal.java
index c356830..5b13428 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerLocal.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StorageNodeManagerLocal.java
@@ -61,5 +61,16 @@ public interface StorageNodeManagerLocal {
* @return list of nodes
*/
PageList<StorageNode> findStorageNodesByCriteria(Subject subject,
StorageNodeCriteria criteria);
+
+ /**
+ * <p>Prepares the node for subsequent upgrade.</p>
+ * <p> CAUTION: this method will set the RHQ server to maintenance mode, RHQ
storage flushes all the data to disk
+ * and backup of all the keyspaces is created</p>
+ * <p>the subject needs to have <code>MANAGE_SETTINGS</code> and
<code>MANAGE_INVENTORY</code> permissions.</p>
+ *
+ * @param subject caller
+ * @param storageNode storage node on which the prepareForUpgrade operation should be
run
+ */
+ void prepareNodeForUpgrade(Subject subject, StorageNode storageNode);
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java
index 9d6cb6a..f8185e0 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java
@@ -669,8 +669,8 @@ public class StartupBean implements StartupLocal {
return;
}
-
- /**
+
+ /**
* This seeds the agent clients cache with clients for all known agents. These
clients will be started so they can
* immediately begin to send any persisted guaranteed messages that might already
exist. This method must be called
* at a time when the server is ready to accept messages from agents because any
guaranteed messages that are
diff --git
a/modules/plugins/rhq-storage/src/main/java/org/rhq/plugins/storage/StorageNodeComponent.java
b/modules/plugins/rhq-storage/src/main/java/org/rhq/plugins/storage/StorageNodeComponent.java
index 606499f..08b5205 100644
---
a/modules/plugins/rhq-storage/src/main/java/org/rhq/plugins/storage/StorageNodeComponent.java
+++
b/modules/plugins/rhq-storage/src/main/java/org/rhq/plugins/storage/StorageNodeComponent.java
@@ -30,6 +30,9 @@ import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.mc4j.ems.connection.EmsConnection;
+import org.mc4j.ems.connection.bean.EmsBean;
+import org.mc4j.ems.connection.bean.attribute.EmsAttribute;
+import org.mc4j.ems.connection.bean.operation.EmsOperation;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PropertyList;
@@ -56,6 +59,8 @@ public class StorageNodeComponent extends CassandraNodeComponent
implements Oper
public OperationResult invokeOperation(String name, Configuration parameters) throws
Exception {
if (name.equals("addNodeMaintenance")) {
return nodeAdded(parameters);
+ } else if (name.equals("prepareForUpgrade")) {
+ return prepareForUpgrade(parameters);
} else {
return super.invokeOperation(name, parameters);
}
@@ -178,6 +183,73 @@ public class StorageNodeComponent extends CassandraNodeComponent
implements Oper
}
return result;
}
+
+ private OperationResult prepareForUpgrade(Configuration parameters) throws Exception
{
+ EmsConnection emsConnection = getEmsConnection();
+ EmsBean storageService =
emsConnection.getBean("org.apache.cassandra.db:type=StorageService");
+ Class<?>[] emptyParams = new Class<?>[0];
+
+ if (log.isDebugEnabled()) {
+ log.debug("Disabling native transport...");
+ }
+ EmsOperation operation =
storageService.getOperation("stopNativeTransport", emptyParams);
+ operation.invoke((Object[]) emptyParams);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Disabling gossip...");
+ }
+ operation = storageService.getOperation("stopGossiping", emptyParams);
+ operation.invoke((Object[]) emptyParams);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Taking the snapshot...");
+ }
+ operation = storageService.getOperation("takeSnapshot", String.class,
String[].class);
+ String snapshotName = parameters.getSimpleValue("snapshotName");
+ if (snapshotName == null || snapshotName.trim().isEmpty()) {
+ snapshotName = System.currentTimeMillis() + "";
+ }
+ operation.invoke(snapshotName, new String[] {});
+
+ // max 2 sec
+ waitForTaskToComplete(500, 10, 150);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Initiating drain...");
+ }
+ operation = storageService.getOperation("drain", emptyParams);
+ operation.invoke((Object[]) emptyParams);
+
+ return new OperationResult();
+ }
+
+ private void waitForTaskToComplete(int initialWaiting, int maxTries, int sleepMillis)
{
+ // initial waiting
+ try {
+ Thread.sleep(initialWaiting);
+ } catch (InterruptedException e) {
+ if (log.isWarnEnabled()) {
+ log.warn(e);
+ }
+ }
+ EmsConnection emsConnection = getEmsConnection();
+ EmsBean flushWriterBean =
emsConnection.getBean("org.apache.cassandra.internal:type=FlushWriter");
+ EmsAttribute attribute = flushWriterBean.getAttribute("PendingTasks");
+
+ Long valueObject = (Long) attribute.refresh();
+ // wait until org.apache.cassandra.internal:type=FlushWriter / PendingTasks == 0
+ while (valueObject > 0 && maxTries-- > 0) {
+ try {
+ Thread.sleep(sleepMillis);
+ } catch (InterruptedException e) {
+ if (log.isWarnEnabled()) {
+ log.warn(e);
+ }
+ }
+ valueObject = (Long) attribute.refresh();
+ }
+ flushWriterBean.unload();
+ }
private PropertyMap toPropertyMap(OpResult opResult) {
PropertyMap map = new PropertyMap("resultsMap");
diff --git a/modules/plugins/rhq-storage/src/main/resources/META-INF/rhq-plugin.xml
b/modules/plugins/rhq-storage/src/main/resources/META-INF/rhq-plugin.xml
index 66889f8..0029cd4 100644
--- a/modules/plugins/rhq-storage/src/main/resources/META-INF/rhq-plugin.xml
+++ b/modules/plugins/rhq-storage/src/main/resources/META-INF/rhq-plugin.xml
@@ -81,6 +81,16 @@
</results>
</operation>
+ <operation name="prepareForUpgrade" description="Prepares the
storage node for upgrade (this operation consists of following steps: 1) turning off the
RPC server, 2) turning off the gossiper, 3) taking the snapshot (backuping the data), 4)
invoking the drain operation">
+ <parameters>
+ <c:simple-property name="snapshotName" required="false"
type="string" displayName="Snapshot Name"
+ description="Snapshot name. If left empty current
system time in milliseconds will be used as the snapshot name."/>
+ </parameters>
+ <results>
+ <c:simple-property name="prepareForUpgradeResult"
description="Prepares the storage node for upgrade (this operation consists of
following steps: 1) turning off the RPC server, 2) turning off the gossiper, 3) taking the
snapshot (backuping the data), 4) invoking the drain operation"/>
+ </results>
+ </operation>
+
<operation name="updateSeedsList" description="Updatess the
node's seeds property in cassandra.yaml">
<parameters>
<c:list-property name="seedsList">
commit 45ca004c350e6d70ff38e6ee4f03fb65cc37bc29
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Thu Jun 20 11:55:45 2013 +0200
Increasing the time to wait for operation to finish (the test was failing
non-deterministically).
diff --git
a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/operation/OperationManagerBeanTest.java
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/operation/OperationManagerBeanTest.java
index e199fea..71aa474 100644
---
a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/operation/OperationManagerBeanTest.java
+++
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/operation/OperationManagerBeanTest.java
@@ -1795,10 +1795,11 @@ public class OperationManagerBeanTest extends AbstractEJB3Test {
Resource resource = newResource;
Calendar calendar = new GregorianCalendar();
calendar.add(Calendar.SECOND, 2);
- ResourceOperationSchedule schedule =
operationManager.scheduleResourceOperationUsingCron(overlord(),
+ Subject overlord = overlord();
+ ResourceOperationSchedule schedule =
operationManager.scheduleResourceOperationUsingCron(overlord,
resource.getId(), "testOp", calendar.get(Calendar.SECOND) + "
" + calendar.get(Calendar.MINUTE)
+ " * * * ?", 20, null, "desc");
-
+
assert schedule != null;
assert schedule.getDescription().equals("desc");
assert schedule.getOperationName().equals("testOp");
@@ -1806,7 +1807,7 @@ public class OperationManagerBeanTest extends AbstractEJB3Test {
assert schedule.getResource().getId() == resource.getId();
List<ResourceOperationSchedule> results;
- results = operationManager.findScheduledResourceOperations(overlord(),
resource.getId());
+ results = operationManager.findScheduledResourceOperations(overlord,
resource.getId());
assert results != null;
assert results.size() == 1;
ResourceOperationSchedule returnedSchedule = results.get(0);
@@ -1818,9 +1819,9 @@ public class OperationManagerBeanTest extends AbstractEJB3Test {
assert returnedSchedule.getOperationName().equals("testOp");
assert returnedSchedule.getParameters() != null;
assert returnedSchedule.getResource().getId() == resource.getId();
-
- System.out.println("WAITING FOR 4s FOR THE SCHEDULED OPERATION TO
FINISH");
- Thread.sleep(4000L);
+
+ System.out.println("WAITING FOR 4.5s FOR THE SCHEDULED OPERATION TO
FINISH");
+ Thread.sleep(4500L);
PageList<ResourceOperationHistory> resultsHist;
resultsHist =
operationManager.findCompletedResourceOperationHistories(overlord(), resource.getId(),
null,
@@ -1857,17 +1858,17 @@ public class OperationManagerBeanTest extends AbstractEJB3Test {
PageControl.getUnlimitedInstance());
assert list.size() == 0;
}
-
+
@Test(enabled = ENABLE_TESTS)
public void testCronGroupScheduling() throws Exception {
Resource resource = newResource;
ResourceGroup group = newGroup;
Calendar calendar = new GregorianCalendar();
calendar.add(Calendar.SECOND, 2);
- GroupOperationSchedule schedule =
operationManager.scheduleGroupOperationUsingCron(overlord(),
- newGroup.getId(), new int[] { resource.getId() }, true, "testOp",
null, calendar.get(Calendar.SECOND) + " "
- + calendar.get(Calendar.MINUTE)
- + " * * * ?", 20, "desc");
+ Subject overlord = overlord();
+ GroupOperationSchedule schedule =
operationManager.scheduleGroupOperationUsingCron(overlord, newGroup.getId(),
+ new int[] { resource.getId() }, true, "testOp", null,
+ calendar.get(Calendar.SECOND) + " " + calendar.get(Calendar.MINUTE)
+ " * * * ?", 20, "desc");
assert schedule != null;
assert schedule.getDescription().equals("desc");
@@ -1876,7 +1877,7 @@ public class OperationManagerBeanTest extends AbstractEJB3Test {
assert schedule.getGroup().getId() == group.getId();
List<GroupOperationSchedule> results;
- results = operationManager.findScheduledGroupOperations(overlord(),
group.getId());
+ results = operationManager.findScheduledGroupOperations(overlord,
group.getId());
assert results != null;
assert results.size() == 1;
GroupOperationSchedule returnedSchedule = results.get(0);
@@ -1889,13 +1890,12 @@ public class OperationManagerBeanTest extends AbstractEJB3Test {
assert returnedSchedule.getParameters() != null;
assert returnedSchedule.getGroup().getId() == group.getId();
- System.out.println("WAITING FOR 4s FOR THE SCHEDULED OPERATION TO
FINISH");
- Thread.sleep(4000L);
+ System.out.println("WAITING FOR 4.5s FOR THE SCHEDULED OPERATION TO
FINISH");
+ Thread.sleep(4500L);
PageList<ResourceOperationHistory> resultsHist;
resultsHist =
operationManager.findCompletedResourceOperationHistories(overlord(), resource.getId(),
null,
- null,
- PageControl.getUnlimitedInstance());
+ null, PageControl.getUnlimitedInstance());
assert resultsHist != null;
assert resultsHist.size() == 1;
ResourceOperationHistory history = resultsHist.get(0);
@@ -1918,8 +1918,7 @@ public class OperationManagerBeanTest extends AbstractEJB3Test {
operationManager.deleteOperationHistory(overlord(), history.getId(), false);
resultsHist =
operationManager.findCompletedResourceOperationHistories(overlord(), resource.getId(),
null,
- null,
- PageControl.getUnlimitedInstance());
+ null, PageControl.getUnlimitedInstance());
assert resultsHist != null;
assert resultsHist.size() == 0;
commit ea4fa773ebe2b9fb37d715b2ef818c00ffb9e1e4
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Wed Jun 19 17:29:04 2013 +0200
Making the javadoc consistent with the actual code.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerBean.java
index 9d5251b..8713928 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerBean.java
@@ -413,6 +413,7 @@ public class GroupDefinitionManagerBean implements
GroupDefinitionManagerLocal,
}
}
+ @RequiredPermission(Permission.MANAGE_INVENTORY)
public PageList<GroupDefinition> findGroupDefinitionsByCriteria(Subject
subject,
ResourceGroupDefinitionCriteria criteria) {
if (authorizationManager.isInventoryManager(subject) == false) {
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerRemote.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerRemote.java
index 11f8ed5..c44f3ff 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerRemote.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerRemote.java
@@ -24,7 +24,6 @@ import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.criteria.ResourceGroupDefinitionCriteria;
import org.rhq.core.domain.resource.group.GroupDefinition;
import org.rhq.core.domain.resource.group.InvalidExpressionException;
-import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.resource.group.ResourceGroupDeleteException;
import org.rhq.enterprise.server.resource.group.ResourceGroupUpdateException;
@@ -44,8 +43,8 @@ import
org.rhq.enterprise.server.resource.group.definition.exception.GroupDefini
public interface GroupDefinitionManagerRemote {
/**
- * Creates a new group definiton.
- * The subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions.
+ * <p>Creates a new group definition.</p>
+ * <p>The subject needs to have <code>MANAGE_INVENTORY</code>
permission.</p>
*
* @param subject the user who is asking create the group definition
* @param newGroupDefinition the object defining the group definition
@@ -57,8 +56,8 @@ public interface GroupDefinitionManagerRemote {
throws GroupDefinitionAlreadyExistsException, GroupDefinitionCreateException;
/**
- * Fetches the group definitions based on provided criteria.
- * The subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions.
+ * <p>Fetches the group definitions based on provided criteria.</p>
+ * <p>The subject needs to have <code>MANAGE_INVENTORY</code>
permission.</p>
*
* @param subject the user who is asking to find the group definitions
* @param criteria the criteria
@@ -67,8 +66,8 @@ public interface GroupDefinitionManagerRemote {
PageList<GroupDefinition> findGroupDefinitionsByCriteria(Subject subject,
ResourceGroupDefinitionCriteria criteria);
/**
- * Deletes the given group definition.
- * The subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions.
+ * <p>Deletes the given group definition.</p>
+ * <p>The subject needs to have <code>MANAGE_INVENTORY</code>
permission.</p>
*
* @param subject the user who is asking to remove the group definition
* @param groupDefinitionId the id of a group definition to be deleted
@@ -79,8 +78,8 @@ public interface GroupDefinitionManagerRemote {
GroupDefinitionDeleteException;
/**
- * Updates the given group definition.
- * The subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions.
+ * <p>Updates the given group definition.</p>
+ * <p>The subject needs to have <code>MANAGE_INVENTORY</code>
permission.</p>
*
* @param subject the user who is asking to update the group definition
* @param updated the object defining the group definition to be changed (based on
its id)
@@ -95,8 +94,8 @@ public interface GroupDefinitionManagerRemote {
ResourceGroupUpdateException;
/**
- * Explicitly recalculates the group membership, depending on the
GroupDefinition's expression.
- * The subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions.
+ * <p>Explicitly recalculates the group membership, depending on the
GroupDefinition's expression.</p>
+ * <p>The subject needs to have <code>MANAGE_INVENTORY</code>
permission.</p>
*
* @param subject the user who is asking to recalculate the group membership
* @param groupDefinitionId the id of a group definition to be recalculated