You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2010/11/02 07:14:55 UTC

svn commit: r1029960 - in /cassandra/branches/cassandra-0.7: ./ interface/thrift/gen-java/org/apache/cassandra/thrift/ src/java/org/apache/cassandra/io/util/ src/java/org/apache/cassandra/service/ src/java/org/apache/cassandra/utils/

Author: jbellis
Date: Tue Nov  2 06:14:54 2010
New Revision: 1029960

URL: http://svn.apache.org/viewvc?rev=1029960&view=rev
Log:
merge from 0.6

Modified:
    cassandra/branches/cassandra-0.7/   (props changed)
    cassandra/branches/cassandra-0.7/CHANGES.txt
    cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java   (props changed)
    cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java   (props changed)
    cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java   (props changed)
    cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java   (props changed)
    cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java   (props changed)
    cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/io/util/FileUtils.java
    cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageProxy.java
    cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/CLibrary.java
    cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/FBUtilities.java

Propchange: cassandra/branches/cassandra-0.7/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov  2 06:14:54 2010
@@ -1,4 +1,4 @@
-/cassandra/branches/cassandra-0.6:922689-1029541
+/cassandra/branches/cassandra-0.6:922689-1029959
 /cassandra/trunk:1026516-1026734,1028929
 /incubator/cassandra/branches/cassandra-0.3:774578-796573
 /incubator/cassandra/branches/cassandra-0.4:810145-834239,834349-834350

Modified: cassandra/branches/cassandra-0.7/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/CHANGES.txt?rev=1029960&r1=1029959&r2=1029960&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.7/CHANGES.txt Tue Nov  2 06:14:54 2010
@@ -9,6 +9,8 @@ dev
  * add INTERNAL_RESPONSE verb to differentiate from responses related
    to client requests (CASSANDRA-1685)
  * log tpstats when dropping messages (CASSANDRA-1660)
+ * Avoid dropping messages off the client request path (CASSANDRA-1676)
+ * fix jna errno reporting (CASSANDRA-1694)
 
 
 0.7.0-beta3

Propchange: cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov  2 06:14:54 2010
@@ -1,4 +1,4 @@
-/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:922689-1029541
+/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:922689-1029959
 /cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1026516-1026734,1028929
 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/Cassandra.java:774578-796573
 /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/Cassandra.java:810145-834239,834349-834350

Propchange: cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov  2 06:14:54 2010
@@ -1,4 +1,4 @@
-/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:922689-1029541
+/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:922689-1029959
 /cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1026516-1026734,1028929
 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/column_t.java:774578-792198
 /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/Column.java:810145-834239,834349-834350

Propchange: cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov  2 06:14:54 2010
@@ -1,4 +1,4 @@
-/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:922689-1029541
+/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:922689-1029959
 /cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1026516-1026734,1028929
 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:774578-796573
 /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:810145-834239,834349-834350

Propchange: cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov  2 06:14:54 2010
@@ -1,4 +1,4 @@
-/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:922689-1029541
+/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:922689-1029959
 /cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1026516-1026734,1028929
 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:774578-796573
 /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:810145-834239,834349-834350

Propchange: cassandra/branches/cassandra-0.7/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov  2 06:14:54 2010
@@ -1,4 +1,4 @@
-/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:922689-1029541
+/cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:922689-1029959
 /cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1026516-1026734,1028929
 /incubator/cassandra/branches/cassandra-0.3/interface/gen-java/org/apache/cassandra/service/superColumn_t.java:774578-792198
 /incubator/cassandra/branches/cassandra-0.4/interface/gen-java/org/apache/cassandra/service/SuperColumn.java:810145-834239,834349-834350

Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/io/util/FileUtils.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/io/util/FileUtils.java?rev=1029960&r1=1029959&r2=1029960&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/io/util/FileUtils.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/io/util/FileUtils.java Tue Nov  2 06:14:54 2010
@@ -18,17 +18,16 @@
 
 package org.apache.cassandra.io.util;
 
-import java.io.*;
+import java.io.File;
+import java.io.IOException;
 import java.text.DecimalFormat;
-import java.util.*;
+import java.util.Comparator;
+import java.util.List;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.sun.jna.Native;
-import org.apache.cassandra.utils.CLibrary;
-
-import com.sun.jna.Native;
+import com.sun.jna.LastErrorException;
 import org.apache.cassandra.utils.CLibrary;
 
 
