JBoss Native SVN: r2377 - in trunk/mod_cluster/src: test/java/org/jboss/modcluster/advertise and 1 other directory.
by jbossnative-commits@lists.jboss.org
Author: pferraro
Date: 2009-03-19 14:08:43 -0400 (Thu, 19 Mar 2009)
New Revision: 2377
Modified:
trunk/mod_cluster/src/main/java/org/jboss/modcluster/advertise/impl/AdvertiseListenerImpl.java
trunk/mod_cluster/src/test/java/org/jboss/modcluster/advertise/AdvertiseListenerImplTestCase.java
Log:
Various optimizations/fixes.
Enhance unit test to validate pause/resume.
Modified: trunk/mod_cluster/src/main/java/org/jboss/modcluster/advertise/impl/AdvertiseListenerImpl.java
===================================================================
--- trunk/mod_cluster/src/main/java/org/jboss/modcluster/advertise/impl/AdvertiseListenerImpl.java 2009-03-19 10:08:11 UTC (rev 2376)
+++ trunk/mod_cluster/src/main/java/org/jboss/modcluster/advertise/impl/AdvertiseListenerImpl.java 2009-03-19 18:08:43 UTC (rev 2377)
@@ -39,7 +39,6 @@
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
-import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.catalina.util.StringManager;
import org.jboss.logging.Logger;
@@ -64,28 +63,25 @@
public static final String DEFAULT_ENCODING = "8859_1";
public static final String RFC_822_FMT = "EEE, d MMM yyyy HH:mm:ss Z";
- private static final Logger log = Logger.getLogger(AdvertiseListenerImpl.class);
+ static final Logger log = Logger.getLogger(AdvertiseListenerImpl.class);
- private int advertisePort = DEFAULT_PORT;
- private InetAddress groupAddress = null;
+ volatile boolean listening = false;
+
+ int advertisePort = DEFAULT_PORT;
+ InetAddress groupAddress = null;
private MulticastSocketFactory socketFactory;
MulticastSocket socket;
- private boolean initialized = false;
- volatile boolean listening = true;
- final AtomicBoolean running = new AtomicBoolean(false);
- final AtomicBoolean paused = new AtomicBoolean(false);
private boolean daemon = true;
- private final byte[] secure = new byte[16];
private String securityKey = null;
MessageDigest md = null;
final Map<String, AdvertisedServer> servers = new HashMap<String, AdvertisedServer>();
final MCMPHandler commHandler;
- private Thread workerThread;
+ private AdvertiseListenerWorker workerThread;
/** The string manager for this package. */
private StringManager sm = StringManager.getManager(Constants.Package);
@@ -230,70 +226,45 @@
private synchronized void init() throws IOException
{
- if (!this.initialized)
+ if (this.socket == null)
{
- this.socket = this.socketFactory.createMulticastSocket(this.groupAddress, this.advertisePort);
+ MulticastSocket socket = this.socketFactory.createMulticastSocket(this.groupAddress, this.advertisePort);
- this.socket.setTimeToLive(16);
- this.socket.joinGroup(this.groupAddress);
-
- this.initialized = true;
- }
- }
+ // Limit socket send to localhost
+ socket.setTimeToLive(0);
+ socket.joinGroup(this.groupAddress);
- private void interruptDatagramReader()
- {
- if (!this.initialized) return;
-
- try
- {
- // Restrict to localhost.
- this.socket.setTimeToLive(0);
- DatagramPacket dp = new DatagramPacket(this.secure, this.secure.length, this.groupAddress, this.advertisePort);
- this.socket.send(dp);
+ this.socket = socket;
}
- catch (IOException e)
- {
- // Ignore
- }
}
/**
* @{inheritDoc}
* @see org.jboss.modcluster.advertise.AdvertiseListener#start()
*/
- public void start() throws IOException
+ public synchronized void start() throws IOException
{
this.init();
- if (this.running.compareAndSet(false, true))
+ if (this.workerThread == null)
{
- SecureRandom random = new SecureRandom();
+ this.workerThread = new AdvertiseListenerWorker();
+ this.workerThread.setDaemon(this.daemon);
+ this.workerThread.start();
- synchronized (this.secure)
- {
- random.nextBytes(this.secure);
- this.secure[0] = 0;
- }
-
- this.paused.set(false);
this.listening = true;
-
- AdvertiseListenerWorker aw = new AdvertiseListenerWorker();
- this.workerThread = new Thread(aw);
- this.workerThread.setDaemon(this.daemon);
- this.workerThread.start();
}
}
-
+
/**
* @{inheritDoc}
* @see org.jboss.modcluster.advertise.AdvertiseListener#pause()
*/
- public void pause()
+ public synchronized void pause()
{
- if (this.running.get() && this.paused.compareAndSet(false, true))
+ if (this.workerThread != null)
{
+ this.workerThread.suspendWorker();
this.interruptDatagramReader();
}
}
@@ -302,31 +273,46 @@
* @{inheritDoc}
* @see org.jboss.modcluster.advertise.AdvertiseListener#resume()
*/
- public void resume()
+ public synchronized void resume()
{
- if (this.running.get() && this.paused.compareAndSet(true, false))
+ if (this.workerThread != null)
{
- // Genererate new private secure
- SecureRandom random = new SecureRandom();
-
- synchronized (this.secure)
- {
- random.nextBytes(this.secure);
- this.secure[0] = 0;
- }
+ this.workerThread.resumeWorker();
}
}
+ public void interruptDatagramReader()
+ {
+ if (this.socket == null) return;
+
+ DatagramPacket packet = this.workerThread.createInterruptPacket(this.groupAddress, this.advertisePort);
+
+ try
+ {
+ this.socket.send(packet);
+ }
+ catch (IOException e)
+ {
+ log.warn("Failed to interrupt socket reception", e);
+ }
+ }
+
/**
* @{inheritDoc}
* @see org.jboss.modcluster.advertise.AdvertiseListener#stop()
*/
- public void stop()
+ public synchronized void stop()
{
- if (this.running.compareAndSet(true, false))
+ // In case worker is paused
+ this.resume();
+
+ if (this.workerThread != null)
{
+ this.workerThread.interrupt();
this.interruptDatagramReader();
this.workerThread = null;
+
+ this.listening = false;
}
}
@@ -334,11 +320,12 @@
* @{inheritDoc}
* @see org.jboss.modcluster.advertise.AdvertiseListener#destroy()
*/
- public void destroy()
+ public synchronized void destroy()
{
+ // In case worker has not been stopped
this.stop();
- if (this.initialized)
+ if (this.socket != null)
{
try
{
@@ -350,7 +337,6 @@
}
this.socket.close();
- this.initialized = false;
this.socket = null;
}
}
@@ -384,74 +370,64 @@
{
return this.listening;
}
-
- boolean matchesSecure(DatagramPacket dp)
+
+ // ------------------------------------ AdvertiseListenerWorker Inner Class
+ class AdvertiseListenerWorker extends Thread
{
- byte[] data = dp.getData();
+ private boolean paused;
+ private byte[] secure = this.generateSecure();
- synchronized (this.secure)
+ public synchronized void suspendWorker()
{
- if (dp.getLength() != this.secure.length) return false;
-
- for (int i = 0; i < this.secure.length; i++)
- {
- if (data[i] != this.secure[i])
- {
- return false;
- }
- }
+ this.paused = true;
}
- return true;
- }
-
- // ------------------------------------ AdvertiseListenerWorker Inner Class
- class AdvertiseListenerWorker implements Runnable
- {
- private DateFormat df = new SimpleDateFormat(RFC_822_FMT, Locale.US);
+ public synchronized void resumeWorker()
+ {
+ this.secure = this.generateSecure();
+ this.paused = false;
+ this.notify();
+ }
+ public DatagramPacket createInterruptPacket(InetAddress address, int port)
+ {
+ return new DatagramPacket(this.secure, this.secure.length, address, port);
+ }
+
/**
* The background thread that listens for incoming Advertise packets
* and hands them off to an appropriate AdvertiseEvent handler.
*/
+ @Override
public void run()
{
+ DateFormat dateFormat = new SimpleDateFormat(RFC_822_FMT, Locale.US);
byte[] buffer = new byte[512];
- // Loop until we receive a shutdown command
- while (AdvertiseListenerImpl.this.running.get())
+
+ // Loop until interrupted
+ while (!this.isInterrupted())
{
- // Loop if endpoint is paused
- while (AdvertiseListenerImpl.this.paused.get())
- {
- try
- {
- Thread.sleep(1000);
- }
- catch (InterruptedException e)
- {
- Thread.currentThread().interrupt();
- }
- }
try
{
- DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
- AdvertiseListenerImpl.this.socket.receive(dp);
- if (!AdvertiseListenerImpl.this.running.get())
+ synchronized (this)
{
- break;
+ if (this.paused)
+ {
+ this.wait();
+ }
}
- if (AdvertiseListenerImpl.this.matchesSecure(dp)) continue;
+ DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
- byte[] data = dp.getData();
+ AdvertiseListenerImpl.this.socket.receive(packet);
- String s = new String(data, 0, dp.getLength(), DEFAULT_ENCODING);
- if (!s.startsWith("HTTP/1."))
- {
- continue;
- }
+ if (this.matchesSecure(packet)) continue;
+
+ String message = new String(packet.getData(), 0, packet.getLength(), DEFAULT_ENCODING);
+
+ if (!message.startsWith("HTTP/1.")) continue;
- String[] headers = s.split("\r\n");
+ String[] headers = message.split("\r\n");
String date_str = null;
Date date = null;
int status = 0;
@@ -488,7 +464,7 @@
date_str = hdrv[1];
try
{
- date = this.df.parse(date_str);
+ date = dateFormat.parse(date_str);
}
catch (ParseException e)
{
@@ -544,6 +520,10 @@
}
AdvertiseListenerImpl.this.listening = true;
}
+ catch (InterruptedException e)
+ {
+ this.interrupt();
+ }
catch (IOException e)
{
// Do not blow the CPU in case of communication error
@@ -552,6 +532,34 @@
}
}
}
+
+ private byte[] generateSecure()
+ {
+ SecureRandom random = new SecureRandom();
+
+ byte[] secure = new byte[16];
+
+ random.nextBytes(secure);
+ secure[0] = 0; // why exactly?
+
+ return secure;
+ }
+
+ boolean matchesSecure(DatagramPacket packet)
+ {
+ if (packet.getLength() != this.secure.length) return false;
+
+ byte[] data = packet.getData();
+
+ for (int i = 0; i < this.secure.length; i++)
+ {
+ if (data[i] != this.secure[i])
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
}
-
}
Modified: trunk/mod_cluster/src/test/java/org/jboss/modcluster/advertise/AdvertiseListenerImplTestCase.java
===================================================================
--- trunk/mod_cluster/src/test/java/org/jboss/modcluster/advertise/AdvertiseListenerImplTestCase.java 2009-03-19 10:08:11 UTC (rev 2376)
+++ trunk/mod_cluster/src/test/java/org/jboss/modcluster/advertise/AdvertiseListenerImplTestCase.java 2009-03-19 18:08:43 UTC (rev 2377)
@@ -35,6 +35,7 @@
import org.easymock.Capture;
import org.easymock.EasyMock;
import org.jboss.modcluster.advertise.impl.AdvertiseListenerImpl;
+import org.jboss.modcluster.advertise.impl.MulticastSocketFactoryImpl;
import org.jboss.modcluster.config.MCMPHandlerConfiguration;
import org.jboss.modcluster.mcmp.MCMPHandler;
import org.junit.After;
@@ -53,18 +54,22 @@
private static final int ADVERTISE_PORT = 23365;
private static final String RFC_822_FMT = "EEE, d MMM yyyy HH:mm:ss Z";
private static final DateFormat df = new SimpleDateFormat(RFC_822_FMT, Locale.US);
- private static final String SERVER = "foo.bar.com";
- private static final String SERVER_ADDRESS = SERVER + ":8888";
+ private static final String SERVER1 = "foo.bar.com";
+ private static final String SERVER2 = "bar.foo.com";
+ private static final int SERVER_PORT = 8888;
+ private static final String SERVER1_ADDRESS = String.format("%s:%d", SERVER1, SERVER_PORT);
+ private static final String SERVER2_ADDRESS = String.format("%s:%d", SERVER2, SERVER_PORT);
private MCMPHandler mcmpHandler = EasyMock.createStrictMock(MCMPHandler.class);
private MCMPHandlerConfiguration mcmpConfig = EasyMock.createMock(MCMPHandlerConfiguration.class);
private MulticastSocketFactory socketFactory = EasyMock.createMock(MulticastSocketFactory.class);
- private MulticastSocket mcastSocket;
+ private MulticastSocket socket;
+ private InetAddress groupAddress;
private AdvertiseListener listener;
@Before
- public void setup()
+ public void setup() throws Exception
{
EasyMock.expect(this.mcmpConfig.getAdvertiseGroupAddress()).andReturn(ADVERTISE_GROUP);
EasyMock.expect(this.mcmpConfig.getAdvertisePort()).andReturn(ADVERTISE_PORT);
@@ -76,20 +81,18 @@
EasyMock.verify(this.mcmpConfig);
EasyMock.reset(this.mcmpConfig);
+
+ this.groupAddress = InetAddress.getByName(ADVERTISE_GROUP);
+ this.socket = new MulticastSocketFactoryImpl().createMulticastSocket(this.groupAddress, ADVERTISE_PORT);
}
@After
public void tearDown()
{
- if (this.mcastSocket != null)
+ if ((this.socket != null) && !this.socket.isClosed())
{
- this.mcastSocket.close();
+ this.socket.close();
}
-
- if (this.listener != null)
- {
- this.listener.stop();
- }
}
@Test
@@ -97,22 +100,19 @@
{
Capture<InetAddress> capturedAddress = new Capture<InetAddress>();
- EasyMock.expect(this.socketFactory.createMulticastSocket(EasyMock.capture(capturedAddress), EasyMock.eq(ADVERTISE_PORT))).andReturn(new MulticastSocket(ADVERTISE_PORT));
+ EasyMock.expect(this.socketFactory.createMulticastSocket(EasyMock.capture(capturedAddress), EasyMock.eq(ADVERTISE_PORT))).andReturn(this.socket);
- EasyMock.replay(this.socketFactory);
+ EasyMock.replay(this.socketFactory, this.mcmpHandler);
this.listener.start();
- EasyMock.verify(this.socketFactory);
+ EasyMock.verify(this.socketFactory, this.mcmpHandler);
Assert.assertEquals(ADVERTISE_GROUP, capturedAddress.getValue().getHostAddress());
+ Assert.assertFalse(this.socket.isClosed());
- EasyMock.reset(this.socketFactory);
+ EasyMock.reset(this.socketFactory, this.mcmpHandler);
- this.mcastSocket = new MulticastSocket(ADVERTISE_PORT);
- InetAddress mcastGroup = InetAddress.getByName(ADVERTISE_GROUP);
- this.mcastSocket.joinGroup(InetAddress.getByName(ADVERTISE_GROUP));
-
String date = df.format(new Date());
StringBuilder data = new StringBuilder("HTTP/1.1 200 OK\r\n");
@@ -120,31 +120,144 @@
data.append(date);
data.append("\r\n");
data.append("Server: ");
- data.append(SERVER);
+ data.append(SERVER1);
data.append("\r\n");
data.append("X-Manager-Address: ");
- data.append(SERVER_ADDRESS);
+ data.append(SERVER1_ADDRESS);
data.append("\r\n");
byte[] buf = data.toString().getBytes();
- DatagramPacket packet = new DatagramPacket(buf, buf.length, mcastGroup, ADVERTISE_PORT);
+ DatagramPacket packet = new DatagramPacket(buf, buf.length, this.groupAddress, ADVERTISE_PORT);
- this.mcmpHandler.addProxy(SERVER_ADDRESS);
+ this.mcmpHandler.addProxy(SERVER1_ADDRESS);
- EasyMock.replay(this.mcmpHandler);
+ EasyMock.replay(this.socketFactory, this.mcmpHandler);
- this.mcastSocket.send(packet);
+ this.socket.send(packet);
try
{
// Give time for advertise worker to process message
- Thread.sleep(100);
+ Thread.sleep(1000);
}
catch (InterruptedException e)
{
Thread.currentThread().interrupt();
}
- EasyMock.verify(this.mcmpHandler);
+ EasyMock.verify(this.socketFactory, this.mcmpHandler);
+ EasyMock.reset(this.socketFactory, this.mcmpHandler);
+
+ EasyMock.replay(this.socketFactory, this.mcmpHandler);
+
+ this.socket.send(packet);
+
+ try
+ {
+ // Give time for advertise worker to process message
+ Thread.sleep(1000);
+ }
+ catch (InterruptedException e)
+ {
+ Thread.currentThread().interrupt();
+ }
+
+ EasyMock.verify(this.socketFactory, this.mcmpHandler);
+ EasyMock.reset(this.socketFactory, this.mcmpHandler);
+
+ EasyMock.replay(this.socketFactory, this.mcmpHandler);
+
+ this.listener.pause();
+
+ try
+ {
+ Thread.sleep(1000);
+ }
+ catch (InterruptedException e)
+ {
+ Thread.currentThread().interrupt();
+ }
+
+ EasyMock.verify(this.socketFactory, this.mcmpHandler);
+ EasyMock.reset(this.socketFactory, this.mcmpHandler);
+
+ data = new StringBuilder("HTTP/1.1 200 OK\r\n");
+ data.append("Date: ");
+ data.append(date);
+ data.append("\r\n");
+ data.append("Server: ");
+ data.append(SERVER2);
+ data.append("\r\n");
+ data.append("X-Manager-Address: ");
+ data.append(SERVER2_ADDRESS);
+ data.append("\r\n");
+
+ buf = data.toString().getBytes();
+ packet = new DatagramPacket(buf, buf.length, this.groupAddress, ADVERTISE_PORT);
+
+ EasyMock.replay(this.socketFactory, this.mcmpHandler);
+
+ this.socket.send(packet);
+
+ try
+ {
+ // Give time for advertise worker to process message
+ Thread.sleep(1000);
+ }
+ catch (InterruptedException e)
+ {
+ Thread.currentThread().interrupt();
+ }
+
+ EasyMock.verify(this.socketFactory, this.mcmpHandler);
+ EasyMock.reset(this.socketFactory, this.mcmpHandler);
+
+ this.mcmpHandler.addProxy(SERVER2_ADDRESS);
+
+ EasyMock.replay(this.socketFactory, this.mcmpHandler);
+
+ this.listener.resume();
+
+ this.socket.send(packet);
+
+ try
+ {
+ // Give time for advertise worker to process message
+ Thread.sleep(1000);
+ }
+ catch (InterruptedException e)
+ {
+ Thread.currentThread().interrupt();
+ }
+
+ EasyMock.verify(this.socketFactory, this.mcmpHandler);
+ EasyMock.reset(this.socketFactory, this.mcmpHandler);
+
+ EasyMock.replay(this.socketFactory, this.mcmpHandler);
+
+ this.listener.stop();
+
+ EasyMock.verify(this.socketFactory, this.mcmpHandler);
+
+ Assert.assertFalse(this.socket.isConnected());
+
+ EasyMock.reset(this.socketFactory, this.mcmpHandler);
+
+ EasyMock.replay(this.socketFactory, this.mcmpHandler);
+
+ this.socket.send(packet);
+
+ EasyMock.verify(this.socketFactory, this.mcmpHandler);
+ EasyMock.reset(this.socketFactory, this.mcmpHandler);
+
+ EasyMock.replay(this.socketFactory, this.mcmpHandler);
+
+ this.listener.destroy();
+
+ EasyMock.verify(this.socketFactory, this.mcmpHandler);
+
+ Assert.assertTrue(this.socket.isClosed());
+
+ EasyMock.reset(this.socketFactory, this.mcmpHandler);
}
}
15 years, 1 month
JBoss Native SVN: r2376 - trunk/mod_cluster/test/native.
by jbossnative-commits@lists.jboss.org
Author: jfrederic.clere(a)jboss.com
Date: 2009-03-19 06:08:11 -0400 (Thu, 19 Mar 2009)
New Revision: 2376
Modified:
trunk/mod_cluster/test/native/Advertise.c
Log:
Add thread to be more similar to httpd.
Modified: trunk/mod_cluster/test/native/Advertise.c
===================================================================
--- trunk/mod_cluster/test/native/Advertise.c 2009-03-18 13:55:18 UTC (rev 2375)
+++ trunk/mod_cluster/test/native/Advertise.c 2009-03-19 10:08:11 UTC (rev 2376)
@@ -27,17 +27,38 @@
#include "apr.h"
#include "apr_network_io.h"
#include "apr_strings.h"
+#include "apr_thread_proc.h"
+static apr_sockaddr_t *ma_mgroup_sa;
+static apr_socket_t *ma_mgroup_socket;
+
+static void * APR_THREAD_FUNC parent_thread(apr_thread_t *thd, void *data) {
+ char buf[20];
+ apr_size_t n;
+ char *s;
+ apr_status_t rv;
+ apr_pool_t *pool = data;
+
+ apr_sleep(APR_TIME_C(100000));
+ s = apr_psprintf(pool, "to %pI", ma_mgroup_sa);
+ printf("apr_socket_sendto %s\n", s);
+
+ n = apr_snprintf(buf, 20, "Advertize !!!\n");
+ rv = apr_socket_sendto(ma_mgroup_socket,
+ ma_mgroup_sa, 0, buf, &n);
+ if (rv != APR_SUCCESS) {
+ printf("apr_socket_sendto failed %d %s\n", n, apr_strerror(rv, buf, 20));
+ return;
+ }
+ return;
+}
int main(int argc, char **argv)
{
apr_pool_t *pool;
apr_status_t rv;
- apr_sockaddr_t *ma_mgroup_sa;
apr_sockaddr_t *ma_listen_sa;
apr_sockaddr_t *ma_niface_sa;
- apr_socket_t *ma_mgroup_socket;
- char buf[20];
- apr_size_t n;
+ apr_thread_t *tp;
apr_initialize();
atexit(apr_terminate);
@@ -70,6 +91,11 @@
printf("apr_socket_bind failed %d\n", rv);
return 1;
}
+ char *s;
+ s = apr_psprintf(pool, "on %pI", ma_listen_sa);
+ printf("apr_socket_bind %s\n", s);
+ s = apr_psprintf(pool, "on %pI", ma_niface_sa);
+ printf("apr_mcast_join %s\n", s);
rv = apr_mcast_join(ma_mgroup_socket, ma_mgroup_sa, ma_niface_sa, NULL);
if (rv != APR_SUCCESS) {
@@ -88,13 +114,12 @@
printf("apr_mcast_hops failed %d\n", rv);
return 1;
}
-
- n = apr_snprintf(buf, 20, "Advertize !!!\n");
- rv = apr_socket_sendto(ma_mgroup_socket,
- ma_mgroup_sa, 0, buf, &n);
- if (rv != APR_SUCCESS) {
- printf("apr_socket_sendto failed %d %s\n", n, apr_strerror(rv, buf, 20));
+ rv = apr_thread_create(&tp, NULL, parent_thread, pool, pool);
+ if (rv != APR_SUCCESS) {
+ printf("apr_thread_create failed %d\n", rv);
return 1;
}
+ apr_thread_detach(tp);
+ apr_sleep(APR_TIME_C(150000));
return 0;
}
15 years, 1 month
JBoss Native SVN: r2375 - trunk/mod_cluster/native/mod_proxy_cluster.
by jbossnative-commits@lists.jboss.org
Author: jfrederic.clere(a)jboss.com
Date: 2009-03-18 09:55:18 -0400 (Wed, 18 Mar 2009)
New Revision: 2375
Modified:
trunk/mod_cluster/native/mod_proxy_cluster/mod_proxy_cluster.c
Log:
Oops even we do nothing the request was for us.
Modified: trunk/mod_cluster/native/mod_proxy_cluster/mod_proxy_cluster.c
===================================================================
--- trunk/mod_cluster/native/mod_proxy_cluster/mod_proxy_cluster.c 2009-03-18 13:42:02 UTC (rev 2374)
+++ trunk/mod_cluster/native/mod_proxy_cluster/mod_proxy_cluster.c 2009-03-18 13:55:18 UTC (rev 2375)
@@ -1451,6 +1451,7 @@
/*
* canonise the url
+ * XXX: needs more see the unparsed_uri in proxy_cluster_trans()
*/
static int proxy_cluster_canon(request_rec *r, char *url)
{
@@ -1458,8 +1459,8 @@
ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_DEBUG, 0, r->server,
"proxy_cluster_canon url: %s", url);
#endif
- if (strncasecmp(url, "balancer:", 9) == 0) {
- return OK; /* XXX: need more */
+ if (strncasecmp(url, "cluster:", 9) == 0) {
+ return OK;
}
return DECLINED;
}
15 years, 1 month
JBoss Native SVN: r2374 - trunk/mod_cluster/native/mod_proxy_cluster.
by jbossnative-commits@lists.jboss.org
Author: jfrederic.clere(a)jboss.com
Date: 2009-03-18 09:42:02 -0400 (Wed, 18 Mar 2009)
New Revision: 2374
Modified:
trunk/mod_cluster/native/mod_proxy_cluster/mod_proxy_cluster.c
Log:
Add some debug...
Modified: trunk/mod_cluster/native/mod_proxy_cluster/mod_proxy_cluster.c
===================================================================
--- trunk/mod_cluster/native/mod_proxy_cluster/mod_proxy_cluster.c 2009-03-17 17:19:02 UTC (rev 2373)
+++ trunk/mod_cluster/native/mod_proxy_cluster/mod_proxy_cluster.c 2009-03-18 13:42:02 UTC (rev 2374)
@@ -1454,6 +1454,10 @@
*/
static int proxy_cluster_canon(request_rec *r, char *url)
{
+#if HAVE_CLUSTER_EX_DEBUG
+ ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_DEBUG, 0, r->server,
+ "proxy_cluster_canon url: %s", url);
+#endif
if (strncasecmp(url, "balancer:", 9) == 0) {
return OK; /* XXX: need more */
}
@@ -1758,6 +1762,10 @@
apr_status_t rv;
*worker = NULL;
+#if HAVE_CLUSTER_EX_DEBUG
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ "proxy_cluster_pre_request: url %s", *url);
+#endif
/* Step 1: check if the url is for us
* The url we can handle starts with 'balancer://'
* If balancer is already provided skip the search
15 years, 1 month
JBoss Native SVN: r2373 - trunk/mod_cluster/src/main/java/org/jboss/modcluster/ha.
by jbossnative-commits@lists.jboss.org
Author: pferraro
Date: 2009-03-17 13:19:02 -0400 (Tue, 17 Mar 2009)
New Revision: 2373
Modified:
trunk/mod_cluster/src/main/java/org/jboss/modcluster/ha/ModClusterServiceDRMEntry.java
Log:
[MODCLUSTER-60] Don't consider jvmRoutes in equals(...)
Modified: trunk/mod_cluster/src/main/java/org/jboss/modcluster/ha/ModClusterServiceDRMEntry.java
===================================================================
--- trunk/mod_cluster/src/main/java/org/jboss/modcluster/ha/ModClusterServiceDRMEntry.java 2009-03-17 12:49:11 UTC (rev 2372)
+++ trunk/mod_cluster/src/main/java/org/jboss/modcluster/ha/ModClusterServiceDRMEntry.java 2009-03-17 17:19:02 UTC (rev 2373)
@@ -56,6 +56,7 @@
public ModClusterServiceDRMEntry(ClusterNode peer, Set<MCMPServerState> mcmpServerStates, Set<String> jvmRoutes)
{
assert peer != null : "peer is null";
+ assert jvmRoutes != null : "jvmRoutes is null";
this.peer = peer;
this.mcmpServerStates = mcmpServerStates;
@@ -157,28 +158,29 @@
if (obj instanceof ModClusterServiceDRMEntry)
{
ModClusterServiceDRMEntry other = (ModClusterServiceDRMEntry) obj;
- return (this.peer.equals(other.peer)
- && this.safeEquals(this.mcmpServerStates, other.mcmpServerStates)
- && this.safeEquals(this.jvmRoutes, other.jvmRoutes));
+
+ return this.peer.equals(other.peer) && this.safeEquals(this.mcmpServerStates, other.mcmpServerStates);
}
+
return false;
}
@Override
public int hashCode()
{
- int result = 17;
- result += 23 * this.peer.hashCode();
- result += 23 * (this.mcmpServerStates == null ? 0 : this.mcmpServerStates.hashCode());
- result += 23 * (this.jvmRoutes == null ? 0 : this.jvmRoutes.hashCode());
- return result;
+ return this.peer.hashCode();
}
@Override
public String toString()
{
- return new StringBuilder(this.getClass().getName())
- .append("{peer=").append(this.peer).append("}").toString();
+ StringBuilder builder = new StringBuilder(this.getClass().getName());
+ builder.append("{peer=").append(this.peer);
+ if (this.mcmpServerStates != null)
+ {
+ builder.append(",states=").append(this.mcmpServerStates);
+ }
+ return builder.append("}").toString();
}
private boolean safeEquals(Object a, Object b)
15 years, 1 month
JBoss Native SVN: r2372 - trunk/mod_cluster/native/mod_manager.
by jbossnative-commits@lists.jboss.org
Author: jfrederic.clere(a)jboss.com
Date: 2009-03-17 08:49:11 -0400 (Tue, 17 Mar 2009)
New Revision: 2372
Modified:
trunk/mod_cluster/native/mod_manager/mod_manager.c
Log:
Typo of MODCLUSTER-64.
Modified: trunk/mod_cluster/native/mod_manager/mod_manager.c
===================================================================
--- trunk/mod_cluster/native/mod_manager/mod_manager.c 2009-03-17 10:44:16 UTC (rev 2371)
+++ trunk/mod_cluster/native/mod_manager/mod_manager.c 2009-03-17 12:49:11 UTC (rev 2372)
@@ -1572,7 +1572,7 @@
flushpackets, ou->mess.flushwait,
ou->mess.ping, ou->mess.smax, ou->mess.ttl);
proxystat = (proxy_worker_stat *) ou->stat;
- ap_rprintf(r, ",Elected: %d,Read: %d,Transfered: %d,Connected: %d,Load: %d Num sessions: %d\n",
+ ap_rprintf(r, ",Elected: %d,Read: %d,Transferred: %d,Connected: %d,Load: %d Num sessions: %d\n",
proxystat->elected, proxystat->read, proxystat->transferred,
proxystat->busy, proxystat->lbfactor, count_sessionid(r, ou->mess.JVMRoute));
15 years, 1 month
JBoss Native SVN: r2371 - trunk/mod_cluster/native/mod_manager.
by jbossnative-commits@lists.jboss.org
Author: jfrederic.clere(a)jboss.com
Date: 2009-03-17 06:44:16 -0400 (Tue, 17 Mar 2009)
New Revision: 2371
Modified:
trunk/mod_cluster/native/mod_manager/mod_manager.c
Log:
Fix MODCLUSTER-58.
Modified: trunk/mod_cluster/native/mod_manager/mod_manager.c
===================================================================
--- trunk/mod_cluster/native/mod_manager/mod_manager.c 2009-03-17 10:30:03 UTC (rev 2370)
+++ trunk/mod_cluster/native/mod_manager/mod_manager.c 2009-03-17 10:44:16 UTC (rev 2371)
@@ -1098,7 +1098,7 @@
}
/* Process the * APP commands */
- if (strcmp(r->filename, NODE_COMMAND) == 0) {
+ if (strstr(r->filename, NODE_COMMAND)) {
return (process_node_cmd(r, status, errtype, node));
}
15 years, 1 month
JBoss Native SVN: r2370 - trunk/mod_cluster/test/java/org/jboss/mod_cluster.
by jbossnative-commits@lists.jboss.org
Author: jfrederic.clere(a)jboss.com
Date: 2009-03-17 06:30:03 -0400 (Tue, 17 Mar 2009)
New Revision: 2370
Modified:
trunk/mod_cluster/test/java/org/jboss/mod_cluster/TestFailAppover.java
trunk/mod_cluster/test/java/org/jboss/mod_cluster/TestFailover.java
Log:
Adjust ports and remove services.
Modified: trunk/mod_cluster/test/java/org/jboss/mod_cluster/TestFailAppover.java
===================================================================
--- trunk/mod_cluster/test/java/org/jboss/mod_cluster/TestFailAppover.java 2009-03-17 10:29:17 UTC (rev 2369)
+++ trunk/mod_cluster/test/java/org/jboss/mod_cluster/TestFailAppover.java 2009-03-17 10:30:03 UTC (rev 2370)
@@ -58,12 +58,12 @@
// server = (StandardServer) ServerFactory.getServer();
service = new JBossWeb("node3", "localhost");
- connector = service.addConnector(8011);
+ connector = service.addConnector(8013);
service.AddContext("/test", "/test");
server.addService(service);
service2 = new JBossWeb("node4", "localhost");
- connector2 = service2.addConnector(8010);
+ connector2 = service2.addConnector(8014);
service2.AddContext("/test", "/test");
server.addService(service2);
@@ -132,6 +132,7 @@
wait.stopit();
wait.join();
server.removeService(service);
+ server.removeService(service2);
server.removeLifecycleListener(cluster);
} catch (InterruptedException ex) {
ex.printStackTrace();
@@ -144,8 +145,8 @@
if (clienterror)
fail("Client test failed");
- Maintest.testPort(8011);
- Maintest.testPort(8010);
+ Maintest.testPort(8013);
+ Maintest.testPort(8014);
System.out.println("TestFailAppover Done");
}
}
Modified: trunk/mod_cluster/test/java/org/jboss/mod_cluster/TestFailover.java
===================================================================
--- trunk/mod_cluster/test/java/org/jboss/mod_cluster/TestFailover.java 2009-03-17 10:29:17 UTC (rev 2369)
+++ trunk/mod_cluster/test/java/org/jboss/mod_cluster/TestFailover.java 2009-03-17 10:30:03 UTC (rev 2370)
@@ -137,6 +137,7 @@
wait.stopit();
wait.join();
server.removeService(service);
+ server.removeService(service2);
server.removeLifecycleListener(cluster);
} catch (InterruptedException ex) {
ex.printStackTrace();
15 years, 1 month
JBoss Native SVN: r2369 - trunk/mod_cluster/test/java/org/jboss/mod_cluster.
by jbossnative-commits@lists.jboss.org
Author: jfrederic.clere(a)jboss.com
Date: 2009-03-17 06:29:17 -0400 (Tue, 17 Mar 2009)
New Revision: 2369
Modified:
trunk/mod_cluster/test/java/org/jboss/mod_cluster/Maintest.java
Log:
Add TestFailAppover to the main tests.
Modified: trunk/mod_cluster/test/java/org/jboss/mod_cluster/Maintest.java
===================================================================
--- trunk/mod_cluster/test/java/org/jboss/mod_cluster/Maintest.java 2009-03-17 09:49:18 UTC (rev 2368)
+++ trunk/mod_cluster/test/java/org/jboss/mod_cluster/Maintest.java 2009-03-17 10:29:17 UTC (rev 2369)
@@ -86,6 +86,8 @@
System.gc();
suite.addTest(new TestSuite(TestStickyForce.class));
System.gc();
+ suite.addTest(new TestSuite(TestFailAppover.class));
+ System.gc();
/* XXX The JBWEB_117 tests are not really related to mod_cluster
* Run them one by one using ant one -Dtest=test
suite.addTest(new TestSuite(TestJBWEB_117.class));
15 years, 1 month
JBoss Native SVN: r2368 - trunk/mod_cluster/native/mod_proxy_cluster.
by jbossnative-commits@lists.jboss.org
Author: jfrederic.clere(a)jboss.com
Date: 2009-03-17 05:49:18 -0400 (Tue, 17 Mar 2009)
New Revision: 2368
Modified:
trunk/mod_cluster/native/mod_proxy_cluster/mod_proxy_cluster.c
Log:
Just to be on the save side.
Modified: trunk/mod_cluster/native/mod_proxy_cluster/mod_proxy_cluster.c
===================================================================
--- trunk/mod_cluster/native/mod_proxy_cluster/mod_proxy_cluster.c 2009-03-17 09:27:29 UTC (rev 2367)
+++ trunk/mod_cluster/native/mod_proxy_cluster/mod_proxy_cluster.c 2009-03-17 09:49:18 UTC (rev 2368)
@@ -450,7 +450,9 @@
"remove_workers_node (reslist) %d %s", i, node->mess.JVMRoute);
#else
helper = worker->opaque;
- i = helper->count_active;
+ if (helper) {
+ i = helper->count_active;
+ }
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, server,
"remove_workers_node (helper) %d %s", i, node->mess.JVMRoute);
#endif
15 years, 1 month