You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Jamal (Created) (JIRA)" <ji...@apache.org> on 2012/01/22 18:26:41 UTC

[jira] [Created] (HBASE-5247) ColumnPaginationFilter doesn't return the requested number of columns

ColumnPaginationFilter doesn't return the requested number of columns
---------------------------------------------------------------------

                 Key: HBASE-5247
                 URL: https://issues.apache.org/jira/browse/HBASE-5247
             Project: HBase
          Issue Type: Bug
          Components: client
    Affects Versions: 0.90.4
         Environment: Hbase 0.90.4-cdh3u2 & standard apache download 0.90.4
Hadoop 0.20.2-cdh3u2 & standard apache download 0.20.205
            Reporter: Jamal
            Priority: Minor


The ColumnPaginationFilter doesn't return the correct number of columns when the limit is less than the total number of columns.  I don't know much about the internals of Hbase, but it appears that the problem is more re-producible when a table is split accross at least 2 regions.  I have created a unit test which can re-produce the issue which is below.  Sorry, I didn't see a place to upload an attachment.  To run it, just create a standard maven project with the following 2 files:


pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>org.sandbox</groupId>
	<artifactId>pagination</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<properties>
		<spring.version>3.0.6.RELEASE</spring.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
			<exclusions>
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache.hbase</groupId>
			<artifactId>hbase</artifactId>
			<version>0.90.4</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring.version}</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.8.2</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<repositories>
		<repository>
			<id>com.springsource.repository.maven.release</id>
			<url>http://maven.springframework.org/release/</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>
</project>


PaginationTest.java:
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.ColumnPaginationFilter;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({})
public class PaginationTest {
	private byte[] TABLE_NAME = Bytes.toBytes("pagination-test-table");
	private Configuration conf = HBaseConfiguration.create();
	private HTable table;
	private HBaseAdmin admin;
	private byte[] COLUMN_FAMILY = Bytes.toBytes("stuff");
	byte[] rowKey = Bytes.toBytes("row5");
	private Logger logger = LoggerFactory.getLogger(getClass());
	private int rowCount = 5000, columnCount = 12;

	@Before
	public void setup() throws IOException, InterruptedException {
		admin = new HBaseAdmin(conf);

		if (!admin.isTableAvailable(TABLE_NAME)) {

			HTableDescriptor desc = new HTableDescriptor(TABLE_NAME);
			HColumnDescriptor columnDesc = new HColumnDescriptor(COLUMN_FAMILY);
			desc.addFamily(columnDesc);
			admin.createTable(desc);
		}

		table = new HTable(conf, TABLE_NAME);

		for (int z = 0; z < 3; z++) {
			List<Put> puts = new ArrayList<Put>(columnCount);
			for (int j = 0; j < rowCount; j++) {

				byte[] rowKey = Bytes.toBytes("row" + j);
				Put put = new Put(rowKey);
				for (int i = 0; i < columnCount; i++) {

					put.add(COLUMN_FAMILY,
							Bytes.toBytes(DigestUtils.md5Hex("something:" + i)),
							Bytes.toBytes(i));

				}
				puts.add(put);
			}

			table.put(puts);
			table.flushCommits();
			admin.split(TABLE_NAME);

			// Wait for split to "finish"
			Thread.sleep(30000);

			// Wait for flush to "finish"
			admin.flush(TABLE_NAME);
		}

	}

	@After
	public void cleanup() throws IOException {

		table.close();
		admin.disableTable(TABLE_NAME);
		admin.deleteTable(TABLE_NAME);

	}

	@Test
	public void runConditions() throws IOException {
		showAllColumns();
		scanFirst5Columns();
		scanNextFileColumns();
		getFirstFiveColumns();
	}

	public void showAllColumns() throws IOException {
		logger.info("Current contents of row:" + Bytes.toString(rowKey));
		Get get = new Get(rowKey);
		get.addFamily(COLUMN_FAMILY);
		Result result = table.get(get);
		for (KeyValue kv : result.list()) {
			// logger.info("kv:" + kv);
			logger.info("key:" + Bytes.toString(kv.getQualifier()) + " value:"
					+ Bytes.toInt(kv.getValue()));
		}

		// Confirm the # of columns is as expected
		Assert.assertTrue(result.list().size() == columnCount);
	}

