Author: jbellis
Date: Mon Apr 12 15:54:13 2010
New Revision: 933294

URL: http://svn.apache.org/viewvc?rev=933294&view=rev
Log:
merge r 931148 (CASSANDRA-950) from trunk

Added:
    cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/io/util/
      - copied from r931148, 
cassandra/trunk/test/unit/org/apache/cassandra/io/util/
    
cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/io/util/BufferedRandomAccessFileTest.java
      - copied unchanged from r931148, 
cassandra/trunk/test/unit/org/apache/cassandra/io/util/BufferedRandomAccessFileTest.java
Modified:
    cassandra/branches/cassandra-0.6/   (props changed)
    cassandra/branches/cassandra-0.6/CHANGES.txt
    
cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java
   (props changed)
    
cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java
   (props changed)
    
cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java
   (props changed)
    
cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java
   (props changed)
    
cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java
   (props changed)
    
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/io/util/BufferedRandomAccessFile.java

Propchange: cassandra/branches/cassandra-0.6/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Apr 12 15:54:13 2010
@@ -1,3 +1,4 @@
+/cassandra/trunk:931148
 /incubator/cassandra/branches/cassandra-0.3:774578-796573
 /incubator/cassandra/branches/cassandra-0.4:810145-834239,834349-834350
 /incubator/cassandra/branches/cassandra-0.5:888872-915439

Modified: cassandra/branches/cassandra-0.6/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/CHANGES.txt?rev=933294&r1=933293&r2=933294&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.6/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.6/CHANGES.txt Mon Apr 12 15:54:13 2010
@@ -10,6 +10,8 @@
  * perform repair even for small entropy differences (CASSANDRA-924)
  * Use hostnames in CFInputFormat to allow Hadoop's naive string-based
    locality comparisons to work (CASSANDRA-955)
+ * cache read-only BufferedRandomAccessFile length to avoid
+   3 system calls per invocation (CASSANDRA-950)
  * nodes with IPv6 (and no IPv4) addresses could not join cluster
    (CASSANDRA-969)
 

Propchange: 
cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Apr 12 15:54:13 2010
@@ -1,3 +1,4 @@
+/cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:931148
 
/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
 
/incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/Cassandra.java:888872-903502

Propchange: 
cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Apr 12 15:54:13 2010
@@ -1,3 +1,4 @@
+/cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:931148
 
/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
 
/incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/Column.java:888872-903502

Propchange: 
cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Apr 12 15:54:13 2010
@@ -1,3 +1,4 @@
+/cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:931148
 
/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
 
/incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/InvalidRequestException.java:888872-903502

Propchange: 
cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Apr 12 15:54:13 2010
@@ -1,3 +1,4 @@
+/cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:931148
 
/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
 
/incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/NotFoundException.java:888872-903502

Propchange: 
cassandra/branches/cassandra-0.6/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Apr 12 15:54:13 2010
@@ -1,3 +1,4 @@
+/cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:931148
 
/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
 
/incubator/cassandra/branches/cassandra-0.5/interface/gen-java/org/apache/cassandra/service/SuperColumn.java:888872-903502

Modified: 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/io/util/BufferedRandomAccessFile.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/io/util/BufferedRandomAccessFile.java?rev=933294&r1=933293&r2=933294&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/io/util/BufferedRandomAccessFile.java
 (original)
+++ 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/io/util/BufferedRandomAccessFile.java
 Mon Apr 12 15:54:13 2010
@@ -57,6 +57,7 @@ public class BufferedRandomAccessFile ex
     private boolean hitEOF_; // buffer contains last file block?
     private long diskPos_; // disk position
     private long markedPointer;
+    private long fileLength = -1; // cache for file size
 
     /*
     * To describe the above fields, we introduce the following abstractions for
@@ -125,7 +126,7 @@ public class BufferedRandomAccessFile ex
     {
         super(file, mode);
         path_ = file.getAbsolutePath();
-        this.init(size);
+        this.init(size, mode);
     }
     
     /**
@@ -138,14 +139,14 @@ public class BufferedRandomAccessFile ex
         this(name, mode, 0);
     }
     
-    public BufferedRandomAccessFile(String name, String mode, int size) throws 
FileNotFoundException
+    public BufferedRandomAccessFile(String name, String mode, int size) throws 
IOException
     {
         super(name, mode);
         path_ = name;
-        this.init(size);
+        this.init(size, mode);
     }
     
-    private void init(int size)
+    private void init(int size, String mode) throws IOException
     {
         this.dirty_ = false;
         this.lo_ = this.curr_ = this.hi_ = 0;
@@ -153,6 +154,11 @@ public class BufferedRandomAccessFile ex
         this.maxHi_ = (long) BuffSz_;
         this.hitEOF_ = false;
         this.diskPos_ = 0L;
+        if ("r".equals(mode))
+        {
+            // read only file, we can cache file length
+            this.fileLength = super.length();
+        }
     }
 
     public String getPath()
@@ -265,8 +271,16 @@ public class BufferedRandomAccessFile ex
 
     public long length() throws IOException
     {
-        // max accounts for the case where we have written past the old file 
length, but not yet flushed our buffer
-        return Math.max(this.curr_, super.length());
+        if (fileLength == -1)
+        {
+            // max accounts for the case where we have written past the old 
file length, but not yet flushed our buffer
+            return Math.max(this.curr_, super.length());
+        }
+        else
+        {
+            // opened as read only, file length is cached
+            return fileLength;
+        }
     }
 
     public int read() throws IOException


Reply via email to