Author |
Message
|
smdavies99 |
Posted: Mon Aug 30, 2010 1:51 am Post subject: Collector Node Catch Terminal Opps! |
|
|
 Jedi Council
Joined: 10 Feb 2003 Posts: 6076 Location: Somewhere over the Rainbow this side of Never-never land.
|
Here is the situation.
A collector node is setup and receives the collection and propagates it out to a Compute Node.
Something goes wrong in the Compute Node and an exception is thrown,
So being a good citizen, you have collected a Trace node to the Catch Terminal of the collector node.
You are directing the output to a File. The trace output is
Code: |
${CURRENT_TIMESTAMP}
${ExceptionList}
|
All so far is fine and dandy.
My question is how many Times will the TimeStamp and ExceptionList be written to the Trace Node log file.
Note. the word WILL. not Should. If it was Should then the answers is naturally 1.
Platform Windows Server 2003
Broker 7.0.0.1.
This is repeatable. I put a Throw Node after the compute Node and I am seeing the text in the node in the ExceptionList.
The same thing happens with errors when processing Expired Collections. _________________ WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995
Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions. |
|
Back to top |
|
 |
fjb_saper |
Posted: Mon Aug 30, 2010 9:36 am Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
Will and Should -- 1 time per message in the collection when the error was thrown...
If you want it to happen only once you need to wire differently...
But then that's only my opinion...  _________________ MQ & Broker admin |
|
Back to top |
|
 |
smdavies99 |
Posted: Mon Aug 30, 2010 1:06 pm Post subject: |
|
|
 Jedi Council
Joined: 10 Feb 2003 Posts: 6076 Location: Somewhere over the Rainbow this side of Never-never land.
|
Sorry fjb, you are wrong.
Agree that it should appear once. The complete collection is passed as one item in Root to the subsequent nodes.
Actually?
It keeps on repeating itself again and again and again.
I can see thist from the Trace Node that is set to output the TimeStamp and the ExceptionList. The same exceptionlist is output every time it repeats.
Methinks this is PMR territory unless someone can come up with an alternative?
Just to be clear, when you use the collector node, you have to really treat the before & after collector node as TWO Separate Flows. Because of the fact that the Collector Node has both a Catch & Failure terminal, it is just like a normal input node.
So I wire up a TraceNode to the Catch Terminal. Configure it to output to a file and watch the side growing and growing. In the end, I give up and stop the flow.
To test this further, I wired a ThrowNode at the end of the normal (& successful) Out Terminal (Collection Complete). I configured the ThrowNode to have some text that would ensure that the ExceptionList was coming from there. ( "Pluggh was Here"). This was recorded in the last stanza of every ExceptionList written to the log.
As I said, I think this is PMR territory. Now I just have to setup a flow that will make it simple for the Support people to replicate.
That said, any hints of how I could stop this would be nice. _________________ WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995
Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions. |
|
Back to top |
|
 |
fjb_saper |
Posted: Mon Aug 30, 2010 1:52 pm Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
This looks like PMR worthy.  _________________ MQ & Broker admin |
|
Back to top |
|
 |
mqjeff |
Posted: Mon Aug 30, 2010 3:02 pm Post subject: |
|
|
Grand Master
Joined: 25 Jun 2008 Posts: 17447
|
I think it's documented that throwing an exception from the catch terminal of the Collector node will cause an infinite loop.
I've just forgotten where at this exact second. |
|
Back to top |
|
 |
smdavies99 |
Posted: Mon Aug 30, 2010 9:49 pm Post subject: |
|
|
 Jedi Council
