This is my test case ,but I get NPE some times .
java.lang.NullPointerException
at
com.uuwatch.idm.hbase.GetRowVersionsTest.testGetRowMultipleVersions(GetRowVersionsTest.java:89)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
public class GetRowVersionsTest extends TestCase
{
private final byte[] family = Bytes.toBytes("log");
private final byte[] qualifier = Bytes.toBytes("siteUrl");
private final byte[] rowKey = Bytes.toBytes(1);
private final HTable table =
IDMHBaseConfiguration.getTable(BigTableName.getSite());
private final long ts1 = 1298529542218L;
private final long ts2 = ts1 + 100;
private final long ts3 = ts1 + 100;
private final byte[] value1 = Bytes.toBytes("value1");
private final byte[] value2 = Bytes.toBytes("value2");
private final byte[] value3 = Bytes.toBytes("value3");
private void insert(final long ts, final byte[] value) throws
IOException
{
final Put put = new Put(rowKey);
put.add(family, qualifier, ts, value);
table.put(put);
}
private void sleep()
{
try
{
Thread.sleep(1000);
}
catch (final InterruptedException e)
{
e.printStackTrace();
}
}
@Test
public void testGetRowMultipleVersions() throws Exception
{
insert(ts1, value1);
sleep();
insert(ts2, value2);
sleep();
insert(ts3, value3);
sleep();
// check getRow with multiple versions
final Get get = new Get(rowKey);
get.setMaxVersions();
final Result r = table.get(get);
final NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long,
byte[]>>> map = r.getMap();
final NavigableMap<byte[], NavigableMap<Long, byte[]>> familyMap =
map.get(family);
final NavigableMap<Long, byte[]> versionMap =
familyMap.get(qualifier);
for (final Map.Entry<Long, byte[]> entry : versionMap.entrySet())
{
System.err.println(entry.getKey());
System.err.println(Bytes.toString(entry.getValue()));
}
// assertTrue(versionMap.size() == 3);
// assertTrue(value1 == versionMap.get(ts1));
// assertTrue(value2 == versionMap.get(ts2));
// assertTrue(value3 == versionMap.get(ts3));
// table.delete(new Delete(rowKey));
// assertTrue(table.get(get).size() == 0);
// table.close();
}
}
On Thu, Feb 24, 2011 at 11:07 AM, Tatsuya Kawano <[email protected]>wrote:
> Hi Jiajun,
>
> Make sure you don't have the same timestamp on every versions of puts; try
> to put Thread.sleep() in your test(?) codes when necessary.
>
> You might not want to specify the timestamp by yourself but want to let
> HBase to store appropriate ones.
>
> --
> Tatsuya Kawano (Mr.)
> Tokyo, Japan
>
>
> On Feb 24, 2011, at 11:30 AM, Ryan Rawson <[email protected]> wrote:
>
> > There are test cases for this, the functionality DOES work, something is
> up...
> >
> > Without full code and full descriptions of your tables, debugging is
> > harder than it needs to be. It's probably a simple typo or something,
> > check your code and table descriptions again. Many people rely on the
> > multi version query capabilities and it is very unlikely to be broken
> > in a released version of hbase.
> >
> > On Wed, Feb 23, 2011 at 6:27 PM, 陈加俊 <[email protected]> wrote:
> >> final List<KeyValue> list = result.list();
> >> for (final KeyValue it : list)
> >> {
> >> System.out.println(Bytes.toString(it.getKey()));
> >> System.out.println(Bytes.toString(it.getValue()));
> >> }
> >> I can only get the last version! why ? Is there any testcase in Hbase?
> >>
> >> On Thu, Feb 24, 2011 at 9:56 AM, 陈加俊 <[email protected]> wrote:
> >>
> >>> /**
> >>> * Create a sorted list of the KeyValue's in this result.
> >>> *
> >>> * @return The sorted list of KeyValue's.
> >>> */
> >>> public List<KeyValue> list() {
> >>> if(this.kvs == null) {
> >>> readFields();
> >>> }
> >>> return isEmpty()? null: Arrays.asList(sorted());
> >>> }
> >>>
> >>> I will try it . Thank you very much!
> >>>
> >>> On Thu, Feb 24, 2011 at 9:45 AM, Buttler, David <[email protected]>
> wrote:
> >>>
> >>>> Result.list() ?
> >>>> Putting the hbase source into your IDE of choice (yay Eclipse!) is
> really
> >>>> helpful
> >>>>
> >>>> Dave
> >>>>
> >>>>
> >>>> -----Original Message-----
> >>>> From: 陈加俊 [mailto:[email protected]]
> >>>> Sent: Wednesday, February 23, 2011 5:42 PM
> >>>> To: [email protected]
> >>>> Cc: Buttler, David
> >>>> Subject: Re: I can't get many versions of the specified column,but
> only
> >>>> get the latest version of the specified column
> >>>>
> >>>> Thank you David !
> >>>>
> >>>> I alter the table schema as follow:
> >>>>
> >>>>> alter 'cjjIndexPageModify', {NAME => 'log' , VERSIONS => 5 , METHOD
> =>
> >>>> 'add'}
> >>>>
> >>>> How to iterate over KeyValues? which method in Result?
> >>>>
> >>>> On Thu, Feb 24, 2011 at 9:27 AM, Buttler, David <[email protected]>
> >>>> wrote:
> >>>>
> >>>>> What is your table schema set to? By default it holds 3 versions.
> >>>>> Also, you might iterating over KeyValues instead of using the Map
> since
> >>>> you
> >>>>> don't really care about the organization, just the time.
> >>>>>
> >>>>> Dave
> >>>>>
> >>>>> -----Original Message-----
> >>>>> From: 陈加俊 [mailto:[email protected]]
> >>>>> Sent: Wednesday, February 23, 2011 5:22 PM
> >>>>> To: [email protected]
> >>>>> Cc: Stack
> >>>>> Subject: Re: I can't get many versions of the specified column,but
> only
> >>>> get
> >>>>> the latest version of the specified column
> >>>>>
> >>>>> I execute it five times at diffrent time.
> >>>>>
> >>>>> //put data by version
> >>>>>
> >>>>> final Put p = new Put(key); // key
> >>>>> final long ts = System.currentTimeMillis();
> >>>>> p.add(FAMILY, q1, ts,v1);
> >>>>> p.add(FAMILY, q2, ts,v2);
> >>>>> p.add(FAMILY, q3, ts,v3);
> >>>>> table.put(p);
> >>>>>
> >>>>> So I can get five versions ,right?
> >>>>>
> >>>>> On Thu, Feb 24, 2011 at 2:06 AM, Stack <[email protected]> wrote:
> >>>>>
> >>>>>> What do you get for a result?
> >>>>>>
> >>>>>> You are only entering a single version of each column, a single
> >>>>>> version of FAMILY:q1, a single version FAMILY:q2, and a FAMILY:q3.
> >>>>>>
> >>>>>> St.Ack
> >>>>>>
> >>>>>> On Wed, Feb 23, 2011 at 2:54 AM, 陈加俊 <[email protected]> wrote:
> >>>>>>> I can't get many versions of the specified column,but only get the
> >>>>> latest
> >>>>>>> version of the specified column. Is there anyone help me?
> >>>>>>>
> >>>>>>> //put data by version
> >>>>>>>
> >>>>>>> final Put p = new Put(key); // key
> >>>>>>> final long ts = System.currentTimeMillis();
> >>>>>>> p.add(FAMILY, q1, ts,v1);
> >>>>>>> p.add(FAMILY, q2, ts,v2);
> >>>>>>> p.add(FAMILY, q3, ts,v3);
> >>>>>>>
> >>>>>>> table.put(p);
> >>>>>>>
> >>>>>>>
> >>>>>>> //get all versions of data
> >>>>>>>
> >>>>>>> final Get get = new Get(key);
> >>>>>>> get.addFamily(FAMILY);
> >>>>>>> get.setMaxVersions(10);
> >>>>>>> final Result result = htable.get(get);
> >>>>>>>
> >>>>>>> final NavigableMap<byte[], NavigableMap<byte[],
> >>>>>>> NavigableMap<Long, byte[]>>> map = result.getMap();
> >>>>>>> final Set<Entry<byte[], NavigableMap<byte[],
> >>>>>>> NavigableMap<Long, byte[]>>>> entrySet = map.entrySet();
> >>>>>>> final Iterator<Entry<byte[], NavigableMap<byte[],
> >>>>>>> NavigableMap<Long, byte[]>>>> iterator = entrySet
> >>>>>>> .iterator();
> >>>>>>> while (iterator.hasNext())
> >>>>>>> {
> >>>>>>> final Entry<byte[], NavigableMap<byte[],
> >>>>>>> NavigableMap<Long, byte[]>>> next = iterator.next();
> >>>>>>> System.out.println(Bytes.toString(next.getKey()));
> >>>>> //family
> >>>>>>> for (final Entry<byte[], NavigableMap<Long, byte[]>>
> >>>>>>> item : next.getValue().entrySet())
> >>>>>>> {
> >>>>>>> System.out.println(Bytes.toString(item.getKey()));
> >>>>>>> for (final Entry<Long, byte[]> _item :
> >>>>>>> item.getValue().entrySet())
> >>>>>>> {
> >>>>>>> System.out.println(_item.getKey()); //q
> >>>>>>>
> >>>>>> System.out.println(Bytes.toString(_item.getValue()));
> >>>>>>> //value
> >>>>>>> }
> >>>>>>> }
> >>>>>>>
> >>>>>>> }
> >>>>>>>
> >>>>>>> --
> >>>>>>> Thanks & Best regards
> >>>>>>> jiajun
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>> --
> >>>>> Thanks & Best regards
> >>>>> jiajun
> >>>>>
> >>>>
> >>>>
> >>>>
> >>>> --
> >>>> Thanks & Best regards
> >>>> jiajun
> >>>>
> >>>
> >>>
> >>>
> >>> --
> >>> Thanks & Best regards
> >>> jiajun
> >>>
> >>>
> >>
> >>
> >> --
> >> Thanks & Best regards
> >> jiajun
> >>
>
--
Thanks & Best regards
jiajun