You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jd...@apache.org on 2010/04/28 19:52:43 UTC
svn commit: r939030 - in /hadoop/hbase/trunk: ./
core/src/main/java/org/apache/hadoop/hbase/regionserver/
Author: jdcryans
Date: Wed Apr 28 17:52:43 2010
New Revision: 939030
URL: http://svn.apache.org/viewvc?rev=939030&view=rev
Log:
HBASE-2496 Less ArrayList churn on the scan path
Modified:
hadoop/hbase/trunk/CHANGES.txt
hadoop/hbase/trunk/core/src/main/java/org/apache/hadoop/hbase/regionserver/ColumnCount.java
hadoop/hbase/trunk/core/src/main/java/org/apache/hadoop/hbase/regionserver/ExplicitColumnTracker.java
hadoop/hbase/trunk/core/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=939030&r1=939029&r2=939030&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Wed Apr 28 17:52:43 2010
@@ -537,6 +537,7 @@ Release 0.21.0 - Unreleased
(Todd Lipcon via Stack)
HBASE-2393 ThriftServer instantiates a new HTable per request
(Bogdan DRAGU via Stack)
+ HBASE-2496 Less ArrayList churn on the scan path
NEW FEATURES
HBASE-1961 HBase EC2 scripts
Modified: hadoop/hbase/trunk/core/src/main/java/org/apache/hadoop/hbase/regionserver/ColumnCount.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/core/src/main/java/org/apache/hadoop/hbase/regionserver/ColumnCount.java?rev=939030&r1=939029&r2=939030&view=diff
==============================================================================
--- hadoop/hbase/trunk/core/src/main/java/org/apache/hadoop/hbase/regionserver/ColumnCount.java (original)
+++ hadoop/hbase/trunk/core/src/main/java/org/apache/hadoop/hbase/regionserver/ColumnCount.java Wed Apr 28 17:52:43 2010
@@ -25,9 +25,9 @@ package org.apache.hadoop.hbase.regionse
* NOT thread-safe because it is not used in a multi-threaded context, yet.
*/
public class ColumnCount {
- private byte [] bytes;
- private int offset;
- private int length;
+ private final byte [] bytes;
+ private final int offset;
+ private final int length;
private int count;
/**
@@ -97,6 +97,15 @@ public class ColumnCount {
public int increment() {
return ++count;
}
+
+ /**
+ * Set the current count to a new count
+ * @param count new count to set
+ */
+ public void setCount(int count) {
+ this.count = count;
+ }
+
/**
* Check to see if needed to fetch more versions
Modified: hadoop/hbase/trunk/core/src/main/java/org/apache/hadoop/hbase/regionserver/ExplicitColumnTracker.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/core/src/main/java/org/apache/hadoop/hbase/regionserver/ExplicitColumnTracker.java?rev=939030&r1=939029&r2=939030&view=diff
==============================================================================
--- hadoop/hbase/trunk/core/src/main/java/org/apache/hadoop/hbase/regionserver/ExplicitColumnTracker.java (original)
+++ hadoop/hbase/trunk/core/src/main/java/org/apache/hadoop/hbase/regionserver/ExplicitColumnTracker.java Wed Apr 28 17:52:43 2010
@@ -46,11 +46,11 @@ import org.apache.hadoop.hbase.util.Byte
*/
public class ExplicitColumnTracker implements ColumnTracker {
- private int maxVersions;
- private List<ColumnCount> columns;
+ private final int maxVersions;
+ private final List<ColumnCount> columns;
+ private final List<ColumnCount> columnsToReuse;
private int index;
private ColumnCount column;
- private NavigableSet<byte[]> origColumns;
/**
* Default constructor.
@@ -59,7 +59,11 @@ public class ExplicitColumnTracker imple
*/
public ExplicitColumnTracker(NavigableSet<byte[]> columns, int maxVersions) {
this.maxVersions = maxVersions;
- this.origColumns = columns;
+ this.columns = new ArrayList<ColumnCount>(columns.size());
+ this.columnsToReuse = new ArrayList<ColumnCount>(columns.size());
+ for(byte [] column : columns) {
+ this.columnsToReuse.add(new ColumnCount(column,maxVersions));
+ }
reset();
}
@@ -147,15 +151,16 @@ public class ExplicitColumnTracker imple
// Called between every row.
public void reset() {
- buildColumnList(this.origColumns);
+ buildColumnList();
this.index = 0;
this.column = this.columns.get(this.index);
}
- private void buildColumnList(NavigableSet<byte[]> columns) {
- this.columns = new ArrayList<ColumnCount>(columns.size());
- for(byte [] column : columns) {
- this.columns.add(new ColumnCount(column,maxVersions));
+ private void buildColumnList() {
+ this.columns.clear();
+ this.columns.addAll(this.columnsToReuse);
+ for(ColumnCount col : this.columns) {
+ col.setCount(this.maxVersions);
}
}
}
Modified: hadoop/hbase/trunk/core/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/core/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java?rev=939030&r1=939029&r2=939030&view=diff
==============================================================================
--- hadoop/hbase/trunk/core/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (original)
+++ hadoop/hbase/trunk/core/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java Wed Apr 28 17:52:43 2010
@@ -1815,12 +1815,12 @@ public class HRegionServer implements HC
throw e;
}
this.leases.renewLease(scannerName);
- List<Result> results = new ArrayList<Result>();
+ List<Result> results = new ArrayList<Result>(nbRows);
long currentScanResultSize = 0;
+ List<KeyValue> values = new ArrayList<KeyValue>();
for (int i = 0; i < nbRows && currentScanResultSize < maxScannerResultSize; i++) {
requestCount.incrementAndGet();
// Collect values to be returned here
- List<KeyValue> values = new ArrayList<KeyValue>();
boolean moreRows = s.next(values);
if (!values.isEmpty()) {
for (KeyValue kv : values) {
@@ -1831,6 +1831,7 @@ public class HRegionServer implements HC
if (!moreRows) {
break;
}
+ values.clear();
}
// Below is an ugly hack where we cast the InternalScanner to be a
// HRegion.RegionScanner. The alternative is to change InternalScanner