Reported by mjeung (1240615062|%O ago)
This issue is actually 3 different closely related issues, all somewhat related to the (now fixed) http://www.openamq.org/issue:53
When I run this command against a broker running in Direct Mode:
./amq_client -x 2097113
This message is displayed:
22:40:58: I: opened connection to OpenAMQ Server/1.4b2
22:40:58: I: (1) sending 1 messages to server…
22:40:58: I: (1) reading messages back from server…
Panic at 2009-04-24 22:40:58 from WireAPI
DMP message too large (>2097152 bytes)
amq_client: amq_client_agent.c:20622: action_write_direct_content: Assertion ‘rc == 0’ failed.
Abort (core dumped)
However, the message that I've sent is smaller 2097152 bytes. Perhaps this is because some additional header information is being added to the message during transit? The error message is a little misleading, because 2097113 < 2097152.
If I restart the amq_server from a completely clean slate in direct mode, and try running these commands:
(A.) ./amq_client -x 2097111
(B.) ./amq_client -x 2097112
(C.) ./amq_client -x 2097113
A always succeeds.
B sometimes(!) succeeds.
C never succeeds.
It seems weird that (B) sometimes succeeds. It seems like it should always succeed, or always fail.
Ultimately, the above two issues are relatively minor - more like curiousities that I've run into. The real question I have is this: Are there any plans to allow Direct Mode to send/receive messages that are larger than 2097152 bytes? I know in the past, some discussion of segmenting the messages was kicked around. Has there a been a decision one way or another as to whether or not Direct Mode will support larger messages?
My specific use case is this: In general, I'm going to be sending a bunch of very small messages back and forth between applications. The overall system has some low-latency, high-throughput requirements, so I really would prefer to be using Direct Mode if possible. However, every now and then some of the applications need to be able to send larger messages. Currently, because the Direct Mode message size limit, this basically means I can't used Direct Mode.
Basically, I want to take advantage of the performance benefits for Direct Mode when I'm sending small messages, but I don't want this too preclude me from sending larger messages.
If this doesn't make sense, would it be possible to allow the bucket_size to be a dynamically configurable option?
It looks like the IPR_BUCKET_MAX_SIZE is defined in a couple of places inside base2/ipr:
$ grep IPR_BUCKET_MAX_SIZE * | grep define
ipr_bucket.h:#define IPR_BUCKET_MAX_SIZE 2097152
ipr_bucket.icl:#define IPR_BUCKET_MAX_SIZE 2097152
ipr.h:#define IPR_BUCKET_MAX_SIZE 2097152
Are there any significant drawbacks to increasing the bucket size to a larger value?
I'm very interested to get your thoughts on this matter. Thanks!
No files attached to this page.