Lately one of my projects at work is to get a patch management solution in place for our RHEL/CentOS Linux systems.  Since Red Hat’s Satellite product doesn’t manage CentOS systems, and because there is no easy method of configuring the pieces that Satellite 6 is based on, we decided to go with Spacewalk.  For longer than I am willing to admit, one bug in the programwas bugging bothering me: I would apply a patch to a system or upgrade a package, but it would still show the package as having an update available, even showing the same package name and version number on the “installed” and “available” columns (e.g. glibc-2.12-1.166.el6_7.1.x86_64 available, glibc-2.12-1.166.el6_7.1.x86_64 installed).

I’d been trolling the mailing lists, checking forum posts, reading through Red Hat’s “solutions” (e.g. https://access.redhat.com/solutions/1237493, which tells you to gather logs and create a ticket with Red Hat, no thanks), and generally banging my head on the wall trying to figure it out.  I’d enabled DEBUG logging in /usr/share/rhn/classes/log4j.properties, tried increasing the number of workers in /etc/rhn/rhn.conf, increased JVM memory parameters in /usr/share/rhn/config-defaults/rhn_taskomatic_daemon.conf, etc etc.

In one of the sites I visited, there was a mention of the rhntaskqueue tables in the Spacewalk database.  For us, that’s an external Postgres database, but it’s accessible easily enough with “sudo spacewalk-sql -i”.  Looking through there, there was an old job that was causing all of the other jobs to fail.

Initially, I would have thought a simply “DELETE FROM rhntaskqueue WHERE task_data=’156′” would finish quickly and I’d be on my way, but with ~1,800 table locks since Spacewalk was running, I had to first stop Spacewalk services, then delete the table (through a “TRUNCATE rhntaskqueue” would have done it also).

[me@work ~]$ date
Mon Aug 17 21:37:53 CDT 2015
[me@work ~]$ sudo spacewalk-sql -i
[sudo] password for <thisguy> :
psql (8.4.20)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.
rhnschema=# select * from rhntaskqueue;
 org_id |           task_name            | task_data  | priority |           earliest           
--------+--------------------------------+------------+----------+-------------------------------
      1 | update_server_errata_cache     | 1000012176 |        0 | 2015-08-17 19:27:52.318568-05
... some others
      1 | update_errata_cache_by_channel |        156 |        0 | 2015-08-11 12:51:16.753-05
(14 rows)

So, with that, I’m pretty happy to have figured this out and hopefully it saves someone else working with Spacewalk days/weeks/months of restarting services to get it working.  Now hopefully I can avoid restarting Taskomatic and having hundreds of notification e-mails sent out to the poor souls I’ve registered on the system.