How to get rid of SIBus queue points in state DELETE_PENDING
Sometimes, when deleting a destination from a SIBus, the corresponding queue point is not deleted from the underlying messaging engine, but remains in state
DELETE_PENDING. This manifests itself in three ways:
The queue point is still visible in the runtime view of the messaging engine in the admin console. To see this, go to the admin console page for the messaging engine, switch to the "Runtime" tab and then click on "Queue points".
The MBean for the queue point is still registered by the messaging engine. The
stateattribute of that MBean will have value
Each time the messaging engine is started, the following message appears in the logs:
CWSIP0063I: The local destination <name> with UUID <uuid> has been marked for deletion.
It is not exactly clear under which conditions this issue occurs, but apparently it has to do with the existence of remote queue points, i.e. with the production or consumption of messages through a remote messaging engine.
To clean up these queue points and eliminate the recurring
CWSIP0063I messages, use the following
objName = AdminControl.makeObjectName('WebSphere:type=SIBQueuePoint,*') queuepoints = AdminControl.queryNames_jmx(objName, None) for queuepoint in queuepoints: name = queuepoint.getKeyProperty("name") if (not name.startswith("_") and AdminControl.invoke_jmx(queuepoint, 'getState', , ) == 'DELETE_PENDING'): print 'Found SIBQueuePoint in state DELETE_PENDING: ' + name irs = AdminControl.invoke_jmx(queuepoint, 'listInboundReceivers', , ) for ir in irs: AdminControl.invoke_jmx(queuepoint, 'flush', [ir], ['com.ibm.websphere.sib.admin.SIBInboundReceiver']) print 'Called flush on SIBQueuePoint for inbound receiver: ' + name cts = AdminControl.invoke_jmx(queuepoint, 'listRemoteConsumerTransmitters', , ) for ct in cts: AdminControl.invoke_jmx(queuepoint, 'flush', [ct], ['com.ibm.websphere.sib.admin.SIBRemoteConsumerTransmitter']) print 'Called flush on SIBQueuePoint for remote consumer transmitter: ' + name
flushoperations used by the script are actually deprecated, but it the documentation doesn't specify which operations should be used instead.
- The script may fail because the queue may already be deleted after the flush of the
SIBInboundReceiverobjects. In that case subsequent operations fail because the MBean no longer exist. As a workaround, simply reexecute the script.