|
RSS Feed - WebSphere MQ Support
|
RSS Feed - Message Broker Support
|
 |
|
Stalling on Compute Node |
« View previous topic :: View next topic » |
Author |
Message
|
catwood2 |
Posted: Wed May 19, 2004 6:33 am Post subject: Stalling on Compute Node |
|
|
Centurion
Joined: 17 May 2002 Posts: 108
|
I have a compute node (code below) that is part of my error flow and assigns exception information to environment variables. I have placed a trace node before and after the compute node.
When I send a message with bad xml - I get the expected Parser Exception and the compute node behaves as expected.
When I send a message that generates a User Exception - the message passes thru the trace node before the compute node and never makes it out the other side. I have to stop the broker and remove the message to restore processing. Running a trace on the flow doesn't do me any good b/c it never completes processing on the compute node. Pointers appreciated.
The trace of the User Exception before the compute node (followed by compute node code):
Quote: |
(
(0x1000000)Variables = (
(0x3000000)TSTAMP = 1084974867
(0x3000000)MsgContentError = 'ERRyyyy: EAI Transformation Table query returned no results for Message_Type, Source_Appl, Target_Appl, Message_Version combination'
)
)
AND
(
(0x1000000)RecoverableException = (
(0x3000000)File = '/build/S210_P/src/DataFlowEngine/ImbComputeNode.cpp'
(0x3000000)Line = 453
(0x3000000)Function = 'ImbComputeNode::evaluate'
(0x3000000)Type = 'ComIbmComputeNode'
(0x3000000)Name = 'a90d56c1-fb00-0000-0080-aca23f0202a4'
(0x3000000)Label = 'CoreTEx.VALIDATE_AND_TRANSFORM'
(0x3000000)Text = 'Caught exception and rethrowing'
(0x3000000)Catalog = 'WMQIv210'
(0x3000000)Severity = 3
(0x3000000)Number = 2230
(0x1000000)UserException = (
(0x3000000)File = '/build/S210_P/src/DataFlowEngine/ImbRdl/ImbRdlThrowExceptionStatements.cpp'
(0x3000000)Line = 160
(0x3000000)Function = 'SqlThrowExceptionStatement::execute'
(0x3000000)Type = 'ComIbmComputeNode'
(0x3000000)Name = 'a90d56c1-fb00-0000-0080-aca23f0202a4'
(0x3000000)Label = 'CoreTEx.VALIDATE_AND_TRANSFORM'
(0x3000000)Text = 'User Generated SQL 'USER' exception'
(0x3000000)Catalog = 'WMQIv210'
(0x3000000)Severity = 1
(0x3000000)Number = 2951
)
)
) |
Compute node code:
Code: |
SET OutputRoot = InputRoot;
-- Enter SQL below this line. SQL above this line might be regenerated, causing any modifications to be lost.
-- Enter SQL below this line. SQL above this line might be regenerated,
-- causing any modifications to be lost.
-- This Variable determines whether Specific or General Diagnostic
-- Information is generated.
DECLARE IsSpecific Boolean;
-- Can be dynamically set using the Environment Variable.
SET IsSpecific = True;
DECLARE I Integer;
DECLARE J Integer;
SET J = CARDINALITY("InputRoot".*[]);
SET I = 1;
-- Copying(Properties,MQMD,other headers) the Message Tree except for
-- the Body to the Output.
While I < J do
SET OutputRoot.*[I] = InputRoot.*[I];
SET I=I+1;
End While;
-- Sets the Output Diagnostic Message's Format to be XML.
--SET "OutputRoot"."Properties"."MessageFormat" = 'XML';
--SET OutputRoot.MQMD.Expiry = -1;
-- Source of the message, which caused the error.
SET Environment.Variable.Error.MessageSource.QueueManager =
"InputRoot".MQMD.ReplyToQMgr;
SET Environment.Variable.Error.MessageSource.Queue =
"InputRoot".MQMD.SourceQueue;
-- If isSpecific is True Specific Diagnostic Information is Generated.
If IsSpecific = True then
-- Point to the First Child to the ExceptionList Root.
DECLARE Location character;
DECLARE Diagnostics character;
DECLARE DiagnosticsInfo character;
DECLARE Width Integer;
SET Width = 1;
DECLARE Path REFERENCE TO InputExceptionList.*[Width];
-- Check whether the Width of the Exception Tree is more and Proceed.
While LastMove(Path) do
SET Diagnostics = '';
SET DiagnosticsInfo = '';
While FieldName(Path) = 'RecoverableException' or FieldName(Path) =
'DatabaseException' or
FieldName(Path) = 'ConversionException' or FieldName(Path) =
'ParserException' or FieldName(Path) = 'UserException'
do
IF Length(Path.Label) > 0 THEN
SET Location = Path.Label;
End if;
IF Length(Path.Text) > 0 THEN
SET Diagnostics = Diagnostics || Path.Text || '. ';
End if;
MOVE Path Lastchild;
End while;
-- Construct the Specific Diagnostic Message.
MOVE Path Parent;
-- Determine the source of message which caused the error.
SET Environment.Variable.Error.Detail[Width].ExceptionType = FieldName(Path);
SET Environment.Variable.Error.Detail[Width].ErrorNumber = Path.Number;
SET Environment.Variable.Error.Detail[Width].SeverityLevel = Path.Severity;
SET Environment.Variable.Error.Detail[Width].ErrorSource = Location;
SET Environment.Variable.Error.Detail[Width].DiagnosticMessage= Diagnostics;
MOVE Path FirstChild;
-- while loop included to generalize coding to ensure future
-- compatiblity in case of change in tree structure and to move
-- the insert's Field.
While FieldName(Path) <> 'Insert' do
MOVE Path NextSibling;
End while;
-- while loop to traverse all the inserts and construct the
-- additional diagnostic message.
While LastMove(Path) do
IF Length(Path.Text) > 0 THEN
SET DiagnosticsInfo = DiagnosticsInfo || Path.Text || '. ';
End if;
MOVE Path NextSibling;
End while;
SET Environment.Variable.Detail[Width].CauseOfError = DiagnosticsInfo;
SET Environment.Variable.Detail[Width].MessageState =
cast(bitstream(InputBody) as CHAR ccsid 437);
SET Width = Width +1;
MOVE Path TO InputExceptionList.*[Width];
End while;
-- Else part to generate diagnostic message which has the structure
-- of all the trees as when the exception had occured
else
SET I = 1;
While I < J do
SET Environment.Variable.Error.*[I] = InputRoot.*[I];
SET I = I + 1;
End while;
SET Environment.Variable.Error.Environment = Environment;
SET Environment.Variable.Error.LocalEnvironment = InputLocalEnvironment;
SET Environment.Variable.Error.MessageState =
cast(bitstream(InputBody) as CHAR ccsid 437);
SET Environment.Variable.Error.ExceptionList = InputExceptionList;
End if;
SET Environment.Variable.Error.TimeStamp =
SUBSTRING(CAST(CURRENT_TIMESTAMP AS CHAR) FROM 12 FOR 23);
SET Environment.Variables.ErrorFlag = 'Y'; |
|
|
Back to top |
|
 |