	public void scanFirst5Columns() throws IOException {

		// Try Scanning for 5 columns
		logger.info("Scan the first 5 columns of row:" + Bytes.toString(rowKey));
		Scan scan = new Scan(rowKey, rowKey);
		Filter filter = new ColumnPaginationFilter(5, 0);
		scan.setFilter(filter);

		ResultScanner rs = table.getScanner(scan);
		try {
			for (Result r = rs.next(); r != null; r = rs.next()) {
				for (KeyValue kv : r.list()) {
					// logger.info("kv:" + kv);
					logger.info("key:" + Bytes.toString(kv.getQualifier())
							+ " value:" + Bytes.toInt(kv.getValue()));
				}
				// Confirm the # of columns is as expected
				Assert.assertTrue(r.list().size() == 5);
			}
		} finally {
			rs.close();
		}
	}

	public void scanNextFileColumns() throws IOException {

		// Try Scanning for next 5 columns
		logger.info("Scan the next 5 columns of row:" + Bytes.toString(rowKey));
		Scan scan = new Scan(rowKey, rowKey);
		Filter filter = new ColumnPaginationFilter(5, 5);
		scan.setFilter(filter);

		ResultScanner rs = table.getScanner(scan);
		try {
			for (Result r = rs.next(); r != null; r = rs.next()) {
				for (KeyValue kv : r.list()) {
					// logger.info("kv:" + kv);
					logger.info("key:" + Bytes.toString(kv.getQualifier())
							+ " value:" + Bytes.toInt(kv.getValue()));
				}
				// Confirm the # of columns is as expected
				Assert.assertTrue(r.list().size() == 5);
			}
		} finally {
			rs.close();
		}

	}

	public void getFirstFiveColumns() throws IOException {

		// Try Getting 5 columns
		logger.info("Get the first 5 columns of row:" + Bytes.toString(rowKey));
		Get get = new Get(rowKey);
		get.addFamily(COLUMN_FAMILY);

		Filter filter = new ColumnPaginationFilter(5, 0);
		get.setFilter(filter);
		Result firstFiveResult = table.get(get);
		for (KeyValue kv : firstFiveResult.list()) {
			// logger.info("kv:" + kv);
			logger.info("key:" + Bytes.toString(kv.getQualifier()) + " value:"
					+ Bytes.toInt(kv.getValue()));

		}
		// Confirm the # of columns is as expected
		Assert.assertTrue(firstFiveResult.list().size() == 5);

	}
}





--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Updated] (HBASE-5247) ColumnPaginationFilter doesn't return the requested number of columns

Posted by "Jamal (Updated) (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/HBASE-5247?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jamal updated HBASE-5247:
-------------------------

    Description: The ColumnPaginationFilter doesn't return the correct number of columns when the limit is less than the total number of columns.  I don't know much about the internals of Hbase, but it appears that the problem is more re-producible when a table is split accross at least 2 regions.  I have created a unit test which can re-produce the issue which is now attached.  (was: The ColumnPaginationFilter doesn't return the correct number of columns when the limit is less than the total number of columns.  I don't know much about the internals of Hbase, but it appears that the problem is more re-producible when a table is split accross at least 2 regions.  I have created a unit test which can re-produce the issue which is below.  Sorry, I didn't see a place to upload an attachment.  To run it, just create a standard maven project with the following 2 files:


pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>org.sandbox</groupId>
	<artifactId>pagination</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<properties>
		<spring.version>3.0.6.RELEASE</spring.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
			<exclusions>
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache.hbase</groupId>
			<artifactId>hbase</artifactId>
			<version>0.90.4</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring.version}</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.8.2</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<repositories>
		<repository>
			<id>com.springsource.repository.maven.release</id>
			<url>http://maven.springframework.org/release/</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>
</project>


