Return-Path: X-Original-To: apmail-hbase-commits-archive@www.apache.org Delivered-To: apmail-hbase-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 326B510C05 for ; Sat, 6 Jul 2013 07:31:35 +0000 (UTC) Received: (qmail 6637 invoked by uid 500); 6 Jul 2013 07:31:34 -0000 Delivered-To: apmail-hbase-commits-archive@hbase.apache.org Received: (qmail 6463 invoked by uid 500); 6 Jul 2013 07:31:31 -0000 Mailing-List: contact commits-help@hbase.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@hbase.apache.org Delivered-To: mailing list commits@hbase.apache.org Received: (qmail 6456 invoked by uid 99); 6 Jul 2013 07:31:31 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 06 Jul 2013 07:31:30 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 06 Jul 2013 07:31:29 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 8E522238888A; Sat, 6 Jul 2013 07:31:09 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1500217 - in /hbase/trunk/hbase-server/src: main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java Date: Sat, 06 Jul 2013 07:31:09 -0000 To: commits@hbase.apache.org From: larsh@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20130706073109.8E522238888A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: larsh Date: Sat Jul 6 07:31:09 2013 New Revision: 1500217 URL: http://svn.apache.org/r1500217 Log: HBASE-8809 Addendum to correctly hand versions in raw scans aswell (Jesse and LarsH) Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java?rev=1500217&r1=1500216&r2=1500217&view=diff ============================================================================== --- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java (original) +++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java Sat Jul 6 07:31:09 2013 @@ -164,7 +164,10 @@ public class ScanQueryMatcher { // seePastDeleteMarker: user initiated scans this.seePastDeleteMarkers = scanInfo.getKeepDeletedCells() && isUserScan; - int maxVersions = Math.min(scan.getMaxVersions(), scanInfo.getMaxVersions()); + int maxVersions = + scan.isRaw() ? scan.getMaxVersions() : Math.min(scan.getMaxVersions(), + scanInfo.getMaxVersions()); + // Single branch to deal with two types of reads (columns vs all in family) if (columns == null || columns.size() == 0) { // there is always a null column in the wildcard column query. Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java?rev=1500217&r1=1500216&r2=1500217&view=diff ============================================================================== --- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java (original) +++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java Sat Jul 6 07:31:09 2013 @@ -45,6 +45,7 @@ import java.util.concurrent.ThreadPoolEx import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; +import org.apache.commons.lang.ArrayUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.impl.Log4JLogger; @@ -4949,5 +4950,79 @@ public class TestFromClientSide { assertEquals(1, bar.length); assertEquals(2, bar[0].size()); } -} + @Test + public void testRawScanRespectsVersions() throws Exception { + byte[] TABLE = Bytes.toBytes("testRawScan"); + HTable table = TEST_UTIL.createTable(TABLE, new byte[][] { FAMILY }); + byte[] row = Bytes.toBytes("row"); + + // put the same row 4 times, with different values + Put p = new Put(row); + p.add(FAMILY, QUALIFIER, 10, VALUE); + table.put(p); + table.flushCommits(); + + p = new Put(row); + p.add(FAMILY, QUALIFIER, 11, ArrayUtils.add(VALUE, (byte) 2)); + table.put(p); + table.flushCommits(); + + p = new Put(row); + p.add(FAMILY, QUALIFIER, 12, ArrayUtils.add(VALUE, (byte) 3)); + table.put(p); + table.flushCommits(); + + p = new Put(row); + p.add(FAMILY, QUALIFIER, 13, ArrayUtils.add(VALUE, (byte) 4)); + table.put(p); + table.flushCommits(); + + int versions = 4; + Scan s = new Scan(row); + // get all the possible versions + s.setMaxVersions(); + s.setRaw(true); + + ResultScanner scanner = table.getScanner(s); + int count = 0; + for (Result r : scanner) { + assertEquals("Found an unexpected number of results for the row!", versions, r.list().size()); + count++; + } + assertEquals("Found more than a single row when raw scanning the table with a single row!", 1, + count); + scanner.close(); + + // then if we decrease the number of versions, but keep the scan raw, we should see exactly that + // number of versions + versions = 2; + s.setMaxVersions(versions); + scanner = table.getScanner(s); + count = 0; + for (Result r : scanner) { + assertEquals("Found an unexpected number of results for the row!", versions, r.list().size()); + count++; + } + assertEquals("Found more than a single row when raw scanning the table with a single row!", 1, + count); + scanner.close(); + + // finally, if we turn off raw scanning, but max out the number of versions, we should go back + // to seeing just three + versions = 3; + s.setMaxVersions(versions); + scanner = table.getScanner(s); + count = 0; + for (Result r : scanner) { + assertEquals("Found an unexpected number of results for the row!", versions, r.list().size()); + count++; + } + assertEquals("Found more than a single row when raw scanning the table with a single row!", 1, + count); + scanner.close(); + + table.close(); + TEST_UTIL.deleteTable(TABLE); + } +}