ttomcat-1778514358873.zip-extract/apache-tomcat-11.0.18-src/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java

Path
ttomcat-1778514358873.zip-extract/apache-tomcat-11.0.18-src/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java
Status
scanned
Type
file
Name
CloudMembershipProvider.java
Extension
.java
Programming language
Java
Mime type
text/plain
File type
ASCII text, with CRLF line terminators
Tag

      
    
Rootfs path

      
    
Size
6538 (6.4 KB)
MD5
5089eb2d257de9f41fbd919b0e0cb8c4
SHA1
35c19b14cb791ef6f694a1861d863d0d474e70f3
SHA256
ea45b93b0c700de9595cecc34b213641cc16aa5ea99ced60b6e879a74ffa66ba
SHA512

      
    
SHA1_git
7ba93bde23fcdac81d7d0f543cf9eecf446fde58
Is binary

      
    
Is text
True
Is archive

      
    
Is media

      
    
Is legal

      
    
Is manifest

      
    
Is readme

      
    
Is top level

      
    
Is key file

      
    
CloudMembershipProvider.java | 6.4 KB |

/* * 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.cloud; import java.io.IOException; import java.io.Serializable; import java.net.InetAddress; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.time.Instant; import java.util.HashMap; import java.util.Map; import java.util.Properties; import org.apache.catalina.tribes.ChannelListener; import org.apache.catalina.tribes.Heartbeat; import org.apache.catalina.tribes.Member; import org.apache.catalina.tribes.membership.Membership; import org.apache.catalina.tribes.membership.MembershipProviderBase; import org.apache.catalina.tribes.util.StringManager; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; public abstract class CloudMembershipProvider extends MembershipProviderBase implements Heartbeat, ChannelListener { private static final Log log = LogFactory.getLog(CloudMembershipProvider.class); protected static final StringManager sm = StringManager.getManager(CloudMembershipProvider.class); protected static final String CUSTOM_ENV_PREFIX = "OPENSHIFT_KUBE_PING_"; protected String url; protected StreamProvider streamProvider; protected int connectionTimeout; protected int readTimeout; protected Instant startTime; protected MessageDigest md5; protected Map<String,String> headers = new HashMap<>(); protected String localIp; protected int port; protected long expirationTime = 5000; public CloudMembershipProvider() { try { md5 = MessageDigest.getInstance("md5"); } catch (NoSuchAlgorithmException e) { // Ignore } } /** * Get value of environment variable. * * @param keys the environment variables * * @return the env variables values, or null if not found */ protected static String getEnv(String... keys) { String val = null; for (String key : keys) { val = System.getenv(key); if (val != null) { break; } } return val; } /** * Get the Kubernetes namespace, or "tomcat" if the Kubernetes environment variable cannot be found (with a warning * log about the missing namespace). * * @return the namespace */ protected String getNamespace() { String namespace = getEnv(CUSTOM_ENV_PREFIX + "NAMESPACE", "KUBERNETES_NAMESPACE"); if (namespace == null || namespace.isEmpty()) { log.warn(sm.getString("kubernetesMembershipProvider.noNamespace")); namespace = "tomcat"; } return namespace; } @Override public void init(Properties properties) throws IOException { startTime = Instant.now(); CloudMembershipService service = (CloudMembershipService) this.service; connectionTimeout = service.getConnectTimeout(); readTimeout = service.getReadTimeout(); expirationTime = service.getExpirationTime(); localIp = InetAddress.getLocalHost().getHostAddress(); port = Integer.parseInt(properties.getProperty("tcpListenPort")); } @Override public void start(int level) throws Exception { if (membership == null) { membership = new Membership(service.getLocalMember(true)); } service.getChannel().addChannelListener(this); } @Override public boolean stop(int level) throws Exception { return true; } @Override public void heartbeat() { Member[] announcedMembers = fetchMembers(); // Add new members or refresh the members in the membership for (Member member : announcedMembers) { updateMember(member, true); } // Remove non refreshed members from the membership Member[] expired = membership.expire(expirationTime); for (Member member : expired) { updateMember(member, false); } } /** * Fetch current cluster members from the cloud orchestration. * * @return the member array */ protected abstract Member[] fetchMembers(); /** * Add or remove specified member. * * @param member the member to add * @param add true if the member is added, false otherwise */ protected void updateMember(Member member, boolean add) { if (add && !membership.memberAlive(member)) { return; } if (log.isDebugEnabled()) { String message = add ? sm.getString("cloudMembershipProvider.add", member) : sm.getString("cloudMembershipProvider.remove", member); log.debug(message); } Runnable r = () -> { Thread currentThread = Thread.currentThread(); String name = currentThread.getName(); try { String threadName = add ? "CloudMembership-memberAdded" : "CloudMembership-memberDisappeared"; currentThread.setName(threadName); if (add) { membershipListener.memberAdded(member); } else { membershipListener.memberDisappeared(member); } } finally { currentThread.setName(name); } }; executor.execute(r); } @Override public void messageReceived(Serializable msg, Member sender) { } @Override public boolean accept(Serializable msg, Member sender) { return false; } }
Detected license expression
apache-2.0
Detected license expression (SPDX)
Apache-2.0
Percentage of license text
19.19
Copyrights

      
    
Holders

      
    
Authors

      
    
License detections License expression License expression SPDX
apache_2_0-4bde3f57-78aa-4201-96bf-531cba09e7de apache-2.0 Apache-2.0
URL Start line End line
http://www.apache.org/licenses/LICENSE-2.0 9 9