PaginationTest.java:
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.ColumnPaginationFilter;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({})
public class PaginationTest {
	private byte[] TABLE_NAME = Bytes.toBytes("pagination-test-table");
	private Configuration conf = HBaseConfiguration.create();
	private HTable table;
	private HBaseAdmin admin;
	private byte[] COLUMN_FAMILY = Bytes.toBytes("stuff");
	byte[] rowKey = Bytes.toBytes("row5");
	private Logger logger = LoggerFactory.getLogger(getClass());
	private int rowCount = 5000, columnCount = 12;

	@Before
	public void setup() throws IOException, InterruptedException {
		admin = new HBaseAdmin(conf);

		if (!admin.isTableAvailable(TABLE_NAME)) {

			HTableDescriptor desc = new HTableDescriptor(TABLE_NAME);
			HColumnDescriptor columnDesc = new HColumnDescriptor(COLUMN_FAMILY);
			desc.addFamily(columnDesc);
			admin.createTable(desc);
		}

		table = new HTable(conf, TABLE_NAME);

		for (int z = 0; z < 3; z++) {
			List<Put> puts = new ArrayList<Put>(columnCount);
			for (int j = 0; j < rowCount; j++) {

				byte[] rowKey = Bytes.toBytes("row" + j);
				Put put = new Put(rowKey);
				for (int i = 0; i < columnCount; i++) {

					put.add(COLUMN_FAMILY,
							Bytes.toBytes(DigestUtils.md5Hex("something:" + i)),
							Bytes.toBytes(i));

				}
				puts.add(put);
			}

			table.put(puts);
			table.flushCommits();
			admin.split(TABLE_NAME);

			// Wait for split to "finish"
			Thread.sleep(30000);

			// Wait for flush to "finish"
			admin.flush(TABLE_NAME);
		}

	}

	@After
	public void cleanup() throws IOException {

		table.close();
		admin.disableTable(TABLE_NAME);
		admin.deleteTable(TABLE_NAME);

	}

	@Test
	public void runConditions() throws IOException {
		showAllColumns();
		scanFirst5Columns();
		scanNextFileColumns();
		getFirstFiveColumns();
	}

	public void showAllColumns() throws IOException {
		logger.info("Current contents of row:" + Bytes.toString(rowKey));
		Get get = new Get(rowKey);
		get.addFamily(COLUMN_FAMILY);
		Result result = table.get(get);
		for (KeyValue kv : result.list()) {
			// logger.info("kv:" + kv);
			logger.info("key:" + Bytes.toString(kv.getQualifier()) + " value:"
					+ Bytes.toInt(kv.getValue()));
		}

		// Confirm the # of columns is as expected
		Assert.assertTrue(result.list().size() == columnCount);
	}

	public void scanFirst5Columns() throws IOException {

		// Try Scanning for 5 columns
		logger.info("Scan the first 5 columns of row:" + Bytes.toString(rowKey));
		Scan scan = new Scan(rowKey, rowKey);
		Filter filter = new ColumnPaginationFilter(5, 0);
		scan.setFilter(filter);

		ResultScanner rs = table.getScanner(scan);
		try {
			for (Result r = rs.next(); r != null; r = rs.next()) {
				for (KeyValue kv : r.list()) {
					// logger.info("kv:" + kv);
					logger.info("key:" + Bytes.toString(kv.getQualifier())
							+ " value:" + Bytes.toInt(kv.getValue()));
				}
				// Confirm the # of columns is as expected
				Assert.assertTrue(r.list().size() == 5);
			}
		} finally {
			rs.close();
		}
	}

	public void scanNextFileColumns() throws IOException {

		// Try Scanning for next 5 columns
		logger.info("Scan the next 5 columns of row:" + Bytes.toString(rowKey));
		Scan scan = new Scan(rowKey, rowKey);
		Filter filter = new ColumnPaginationFilter(5, 5);
		scan.setFilter(filter);

		ResultScanner rs = table.getScanner(scan);
		try {
			for (Result r = rs.next(); r != null; r = rs.next()) {
				for (KeyValue kv : r.list()) {
					// logger.info("kv:" + kv);
					logger.info("key:" + Bytes.toString(kv.getQualifier())
							+ " value:" + Bytes.toInt(kv.getValue()));
				}
				// Confirm the # of columns is as expected
				Assert.assertTrue(r.list().size() == 5);
			}
		} finally {
			rs.close();
		}

	}

