Bug 845700 - Agent plug-in purge fails due to LIKE criteria in count query against rhq_resource_type table
Summary: Agent plug-in purge fails due to LIKE criteria in count query against rhq_res...
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: JBoss Operations Network
Classification: JBoss
Component: Inventory
Version: JON 3.1.0
Hardware: All
OS: All
urgent
high
Target Milestone: ---
: JON 3.1.2
Assignee: John Sanda
QA Contact: Mike Foley
URL:
Whiteboard:
Depends On:
Blocks: 874123
TreeView+ depends on / blocked
 
Reported: 2012-08-03 22:43 UTC by Larry O'Leary
Modified: 2018-11-28 19:39 UTC (History)
3 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
: 874123 (view as bug list)
Environment:
Last Closed: 2013-09-11 10:59:25 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Bugzilla 869063 0 high CLOSED Stale resource types due to failed plug-in purge 2021-02-22 00:41:40 UTC
Red Hat Knowledge Base (Solution) 178493 0 None None None 2012-08-04 01:37:27 UTC

Internal Links: 869063

Description Larry O'Leary 2012-08-03 22:43:06 UTC
Description of problem:
User is unable to purge deleted plug-ins even though plug-in is marked deleted and eligible for purge. This is due to the following query PluginManagerBean.isReadyForPurge(Plugin plugin) using a LIKE query to verify all the plug-in's resource types have been deleted:

DEBUG [org.rhq.enterprise.server.util.CriteriaQueryGenerator] SELECT COUNT(*)
FROM ResourceType resourcetype
WHERE ( LOWER( resourcetype.plugin )  like :pluginName ESCAPE '\\'  
AND resourcetype.deleted = :deleted )

2012-08-03 17:09:49,666 DEBUG [org.rhq.enterprise.server.util.CriteriaQueryGenerator] Bind: (pluginName, %jbossas%)
2012-08-03 17:09:49,666 DEBUG [org.rhq.enterprise.server.util.CriteriaQueryGenerator] Bind: (deleted, false)
2012-08-03 17:09:49,667 DEBUG [org.rhq.enterprise.server.util.CriteriaQueryRunner] restriction=COUNT_ONLY, resultCount=49


In this case, the plug-in which was deleted is named JBossAS and all of its resource types have also been deleted. However, due to '%jbossas%' being bound to the :pluginName variable and the use of the LIKE comparison, the query returns a count of 49 rows due to the JBossAS5 plug-in also being installed.

Therefore, the JBossAS plug-in could only be purged if the JBossAS5 plug-in was also deleted -- which is undesirable.

Version-Release number of selected component (if applicable):
3.1.0

How reproducible:
Always

Steps to Reproduce:
1.  Ensure JBoss AS 4 and AS 5 plug-ins are installed
2.  Import JBoss EAP 4.3 (profile: all) instance into inventory
3.  Delete JBossAS (4.x) and JBoss Cache (2.x) plug-ins

    *   Message center should show: Deleted agent plugins: [JBoss Application Server, JBossCache 2.x Services]

4.  Confirm plug-ins have been marked deleted

    *   From http://localhost:7080/coregui/#Test/ServerAccess/SQL execute:

            SELECT id,name,display_name,description,version,amps_version,enabled,status,path,md5,ctime,mtime,deployment FROM rhq_plugin WHERE deployment='AGENT' AND status='DELETED' ORDER BY name,id ASC;

        The result should contain the two deleted plug-ins with the name "JBossAS" and "JBossCache".
        
5.  Purge the plug-ins (Note: You must click Show Deleted to select the deleted plug-ins for purge)

    *   Message center should show: Preparing to purge agent plugins [JBoss Application Server, JBossCache 2.x Services]. This may take a few minutes ...

6.  Confirm the plug-ins have been purged
    After the purge was performed, the plug-ins should be purged within 5 minutes.
  
Actual results:
Even after 30 minutes, the JBossAS and JBossCache plug-ins have not been removed and server debug log reveals the following message each time plug-in purge job is executed:

DEBUG [org.rhq.enterprise.server.util.CriteriaQueryGenerator] SELECT COUNT(*)
FROM ResourceType resourcetype
WHERE ( LOWER( resourcetype.plugin )  like :pluginName ESCAPE '\\'  
AND resourcetype.deleted = :deleted )

DEBUG [org.rhq.enterprise.server.util.CriteriaQueryGenerator] Bind: (pluginName, %jbossas%)
DEBUG [org.rhq.enterprise.server.util.CriteriaQueryGenerator] Bind: (deleted, false)
DEBUG [org.rhq.enterprise.server.util.CriteriaQueryRunner] restriction=COUNT_ONLY, resultCount=49

DEBUG [org.rhq.enterprise.server.util.CriteriaQueryGenerator] SELECT COUNT(*)
FROM ResourceType resourcetype
WHERE ( LOWER( resourcetype.plugin )  like :pluginName ESCAPE '\\'  
AND resourcetype.deleted = :deleted )

DEBUG [org.rhq.enterprise.server.util.CriteriaQueryGenerator] Bind: (pluginName, %jbosscache%)
DEBUG [org.rhq.enterprise.server.util.CriteriaQueryGenerator] Bind: (deleted, false)
DEBUG [org.rhq.enterprise.server.util.CriteriaQueryRunner] restriction=COUNT_ONLY, resultCount=9


Expected results:
The JBossAS and JBossCache plug-ins should be removed from the rhq_plugin table and no longer appear on the agent plug-ins page in the UI.

Additional info:
Mazz tracked this down to the isReadyForPurge method itself. The method should use criteria.setStrict(true). It should also log at debug to indicate the actual count so that plug-in purge failure can be easily determined.

Comment 1 Charles Crouch 2012-08-13 16:12:13 UTC
As per triage: retarget at 312

Comment 2 John Sanda 2012-11-07 14:39:19 UTC
PluginManagerBean.isReadyForPurge(Plugin) has been refactored so that the LIKE operator is not used in the resource type criteria. I have also added a test method  in PluginManagerBeanTest to cover this scenario. Lastly, a debug log statement that looks like the following has been added to isReadyForPurge,

<plugin> is not ready to be purged. There are still <resource_type_count> resource types in the system for this plugin.

master commit hashes:
cf039adcb51
2f891cc677

Comment 3 John Sanda 2012-11-07 14:59:44 UTC
Changes have been pushed to the release/jon3.1.x branch.

commit hashes:
a77fb7ef8c9fe
687c313ad97f

Comment 5 Simeon Pinder 2012-11-15 04:53:42 UTC
Moving this to ON_QA as available for testing in https://brewweb.devel.redhat.com//buildinfo?buildID=243389.

Comment 6 Sunil Kondkar 2012-12-05 09:42:00 UTC
Verified on JON 3.1.2 ER2 build.

The plugins are removed from 'rhq_plugin' table. Below query returns empty set.

SELECT id,name,display_name,description,version,amps_version,enabled,status,path,md5,ctime,mtime,deployment FROM rhq_plugin WHERE deployment='AGENT' AND status='DELETED' ORDER BY name,id ASC;

The plugins does not appear on the 'Agent Plug-ins' page in the UI.

The server log shows below debug message:

2012-12-05 14:50:06,604 DEBUG [org.rhq.enterprise.server.resource.metadata.PluginManagerBean] AgentPlugin [id=10011, name=JBossAS, md5=5fad5b96751fa0ac672dbb587e9a0981] is not ready to be purged. It still has 27 resource types in the database.


Note You need to log in before you can comment on or make changes to this bug.