public Collection<DatasetTypeMeta> getTypes(NamespaceId namespaceId) { List<DatasetTypeMeta> types = Lists.newArrayList(); for (Map.Entry<MDSKey, DatasetModuleId> entry : getTypesMapping(namespaceId).entrySet()) { MDSKey.Splitter splitter = entry.getKey().split(); // first part is TYPE_TO_MODULE_PREFIX splitter.skipString(); // second part is namespace splitter.skipString(); // third part is the type name, which is what we expect String typeName = splitter.getString(); types.add(getTypeMeta(namespaceId, typeName, entry.getValue())); } return types; }
public Set<SECOND> getSecond(Set<MDSKey> mdsKeys) { Set<SECOND> secondSet = Sets.newHashSetWithExpectedSize(mdsKeys.size()); for (MDSKey mdsKey : mdsKeys) { MDSKey.Splitter splitter = mdsKey.split(); splitter.skipString(); // prefix keyMaker1.skipKey(splitter); secondSet.add(this.keyMaker2.getElement(splitter)); } return secondSet; } }
public Set<SECOND> getSecond(Set<MDSKey> mdsKeys) { Set<SECOND> secondSet = Sets.newHashSetWithExpectedSize(mdsKeys.size()); for (MDSKey mdsKey : mdsKeys) { MDSKey.Splitter splitter = mdsKey.split(); splitter.skipString(); // prefix keyMaker1.skipKey(splitter); secondSet.add(this.keyMaker2.getElement(splitter)); } return secondSet; } }
keySplitter.skipString(); type = type.toLowerCase(); switch (type) { case PROGRAM: keySplitter.skipString(); keySplitter.skipString(); keySplitter.skipString(); keySplitter.skipString(); break; case APPLICATION: case "datasetinstance": case STREAM: keySplitter.skipString(); keySplitter.skipString(); break; case VIEW: case "view": case ARTIFACT: keySplitter.skipString(); keySplitter.skipString(); keySplitter.skipString(); break; default:
static String extractMetadataKey(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 // Skip rowPrefix keySplitter.skipBytes(); // Skip targetType keySplitter.skipString(); // targetId are key-value par so always in set of two. For value row we will end up with only string in end ([key]) // and for index row we will have two strings in end ([key][index]). String key = null; while (keySplitter.hasRemaining()) { key = keySplitter.getString(); if (keySplitter.hasRemaining()) { keySplitter.skipString(); } else { break; } } return key; }
static String extractMetadataKey(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 // Skip rowPrefix keySplitter.skipBytes(); // Skip targetType keySplitter.skipString(); // targetId are key-value par so always in set of two. For value row we will end up with only string in end ([key]) // and for index row we will have two strings in end ([key][index]). String key = null; while (keySplitter.hasRemaining()) { key = keySplitter.getString(); if (keySplitter.hasRemaining()) { keySplitter.skipString(); } else { break; } } return key; }
@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()); }
@Override public Multimap<NamespaceId, StreamSpecification> call(DatasetContext context) throws Exception { ImmutableMultimap.Builder<NamespaceId, StreamSpecification> builder = ImmutableMultimap.builder(); Map<MDSKey, StreamSpecification> streamSpecs = getMetadataStore(context).listKV(new MDSKey.Builder().add(TYPE_STREAM).build(), StreamSpecification.class); for (Map.Entry<MDSKey, StreamSpecification> streamSpecEntry : streamSpecs.entrySet()) { MDSKey.Splitter splitter = streamSpecEntry.getKey().split(); // skip the first name ("stream") splitter.skipString(); // Namespace id is the next part. String namespaceId = splitter.getString(); builder.put(new NamespaceId(namespaceId), streamSpecEntry.getValue()); } return builder.build(); } }, Exception.class);
public Collection<DatasetTypeMeta> getTypes(NamespaceId namespaceId) { List<DatasetTypeMeta> types = Lists.newArrayList(); for (Map.Entry<MDSKey, DatasetModuleId> entry : getTypesMapping(namespaceId).entrySet()) { MDSKey.Splitter splitter = entry.getKey().split(); // first part is TYPE_TO_MODULE_PREFIX splitter.skipString(); // second part is namespace splitter.skipString(); // third part is the type name, which is what we expect String typeName = splitter.getString(); types.add(getTypeMeta(namespaceId, typeName, entry.getValue())); } return types; }
@Override public void skipKey(MDSKey.Splitter splitter) { splitter.skipString(); // namespace splitter.skipString(); // app splitter.skipString(); // type splitter.skipString(); // program }
static String getNamespaceId(MDSKey key) { MDSKey.Splitter keySplitter = key.split(); // The rowkey is // [rowPrefix][targetType][targetId][key] for value rows and // [rowPrefix][targetType][targetId][key][index] for value index rows // so skip the first two. keySplitter.skipBytes(); keySplitter.skipString(); // We are getting the first part of [targetId] which always be the namespace id. return keySplitter.getString(); }
@Override public void skipKey(MDSKey.Splitter splitter) { splitter.skipString(); // namespace splitter.skipString(); // dataset }
@Override public void skipKey(MDSKey.Splitter splitter) { splitter.skipString(); // namespace splitter.skipString(); // stream }
/** * Parses the {@link ProgramRunId} from the {@link MDSKey}. */ private ProgramRunId getProgramRunId(MDSKey key) { MDSKey.Splitter st = key.split(); st.skipString(); // Skip prefix return new ProgramRunId(new ApplicationId(st.getString(), st.getString(), st.getString()), ProgramType.valueOf(st.getString()), st.getString(), st.getString()); } }
/** * Parses the {@link ProgramRunId} from the {@link MDSKey}. */ private ProgramRunId getProgramRunId(MDSKey key) { MDSKey.Splitter st = key.split(); st.skipString(); // Skip prefix return new ProgramRunId(new ApplicationId(st.getString(), st.getString(), st.getString()), ProgramType.valueOf(st.getString()), st.getString(), st.getString()); } }
static NamespacedEntityId getNamespacedIdFromKey(String type, 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 // so skip the first two. keySplitter.skipBytes(); keySplitter.skipString(); return EntityIdKeyHelper.getTargetIdIdFromKey(keySplitter, type); }
private String extractFieldName(byte[] columnKey) { MDSKey.Splitter keySplitter = new MDSKey(columnKey).split(); // The key is // [outgoing prefix (o)][EndPoint:Namespace][EndPoint:Name][fieldName] // skip prefix keySplitter.skipBytes(); // Skip namespace keySplitter.skipString(); // skip dataset name keySplitter.skipString(); return keySplitter.getString(); } }
@Override public void skipKey(MDSKey.Splitter splitter) { splitter.skipString(); // namespace splitter.skipString(); // app splitter.skipString(); // type splitter.skipString(); // program }
@Override public void skipKey(MDSKey.Splitter splitter) { splitter.skipString(); // namespace splitter.skipString(); // dataset }
private String extractFieldName(byte[] columnKey) { MDSKey.Splitter keySplitter = new MDSKey(columnKey).split(); // The key is // [outgoing prefix (o)][EndPoint:Namespace][EndPoint:Name][fieldName] // skip prefix keySplitter.skipBytes(); // Skip namespace keySplitter.skipString(); // skip dataset name keySplitter.skipString(); return keySplitter.getString(); } }