	public void getFirstFiveColumns() throws IOException {

		// Try Getting 5 columns
		logger.info("Get the first 5 columns of row:" + Bytes.toString(rowKey));
		Get get = new Get(rowKey);
		get.addFamily(COLUMN_FAMILY);

		Filter filter = new ColumnPaginationFilter(5, 0);
		get.setFilter(filter);
		Result firstFiveResult = table.get(get);
		for (KeyValue kv : firstFiveResult.list()) {
			// logger.info("kv:" + kv);
			logger.info("key:" + Bytes.toString(kv.getQualifier()) + " value:"
					+ Bytes.toInt(kv.getValue()));

		}
		// Confirm the # of columns is as expected
		Assert.assertTrue(firstFiveResult.list().size() == 5);

	}
}



)
    
> ColumnPaginationFilter doesn't return the requested number of columns
> ---------------------------------------------------------------------
>
>                 Key: HBASE-5247
>                 URL: https://issues.apache.org/jira/browse/HBASE-5247
>             Project: HBase
>          Issue Type: Bug
>          Components: client
>    Affects Versions: 0.90.4
>         Environment: Hbase 0.90.4-cdh3u2 & standard apache download 0.90.4
> Hadoop 0.20.2-cdh3u2 & standard apache download 0.20.205
>            Reporter: Jamal
>            Priority: Minor
>         Attachments: pagination.zip
>
>
> The ColumnPaginationFilter doesn't return the correct number of columns when the limit is less than the total number of columns.  I don't know much about the internals of Hbase, but it appears that the problem is more re-producible when a table is split accross at least 2 regions.  I have created a unit test which can re-produce the issue which is now attached.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Updated] (HBASE-5247) ColumnPaginationFilter doesn't return the requested number of columns

Posted by "Jamal (Updated) (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/HBASE-5247?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jamal updated HBASE-5247:
-------------------------

    Attachment: pagination.zip

maven project which can re-create the issue
                
