modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/plugin/ProductPluginDeployer.java
| 5 --
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginManagerBean.java
| 22 ++++------
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginManagerLocal.java
| 5 --
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/core/plugin/DatabaseAndFilePluginDeploymentTest.java
| 2
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/MetadataBeanTest.java
| 2
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdatePluginMetadataTestBase.java
| 2
6 files changed, 16 insertions(+), 22 deletions(-)
New commits:
commit 5ffd188798d92b0bf455dd5b7a4766dd31f20825
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Fri Jun 1 15:18:34 2012 -0400
[BZ 827447] prevent subject session timeouts from occurring during registration of
agent plugins with tons of types (e.g. the as7 plugin)
(
https://bugzilla.redhat.com/show_bug.cgi?id=827447)
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/plugin/ProductPluginDeployer.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/plugin/ProductPluginDeployer.java
index cf1da6b..1d674a8 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/plugin/ProductPluginDeployer.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/plugin/ProductPluginDeployer.java
@@ -41,7 +41,6 @@ import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.plugin.Plugin;
import org.rhq.core.util.MessageDigestGenerator;
-import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.core.concurrency.LatchedServiceCircularityException;
import org.rhq.enterprise.server.core.concurrency.LatchedServiceController;
import org.rhq.enterprise.server.core.concurrency.LatchedServiceException;
@@ -478,9 +477,7 @@ public class ProductPluginDeployer {
// since we assume we are called in the proper deployment order, this should
not fail
// if we are called when hot-deploying a plugin whose dependencies aren't
deployed, this will fail
PluginManagerLocal pluginMgr = LookupUtil.getPluginManager();
- SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
- pluginMgr.registerPlugin(subjectManager.getOverlord(), plugin,
pluginDescriptor, localPluginFile,
- forceUpdate);
+ pluginMgr.registerPlugin(plugin, pluginDescriptor, localPluginFile,
forceUpdate);
} catch (Exception e) {
log.error("Failed to register RHQ plugin file [" +
deploymentInfo.url + "]", e);
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginManagerBean.java
index 4bc097f..09563df 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginManagerBean.java
@@ -332,21 +332,20 @@ public class PluginManagerBean implements PluginManagerLocal {
}
// Start with no transaction so we can control the transactional boundaries. This is
important for a
- // few reasons. Registering the plugin and removing obsolete types are perfromed in
different, subsequent,
- // transactions. The register may update types, and that locks various rows of the
database. Those rows
+ // few reasons. Registering the plugin and removing obsolete types are performed in
different, subsequent,
+ // transactions. The registration may update types, and that locks various rows of
the database. Those rows
// must be unlocked before obsolete type removal. Type removal executes (resource)
bulk delete under the covers,
// and that will deadlock with the rows locked by the type update (at least in
oracle) if performed in the same
// transaction. Furthermore, as mentioned, obsolete type removal removes resources
of the obsolete type. We
// need to avoid an umbrella transaction for the type removal because large
inventories of obsolete resources
// will generate very large transactions. Potentially resulting in timeouts or other
issues.
- @RequiredPermission(Permission.MANAGE_SETTINGS)
@TransactionAttribute(TransactionAttributeType.NEVER)
- public void registerPlugin(Subject subject, Plugin plugin, PluginDescriptor
pluginDescriptor, File pluginFile,
- boolean forceUpdate) throws Exception {
- log.debug("Registering " + plugin);
+ public void registerPlugin(Plugin plugin, PluginDescriptor pluginDescriptor, File
pluginFile,
+ boolean forceUpdate) throws Exception {
+ log.debug("Registering " + plugin + "...");
long startTime = System.currentTimeMillis();
- boolean newOrUpdated = pluginMgr.installPluginJar(subject, plugin,
pluginDescriptor, pluginFile);
+ boolean newOrUpdated = pluginMgr.installPluginJar(plugin, pluginDescriptor,
pluginFile);
boolean typesUpdated = pluginMgr.registerPluginTypes(plugin.getName(),
pluginDescriptor, newOrUpdated,
forceUpdate);
@@ -365,22 +364,21 @@ public class PluginManagerBean implements PluginManagerLocal {
log.debug("Plugin [" + extPluginName
+ "] will be re-registered because it embeds types from
plugin [" + plugin.getName() + "]");
pluginMgr.registerPluginTypes(extPluginName, extPluginDescriptor,
false, true);
- resourceMetadataManager.removeObsoleteTypes(subject, extPluginName,
metadataManager);
+ resourceMetadataManager.removeObsoleteTypes(subjectMgr.getOverlord(),
extPluginName, metadataManager);
}
}
// now remove any obsolete types from the newly registered plugin
- resourceMetadataManager.removeObsoleteTypes(subject, plugin.getName(),
metadataManager);
+ resourceMetadataManager.removeObsoleteTypes(subjectMgr.getOverlord(),
plugin.getName(), metadataManager);
}
long endTime = System.currentTimeMillis();
log.debug("Finished registering " + plugin + " in " +
(endTime - startTime) + " ms");
}
- @RequiredPermission(Permission.MANAGE_SETTINGS)
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
- public boolean installPluginJar(Subject subject, Plugin newPlugin, PluginDescriptor
pluginDescriptor,
- File pluginFile) throws Exception {
+ public boolean installPluginJar(Plugin newPlugin, PluginDescriptor pluginDescriptor,
File pluginFile)
+ throws Exception {
Plugin existingPlugin = null;
boolean newOrUpdated = false;
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginManagerLocal.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginManagerLocal.java
index 3ee593e..7a36305 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginManagerLocal.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/PluginManagerLocal.java
@@ -122,9 +122,8 @@ public interface PluginManagerLocal {
* @param metadata The plugin descriptor file
* @param pluginFile the actual plugin file whose content will be stored in the
database (will be ignored if null)
* @param forceUpdate if <code>true</code>, the plugin's types will
be updated, even if the plugin hasn't changed since
- * the last time it was registered
*/
- void registerPlugin(Subject subject, Plugin plugin, PluginDescriptor metadata, File
pluginFile, boolean forceUpdate)
+ void registerPlugin(Plugin plugin, PluginDescriptor metadata, File pluginFile,
boolean forceUpdate)
throws Exception;
/** Exists only to for transactional boundary reasons. Not for general consumption.
*/
@@ -132,7 +131,7 @@ public interface PluginManagerLocal {
boolean forceUpdate) throws Exception;
/** Exists only for transactional boundary reasons. Not for general consumption. */
- boolean installPluginJar(Subject subject, Plugin newPlugin, PluginDescriptor
pluginDescriptor, File pluginFile)
+ boolean installPluginJar(Plugin newPlugin, PluginDescriptor pluginDescriptor, File
pluginFile)
throws Exception;
/**
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/core/plugin/DatabaseAndFilePluginDeploymentTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/core/plugin/DatabaseAndFilePluginDeploymentTest.java
index c6180fc..b8b426e 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/core/plugin/DatabaseAndFilePluginDeploymentTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/core/plugin/DatabaseAndFilePluginDeploymentTest.java
@@ -529,7 +529,7 @@ public class DatabaseAndFilePluginDeploymentTest extends
AbstractEJB3Test {
pluginDup.setVersion(plugin.getVersion());
PluginDescriptor pluginDescriptor =
this.testPluginDescriptors.get(pluginId);
File localPluginFile = this.testPluginFiles.get(pluginId);
- pluginMgr.registerPlugin(subjectManager.getOverlord(), pluginDup,
pluginDescriptor, localPluginFile, false);
+ pluginMgr.registerPlugin(pluginDup, pluginDescriptor, localPluginFile,
false);
}
return;
}
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/MetadataBeanTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/MetadataBeanTest.java
index bade273..71dc3a8 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/MetadataBeanTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/MetadataBeanTest.java
@@ -163,7 +163,7 @@ public class MetadataBeanTest extends AbstractEJB3Test {
SubjectManagerLocal subjectMgr = LookupUtil.getSubjectManager();
PluginManagerLocal pluginMgr = LookupUtil.getPluginManager();
- pluginMgr.registerPlugin(subjectMgr.getOverlord(), plugin, pluginDescriptor,
null, true);
+ pluginMgr.registerPlugin(plugin, pluginDescriptor, null, true);
pluginIds.add(plugin.getId());
}
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdatePluginMetadataTestBase.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdatePluginMetadataTestBase.java
index 55f47b8..a564aca 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdatePluginMetadataTestBase.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdatePluginMetadataTestBase.java
@@ -190,7 +190,7 @@ public class UpdatePluginMetadataTestBase extends AbstractEJB3Test {
testPlugin.setVersion(descriptor.getVersion());
}
try {
- pluginMgr.registerPlugin(getOverlord(), testPlugin, descriptor, null, true);
+ pluginMgr.registerPlugin(testPlugin, descriptor, null, true);
} catch (Throwable t) {
t.printStackTrace();
throw new RuntimeException(t);