Author |
Message
|
Cliff |
Posted: Mon Jan 21, 2002 4:29 am Post subject: |
|
|
Centurion
Joined: 27 Jun 2001 Posts: 145 Location: Wiltshire
|
Having upgraded from 2.0.1 to 2.0.2 CSD1, I thought I'd try out the 'validate' functionality in the MQINPUT node to parse an incoming message. It would appear that backout processing is not working correctly if there is an error trapped in the MQINPUT node:
Define an input queue IN with backout threshold=0 and requeue queue name=BACKOUT. Define local queue BACKOUT.
Create a message flow with an MQINPUT node with its out terminal wired to an MQOUTPUT node, message domain=XML, transaction mode=yes and check the 'validate' box.
So, I would expect an incoming persistent message in invalid XML format to fail parsing, be rolled back onto IN, be processed again and this time routed to the BACKOUT queue. But no, the message flow loops.
Now I thought I had a pretty good handle on MQSI's transactionality and backout processing, but I'm baffled. It would seem that when the error is in the input node itself, it all goes horribly wrong. I have wired trace nodes to the catch and fail terminals to be absolutely sure the message is not propagated there (it isn't) and a debug level trace records the parser error on the first iteration (expected) but on subsequent iterations of the loop only records that it has created an XML parser.
Can anyone comment on this? Is this a known error? Have I missed a trick somewhere?
Thanks in advance - Cliff |
|
Back to top |
|
 |
EddieA |
Posted: Tue Jan 22, 2002 12:55 pm Post subject: |
|
|
 Jedi
Joined: 28 Jun 2001 Posts: 2453 Location: Los Angeles
|
Cliff,
You you to set the Backout Threshold higher than 0.
Cheers,
_________________ Eddie Atherton
IBM Certified Solution Developer - WebSphere Message Broker V6.1
IBM Certified Solution Developer - WebSphere Message Broker V7.0 |
|
Back to top |
|
 |
Cliff |
Posted: Wed Jan 23, 2002 3:11 am Post subject: |
|
|
Centurion
Joined: 27 Jun 2001 Posts: 145 Location: Wiltshire
|
Sorry Eddie, but that makes no difference. If a subflow is wired to the failure terminal processing is not propagated there, either.
I suspect IBM have introduced a 'feature' here! This behaviour certainly breaks the documented rules. Can anyone from IBM comment? At the moment, I'll have to advise my client not to use this function.
Cheers - Cliff |
|
Back to top |
|
 |
MVO |
Posted: Mon Oct 21, 2002 12:53 pm Post subject: |
|
|
 Centurion
Joined: 09 Sep 2001 Posts: 131
|
Yes, I encountered the same problem:
- set backoutthreshold to 1
- set backout queue to an existing local queue
MQSI goes into an infinite loop when the input message failed MRM parser.
I couldn't stop the broker, had to kill the DataFlowEngine processes. Restarting the broker did not help.
Any help will be very appreciated.
Thanks
 |
|
Back to top |
|
 |
titus |
Posted: Mon Oct 21, 2002 1:38 pm Post subject: |
|
|
Novice
Joined: 14 Oct 2002 Posts: 23
|
I do have the same problem. I have a backout out queue and put threshold count =1. Still i am getting same result as before. Any body from IBM knows about this?. |
|
Back to top |
|
 |
vmcgloin |
Posted: Tue Oct 22, 2002 12:57 am Post subject: |
|
|
Knight
Joined: 04 Apr 2002 Posts: 560 Location: Scotland
|
|
Back to top |
|
 |
JLRowe |
Posted: Tue Oct 22, 2002 4:03 am Post subject: |
|
|
 Yatiri
Joined: 25 May 2002 Posts: 664 Location: South East London
|
Cliff,
Looks like a bug to me,
If you still want to use the validate functionality you could set the timing to deferred and force the parser to parse the tree further on with a trace node or with a recursive ESQL procedure. |
|
Back to top |
|
 |
MVO |
Posted: Wed Oct 23, 2002 4:10 pm Post subject: |
|
|
 Centurion
Joined: 09 Sep 2001 Posts: 131
|
Hi, just noticed that MQSI will loop if you have the followings:
MQInput (validate Content and Value, timing Immediate or Complete) >> Compute node (validate Content and Value on)
I set Validate to None in my Compute node and MQSI does not loop any more.
Anyone from IBM can explain this ???
 |
|
Back to top |
|
 |
lung |
Posted: Thu Oct 24, 2002 9:42 pm Post subject: |
|
|
 Master
Joined: 27 Aug 2002 Posts: 291 Location: Malaysia
|
MVO,
If MQSI doesn't loop anymore, where does the message end up in? The Backout Queue?
Also, by setting Validate to None in the Compute node, does this affect anything?
Thanks! _________________ lung |
|
Back to top |
|
 |
MVO |
Posted: Sat Oct 26, 2002 6:30 am Post subject: |
|
|
 Centurion
Joined: 09 Sep 2001 Posts: 131
|
I have the following set up:
MQInput (MRM parser, complete validation on) >> Compute node (more MRM field parsing, validate none) with a failure terminal and an out terminal defined.
I also define a backout queue.
1) if the message fails parsing on MQInput, it goes to the backout queue. MQSI validates the message thoroughly i.e. syntax, data value ...
2) if the field fails parsing in the Compute node, it goes to the failure terminal - not the Backout queue. With Validate None, MQSI only validates field length but does not take into account data value, syntax... You will have to add logic to validate the others in subsequent Compute node. |
|
Back to top |
|
 |
kirani |
Posted: Sun Oct 27, 2002 11:24 am Post subject: |
|
|
Jedi Knight
Joined: 05 Sep 2001 Posts: 3779 Location: Torrance, CA, USA
|
MVO wrote: |
- set backout queue to an existing local queue
|
Use another queue as backout queue than your input queue. Failed message once sent to backout queue will be picked up again for processing by MQInput node thus, going into infinite loop.
Following thread explains more about message rollback ..
http://www.mqseries.net/phpBB2/viewtopic.php?t=5632&highlight=backout _________________ Kiran
IBM Cert. Solution Designer & System Administrator - WBIMB V5
IBM Cert. Solutions Expert - WMQI
IBM Cert. Specialist - WMQI, MQSeries
IBM Cert. Developer - MQSeries
|
|
Back to top |
|
 |
MVO |
Posted: Mon Oct 28, 2002 5:40 am Post subject: |
|
|
 Centurion
Joined: 09 Sep 2001 Posts: 131
|
Kiran,
of course we're setting the backout queue different from the input queue !!! The problem here is MQSI still loops if you turn Validation on on subsequent nodes. That's why I had to set Validate to NONE !!!
Unless we were not very clear in all posts !!! |
|
Back to top |
|
 |
|