@@ -165,29 +164,6 @@ public class FileUtils
     }
     
     /**
-     * calculate the total space used by a file or directory
-     * 
-     * @param path the path
-     * @return total space used.
-     */
-    public static long getUsedDiskSpaceForPath(String path)
-    {
-        File file = new File(path);
-        
-        if (file.isFile()) 
-        {
-            return file.length();
-        }
-        
-        long diskSpace = 0;
-        for (File childFile: file.listFiles())
-        {
-            diskSpace += getUsedDiskSpaceForPath(childFile.getPath());
-        }
-        return diskSpace;
-    }
-
-    /**
      * Deletes all files and subdirectories under "dir".
      * @param dir Directory to be deleted
      * @throws IOException if any part of the tree cannot be deleted
@@ -217,25 +193,21 @@ public class FileUtils
      */
     public static void createHardLink(File sourceFile, File destinationFile) throws IOException
     {
-        int errno = Integer.MIN_VALUE;
         try
         {
             int result = CLibrary.link(sourceFile.getAbsolutePath(), destinationFile.getAbsolutePath());
-            if (result != 0)
-                errno = Native.getLastError();
+            assert result == 0; // success is always zero
         }
         catch (UnsatisfiedLinkError e)
         {
             createHardLinkWithExec(sourceFile, destinationFile);
-            return;
         }
-
-        if (errno != Integer.MIN_VALUE)
+        catch (LastErrorException e)
         {
             // there are 17 different error codes listed on the man page.  punt until/unless we find which
             // ones actually turn up in practice.
-            throw new IOException(String.format("Unable to create hard link from %s to %s (errno %d)", 
-                                                sourceFile, destinationFile, errno));
+            throw new IOException(String.format("Unable to create hard link from %s to %s (errno %d)",
+                                                sourceFile, destinationFile, CLibrary.errno(e)));
         }
     }
 

Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageProxy.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageProxy.java?rev=1029960&r1=1029959&r2=1029960&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageProxy.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageProxy.java Tue Nov  2 06:14:54 2010
@@ -65,6 +65,7 @@ public class StorageProxy implements Sto
     private static final LatencyTracker rangeStats = new LatencyTracker();
     private static final LatencyTracker writeStats = new LatencyTracker();
     private static boolean hintedHandoffEnabled = DatabaseDescriptor.hintedHandoffEnabled();
+    private static final String UNREACHABLE = "UNREACHABLE";
 
     private StorageProxy() {}
     static
@@ -491,8 +492,6 @@ public class StorageProxy implements Sto
      */
     public static Map<String, List<String>> describeSchemaVersions()
     {
-        final Map<String, List<String>> results = new HashMap<String, List<String>>();
-        
         final String myVersion = DatabaseDescriptor.getDefsVersion().toString();
         final Map<InetAddress, UUID> versions = new ConcurrentHashMap<InetAddress, UUID>();
         final Set<InetAddress> liveHosts = Gossiper.instance.getLiveMembers();
@@ -523,30 +522,34 @@ public class StorageProxy implements Sto
         
         logger.debug("My version is " + myVersion);
         
-        // first, indicate any hosts that did not respond.
-        final Set<InetAddress> ackedHosts = versions.keySet();
-        if (ackedHosts.size() < liveHosts.size())
-        {
-            Set<InetAddress> missingHosts = new HashSet<InetAddress>(liveHosts);
-            missingHosts.removeAll(ackedHosts);
-            assert missingHosts.size() > 0;
-            List<String> missingHostNames = new ArrayList<String>(missingHosts.size());
-            for (InetAddress host : missingHosts)
-                missingHostNames.add(host.getHostAddress());
-            results.put(DatabaseDescriptor.INITIAL_VERSION.toString(), missingHostNames);
-            logger.debug("Hosts not in agreement. Didn't get a response from everybody: " + StringUtils.join(missingHostNames, ","));
+        // maps versions to hosts that are on that version.
+        Map<String, List<String>> results = new HashMap<String, List<String>>();
+        Set<InetAddress> allHosts = new HashSet<InetAddress>();
+        allHosts.addAll(Gossiper.instance.getLiveMembers());
+        allHosts.addAll(Gossiper.instance.getUnreachableMembers());
+        for (InetAddress host : allHosts)
+        {
+            UUID version = versions.get(host);
+            String stringVersion = version == null ? UNREACHABLE : version.toString();
+            List<String> hosts = results.get(stringVersion);
+            if (hosts == null)
+            {
+                hosts = new ArrayList<String>();
+                results.put(stringVersion, hosts);
+            }
+            hosts.add(host.getHostAddress());
         }
-        
+        if (results.get(UNREACHABLE) != null)
+            logger.debug("Hosts not in agreement. Didn't get a response from everybody: " + StringUtils.join(results.get(UNREACHABLE), ","));
         // check for version disagreement. log the hosts that don't agree.
-        for (InetAddress host : ackedHosts)
+        for (Map.Entry<String, List<String>> entry : results.entrySet())
         {
-            String uuid = versions.get(host).toString();
-            if (!results.containsKey(uuid))
-                results.put(uuid, new ArrayList<String>());
-            results.get(uuid).add(host.getHostAddress());
-            if (!uuid.equals(myVersion))
-                logger.debug("%s disagrees (%s)", host.getHostAddress(), uuid);
+            if (entry.getKey().equals(UNREACHABLE) || entry.getKey().equals(myVersion))
+                continue;
+            for (String host : entry.getValue())
+                logger.debug("%s disagrees (%s)", host, entry.getKey());
         }
+        
         if (results.size() == 1)
             logger.debug("Schemas are in agreement.");
         

Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/CLibrary.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/CLibrary.java?rev=1029960&r1=1029959&r2=1029960&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/CLibrary.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/CLibrary.java Tue Nov  2 06:14:54 2010
@@ -21,6 +21,7 @@ package org.apache.cassandra.utils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.sun.jna.LastErrorException;
 import com.sun.jna.Native;
 
 public final class CLibrary
@@ -48,10 +49,23 @@ public final class CLibrary
         }
     }
 
