Author: kfujino
Date: Thu Jul 26 09:27:35 2018
New Revision: 1836707
URL: http://svn.apache.org/viewvc?rev=1836707=rev
Log:
Add New Static Membership Service implementations.
- initial implementaion that remain a lot of TODOs.
Added:
tomcat/trunk/java/org/apache/catalina/tribes/membership/StaticMembershipProvider.java
(with props)
tomcat/trunk/java/org/apache/catalina/tribes/membership/StaticMembershipService.java
(with props)
Added:
tomcat/trunk/java/org/apache/catalina/tribes/membership/StaticMembershipProvider.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/membership/StaticMembershipProvider.java?rev=1836707=auto
==
---
tomcat/trunk/java/org/apache/catalina/tribes/membership/StaticMembershipProvider.java
(added)
+++
tomcat/trunk/java/org/apache/catalina/tribes/membership/StaticMembershipProvider.java
Thu Jul 26 09:27:35 2018
@@ -0,0 +1,326 @@
+/*
+ * 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
+ * limitations under the License.
+ */
+
+package org.apache.catalina.tribes.membership;
+
+import java.io.Serializable;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.catalina.tribes.Channel;
+import org.apache.catalina.tribes.ChannelException;
+import org.apache.catalina.tribes.ChannelException.FaultyMember;
+import org.apache.catalina.tribes.ChannelListener;
+import org.apache.catalina.tribes.Heartbeat;
+import org.apache.catalina.tribes.Member;
+import org.apache.catalina.tribes.MembershipService;
+import org.apache.catalina.tribes.group.Response;
+import org.apache.catalina.tribes.group.RpcCallback;
+import org.apache.catalina.tribes.group.RpcChannel;
+import org.apache.catalina.tribes.util.Arrays;
+import org.apache.catalina.tribes.util.StringManager;
+import org.apache.juli.logging.Log;
+import org.apache.juli.logging.LogFactory;
+
+public class StaticMembershipProvider extends MembershipProviderBase
implements RpcCallback, ChannelListener, Heartbeat {
+
+protected static final StringManager sm =
StringManager.getManager(StaticMembershipProvider.class);
+private static final Log log =
LogFactory.getLog(StaticMembershipProvider.class);
+
+protected Channel channel;
+protected RpcChannel rpcChannel;
+protected MembershipService service;
+private String membershipName = null;
+private byte[] membershipId = null;
+protected ArrayList staticMembers;
+protected int sendOptions = Channel.SEND_OPTIONS_ASYNCHRONOUS;
+protected long expirationTime = 5000;
+protected int connectTimeout = 500;
+protected long rpcTimeout = 3000;
+protected int startLevel = 0;
+
+@Override
+public void init(Properties properties) throws Exception {
+String expirationTimeStr = properties.getProperty("expirationTime");
+this.expirationTime = Long.parseLong(expirationTimeStr);
+String connectTimeoutStr = properties.getProperty("connectTimeout");
+this.connectTimeout = Integer.parseInt(connectTimeoutStr);
+String rpcTimeouStr = properties.getProperty("rpcTimeout");
+this.rpcTimeout = Long.parseLong(rpcTimeouStr);
+this.membershipName = properties.getProperty("membershipName");;
+this.membershipId =
membershipName.getBytes(StandardCharsets.ISO_8859_1);
+membership = new Membership(service.getLocalMember(true));
+this.rpcChannel = new RpcChannel(this.membershipId, channel, this);
+this.channel.addChannelListener(this);
+}
+
+@Override
+public void start(int level) throws Exception {
+if (Channel.MBR_RX_SEQ==(level & Channel.MBR_RX_SEQ)) {
+//no-op
+}
+if (Channel.MBR_TX_SEQ==(level & Channel.MBR_TX_SEQ)) {
+//no-op
+}
+startLevel = (startLevel | level);
+if (startLevel == (Channel.MBR_RX_SEQ | Channel.MBR_TX_SEQ)) {
+startMembership(getAliveMembers(staticMembers.toArray(new
Member[0])));
+}
+}
+
+@Override
+public boolean stop(int level)