private boolean matchesEndpoint(byte[] column, EndPoint endPoint) { // RAW_OPERATION_MARKER key is not written as MDSKey with byte length encoding so don't try to create an object // out of it if (Arrays.equals(column, RAW_OPERATION_MARKER)) { return false; } MDSKey.Splitter keySplitter = new MDSKey(column).split(); return Arrays.equals(OUTGOING_DIRECTION_MARKER, keySplitter.getBytes()) && keySplitter.getString().equals(endPoint.getNamespace()) && keySplitter.getString().equals(endPoint.getName()); }
private boolean matchesEndpoint(byte[] column, EndPoint endPoint) { // RAW_OPERATION_MARKER key is not written as MDSKey with byte length encoding so don't try to create an object // out of it if (Arrays.equals(column, RAW_OPERATION_MARKER)) { return false; } MDSKey.Splitter keySplitter = new MDSKey(column).split(); return Arrays.equals(OUTGOING_DIRECTION_MARKER, keySplitter.getBytes()) && keySplitter.getString().equals(endPoint.getNamespace()) && keySplitter.getString().equals(endPoint.getName()); }
break; case BYTES: byte[] bytesVal = splitter.getBytes(); keys.add(Fields.bytesField(key, bytesVal)); builder.put(key, bytesVal);
@Test public void testGetBytesOverflow() { MDSKey.Builder builder = new MDSKey.Builder(); builder.add(2000); builder.add(2000); MDSKey mdsKey = builder.build(); MDSKey.Splitter splitter = mdsKey.split(); // splitter.getBytes and splitter.getString() will fail due to the key being composed of two large int parts try { splitter.getBytes(); Assert.fail(); } catch (BufferUnderflowException expected) { } try { splitter.getString(); Assert.fail(); } catch (BufferUnderflowException expected) { } }
@Test public void testAppend() { MDSKey mdsKey1 = new MDSKey.Builder().add("ab").add(3L).add(new byte[]{'x', 'y'}).build(); MDSKey mdsKey2 = new MDSKey.Builder().add("bd").add(5).append(mdsKey1).add(new byte[]{'z', 'z'}).build(); MDSKey mdsKey3 = new MDSKey.Builder().add(2).add(new byte[]{'w'}).append(mdsKey2).add(8L).build(); // Assert MDSKey.Splitter splitter = mdsKey3.split(); Assert.assertEquals(2, splitter.getInt()); Assert.assertArrayEquals(new byte[]{'w'}, splitter.getBytes()); Assert.assertEquals("bd", splitter.getString()); Assert.assertEquals(5, splitter.getInt()); Assert.assertEquals("ab", splitter.getString()); Assert.assertEquals(3L, splitter.getLong()); Assert.assertArrayEquals(new byte[]{'x', 'y'}, splitter.getBytes()); Assert.assertArrayEquals(new byte[]{'z', 'z'}, splitter.getBytes()); Assert.assertEquals(8L, splitter.getLong()); } }
@Test public void testComplexKeySplit() { // Tests key: [ "part1", "part2", "", 4l, byte[] { 0x5 } ] List<String> firstParts = ImmutableList.of("part1", "part2", ""); long fourthPart = 4L; byte[] fifthPart = new byte[] { 0x5 }; MDSKey.Builder builder = new MDSKey.Builder(); // intentionally testing the MDSKey.Builder#add(String... parts) method. builder.add(firstParts.get(0), firstParts.get(1), firstParts.get(2)); builder.add(fourthPart); builder.add(fifthPart); MDSKey mdsKey = builder.build(); MDSKey.Splitter splitter = mdsKey.split(); for (String part : firstParts) { Assert.assertEquals(part, splitter.getString()); } Assert.assertEquals(fourthPart, splitter.getLong()); Assert.assertTrue(Bytes.equals(fifthPart, splitter.getBytes())); }
@Test public void testSkipStringAndBytes() { MDSKey.Builder builder = new MDSKey.Builder(); builder.add("part1"); builder.add("part2"); builder.add("part3"); byte[] bytesToSkip = new byte[] { 0x1 }; byte[] bytesToCheck = new byte[] { 0x2 }; builder.add(bytesToSkip); builder.add(bytesToCheck); MDSKey mdsKey = builder.build(); MDSKey.Splitter splitter = mdsKey.split(); Assert.assertEquals("part1", splitter.getString()); splitter.skipString(); Assert.assertEquals("part3", splitter.getString()); splitter.skipBytes(); Assert.assertTrue(splitter.hasRemaining()); Assert.assertTrue(Bytes.equals(bytesToCheck, splitter.getBytes())); Assert.assertFalse(splitter.hasRemaining()); }
static String getTargetType(byte[] rowKey) { MDSKey.Splitter keySplitter = new MDSKey(rowKey).split(); // The rowkey is // [rowPrefix][targetType][targetId][key] for value rows and // [rowPrefix][targetType][targetId][key][index] for value index rows keySplitter.getBytes(); return keySplitter.getString(); }
/** * @throws BufferUnderflowException if there is no String as expected * @return the next String part in the splitter */ public String getString() { return Bytes.toString(getBytes()); }
/** * @throws BufferUnderflowException if there is no String as expected * @return the next String part in the splitter */ public String getString() { return Bytes.toString(getBytes()); }