@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 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()))); }
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 removeMetadata(MetadataScope scope, MetadataEntity entity) { applyMutation(new MetadataMutation.Remove(entity, scope)); }