Ejemplo n.º 1
0
 synchronized boolean isServerDeadAndNotProcessed(ServerName server) {
   if (server == null) return false;
   if (serverManager.isServerOnline(server)) {
     String hostAndPort = server.getHostAndPort();
     long startCode = server.getStartcode();
     Long deadCode = deadServers.get(hostAndPort);
     if (deadCode == null || startCode > deadCode.longValue()) {
       if (serverManager.isServerReachable(server)) {
         return false;
       }
       // The size of deadServers won't grow unbounded.
       deadServers.put(hostAndPort, Long.valueOf(startCode));
     }
     // Watch out! If the server is not dead, the region could
     // remain unassigned. That's why ServerManager#isServerReachable
     // should use some retry.
     //
     // We cache this info since it is very unlikely for that
     // instance to come back up later on. We don't want to expire
     // the server since we prefer to let it die naturally.
     LOG.warn("Couldn't reach online server " + server);
   }
   // Now, we know it's dead. Check if it's processed
   return !processedServers.containsKey(server);
 }