fschofer |
Posted: Wed May 19, 2004 6:46 am Post subject: |
|
|
 Knight
Joined: 02 Jul 2001 Posts: 524 Location: Mainz, Germany
|
Hi,
i assume your message with the user exception somehow generates
another exceptions in your compute node.
Put a trycatch node before your error handling compute node
and wire the catch terminal of the trycatch node to another trace.
This way your message will not end in a loop.
Then you will also be able to run a debug trace of your flow
which will show you what happened.
Greetings
Frank |
|
Back to top |
|
 |
catwood2 |
Posted: Wed May 19, 2004 9:07 am Post subject: |
|
|
Centurion
Joined: 17 May 2002 Posts: 108
|
Frank,
Thanks for the pointer.
I added the TryCatch and Trace wired as you suggested. Then I deployed the flow and got back a confirmation in the Log pane. I went to test flow and ran the trace. As you can see, the trace ends after message propagated out of TryCatch - any other suggestions would be MUCH appreciated. thanks
Code: |
running the command changetrace ZMCNXD002 -u -e default -f CoreTEx -l normal -r BIP8071I: Successful command completion.
test your flow
BIP2087E: Broker ZMCNXD002 was unable to process the internal configuration message.
The entire internal configuration message failed to be processed successfully.
The internal configuration message failed to be processed, use the messages following this
message to determine the reasons for the failure.
BIP4041E: Execution group 'default' received an invalid configuration message. See the fol
lowing messages for details of the error.
The message broker received an invalid configuration message and has not updated its confi
guration. This can arise as a result of errors in the specification of either message flo
ws or message sets which the configuration manager was unable to detect. It can also resu
lt from a message flow requiring a type of node that is not supported by the broker instal
lation, from the broker having become out of step with the configuration database or from
other applications sending extraneous messages to the broker's configuration queues (SYSTE
M.BROKER.ADMIN.QUEUE & SYSTEM.BROKER.EXECUTIONGROUP.QUEUE).
Check the relevant message flow and message set definitions, check that all necessary plug
-ins are installed, perform a complete redeploy of the broker's configuration and ensure t
hat no applications are writing to the broker's configuration queues.
BIP2242E: Message flow 'CoreTEx' could not be reconfigured because it remained busy for lo
nger than the timeout period of '300000'
A request to reconfigure the message flow 'CoreTEx' was received but this could not be pro
cessed because it remained busy processing a message for longer than the timeout specified
.
This can be caused by the timeout being too short considering the complexity of the flow a
nd the size of the messages being processed. In such cases the timeout should be increased
. It can also be caused by message flows containing infinite loops. In such cases the SQL
should be corrected.
BIP8036E: Negative response received.
This command sends an internal configuration message to the broker, the response received
indicated that the internal configuration message was unsuccessful.
Check that the MQSeries transport is available. Check the system log for further informati
on.
BIP8071I: Successful command completion.
BIP8071I: Successful command completion.
Timestamps are formatted in local time, local time is GMT.
2004-05-19 16:40:24.054088 2057 UserTrace BIP2632I: Message received and propagate
d to 'out' terminal of MQ input node 'CoreTEx.SOURCE_IN_QUEUE'.
2004-05-19 16:40:24.054586 2057 UserTrace BIP6060I: Parser type 'Properties' creat
ed on behalf of node 'CoreTEx.SOURCE_IN_QUEUE' to handle portion of incoming message of le
ngth 0 bytes beginning at offset '0'.
2004-05-19 16:40:24.055187 2057 UserTrace BIP6061I: Parser type 'MQMD' created on
behalf of node 'CoreTEx.SOURCE_IN_QUEUE' to handle portion of incoming message of length '
364' bytes beginning at offset '0'. Parser type selected based on value 'MQHMD' from previ
ous parser.
2004-05-19 16:40:24.055833 2057 UserTrace BIP6061I: Parser type 'XML' created on b
ehalf of node 'CoreTEx.SOURCE_IN_QUEUE' to handle portion of incoming message of length '1
0' bytes beginning at offset '364'. Parser type selected based on value 'XML' from previou
s parser.
2004-05-19 16:40:24.297634 2057 UserTrace BIP2231E: Error detected whilst processi
ng a message 'CoreTEx.SOURCE_IN_QUEUE'.
The message broker detected an error whilst process
ing a message in node 'CoreTEx.SOURCE_IN_QUEUE'. The message has been augmented with an ex
ception list and has been propagated to the node's failure terminal for further processing
.
See the following messages for details of the error
.
2004-05-19 16:40:24.297758 2057 RecoverableException BIP2230E: Error detected whils
t processing a message in node 'CoreTEx.VALIDATE_AND_TRANSFORM'.
The message broker detected an error whilst process
ing a message in node 'CoreTEx.VALIDATE_AND_TRANSFORM'. An exception has been thrown to cu
t short the processing of the message.
See the following messages for details of the error
.
2004-05-19 16:40:24.297838 2057 ParserException BIP5009E: XML Parsing Errors have o
ccurred.
Errors have occurred during parsing of XML.
See the following messages for details of the error.
2004-05-19 16:40:24.297838 2057 ParserException BIP5009E: XML Parsing Errors have o ccurred.
Errors have occurred during parsing of XML.
Review further error messages for an indication to
the cause of the errors.
2004-05-19 16:40:24.297889 2057 ParserException BIP5004E: XML parsing error (Invali
d document structure) encountered on line 1 column 1 while parsing element XML.
The above error was reported by the generic XML par
ser.
This message is usually caused by a badly-formed XML message. Check that the XML message being passed in is a well-formed XML message that ad
heres to the XML specification. Note that the line number and column number quoted above g
ive the position where the parser discovered the problem. The actual error may be earlier
in the message. Internal error codes : (22), ().
2004-05-19 16:40:24.298130 2057 UserTrace BIP4080I: Message propagated to try term
inal from try-catch node 'CoreTEx.TryCatch1'.
The try-catch node 'CoreTEx.TryCatch1' has received
a message and is propagating it to any nodes connected to its try terminal.
No user action required.
Threads encountered in this trace:
2057 |
|
|
Back to top |
|
 |
