@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()))); }
private MetadataChange remove(MetadataDatasetContext context, MetadataMutation.Remove remove) { MetadataEntity entity = remove.getEntity(); MetadataDataset.Change userChange, systemChange; if (remove.getRemovals() != null) { Set<String> userTagsToRemove = new HashSet<>(); Set<String> systemTagsToRemove = new HashSet<>(); Set<String> userPropertiesToRemove = new HashSet<>(); Set<String> systemPropertiesToRemove = new HashSet<>(); remove.getRemovals().forEach(removal -> (TAG == removal.getKind() ? USER == removal.getScope() ? userTagsToRemove : systemTagsToRemove : USER == removal.getScope() ? userPropertiesToRemove : systemPropertiesToRemove) .add(removal.getName())); userChange = removeInScope(context, USER, entity, userTagsToRemove, userPropertiesToRemove); systemChange = removeInScope(context, SYSTEM, entity, systemTagsToRemove, systemPropertiesToRemove); } else { Set<MetadataScope> scopes = remove.getScopes(); Set<MetadataKind> kinds = remove.getKinds(); userChange = removeScope(context, USER, entity, scopes, kinds); systemChange = removeScope(context, SYSTEM, entity, scopes, kinds); } return combineChanges(entity, userChange, systemChange); }
mds.apply(new Remove(entity, ImmutableSet.of( new ScopedNameOfKind(MetadataKind.TAG, SYSTEM, "st1"), new ScopedNameOfKind(MetadataKind.TAG, USER, "ut1"), MetadataMutation remove = new Remove(entity, ImmutableSet.of( new ScopedNameOfKind(MetadataKind.TAG, SYSTEM, "st1"), new ScopedNameOfKind(MetadataKind.TAG, SYSTEM, "st2"),
change = mds.apply(new Remove(entity)); Assert.assertEquals(new MetadataChange(entity, metadata, Metadata.EMPTY), change); verifyMetadata(mds, entity, Metadata.EMPTY); Assert.assertEquals(new MetadataChange(entity, Metadata.EMPTY, metadata), change); verifyMetadata(mds, entity, metadata); change = mds.apply(new Remove(entity, USER)); Metadata newMetadata = filterBy(metadata, SYSTEM, null); Assert.assertEquals(new MetadataChange(entity, metadata, newMetadata), change); Assert.assertEquals(new MetadataChange(entity, newMetadata, metadata), change); verifyMetadata(mds, entity, metadata); change = mds.apply(new Remove(entity, SYSTEM)); newMetadata = filterBy(metadata, USER, null); Assert.assertEquals(new MetadataChange(entity, metadata, newMetadata), change); Assert.assertEquals(new MetadataChange(entity, newMetadata, metadata), change); verifyMetadata(mds, entity, metadata); change = mds.apply(new Remove(entity, TAG)); newMetadata = filterBy(metadata, null, PROPERTY); Assert.assertEquals(new MetadataChange(entity, metadata, newMetadata), change); Assert.assertEquals(new MetadataChange(entity, newMetadata, metadata), change); verifyMetadata(mds, entity, metadata); change = mds.apply(new Remove(entity, PROPERTY)); newMetadata = filterBy(metadata, null, TAG); Assert.assertEquals(new MetadataChange(entity, metadata, newMetadata), change); Assert.assertEquals(new MetadataChange(entity, newMetadata, metadata), change);
mds.apply(new Remove(program, ImmutableSet.of(new ScopedNameOfKind(PROPERTY, USER, "multiword")))); programRecord = new MetadataRecord(program, new Metadata(USER, props("key1", "value1", "key2", "value2")));
@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)); }
@Override public void removeProperties(MetadataScope scope, MetadataEntity entity) { applyMutation(new MetadataMutation.Remove(entity, scope, MetadataKind.PROPERTY)); }
@Override public void removeTags(MetadataScope scope, MetadataEntity entity) { applyMutation(new MetadataMutation.Remove(entity, scope, MetadataKind.TAG)); }
@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 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 removeMetadata(MetadataScope scope, MetadataEntity entity) { applyMutation(new MetadataMutation.Remove(entity, scope)); }