Author |
Message
|
jefflowrey |
Posted: Tue May 23, 2006 2:40 pm Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
EddieA wrote: |
Quote: |
If you start the copy process in m071, and then immediately start your get process, then you get all messages |
But, if the GET specified Complete Message, then the GET wouldn't return anything until they were "all present and correct". It wouldn't return a partial message. And if:
Quote: |
Is the last message in the segment incorrect somehow |
Then it would fail, no matter at what point in the process the GET was issued. |
I'd expect a Get with Complete Message and Wait to return a 2033 if the wait interval expires before all the segments arrive.
I might expect something funny to occur if the putting process produces a duplicate sequence number on the segment as the last message - or produces two messages that claim to be the last segment. In that case, if the GET has started before the second message is produced, then the first "termination" message will terminate the GET with what looks like a complete set. But if the GET starts when both messages are there, then it might cause issues.
It would be helpful for hjdur to run the putting process, use amqsbcg to examine the messages and pretend to be the MQ Get and confirm that the segmentation looks right and the segmentation information in each message is correct and etc. _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
hdjur |
Posted: Tue May 23, 2006 11:24 pm Post subject: |
|
|
Centurion
Joined: 16 Sep 2004 Posts: 116 Location: Zagreb
|
First of all, I was unable to continue discussion yesterday, because I couldn't connect to www.mqseries.net. Was there any problem with this server or is it only me?
Secondly, how can I set MQMD version to MQMD_VERSION_2 from C++? There is a protected method setVersionSupported in ImqMessage class which I can't use, there is a similar method in ImqGetMessageOptions to set MQGMO version, and does that all make any difference regarding this problem I am reporting?
Because, I don't see any progress in the rest of your suggestions.
It must be that all segments of all messages are there in the original queue, and that they are correct, including last segments, if I don't receive 2033 when ... you remember what I reported. |
|
Back to top |
|
 |
hdjur |
Posted: Tue May 23, 2006 11:37 pm Post subject: |
|
|
Centurion
Joined: 16 Sep 2004 Posts: 116 Location: Zagreb
|
Correction, now I see a potential for progress in Jeff's suggestions in his last post, which I haven't read before my previous post. |
|
Back to top |
|
 |
hdjur |
Posted: Wed May 24, 2006 12:28 am Post subject: |
|
|
Centurion
Joined: 16 Sep 2004 Posts: 116 Location: Zagreb
|
I have analyzed the content of the queue with amqsbcg, and nothing indicates there is a problem in data.
Here are the numbers:
there are 17524 messages in a queue
there are 17133 distinct GroupId attributes
there are 17133 messages with MsgFlags='6'
there are 391 messages with MsgFlags='2'
there are 17133 messages with Offset='0'
there are 391 messages with Offset>'0'
there are 17524 messages with MsgSeqNumber='1'
Although, this is superficial analysis, it seems everything is O.K.
Besides that, our programmer convinces me there is no logical error
in putting application regarding that matter. |
|
Back to top |
|
 |
hdjur |
Posted: Wed May 24, 2006 1:16 am Post subject: |
|
|
Centurion
Joined: 16 Sep 2004 Posts: 116 Location: Zagreb
|
Now I realized that our programmer does not do exactly what he is told to do. Namely, instead of:
MQPUT MD.MsgFlags = MQMF_SEGMENT
MQPUT MD.MsgFlags = MQMF_SEGMENT
...
MQPUT MD.MsgFlags = MQMF_SEGMENT
MQPUT MD.MsgFlags = MQMF_LAST_SEGMENT
he does:
MQPUT MD.MsgFlags = MQMF_SEGMENT
MQPUT MD.MsgFlags = MQMF_SEGMENT
...
MQPUT MD.MsgFlags = MQMF_SEGMENT
MQPUT MD.MsgFlags = MQMF_SEGMENT + MQMF_LAST_SEGMENT
Otherwise, there would be no MsgFlags='6' messages in a queue.
Could this be the source of the problem? Because, it does not appear always, to be a problem. Sometimes, queue manager does not complain about it, and does reassembling, and sometimes (with same messages in the same queue) it returnes 2033. I didn't mention this fact at all, until now, because it seemed very strange to me. |
|
Back to top |
|
 |
hdjur |
Posted: Wed May 24, 2006 3:15 am Post subject: |
|
|
Centurion
Joined: 16 Sep 2004 Posts: 116 Location: Zagreb
|
Correction, again. Programmer is doing exactly what he is supposed to do.
If message flags of a message is set before put operation to a constant MQMF_LAST_SEGMENT (defined as 4), after put operation browsing shows a value of '6'. So, it must be normal thing, although I don't know where are this "details" documented? |
|
Back to top |
|
 |
EddieA |
Posted: Wed May 24, 2006 8:02 am Post subject: |
|
|
 Jedi
Joined: 28 Jun 2001 Posts: 2453 Location: Los Angeles
|
Quote: |
It must be that all segments of all messages are there in the original queue, and that they are correct, including last segments, if I don't receive 2033 when |
Hang on. That's not what you said earlier:
Quote: |
As I said, I receive 2033 when I try to get messages from the original |
Quote: |
there are 17524 messages in a queue
.
.
there are 17524 messages with MsgSeqNumber='1' |
That doesn't seem right, because of:
Quote: |
there are 17133 distinct GroupId attributes |
Cheers, _________________ Eddie Atherton
IBM Certified Solution Developer - WebSphere Message Broker V6.1
IBM Certified Solution Developer - WebSphere Message Broker V7.0 |
|
Back to top |
|
 |
jefflowrey |
Posted: Wed May 24, 2006 8:04 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
You need to start fresh.
In a test environment, try sending ONE segmented message. See what happens in the different cases you've mentioned - where the receiver starts before the sender has finished, and where the receiver starts after the sender has finished. _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
Nigelg |
Posted: Thu May 25, 2006 11:50 pm Post subject: |
|
|
Grand Master
Joined: 02 Aug 2004 Posts: 1046
|
Quote: |
there are 17524 messages with MsgSeqNumber='1' |
That is right. MsgSeqNumber refers to the msg sequence inside a group; all segments of a msg have the same sequence number. _________________ MQSeries.net helps those who help themselves.. |
|
Back to top |
|
 |
hdjur |
Posted: Fri May 26, 2006 4:21 am Post subject: |
|
|
Centurion
Joined: 16 Sep 2004 Posts: 116 Location: Zagreb
|
Eddie, I think Nigel is completely right. We are doing segmentation of logical messages into one or more physical messages. We do not group logical messages.
I can't reproduce the problem anymore, because I didn't make the copy of messages which produced it, and my coleague started a process expecting to receive 2033, instead of that he wasted messages.
I don't know which factor influenced not to receive 2033 this time, the same program which gets messages whith option MQGMO_COMPLETE_MSG was successful.
Thank you all for your answers and suggestions. Does anyone has a comment on 6 (not 4) value for msgflags, or setting MQMD version from C++? |
|
Back to top |
|
 |
EddieA |
Posted: Fri May 26, 2006 4:31 pm Post subject: |
|
|
 Jedi
Joined: 28 Jun 2001 Posts: 2453 Location: Los Angeles
|
Quote: |
Does anyone has a comment on 6 (not 4) value for msgflags |
Even though it's the last segment (4) it's still a segment (2) as well. Hence 6.
Cheers, _________________ Eddie Atherton
IBM Certified Solution Developer - WebSphere Message Broker V6.1
IBM Certified Solution Developer - WebSphere Message Broker V7.0 |
|
Back to top |
|
 |
|