Map<MetadataScope, co.cask.cdap.api.metadata.Metadata> metaMap = new HashMap<>(); MetadataScope.ALL.forEach(scope -> { Map<String, String> props = record.getMetadata().getProperties(scope); Set<String> tags = record.getMetadata().getTags(scope); if (!props.isEmpty() || !tags.isEmpty()) { metaMap.put(scope, new co.cask.cdap.api.metadata.Metadata(props, tags));
mds.apply(new Update(service1Record.getEntity(), service1Record.getMetadata())); MetadataRecord dataset2Record = new MetadataRecord(dataset2, new Metadata(USER, tags(), dataset2UserProps)); mds.batch(ImmutableList.of(new Update(dataset1Record.getEntity(), dataset1Record.getMetadata()), new Update(dataset2Record.getEntity(), dataset2Record.getMetadata())));
@Test public void testCrossNamespaceDefaultSearch() throws IOException { MetadataStorage mds = getMetadataStorage(); NamespaceId ns1 = new NamespaceId("ns1"); NamespaceId ns2 = new NamespaceId("ns2"); MetadataEntity ns1app = ns1.app("a").toMetadataEntity(); MetadataEntity ns2app = ns2.app("a").toMetadataEntity(); MetadataRecord app1Record = new MetadataRecord(ns1app, new Metadata(USER, props("k1", "v1", "k2", "v2"))); MetadataRecord app2Record = new MetadataRecord(ns2app, new Metadata(USER, props("k1", "v1"))); mds.apply(new Update(ns1app, app1Record.getMetadata())); mds.apply(new Update(ns2app, app2Record.getMetadata())); assertResults(mds, SearchRequest.of("v1").build(), app1Record, app2Record); assertResults(mds, SearchRequest.of("v2").build(), app1Record); assertResults(mds, SearchRequest.of("*").build(), app1Record, app2Record); // clean up mds.batch(ImmutableList.of(new Drop(ns1app), new Drop(ns2app))); }
@Test public void testSearchOnTypes() throws Exception { MetadataStorage mds = getMetadataStorage(); MetadataEntity myDs = NamespaceId.DEFAULT.dataset("myDs").toMetadataEntity(); MetadataEntity myField1 = MetadataEntity.builder(myDs).appendAsType("field", "myField1").build(); MetadataEntity myField2 = MetadataEntity.builder(myDs).appendAsType("field", "myField2").build(); MetadataRecord record1 = new MetadataRecord(myField1, new Metadata(USER, props("testKey1", "testValue1"))); MetadataRecord record2 = new MetadataRecord(myField2, new Metadata(USER, props("testKey2", "testValue2"))); mds.apply(new Update(myField1, record1.getMetadata())); mds.apply(new Update(myField2, record2.getMetadata())); // Search for it based on value assertResults(mds, SearchRequest.of("field:myField1").build(), record1); // should return both fields assertResults(mds, SearchRequest.of("field:myFie*").build(), record1, record2); assertResults(mds, SearchRequest.of("field*").build(), record1, record2); // clean up mds.batch(ImmutableList.of(new Drop(myField1), new Drop(myField2))); }
.map(record -> new Update(record.getEntity(), record.getMetadata())).collect(Collectors.toList()));
new ScopedName(USER, "Key1"), "Value1"))); mds.apply(new Update(program, programRecord.getMetadata())); mds.apply(new Update(dataset, datasetRecord.getMetadata()));
.stream().map(record -> new Update(record.getEntity(), record.getMetadata())) .collect(Collectors.toList()));
MetadataRecord programRecord = new MetadataRecord( program, new Metadata(USER, props("key1", "value1", "key2", "value2", "multiword", multiWordValue))); mds.apply(new Update(program, programRecord.getMetadata())); mds.apply(new Update(dataset, datasetRecord.getMetadata()));
mds.apply(new Update(app, appRecord.getMetadata())); mds.apply(new Update(dataset, datasetRecord.getMetadata())); mds.apply(new Update(program, programRecord.getMetadata()));