catwood2 |
Posted: Wed May 19, 2004 11:56 am Post subject: |
|
|
Centurion
Joined: 17 May 2002 Posts: 108
|
Thought I would post the exception list tree for both the ParserException message (which works) and the UserException (which doesn't). UserException has no inserts....
UserException:
Code: |
(
(0x1000000)RecoverableException = (
(0x3000000)File = '/build/S210_P/src/DataFlowEngine/ImbComputeNode.cpp'
(0x3000000)Line = 453
(0x3000000)Function = 'ImbComputeNode::evaluate'
(0x3000000)Type = 'ComIbmComputeNode'
(0x3000000)Name = 'a90d56c1-fb00-0000-0080-aca23f0202a4'
(0x3000000)Label = 'New_TEx.VALIDATE_AND_TRANSFORM'
(0x3000000)Text = 'Caught exception and rethrowing'
(0x3000000)Catalog = 'WMQIv210'
(0x3000000)Severity = 3
(0x3000000)Number = 2230
(0x1000000)UserException = (
(0x3000000)File = '/build/S210_P/src/DataFlowEngine/ImbRdl/ImbRdlThrowExceptionStatements.cpp'
(0x3000000)Line = 160
(0x3000000)Function = 'SqlThrowExceptionStatement::execute'
(0x3000000)Type = 'ComIbmComputeNode'
(0x3000000)Name = 'a90d56c1-fb00-0000-0080-aca23f0202a4'
(0x3000000)Label = 'New_TEx.VALIDATE_AND_TRANSFORM'
(0x3000000)Text = 'User Generated SQL 'USER' exception'
(0x3000000)Catalog = 'WMQIv210'
(0x3000000)Severity = 1
(0x3000000)Number = 2951
)
)
) |
ParserException:
Code: |
(
(0x1000000)RecoverableException = (
(0x3000000)File = '/build/S210_P/src/DataFlowEngine/ImbComputeNode.cpp'
(0x3000000)Line = 453
(0x3000000)Function = 'ImbComputeNode::evaluate'
(0x3000000)Type = 'ComIbmComputeNode'
(0x3000000)Name = 'a90d56c1-fb00-0000-0080-aca23f0202a4'
(0x3000000)Label = 'New_TEx.VALIDATE_AND_TRANSFORM'
(0x3000000)Text = 'Caught exception and rethrowing'
(0x3000000)Catalog = 'WMQIv210'
(0x3000000)Severity = 3
(0x3000000)Number = 2230
(0x1000000)ParserException = (
(0x3000000)File = '/build/S210_P/src/MTI/MTIforBroker/GenXmlParser2/XmlImbParser.cpp'
(0x3000000)Line = 339
(0x3000000)Function = 'XmlImbParser::parseFirstChild'
(0x3000000)Type = ''
(0x3000000)Name = ''
(0x3000000)Label = ''
(0x3000000)Text = 'XML Parsing Errors have occurred'
(0x3000000)Catalog = 'WMQIv210'
(0x3000000)Severity = 3
(0x3000000)Number = 5009
(0x1000000)ParserException = (
(0x3000000)File = '/build/S210_P/src/MTI/MTIforBroker/GenXmlParser2/XmlBrokerAsgardParser.cpp'
(0x3000000)Line = 762
(0x3000000)Function = 'XmlBrokerAsgardParser::error'
(0x3000000)Type = ''
(0x3000000)Name = ''
(0x3000000)Label = ''
(0x3000000)Text = 'An error has been reported by the BIPXML4C component.'
(0x3000000)Catalog = 'WMQIv210'
(0x3000000)Severity = 3
(0x3000000)Number = 5004
(0x1000000)Insert = (
(0x3000000)Type = 2
(0x3000000)Text = '22'
)
(0x1000000)Insert = (
(0x3000000)Type = 5
(0x3000000)Text = ''
)
(0x1000000)Insert = (
(0x3000000)Type = 2
(0x3000000)Text = '1'
)
(0x1000000)Insert = (
(0x3000000)Type = 2
(0x3000000)Text = '1'
)
(0x1000000)Insert = (
(0x3000000)Type = 5
(0x3000000)Text = 'Invalid document structure'
)
(0x1000000)Insert = (
(0x3000000)Type = 5
(0x3000000)Text = 'XML'
)
)
)
)
) |
|
|
Back to top |
|
 |
catwood2 |
Posted: Wed May 19, 2004 12:24 pm Post subject: |
|
|
Centurion
Joined: 17 May 2002 Posts: 108
|
For the code to work - I need to throw my user exception with inserts. I wasn't doing this and was looping in the code (which, I obviously borrowed or I never would've stumbled into a glitch like this). thx |
|
Back to top |
|
 |
|
|
 |
|
Page 1 of 1 |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|
|
|