@Override public void removeProperties(MetadataScope scope, MetadataEntity entity, Set<String> keys) { applyMutation(new MetadataMutation.Remove(entity, keys.stream() .map(name -> new ScopedNameOfKind(MetadataKind.PROPERTY, scope, name)).collect(Collectors.toSet()))); }
@Override public void removeProperties(MetadataScope scope, Map<MetadataEntity, Set<String>> toRemove) { applyBatch(toRemove.entrySet().stream() .map(entry -> new MetadataMutation.Remove(entry.getKey(), entry.getValue().stream() .map(name -> new ScopedNameOfKind(MetadataKind.PROPERTY, scope, name)) .collect(Collectors.toSet()))) .collect(Collectors.toList())); }
@Override public void removeTags(MetadataScope scope, MetadataEntity entity, Set<String> tagsToRemove) { applyMutation(new MetadataMutation.Remove(entity, tagsToRemove.stream() .map(name -> new ScopedNameOfKind(MetadataKind.TAG, scope, name)).collect(Collectors.toSet()))); }
@Override public void replaceMetadata(MetadataScope scope, MetadataDataset.Record metadata, Set<String> propertiesToKeep, Set<String> propertiesToPreserve) { Map<ScopedNameOfKind, MetadataDirective> directives = new HashMap<>(); propertiesToKeep.forEach(name -> directives.put(new ScopedNameOfKind(MetadataKind.PROPERTY, scope, name), MetadataDirective.KEEP)); propertiesToPreserve.forEach(name -> directives.put(new ScopedNameOfKind(MetadataKind.PROPERTY, scope, name), MetadataDirective.PRESERVE)); MetadataMutation mutation = new MetadataMutation.Create( metadata.getMetadataEntity(), new Metadata(scope, metadata.getTags(), metadata.getProperties()), directives); applyMutation(mutation); }
private Metadata filterBy(Metadata metadata, ImmutableSet<ScopedNameOfKind> selection) { //noinspection ConstantConditions return new Metadata( Sets.filter(metadata.getTags(), tag -> selection.contains(new ScopedNameOfKind(MetadataKind.TAG, tag.getScope(), tag.getName()))), Maps.filterKeys(metadata.getProperties(), key -> selection.contains(new ScopedNameOfKind(PROPERTY, key.getScope(), key.getName())))); }
new ScopedNameOfKind(MetadataKind.TAG, SYSTEM, "st1"), new ScopedNameOfKind(MetadataKind.TAG, USER, "ut1"), new ScopedNameOfKind(PROPERTY, SYSTEM, "sp2"), new ScopedNameOfKind(PROPERTY, USER, "up2")))); Assert.assertEquals(new MetadataChange(entity, Metadata.EMPTY, Metadata.EMPTY), change); verifyMetadata(mds, entity, Metadata.EMPTY); new ScopedNameOfKind(PROPERTY, SYSTEM, "sp1"), new ScopedNameOfKind(PROPERTY, SYSTEM, "nosuch"), new ScopedNameOfKind(PROPERTY, USER, "up2"), new ScopedNameOfKind(PROPERTY, USER, "nosuch"), new ScopedNameOfKind(MetadataKind.TAG, SYSTEM, "st1"), new ScopedNameOfKind(MetadataKind.TAG, SYSTEM, "nosuch"), new ScopedNameOfKind(MetadataKind.TAG, USER, "ut1"), new ScopedNameOfKind(MetadataKind.TAG, USER, "nosuch"))); new ScopedNameOfKind(PROPERTY, SYSTEM, "nosuch"), new ScopedNameOfKind(MetadataKind.TAG, USER, "nosuch"))); new ScopedName(SYSTEM, "nsp0"), "sv0")); MetadataMutation recreate = new MetadataMutation.Create(entity, recreatedMetadata, ImmutableMap.of( new ScopedNameOfKind(MetadataKind.TAG, SYSTEM, "st1"), MetadataDirective.KEEP, new ScopedNameOfKind(MetadataKind.TAG, SYSTEM, "st2"), MetadataDirective.PRESERVE, new ScopedNameOfKind(PROPERTY, SYSTEM, "sp1"), MetadataDirective.PRESERVE, new ScopedNameOfKind(PROPERTY, SYSTEM, "sp2"), MetadataDirective.KEEP)); previousMetadata = metadata; new ScopedName(USER, "up3"), "uv3")); recreate = new MetadataMutation.Create(entity, recreatedMetadata, ImmutableMap.of(
.map(tag -> new ScopedNameOfKind(TAG, USER, tag)).collect(Collectors.toSet()))); mds.apply(new Remove(dataset2, userProps.keySet().stream() .map(tag -> new ScopedNameOfKind(PROPERTY, USER, tag)).collect(Collectors.toSet())));
@Test public void testUpdateSearch() throws IOException { MetadataStorage mds = getMetadataStorage(); final String ns = "ns"; final MetadataEntity program = new NamespaceId(ns).app("app1").worker("wk1").toMetadataEntity(); Metadata meta = new Metadata(USER, tags("tag1", "tag2"), props("key1", "value1", "key2", "value2")); MetadataRecord programRecord = new MetadataRecord(program, meta); mds.apply(new Update(program, meta)); assertResults(mds, SearchRequest.of("value1").addNamespace(ns).build(), programRecord); assertResults(mds, SearchRequest.of("value2").addNamespace(ns).build(), programRecord); assertResults(mds, SearchRequest.of("tag2").addNamespace(ns).build(), programRecord); mds.apply(new Update(program, new Metadata(USER, props("key1", "value3")))); mds.apply(new Remove(program, ImmutableSet.of(new ScopedNameOfKind(PROPERTY, USER, "key2"), new ScopedNameOfKind(TAG, USER, "tag2")))); programRecord = new MetadataRecord(program, new Metadata(USER, tags("tag1"), props("key1", "value3"))); // Searching for value1 should be empty assertEmpty(mds, SearchRequest.of("value1").addNamespace(ns).build()); // Instead key1 has value value3 now assertResults(mds, SearchRequest.of("value3").addNamespace(ns).build(), programRecord); // key2 and tag2 were deleted assertEmpty(mds, SearchRequest.of("value2").addNamespace(ns).build()); assertEmpty(mds, SearchRequest.of("tag2").addNamespace(ns).build()); // tag1 is still here assertResults(mds, SearchRequest.of("tag1").addNamespace(ns).build(), programRecord); // clean up mds.apply(new Drop(program)); }
mds.apply(new Remove(program, ImmutableSet.of(new ScopedNameOfKind(PROPERTY, USER, "multiword")))); programRecord = new MetadataRecord(program, new Metadata(USER, props("key1", "value1", "key2", "value2")));