MetadataEntity ns2app2 = ns2Id.app("a2").toMetadataEntity(); mds.apply(new Update(ns1app1, new Metadata(USER, tags("v1")))); mds.apply(new Update(ns1app2, new Metadata(USER, tags("v1")))); mds.apply(new Update(ns1app3, new Metadata(USER, tags("v1")))); mds.apply(new Update(ns2app1, new Metadata(USER, tags("v1")))); mds.apply(new Update(ns2app2, new Metadata(USER, tags("v1")))); MetadataRecord record11 = new MetadataRecord(ns1app1, new Metadata(USER, tags("v1"))); MetadataRecord record12 = new MetadataRecord(ns1app2, new Metadata(USER, tags("v1"))); MetadataRecord record13 = new MetadataRecord(ns1app3, new Metadata(USER, tags("v1"))); MetadataRecord record21 = new MetadataRecord(ns2app1, new Metadata(USER, tags("v1"))); MetadataRecord record22 = new MetadataRecord(ns2app2, new Metadata(USER, tags("v1")));
@Test public void testSearchOnTagsUpdate() throws IOException { MetadataStorage mds = getMetadataStorage(); MetadataEntity entity = NamespaceId.DEFAULT.app("appX").workflow("wtf").toMetadataEntity(); Metadata meta = new Metadata(SYSTEM, tags("tag1", "tag2")); mds.apply(new Update(entity, meta)); Assert.assertEquals(meta.getTags(SYSTEM), mds.read(new Read(entity, SYSTEM)).getTags(SYSTEM)); assertResults(mds, SearchRequest.of("tag1").build(), new MetadataRecord(entity, meta)); // add an more tags mds.apply(new Update(entity, new Metadata(SYSTEM, tags("tag3", "tag4")))); Set<String> newTags = tags("tag1", "tag2", "tag3", "tag4"); Metadata newMeta = new Metadata(SYSTEM, newTags); Assert.assertEquals(newTags, mds.read(new Read(entity, SYSTEM)).getTags(SYSTEM)); for (String expectedTag : newTags) { assertResults(mds, SearchRequest.of(expectedTag).build(), new MetadataRecord(entity, newMeta)); } // add an empty set of tags. This should have no effect on retrieval or search of tags mds.apply(new Update(entity, new Metadata(SYSTEM, tags()))); Assert.assertEquals(newTags, mds.read(new Read(entity, SYSTEM)).getTags(SYSTEM)); for (String expectedTag : newTags) { assertResults(mds, SearchRequest.of(expectedTag).build(), new MetadataRecord(entity, newMeta)); } // clean up mds.apply(new Drop(entity)); }
MetadataEntity hidden = nsId.dataset("_auditLog").toMetadataEntity(); mds.apply(new Update(service, new Metadata(USER, tags("tag", "tag1")))); mds.apply(new Update(worker, new Metadata(USER, tags("tag2", "tag3 tag4")))); mds.apply(new Update(dataset, new Metadata(USER, tags("tag5 tag6", "tag7 tag8")))); mds.apply(new Update(hidden, new Metadata(USER, tags("tag9", "tag10", "tag11", "tag12", "tag13")))); MetadataRecord serviceRecord = new MetadataRecord(service, new Metadata(USER, tags("tag", "tag1"))); MetadataRecord streamRecord = new MetadataRecord(worker, new Metadata(USER, tags("tag2", "tag3 tag4"))); MetadataRecord datasetRecord = new MetadataRecord(dataset, new Metadata(USER, tags("tag5 tag6", "tag7 tag8"))); MetadataRecord hiddenRecord = new MetadataRecord(hidden, new Metadata(USER, tags("tag9", "tag10", "tag11", "tag12", "tag13")));
app1Record = new MetadataRecord(app1, new Metadata(USER, tags("tag1", "tag2", "tag3"))), app2Record = new MetadataRecord(app2, new Metadata(USER, tags("tag1", "tag2", "tag3_more"))), program1Record = new MetadataRecord(program1, new Metadata(USER, tags("tag1"))), dataset1Record = new MetadataRecord(dataset1, new Metadata(USER, tags("tag3", "tag2", "tag12-tag33"))), dataset2Record = new MetadataRecord(dataset2, new Metadata(USER, tags("tag2", "tag4"))), file1Record = new MetadataRecord(file1, new Metadata(USER, tags("tag2", "tag5")));
record11 = new MetadataRecord(ns1app1, new Metadata(USER, tags("v1"), props("k1", "v1"))), record12 = new MetadataRecord(ns1app2, new Metadata(USER, props("k1", "v1", "k2", "v2"))), record13 = new MetadataRecord(ns1app3, new Metadata(USER, props("k1", "v1", "k3", "v3"))), record21 = new MetadataRecord(ns2app1, new Metadata(USER, props("k1", "v1", "k2", "v2"))), record22 = new MetadataRecord(ns2app2, new Metadata(USER, tags("v2", "v3"), props("k1", "v1"))); MetadataRecord[] records = { record11, record12, record13, record21, record22 };
@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)); }