> ColumnPaginationFilter doesn't return the requested number of columns
> ---------------------------------------------------------------------
>
>                 Key: HBASE-5247
>                 URL: https://issues.apache.org/jira/browse/HBASE-5247
>             Project: HBase
>          Issue Type: Bug
>          Components: client
>    Affects Versions: 0.90.4
>         Environment: Hbase 0.90.4-cdh3u2 & standard apache download 0.90.4
> Hadoop 0.20.2-cdh3u2 & standard apache download 0.20.205
>            Reporter: Jamal
>            Priority: Minor
>         Attachments: pagination.zip
>
>
> The ColumnPaginationFilter doesn't return the correct number of columns when the limit is less than the total number of columns.  I don't know much about the internals of Hbase, but it appears that the problem is more re-producible when a table is split accross at least 2 regions.  I have created a unit test which can re-produce the issue which is below.  Sorry, I didn't see a place to upload an attachment.  To run it, just create a standard maven project with the following 2 files:
> pom.xml:
> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> 	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
> 	<modelVersion>4.0.0</modelVersion>
> 	<groupId>org.sandbox</groupId>
> 	<artifactId>pagination</artifactId>
> 	<version>0.0.1-SNAPSHOT</version>
> 	<properties>
> 		<spring.version>3.0.6.RELEASE</spring.version>
> 	</properties>
> 	<dependencies>
> 		<dependency>
> 			<groupId>org.springframework</groupId>
> 			<artifactId>spring-context</artifactId>
> 			<version>${spring.version}</version>
> 			<exclusions>
> 				<exclusion>
> 					<groupId>commons-logging</groupId>
> 					<artifactId>commons-logging</artifactId>
> 				</exclusion>
> 			</exclusions>
> 		</dependency>
> 		<dependency>
> 			<groupId>org.apache.hbase</groupId>
> 			<artifactId>hbase</artifactId>
> 			<version>0.90.4</version>
> 		</dependency>
> 		<dependency>
> 			<groupId>org.springframework</groupId>
> 			<artifactId>spring-test</artifactId>
> 			<version>${spring.version}</version>
> 			<scope>test</scope>
> 		</dependency>
> 		<dependency>
> 			<groupId>junit</groupId>
> 			<artifactId>junit</artifactId>
> 			<version>4.8.2</version>
> 			<scope>test</scope>
> 		</dependency>
> 	</dependencies>
> 	<repositories>
> 		<repository>
> 			<id>com.springsource.repository.maven.release</id>
> 			<url>http://maven.springframework.org/release/</url>
> 			<snapshots>
> 				<enabled>false</enabled>
> 			</snapshots>
> 		</repository>
> 	</repositories>
> </project>
> PaginationTest.java:
> import java.io.IOException;
> import java.util.ArrayList;
> import java.util.List;
> import org.apache.commons.codec.digest.DigestUtils;
> import org.apache.hadoop.conf.Configuration;
> import org.apache.hadoop.hbase.HBaseConfiguration;
> import org.apache.hadoop.hbase.HColumnDescriptor;
> import org.apache.hadoop.hbase.HTableDescriptor;
> import org.apache.hadoop.hbase.KeyValue;
> import org.apache.hadoop.hbase.client.Get;
> import org.apache.hadoop.hbase.client.HBaseAdmin;
> import org.apache.hadoop.hbase.client.HTable;
> import org.apache.hadoop.hbase.client.Put;
> import org.apache.hadoop.hbase.client.Result;
> import org.apache.hadoop.hbase.client.ResultScanner;
> import org.apache.hadoop.hbase.client.Scan;
> import org.apache.hadoop.hbase.filter.ColumnPaginationFilter;
> import org.apache.hadoop.hbase.filter.Filter;
> import org.apache.hadoop.hbase.util.Bytes;
> import org.junit.After;
> import org.junit.Assert;
> import org.junit.Before;
> import org.junit.Test;
> import org.junit.runner.RunWith;
> import org.slf4j.Logger;
> import org.slf4j.LoggerFactory;
> import org.springframework.test.context.TestExecutionListeners;
> import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
> @RunWith(SpringJUnit4ClassRunner.class)
> @TestExecutionListeners({})
> public class PaginationTest {
> 	private byte[] TABLE_NAME = Bytes.toBytes("pagination-test-table");
> 	private Configuration conf = HBaseConfiguration.create();
> 	private HTable table;
> 	private HBaseAdmin admin;
> 	private byte[] COLUMN_FAMILY = Bytes.toBytes("stuff");
> 	byte[] rowKey = Bytes.toBytes("row5");
> 	private Logger logger = LoggerFactory.getLogger(getClass());
> 	private int rowCount = 5000, columnCount = 12;
> 	@Before
> 	public void setup() throws IOException, InterruptedException {
> 		admin = new HBaseAdmin(conf);
> 		if (!admin.isTableAvailable(TABLE_NAME)) {
> 			HTableDescriptor desc = new HTableDescriptor(TABLE_NAME);
> 			HColumnDescriptor columnDesc = new HColumnDescriptor(COLUMN_FAMILY);
> 			desc.addFamily(columnDesc);
> 			admin.createTable(desc);
> 		}
> 		table = new HTable(conf, TABLE_NAME);
> 		for (int z = 0; z < 3; z++) {
> 			List<Put> puts = new ArrayList<Put>(columnCount);
> 			for (int j = 0; j < rowCount; j++) {
> 				byte[] rowKey = Bytes.toBytes("row" + j);
> 				Put put = new Put(rowKey);
> 				for (int i = 0; i < columnCount; i++) {
> 					put.add(COLUMN_FAMILY,
> 							Bytes.toBytes(DigestUtils.md5Hex("something:" + i)),
> 							Bytes.toBytes(i));
> 				}
> 				puts.add(put);
> 			}
> 			table.put(puts);
> 			table.flushCommits();
> 			admin.split(TABLE_NAME);
> 			// Wait for split to "finish"
> 			Thread.sleep(30000);
> 			// Wait for flush to "finish"
> 			admin.flush(TABLE_NAME);
> 		}
> 	}
> 	@After
> 	public void cleanup() throws IOException {
> 		table.close();
> 		admin.disableTable(TABLE_NAME);
> 		admin.deleteTable(TABLE_NAME);
> 	}
> 	@Test
> 	public void runConditions() throws IOException {
> 		showAllColumns();
> 		scanFirst5Columns();
> 		scanNextFileColumns();
> 		getFirstFiveColumns();
> 	}
> 	public void showAllColumns() throws IOException {
> 		logger.info("Current contents of row:" + Bytes.toString(rowKey));
> 		Get get = new Get(rowKey);
> 		get.addFamily(COLUMN_FAMILY);
> 		Result result = table.get(get);
> 		for (KeyValue kv : result.list()) {
> 			// logger.info("kv:" + kv);
> 			logger.info("key:" + Bytes.toString(kv.getQualifier()) + " value:"
> 					+ Bytes.toInt(kv.getValue()));
> 		}
> 		// Confirm the # of columns is as expected
> 		Assert.assertTrue(result.list().size() == columnCount);
> 	}
> 	public void scanFirst5Columns() throws IOException {
> 		// Try Scanning for 5 columns
> 		logger.info("Scan the first 5 columns of row:" + Bytes.toString(rowKey));
> 		Scan scan = new Scan(rowKey, rowKey);
> 		Filter filter = new ColumnPaginationFilter(5, 0);
> 		scan.setFilter(filter);
> 		ResultScanner rs = table.getScanner(scan);
> 		try {
> 			for (Result r = rs.next(); r != null; r = rs.next()) {
> 				for (KeyValue kv : r.list()) {
> 					// logger.info("kv:" + kv);
> 					logger.info("key:" + Bytes.toString(kv.getQualifier())
> 							+ " value:" + Bytes.toInt(kv.getValue()));
> 				}
> 				// Confirm the # of columns is as expected
> 				Assert.assertTrue(r.list().size() == 5);
> 			}
> 		} finally {
> 			rs.close();
> 		}
> 	}
> 	public void scanNextFileColumns() throws IOException {
> 		// Try Scanning for next 5 columns
> 		logger.info("Scan the next 5 columns of row:" + Bytes.toString(rowKey));
> 		Scan scan = new Scan(rowKey, rowKey);
> 		Filter filter = new ColumnPaginationFilter(5, 5);
> 		scan.setFilter(filter);
> 		ResultScanner rs = table.getScanner(scan);
> 		try {
> 			for (Result r = rs.next(); r != null; r = rs.next()) {
> 				for (KeyValue kv : r.list()) {
> 					// logger.info("kv:" + kv);
> 					logger.info("key:" + Bytes.toString(kv.getQualifier())
> 							+ " value:" + Bytes.toInt(kv.getValue()));
> 				}
> 				// Confirm the # of columns is as expected
> 				Assert.assertTrue(r.list().size() == 5);
> 			}
> 		} finally {
> 			rs.close();
> 		}
> 	}
> 	public void getFirstFiveColumns() throws IOException {
> 		// Try Getting 5 columns
> 		logger.info("Get the first 5 columns of row:" + Bytes.toString(rowKey));
> 		Get get = new Get(rowKey);
> 		get.addFamily(COLUMN_FAMILY);
> 		Filter filter = new ColumnPaginationFilter(5, 0);
> 		get.setFilter(filter);
> 		Result firstFiveResult = table.get(get);
> 		for (KeyValue kv : firstFiveResult.list()) {
> 			// logger.info("kv:" + kv);
> 			logger.info("key:" + Bytes.toString(kv.getQualifier()) + " value:"
> 					+ Bytes.toInt(kv.getValue()));
> 		}
> 		// Confirm the # of columns is as expected
> 		Assert.assertTrue(firstFiveResult.list().size() == 5);
> 	}
> }

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira