You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bs...@apache.org on 2015/11/20 22:02:35 UTC

[41/50] [abbrv] incubator-geode git commit: GEODE-77: reduce jgroups log level to FATAL

GEODE-77: reduce jgroups log level to FATAL

JGroups spits out many ERROR level log messages when there is a network
failure

JGRP000029: 10.138.44.124<v3>:1026: failed sending message to 10.138.44.171<v3>:1026 (284 bytes): java.io.IOException: Operation not permitted, ...


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/0ee416f9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/0ee416f9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/0ee416f9

Branch: refs/heads/develop
Commit: 0ee416f99c4730a928c159ae4aeae43e097ec7dd
Parents: 28d273c
Author: Bruce Schuchardt <bs...@pivotal.io>
Authored: Mon Nov 9 13:51:23 2015 -0800
Committer: Bruce Schuchardt <bs...@pivotal.io>
Committed: Mon Nov 9 13:51:23 2015 -0800

----------------------------------------------------------------------
 .../gms/messenger/JGroupsQuorumChecker.java     | 319 -------------------
 gemfire-core/src/main/resources/log4j2.xml      |   2 +-
 2 files changed, 1 insertion(+), 320 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0ee416f9/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messenger/JGroupsQuorumChecker.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messenger/JGroupsQuorumChecker.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messenger/JGroupsQuorumChecker.java
