private void metacomparisons(final KeyValue.MetaComparator c) { long now = System.currentTimeMillis(); assertTrue(c.compare(new KeyValue( Bytes.toBytes(TableName.META_TABLE_NAME.getNameAsString()+",a,,0,1"), now), new KeyValue( Bytes.toBytes(TableName.META_TABLE_NAME.getNameAsString()+",a,,0,1"), now)) == 0); KeyValue a = new KeyValue( Bytes.toBytes(TableName.META_TABLE_NAME.getNameAsString()+",a,,0,1"), now); KeyValue b = new KeyValue( Bytes.toBytes(TableName.META_TABLE_NAME.getNameAsString()+",a,,0,2"), now); assertTrue(c.compare(a, b) < 0); assertTrue(c.compare(new KeyValue( Bytes.toBytes(TableName.META_TABLE_NAME.getNameAsString()+",a,,0,2"), now), new KeyValue( Bytes.toBytes(TableName.META_TABLE_NAME.getNameAsString()+",a,,0,1"), now)) > 0); }
public void testBadMetaCompareSingleDelim() { MetaComparator c = new KeyValue.MetaComparator(); long now = System.currentTimeMillis(); // meta keys values are not quite right. A users can enter illegal values // from shell when scanning meta. KeyValue a = new KeyValue(Bytes.toBytes("table,a1"), now); KeyValue b = new KeyValue(Bytes.toBytes("table,a2"), now); try { c.compare(a, b); } catch (IllegalArgumentException iae) { assertEquals(".META. key must have two ',' delimiters and have the following" + " format: '<table>,<key>,<etc>'", iae.getMessage()); return; } fail("Expected IllegalArgumentException"); }
public void testBadMetaCompareSingleDelim() { MetaComparator c = new KeyValue.MetaComparator(); long now = System.currentTimeMillis(); // meta keys values are not quite right. A users can enter illegal values // from shell when scanning meta. KeyValue a = new KeyValue(Bytes.toBytes("table,a1"), now); KeyValue b = new KeyValue(Bytes.toBytes("table,a2"), now); try { c.compare(a, b); } catch (IllegalArgumentException iae) { assertEquals("hbase:meta key must have two ',' delimiters and have the following" + " format: '<table>,<key>,<etc>'", iae.getMessage()); return; } fail("Expected IllegalArgumentException"); }
/** * Is this the correct handling of an illegal comparator? How to prevent that from getting all * the way to this point. */ @Override public EncodedSeeker createSeeker(KVComparator comparator, HFileBlockDecodingContext decodingCtx) { if (comparator instanceof RawBytesComparator){ throw new IllegalArgumentException("comparator must be KeyValue.KeyComparator"); } else if (comparator instanceof MetaComparator){ throw new IllegalArgumentException("DataBlockEncoding.PREFIX_TREE not compatible with hbase:meta " +"table"); } return new PrefixTreeSeeker(decodingCtx.getHFileContext().isIncludesMvcc()); }
public void testMoreComparisons() throws Exception { long now = System.currentTimeMillis(); // Meta compares KeyValue aaa = new KeyValue( Bytes.toBytes("TestScanMultipleVersions,row_0500,1236020145502"), now); KeyValue bbb = new KeyValue( Bytes.toBytes("TestScanMultipleVersions,,99999999999999"), now); KVComparator c = new KeyValue.MetaComparator(); assertTrue(c.compare(bbb, aaa) < 0); KeyValue aaaa = new KeyValue(Bytes.toBytes("TestScanMultipleVersions,,1236023996656"), Bytes.toBytes("info"), Bytes.toBytes("regioninfo"), 1236024396271L, (byte[])null); assertTrue(c.compare(aaaa, bbb) < 0); KeyValue x = new KeyValue(Bytes.toBytes("TestScanMultipleVersions,row_0500,1236034574162"), Bytes.toBytes("info"), Bytes.toBytes(""), 9223372036854775807L, (byte[])null); KeyValue y = new KeyValue(Bytes.toBytes("TestScanMultipleVersions,row_0500,1236034574162"), Bytes.toBytes("info"), Bytes.toBytes("regioninfo"), 1236034574912L, (byte[])null); assertTrue(c.compare(x, y) < 0); comparisons(new KeyValue.MetaComparator()); comparisons(new KeyValue.KVComparator()); metacomparisons(new KeyValue.MetaComparator()); }
public void testMetaComparatorTableKeysWithCommaOk() { MetaComparator c = new KeyValue.MetaComparator(); long now = System.currentTimeMillis(); // meta keys values are not quite right. A users can enter illegal values // from shell when scanning meta. KeyValue a = new KeyValue(Bytes.toBytes("table,key,with,commas1,1234"), now); KeyValue b = new KeyValue(Bytes.toBytes("table,key,with,commas2,0123"), now); assertTrue(c.compare(a, b) < 0); }
public void testMoreComparisons() throws Exception { // Root compares long now = System.currentTimeMillis(); KeyValue a = new KeyValue(Bytes.toBytes(".META.,,99999999999999"), now); KeyValue b = new KeyValue(Bytes.toBytes(".META.,,1"), now); KVComparator c = new KeyValue.RootComparator(); assertTrue(c.compare(b, a) < 0); KeyValue aa = new KeyValue(Bytes.toBytes(".META.,,1"), now); KeyValue bb = new KeyValue(Bytes.toBytes(".META.,,1"), Bytes.toBytes("info"), Bytes.toBytes("regioninfo"), 1235943454602L, (byte[])null); assertTrue(c.compare(aa, bb) < 0); // Meta compares KeyValue aaa = new KeyValue( Bytes.toBytes("TestScanMultipleVersions,row_0500,1236020145502"), now); KeyValue bbb = new KeyValue( Bytes.toBytes("TestScanMultipleVersions,,99999999999999"), now); c = new KeyValue.MetaComparator(); assertTrue(c.compare(bbb, aaa) < 0); KeyValue aaaa = new KeyValue(Bytes.toBytes("TestScanMultipleVersions,,1236023996656"), Bytes.toBytes("info"), Bytes.toBytes("regioninfo"), 1236024396271L, (byte[])null); assertTrue(c.compare(aaaa, bbb) < 0); KeyValue x = new KeyValue(Bytes.toBytes("TestScanMultipleVersions,row_0500,1236034574162"), Bytes.toBytes("info"), Bytes.toBytes(""), 9223372036854775807L, (byte[])null); KeyValue y = new KeyValue(Bytes.toBytes("TestScanMultipleVersions,row_0500,1236034574162"), Bytes.toBytes("info"), Bytes.toBytes("regioninfo"), 1236034574912L, (byte[])null); assertTrue(c.compare(x, y) < 0); comparisons(new KeyValue.MetaComparator()); comparisons(new KeyValue.KVComparator()); metacomparisons(new KeyValue.RootComparator()); metacomparisons(new KeyValue.MetaComparator()); }
private void metacomparisons(final KeyValue.MetaComparator c) { long now = System.currentTimeMillis(); assertTrue(c.compare(new KeyValue(Bytes.toBytes(".META.,a,,0,1"), now), new KeyValue(Bytes.toBytes(".META.,a,,0,1"), now)) == 0); KeyValue a = new KeyValue(Bytes.toBytes(".META.,a,,0,1"), now); KeyValue b = new KeyValue(Bytes.toBytes(".META.,a,,0,2"), now); assertTrue(c.compare(a, b) < 0); assertTrue(c.compare(new KeyValue(Bytes.toBytes(".META.,a,,0,2"), now), new KeyValue(Bytes.toBytes(".META.,a,,0,1"), now)) > 0); }
/** * Is this the correct handling of an illegal comparator? How to prevent that from getting all * the way to this point. */ @Override public EncodedSeeker createSeeker(KVComparator comparator, boolean includesMvccVersion) { if (comparator instanceof RawBytesComparator){ throw new IllegalArgumentException("comparator must be KeyValue.KeyComparator"); } else if (comparator instanceof MetaComparator){ throw new IllegalArgumentException("DataBlockEncoding.PREFIX_TREE not compatible with hbase:meta " +"table"); } return new PrefixTreeSeeker(includesMvccVersion); }