Author: markt
Date: Sun Dec 28 16:30:00 2008
New Revision: 729815
URL: http://svn.apache.org/viewvc?rev=729815&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=46223
Add a simple co-ordinator provided by Robert Newson
Added:
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/SimpleCoordinator.java
Modified:
tomcat/trunk/webapps/docs/config/cluster-interceptor.xml
Added:
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/SimpleCoordinator.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/SimpleCoordinator.java?rev=729815&view=auto
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/SimpleCoordinator.java
(added)
+++
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/SimpleCoordinator.java
Sun Dec 28 16:30:00 2008
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ */
+package org.apache.catalina.tribes.group.interceptors;
+
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+
+import java.util.Arrays;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.apache.catalina.tribes.ChannelException;
+import org.apache.catalina.tribes.Member;
+import org.apache.catalina.tribes.group.AbsoluteOrder;
+import org.apache.catalina.tribes.group.ChannelInterceptorBase;
+
+/**
+ * A dinky coordinator, just uses a sorted version of the member array.
+ *
+ * @author rnewson
+ *
+ */
+public class SimpleCoordinator extends ChannelInterceptorBase {
+
+ private Member[] view;
+
+ private AtomicBoolean membershipChanged = new AtomicBoolean();
+
+ private void membershipChanged() {
+ membershipChanged.set(true);
+ }
+
+ @Override
+ public void memberAdded(final Member member) {
+ super.memberAdded(member);
+ membershipChanged();
+ installViewWhenStable();
+ }
+
+ @Override
+ public void memberDisappeared(final Member member) {
+ super.memberDisappeared(member);
+ membershipChanged();
+ installViewWhenStable();
+ }
+
+ /**
+ * Override to receive view changes.
+ *
+ * @param view
+ */
+ protected void viewChange(final Member[] view) {
+ }
+
+ @Override
+ public void start(int svc) throws ChannelException {
+ super.start(svc);
+ installViewWhenStable();
+ }
+
+ private void installViewWhenStable() {
+ int stableCount = 0;
+
+ while (stableCount < 10) {
+ if (membershipChanged.compareAndSet(true, false)) {
+ stableCount = 0;
+ } else {
+ stableCount++;
+ }
+ try {
+ MILLISECONDS.sleep(250);
+ } catch (final InterruptedException e) {
+ Thread.currentThread().interrupt();
+ }
+ }
+
+ final Member[] members = getMembers();
+ final Member[] view = Arrays.copyOf(members, members.length + 1);
+ view[members.length] = getLocalMember(false);
+ Arrays.sort(view, AbsoluteOrder.comp);
+ if (Arrays.equals(view, this.view)) {
+ return;
+ }
+ this.view = view;
+ viewChange(view);
+ }
+
+ @Override
+ public void stop(int svc) throws ChannelException {
+ super.stop(svc);
+ }
+
+ public Member[] getView() {
+ return view;
+ }
+
+ public Member getCoordinator() {
+ return view == null ? null : view[0];
+ }
+
+ public boolean isCoordinator() {
+ return view == null ? false : getLocalMember(false).equals(
+ getCoordinator());
+ }
+
+}
Modified: tomcat/trunk/webapps/docs/config/cluster-interceptor.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/cluster-interceptor.xml?rev=729815&r1=729814&r2=729815&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/config/cluster-interceptor.xml (original)
+++ tomcat/trunk/webapps/docs/config/cluster-interceptor.xml Sun Dec 28
16:30:00 2008
@@ -46,6 +46,7 @@
<li><code>org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor</code></li>
<li><code>org.apache.catalina.tribes.group.interceptors.NonBlockingCoordinator</code></li>
<li><code>org.apache.catalina.tribes.group.interceptors.OrderInterceptor</code></li>
+
<li><code>org.apache.catalina.tribes.group.interceptors.SimpleCoordinator</code></li>
<li><code>org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor</code></li>
<li><code>org.apache.catalina.tribes.group.interceptors.TwoPhaseCommitInterceptor</code></li>
<li><code>org.apache.catalina.tribes.group.interceptors.DomainFilterInterceptor</code></li>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]