deleted file mode 100755
index eec82c4..0000000
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messenger/JGroupsQuorumChecker.java
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- * 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 com.gemstone.gemfire.distributed.internal.membership.gms.messenger;
-
-import java.io.IOException;
-import java.net.DatagramPacket;
-import java.net.DatagramSocket;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import org.apache.logging.log4j.Logger;
-import org.jgroups.Message;
-
-import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember;
-import com.gemstone.gemfire.distributed.internal.membership.NetView;
-import com.gemstone.gemfire.distributed.internal.membership.QuorumChecker;
-import com.gemstone.gemfire.distributed.internal.membership.gms.GMSMember;
-import com.gemstone.gemfire.internal.concurrent.ConcurrentHashSet;
-import com.gemstone.gemfire.internal.logging.LogService;
-
-/*
- * Implementation of QuorumChecker interface using JGroups artifacts
- * @author Bruce Schuchardt
- * @since 8.1 11/2014
- */
-public class JGroupsQuorumChecker implements QuorumChecker {
-  private static final Logger logger = LogService.getLogger();
-  
-  /**
-   * the last view before a Forced Disconnect
-   */
-  private NetView lastView;
-  /**
-   * The old system's membership socket
-   */
-  private volatile DatagramSocket sock;
-  /**
-   * A boolean to stop the pingResponder thread
-   */
-  private AtomicBoolean stopper = new AtomicBoolean();
-  /**
-   * The thread that responds to ping requests from other members
-   */
-  private Thread pingResponder;
-  /**
-   * The jgroups network partition threshold percentage
-   */
-  private int partitionThreshold;
-  
-  /**
-   * ping-pong responses received
-   */
-  private Set<InternalDistributedMember> receivedAcks;
-  
-  /**
-   * map converting from SocketAddresses to member IDs
-   */
-  private Map<SocketAddress, InternalDistributedMember> addressConversionMap;
-  
-  /**
-   * Whether the quorum checker is currently suspended
-   */
-  private volatile boolean suspended;
-  
-  /**
-   * Whether a quorum has been reached
-   * guardedby this
-   */
-  private boolean quorumAchieved;
-  
-  
-  @Override
-  public void suspend() {
-    this.suspended = true;
-  }
-  
-  @Override
-  public void resume() {
-    this.suspended = false;
-  }
-  
-
-  @Override
-  public synchronized boolean checkForQuorum(long timeout)
-    throws InterruptedException {
-    
-    if (this.quorumAchieved) {
-      return true;
-    }
-    
-    final boolean isDebugEnabled = logger.isDebugEnabled();
-    if (this.sock == null || this.sock.isClosed()) {
-      if (isDebugEnabled) {
-        logger.debug("quorum check: UDP socket is closed.  Unable to perform a quorum check");
-      }
-      return false;
-    }
-    
-    boolean wasSuspended = this.suspended;
-    if (this.suspended) {
-      this.suspended = false;
-    }
-    
-    
-    byte[] buffer = new byte[] { 'p', 'i', 'n', 'g' };
-    
-    
-    if (isDebugEnabled) {
-      logger.debug("beginning quorum check with {}", this);
-    }
-    try {
-      // send a ping message to each member and read pong responses
-      List<InternalDistributedMember> members = this.lastView.getMembers();
-      for (InternalDistributedMember addr: members) {
-        if (!receivedAcks.contains(addr)) {
-          SocketAddress sockaddr = new InetSocketAddress(addr.getNetMember().getInetAddress(), addr.getPort());
-          if (isDebugEnabled) {
-            logger.debug("quorum check: sending request to {}", addr);
-          }
-          try {
-            Message msg = new Message();
-//            msg.setDest(new JGAddress((GMSMember)addr.getNetMember()));
-//            msg.setObject(obj)
-            DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length, sockaddr);
-            this.sock.send(packet);
-          } catch (IOException io) {
-            // continue to the next member
-          }
-        }
-      }
-      
-      
-      long endTime = System.currentTimeMillis() + timeout;
-      for ( ;; ) {
-        long time = System.currentTimeMillis();
-        long remaining = (endTime - time);
-        if (remaining <= 0) {
-          if (isDebugEnabled) {
-            logger.debug("quorum check: timeout waiting for responses.  {} responses received", receivedAcks.size());
-          }
-          break;
-        }
-        if (isDebugEnabled) {
-          logger.debug("quorum check: waiting up to {}ms to receive a quorum of responses", remaining);
-        }
-        Thread.sleep(500);
-        if (receivedAcks.size() == members.size()) {
-          // we've heard from everyone now so we've got a quorum
-          if (isDebugEnabled) {
-            logger.debug("quorum check: received responses from all members that were in the old distributed system");
-          }
-          this.quorumAchieved = true;
-          return true;
-        }
-      }
-      
-      // quorum check
-      int weight = getWeight(this.lastView.getMembers(), this.lastView.getLeadMember());
-      int ackedWeight = getWeight(receivedAcks, this.lastView.getLeadMember());
-      int lossThreshold = (int)Math.round((weight * this.partitionThreshold) / 100.0); 
-      if (isDebugEnabled) {
-        logger.debug("quorum check: contacted {} processes with {} member weight units.  Threshold for a quorum is {}", receivedAcks.size(), ackedWeight, lossThreshold);
-      }
-      this.quorumAchieved = (ackedWeight >= lossThreshold);
-      return this.quorumAchieved;
-
-    } finally {
-      if (wasSuspended) {
-        this.suspended = true;
-      }
-    }
-  }
-
-
-  private int getWeight(Collection<InternalDistributedMember> idms, InternalDistributedMember leader) {
-    int weight = 0;
-    for (InternalDistributedMember mbr: idms) {
-      int thisWeight = mbr.getNetMember().getMemberWeight();
-      if (mbr.getVmKind() == 10 /* NORMAL_DM_KIND */) {
-        thisWeight += 10;
-        if (leader != null && mbr.equals(leader)) {
-          thisWeight += 5;
-        }
-      } else if (mbr.getNetMember().preferredForCoordinator()) {
-        thisWeight += 3;
-      }
-      weight += thisWeight;
-    }
-    return weight;
-  }
-
-  @Override
-  public Object getMembershipInfo() {
-    if (this.sock == null || this.sock.isClosed()) {
-      return null;
-    }
-    return this.sock;
-  }
-  
-  /**
-   * Create a new QuorumCheckerImpl.  It must be initialized with initialize() before
-   * it can be used for quorum checks
-   */
-  public JGroupsQuorumChecker(NetView jgView, int partitionThreshold, DatagramSocket jgSock) {
-    this.sock = jgSock;
-    this.lastView = jgView;
-    this.partitionThreshold = partitionThreshold;
-  }
-
-  
-  public void initialize() {
-    if (this.sock == null  ||  this.sock.isClosed()) {
-      return;
-    }
-    receivedAcks = new ConcurrentHashSet<InternalDistributedMember>(this.lastView.size());
-    addressConversionMap = new ConcurrentHashMap<SocketAddress, InternalDistributedMember>(this.lastView.size());
-    List<InternalDistributedMember> members = this.lastView.getMembers();
-    for (InternalDistributedMember addr: members) {
-      SocketAddress sockaddr = new InetSocketAddress(addr.getNetMember().getInetAddress(), addr.getPort());
-      addressConversionMap.put(sockaddr, addr);
-    }
-    startPingResponder();
-  }
-  
-  
-  // start a background thread to respond to "ping" requests
-  private void startPingResponder() {
-    this.stopper.set(false);
-    this.pingResponder = new Thread("GemFire Auto-reconnect responder") {
-      public void run() {
-        byte[] pongBuffer = new byte[] {'p', 'o', 'n', 'g'};
-        byte[] buffer = new byte[100];
-
-        while (!stopper.get()) {
-          DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
-          try {
-            boolean sleep = JGroupsQuorumChecker.this.suspended;
-            if (sleep) {
-              try {
-                Thread.sleep(2000);
-              } catch (InterruptedException e) {
-                return;
-              }
-              continue;
-            }
-            sock.receive(packet);
-            SocketAddress senderSockAddr = packet.getSocketAddress();
-            logger.info("received {} bytes from {}", packet.getLength(), senderSockAddr);
-            if (packet.getLength() == 4) {
-              if (buffer[0] == 'p' && buffer[1] == 'i' && buffer[2] == 'n' && buffer[3] == 'g') {
-                logger.info("received ping-pong request from {} - sending response", senderSockAddr);
-                DatagramPacket response = new DatagramPacket(pongBuffer, pongBuffer.length, senderSockAddr);
-                sock.send(response);
-              } else if (buffer[0] == 'p' && buffer[1] == 'o' && buffer[2] == 'n' && buffer[3] == 'g') {
-                pongReceived(senderSockAddr);
-              }
-            }
-          } catch (IOException e) {
-            try {
-              // if the network is down sleep a bit to keep from running hot
-              Thread.sleep(500);
-            } catch (InterruptedException ie) {
-              return;
-            }
-          }
-        }
-      }
-    };
-    this.pingResponder.setDaemon(true);
-    this.pingResponder.start();
-  }
-  
-  public void pongReceived(SocketAddress senderSockAddr) {
-    logger.info("received ping-pong response from {}", senderSockAddr);
-    
-    InternalDistributedMember memberAddr = addressConversionMap.get(senderSockAddr);
-    if (memberAddr != null) {
-      logger.info("quorum check: mapped address to member ID {}", memberAddr);
-      receivedAcks.add(memberAddr);
-    }
-  }
-  
-  public void teardown() {
-    if (this.sock != null) {
-      stopper.set(true);
-    }
-  }
-  
-  @Override
-  public String toString() {
-    if (this.sock != null) {
-      return "QuorumChecker(port="+this.sock.getLocalPort()+"; view="+this.lastView+")";
-    } else {
-      return "QuorumChecker(disabled; view="+this.lastView+")";
-    }
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/0ee416f9/gemfire-core/src/main/resources/log4j2.xml
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/resources/log4j2.xml b/gemfire-core/src/main/resources/log4j2.xml
index 00a1d91..670c0f1 100755
--- a/gemfire-core/src/main/resources/log4j2.xml
+++ b/gemfire-core/src/main/resources/log4j2.xml
@@ -15,7 +15,7 @@
       <MarkerFilter marker="GEMFIRE_VERBOSE" onMatch="DENY" onMismatch="NEUTRAL"/>
     </filters>
     </Logger>
-    <Logger name="org.jgroups" level="WARN" additivity="true"/>
+    <Logger name="org.jgroups" level="FATAL" additivity="true"/>
     <Root level="INFO">
       <AppenderRef ref="STDOUT"/>
     </Root>