Joined: 10 Feb 2003 Posts: 6076 Location: Somewhere over the Rainbow this side of Never-never land.
|
mqjeff wrote: |
I think it's documented that throwing an exception from the catch terminal of the Collector node will cause an infinite loop.
|
I'm not doing that.
When you get a complete (or expired) collection, a message is propagated by the node. In the case of a complete collection, this comes out of the 'out' terminal. For an incomplete collection, the collection timeout fires and it comes out of the 'expired' terminal.
The condition happens with either event.
so you get something out of the Node and you go merrily on your way processing the data.
Then something unforseen happens. Say a DB Error and you Throw and exception.
You have forseen this eventuality and have put some exception handler code connected to the Catch Terminal.
The ExceptionList that gets propagated out of the Catch Terminal is repeated Ad infinitum.
I was saying that if you put a Throw Node on the 'out' terminal and code something unique into the throw message, you will see the repeting ad-infinitum exceptionList being propagated out of the Catch Terminal.
IMHO, the only possible workaround is to wire the output of the 'out' terminal to an MQOutputNode and let another flow do the post collection completion work. Sigh.
The limitations of problems with the Catch terminal are also a barrier to using it in other places. Sigh (again). _________________ WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995
Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions. |
|
Back to top |
|
 |
goffinf |
Posted: Thu Jan 20, 2011 8:21 am Post subject: |
|
|
Chevalier
Joined: 05 Nov 2005 Posts: 401
|
Using version: 6.1.0.3
Quote: |
I was saying that if you put a Throw Node on the 'out' terminal and code something unique into the throw message, you will see the repeting ad-infinitum exceptionList being propagated out of the Catch Terminal. |
We have just started using the Collector node. I saw this thread and wanted to see whether the behaviour you described happens for me.
The flow is MQInput -> Collector (out) -> Compute -> Throw
Collector (catch) -> MQOutput
The Collector node has quanity is set to 2.
The out terminal is connected to a Compute node.
The Catch terminal is connected to an MQOutput node.
Two messages are sent and the message is propagated to the out terminal. All good so far.
I do some compute logic on the collector message and then wired a THROW node to the out of the Compute.
The outcome was that 2 messages were sent to the MQOutput queue.
This seems like its the correct behaviour. You probably *do* want the Collector messages to be sent to a failure queue or such like in the event of an downstream exception. I didn't see any behaviour where messages were continually sent to the MQOutput ?
The only strange behaviour I saw was the messages of the output queue were EMPTY ?? (no idea why though - there is definately a valid message coming out of the Collector (out) and the Compute node before it hits the Throw).
In my *real* flow there is a bunch of work that happens after the Collector, including other Collectors.
Is this different to what you experienced ?
Would you still recommend implementing Collector nodes as :-
flow1
------
MQInput (FLOW1_IN) -> Collector1 -> Compute -> MQOutput (FLOW2_IN)
flow2
------
MQInput(FLOW2_IN) -> Collector2 -> Compute -> MQOutput (FLOW3_IN)
etc ....
Actually maybe even move the Compute to the start of the next flow so that no work other than an MQPUT occurs after the Collector (out) as in :-
flow1
------
MQInput (FLOW1_IN) -> Collector1 (out) -> MQOutput (FLOW2_IN)
flow2
------
MQInput(FLOW2_IN) -> Compute -> Collector2 (out)-> MQOutput (FLOW3_IN)
That is, before doing too much work after the Collector (out), maybe not even the Compute, go straight to MQ and start again from there ??
Cheers
Fraser. |
|
Back to top |
|
 |
alewis |
Posted: Thu Jan 20, 2011 8:54 am Post subject: |
|
|
Novice
Joined: 20 Aug 2006 Posts: 13
|
I had created a PMR for this and fix is provided in fix pack 2 but if you are using MB 7.0.0.1 use APAR IC71265 |
|
Back to top |
|
 |
smdavies99 |
Posted: Thu Jan 20, 2011 9:40 am Post subject: |
|
|
 Jedi Council
Joined: 10 Feb 2003 Posts: 6076 Location: Somewhere over the Rainbow this side of Never-never land.
|
It is good to know that there is a fix for this.
If you can't implement the APAR or wait for the Fixpack then the following will 'sort it'
Put a Try-Catch Node on the output Terminals of the Collector Node. These will form an inpenetrable barrier shielding the buggy Collector Node Catch processing from ever being used. _________________ WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995
Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions. |
|
Back to top |
|
 |
|