org.apache.hadoop.hbase.client.TestGetRowVersions.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.hadoop.hbase.client.TestGetRowVersions.java

Source

/**
 * Copyright 2009 The Apache Software Foundation
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.hadoop.hbase.client;

import java.util.NavigableMap;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseClusterTestCase;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.util.Bytes;

/**
 * Test versions.
 * Does shutdown in middle of test to prove versions work across restart.
 */
public class TestGetRowVersions extends HBaseClusterTestCase {
    private static final Log LOG = LogFactory.getLog(TestGetRowVersions.class);

    private static final String TABLE_NAME = "test";
    private static final byte[] CONTENTS = Bytes.toBytes("contents");
    private static final byte[] ROW = Bytes.toBytes("row");
    private static final byte[] VALUE1 = Bytes.toBytes("value1");
    private static final byte[] VALUE2 = Bytes.toBytes("value2");
    private static final long TIMESTAMP1 = 100L;
    private static final long TIMESTAMP2 = 200L;

    @Override
    public void setUp() throws Exception {
        super.setUp();
        HTableDescriptor desc = new HTableDescriptor(TABLE_NAME);
        desc.addFamily(new HColumnDescriptor(CONTENTS));
        HBaseAdmin admin = new HBaseAdmin(conf);
        admin.createTable(desc);
    }

    /** @throws Exception */
    public void testGetRowMultipleVersions() throws Exception {
        Put put = new Put(ROW, TIMESTAMP1, null);
        put.add(CONTENTS, CONTENTS, VALUE1);
        HTable table = new HTable(new Configuration(conf), TABLE_NAME);
        table.put(put);
        // Shut down and restart the HBase cluster
        this.cluster.shutdown();
        this.zooKeeperCluster.shutdown();
        LOG.debug("HBase cluster shut down -- restarting");
        this.hBaseClusterSetup();
        // Make a new connection.  Use new Configuration instance because old one
        // is tied to an HConnection that has since gone statle.
        table = new HTable(new Configuration(conf), TABLE_NAME);
        // Overwrite previous value
        put = new Put(ROW, TIMESTAMP2, null);
        put.add(CONTENTS, CONTENTS, VALUE2);
        table.put(put);
        // Now verify that getRow(row, column, latest) works
        Get get = new Get(ROW);
        // Should get one version by default
        Result r = table.get(get);
        assertNotNull(r);
        assertFalse(r.isEmpty());
        assertTrue(r.size() == 1);
        byte[] value = r.getValue(CONTENTS, CONTENTS);
        assertTrue(value.length != 0);
        assertTrue(Bytes.equals(value, VALUE2));
        // Now check getRow with multiple versions
        get = new Get(ROW);
        get.setMaxVersions();
        r = table.get(get);
        assertTrue(r.size() == 2);
        value = r.getValue(CONTENTS, CONTENTS);
        assertTrue(value.length != 0);
        assertTrue(Bytes.equals(value, VALUE2));
        NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> map = r.getMap();
        NavigableMap<byte[], NavigableMap<Long, byte[]>> familyMap = map.get(CONTENTS);
        NavigableMap<Long, byte[]> versionMap = familyMap.get(CONTENTS);
        assertTrue(versionMap.size() == 2);
        assertTrue(Bytes.equals(VALUE1, versionMap.get(TIMESTAMP1)));
        assertTrue(Bytes.equals(VALUE2, versionMap.get(TIMESTAMP2)));
    }
}