[Design of Messaging on JBoss (Messaging/JBoss)] - Re: Changes on the JBM stack on JBoss5
by bstansberry@jboss.com
The differences in the control channel config:
UDP.singleton_name. In the AS this instance of the UDP transport protocol is shared across numerous channels. Giving the transport a name is what allows this to work.
UDP.mcast_addr and mcast_port. These are just the values for the shared transport rather than the old JBM-specific ones. Don't see what difference this would make.
UDP.loopback=true. We were seeing inscrutable startup failures for the AS when this was false on machines that had improperly configured multicast. With true you get startup failures (nodes can't cluster because multicast doesn't work) but they aren't inscrutable. I'd consider changing this back if we could somehow establish it's a cause of whatever your problem is.
UDP.enable_bundling=false is just putting in the config file the default you had before. No change.
UDP.ip_ttl=2. Longstanding AS default value to limit multicast propagation. In most testsuites, multicast doesn't even need to propagate off the test machine, so I doubt this is your problem.
UDP.timer.num_threads=12. Your unspecified value defaults to 4. This is because the transport is meant to be shared between different services in the AS, so the number of threads available to run timer tasks is increased.
UDP.thread_pool.min_threads="20". Old value = 1. With thread_pool.queue_enabled="true" and thread_pool.queue_max_size="1000", once that 1 min_thread was carrying a message up the stack or handling it at the application level, you would have to receive 1000 more messages and fill the queue before a 2nd thread would be created in the pool to handle to take a message off the queue. With a shared transport, it's possible those messages are for completely unrelated services and while the 1 thread is busy say in the session replication cache, 1000 JBM messages pile up in the queue. You need a larger # of min threads to ensure threads are available to read the queue. Testing with just one showed very poor performance in multi-node clusters. I can't see why having more threads available in a pool would cause a problem.
UDP.thread_pool.rejection_policy="discard". Was "run". You can hang the entire cluster with "run", since it allows the single thread that reads messages off the wire to end up going into code that blocks in NAKACK or UNICAST or even into arbitrary application code. With multi-node clusters in tests under load, we found it was quite easy to hang the cluster with "run".
UDP.oob_thread_pool.max_threads="20". See UDP.thread_pool.min_threads="20" above.
UDP.oob_thread_pool.rejection_policy="run" Was "Run". This is just consistency in capitalization.
FD.timeout and maxTries. With old values, would take 50 secs to detect a hung node. That's a long time. That was reasonable in AS 4, where the single-threaded channel and no OOB thread pool made it quite possible for FD heartbeats to go unacknowledged for a long time while the single thread was busy doing something else. With the thread pool and OOB messages, there's no reason FD heartbeats should go unacknowledged for so long, so we reduced the timeout period to 30 secs.
GMS.shun="true". Previous value of false makes no logical sense in conjunction with FD.shun="true". This was discussed on a JBM forum thread a while back.
TBH, I don't see why any of these would cause the error you reported, but until I see more details I don't really know what the error was.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4187165#4187165
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4187165
17 years, 5 months
[Design of EJB 3.0] - Re: EJBTHREE-1396 MockServer must report startup / shutdown
by ALRubinger
Figured you're waiting on pins and needles for my opinion. ;)
* Methods like "hasMonitoringSupport" violate OO practices; this is what inheritance is for. You can ensure that a MockServer has this support by removing "addMonitoringSupport(int port)" in favor of another argument to a MonitorableMockServer constructor if indeed being "Monitorable" is a separate add-on capability (which might even come with its own interface).
* Constants like SERVER_STARTING should be marked "final"?
* MockServerMonitor has hardcoded "localhost" used by the ServerSocket. If we've gotta specify a port, might as well specify a host bind address (to bind to 2 unique hosts using same port for example)
* In MockServerMonitor.waitForServerStartup(), there's a "while not started" loop. Let's throw a Thread.sleep(100) or something in there as to relax the CPU a bit
* RemoteAccessTestCase now has "mockServerMonitor.waitForServerStartup();", which will block indefinitely - what if server does not start? Recommend making a "private volatile boolean remoteServerStarted" field, spawning off the check to "waitForServerStartup" into a j.u.c.FutureTask, and then call "getResult()" on it with a sensible timeout value. The FutureTask's job would be to set the "remoteServerStarted" to true, and then the RemoteAccessTestCase can poll for that. In the case of a timeout of the FutureTask, throw an exception and fail the test.
* I put a static instance of MockServer *in* MockServer? It'd make me smile if you could remove that so we can actually start up more than one MockServer. This shouldn't be a Singleton, and even if it was, that's just bad implementation.
S,
ALR
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4187137#4187137
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4187137
17 years, 5 months