-    public static native int mlockall(int flags);
-    public static native int munlockall();
+    public static native int mlockall(int flags) throws LastErrorException;
+    public static native int munlockall() throws LastErrorException;
 
-    public static native int link(String from, String to);
+    public static native int link(String from, String to) throws LastErrorException;
+
+    public static int errno(LastErrorException e)
+    {
+        try
+        {
+            return e.getErrorCode();
+        }
+        catch (NoSuchMethodError x)
+        {
+            logger.warn("Obsolete version of JNA present; unable to read errno. Upgrade to JNA 3.2.7 or later");
+            return 0;
+        }
+    }
 
     private CLibrary() {}
 }

Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/FBUtilities.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/FBUtilities.java?rev=1029960&r1=1029959&r2=1029960&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/FBUtilities.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/FBUtilities.java Tue Nov  2 06:14:54 2010
@@ -41,6 +41,7 @@ import org.apache.commons.lang.ArrayUtil
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.sun.jna.LastErrorException;
 import com.sun.jna.Native;
 import org.apache.cassandra.config.ConfigurationException;
 import org.apache.cassandra.config.DatabaseDescriptor;
@@ -639,22 +640,18 @@ public class FBUtilities
 
     public static void tryMlockall()
     {
-        int errno = Integer.MIN_VALUE;
         try
         {
             int result = CLibrary.mlockall(CLibrary.MCL_CURRENT);
-            if (result != 0)
-                errno = Native.getLastError();
+            assert result == 0; // mlockall should always be zero on success
         }
         catch (UnsatisfiedLinkError e)
         {
             // this will have already been logged by CLibrary, no need to repeat it
-            return;
         }
-
-        if (errno != Integer.MIN_VALUE)
+        catch (LastErrorException e)
         {
-            if (errno == CLibrary.ENOMEM && System.getProperty("os.name").toLowerCase().contains("linux"))
+            if (CLibrary.errno(e) == CLibrary.ENOMEM && System.getProperty("os.name").toLowerCase().contains("linux"))
             {
                 logger_.warn("Unable to lock JVM memory (ENOMEM)."
                              + " This can result in part of the JVM being swapped out, especially with mmapped I/O enabled."
@@ -663,7 +660,7 @@ public class FBUtilities
             else if (!System.getProperty("os.name").toLowerCase().contains("mac"))
             {
                 // OS X allows mlockall to be called, but always returns an error
-                logger_.warn("Unknown mlockall error " + errno);
+                logger_.warn("Unknown mlockall error " + CLibrary.errno(e));
             }
         }
     }