Search in sources :

Example 11 with MetadataScope

use of io.cdap.cdap.api.metadata.MetadataScope in project cdap by caskdata.

the class TestFrameworkTestRun method testMetadataAccessInService.

@Category(SlowTests.class)
@Test
public void testMetadataAccessInService() throws Exception {
    ApplicationManager applicationManager = deployApplication(AppWithMetadataPrograms.class);
    LOG.info("Deployed.");
    ServiceManager serviceManager = applicationManager.getServiceManager(AppWithMetadataPrograms.METADATA_SERVICE_NAME).start();
    serviceManager.waitForRun(ProgramRunStatus.RUNNING, 10, TimeUnit.SECONDS);
    LOG.info("Service Started");
    URL serviceURL = serviceManager.getServiceURL(15, TimeUnit.SECONDS);
    Assert.assertNotNull(serviceURL);
    // add some tags
    callServicePut(serviceManager.getServiceURL(), "metadata/" + AppWithMetadataPrograms.METADATA_SERVICE_DATASET + "/tags", "tag1");
    callServicePut(serviceManager.getServiceURL(), "metadata/" + AppWithMetadataPrograms.METADATA_SERVICE_DATASET + "/tags", "tag2");
    // add some properties
    Map<String, String> propertiesToAdd = ImmutableMap.of("k1", "v1", "k2", "v2");
    callServicePut(serviceManager.getServiceURL(), "metadata/" + AppWithMetadataPrograms.METADATA_SERVICE_DATASET + "/properties", GSON.toJson(propertiesToAdd));
    // test service is able to read metadata
    String result = callServiceGet(serviceManager.getServiceURL(), "metadata/" + AppWithMetadataPrograms.METADATA_SERVICE_DATASET);
    Map<MetadataScope, Metadata> scopeMetadata = GSON.fromJson(result, MAP_METADATASCOPE_METADATA_TYPE);
    // verify system metadata
    Assert.assertTrue(scopeMetadata.containsKey(MetadataScope.SYSTEM));
    Assert.assertTrue(scopeMetadata.containsKey(MetadataScope.USER));
    Assert.assertFalse(scopeMetadata.get(MetadataScope.SYSTEM).getProperties().isEmpty());
    Assert.assertFalse(scopeMetadata.get(MetadataScope.SYSTEM).getTags().isEmpty());
    Assert.assertTrue(scopeMetadata.get(MetadataScope.SYSTEM).getProperties().containsKey("entity-name"));
    Assert.assertEquals(AppWithMetadataPrograms.METADATA_SERVICE_DATASET, scopeMetadata.get(MetadataScope.SYSTEM).getProperties().get("entity-name"));
    Assert.assertTrue(scopeMetadata.get(MetadataScope.SYSTEM).getTags().containsAll(Arrays.asList("explore", "batch")));
    // verify user metadata
    Assert.assertFalse(scopeMetadata.get(MetadataScope.USER).getProperties().isEmpty());
    Assert.assertFalse(scopeMetadata.get(MetadataScope.USER).getTags().isEmpty());
    Assert.assertTrue(scopeMetadata.get(MetadataScope.USER).getTags().containsAll(Arrays.asList("tag1", "tag2")));
    Assert.assertTrue(scopeMetadata.get(MetadataScope.USER).getProperties().containsKey("k1"));
    Assert.assertTrue(scopeMetadata.get(MetadataScope.USER).getProperties().containsKey("k2"));
    Assert.assertEquals("v1", scopeMetadata.get(MetadataScope.USER).getProperties().get("k1"));
    Assert.assertEquals("v2", scopeMetadata.get(MetadataScope.USER).getProperties().get("k2"));
    // delete a tag
    callServiceDelete(serviceManager.getServiceURL(), "metadata/" + AppWithMetadataPrograms.METADATA_SERVICE_DATASET + "/tags/" + "tag1");
    // delete a property
    callServiceDelete(serviceManager.getServiceURL(), "metadata/" + AppWithMetadataPrograms.METADATA_SERVICE_DATASET + "/properties/" + "k1");
    // get metadata and verify
    result = callServiceGet(serviceManager.getServiceURL(), "metadata/" + AppWithMetadataPrograms.METADATA_SERVICE_DATASET);
    scopeMetadata = GSON.fromJson(result, MAP_METADATASCOPE_METADATA_TYPE);
    Assert.assertEquals(1, scopeMetadata.get(MetadataScope.USER).getTags().size());
    Assert.assertTrue(scopeMetadata.get(MetadataScope.USER).getTags().contains("tag2"));
    Assert.assertEquals(1, scopeMetadata.get(MetadataScope.USER).getProperties().size());
    Assert.assertTrue(scopeMetadata.get(MetadataScope.USER).getProperties().containsKey("k2"));
    Assert.assertEquals("v2", scopeMetadata.get(MetadataScope.USER).getProperties().get("k2"));
    // delete all tags
    callServiceDelete(serviceManager.getServiceURL(), "metadata/" + AppWithMetadataPrograms.METADATA_SERVICE_DATASET + "/tags");
    // get metadata and verify
    result = callServiceGet(serviceManager.getServiceURL(), "metadata/" + AppWithMetadataPrograms.METADATA_SERVICE_DATASET);
    scopeMetadata = GSON.fromJson(result, MAP_METADATASCOPE_METADATA_TYPE);
    Assert.assertTrue(scopeMetadata.get(MetadataScope.USER).getTags().isEmpty());
    Assert.assertFalse(scopeMetadata.get(MetadataScope.USER).getProperties().isEmpty());
    // delete all properties
    callServiceDelete(serviceManager.getServiceURL(), "metadata/" + AppWithMetadataPrograms.METADATA_SERVICE_DATASET + "/properties");
    // get metadata and verify
    result = callServiceGet(serviceManager.getServiceURL(), "metadata/" + AppWithMetadataPrograms.METADATA_SERVICE_DATASET);
    scopeMetadata = GSON.fromJson(result, MAP_METADATASCOPE_METADATA_TYPE);
    Assert.assertTrue(scopeMetadata.get(MetadataScope.USER).getProperties().isEmpty());
    // add some tag and property again
    callServicePut(serviceManager.getServiceURL(), "metadata/" + AppWithMetadataPrograms.METADATA_SERVICE_DATASET + "/tags", "tag1");
    callServicePut(serviceManager.getServiceURL(), "metadata/" + AppWithMetadataPrograms.METADATA_SERVICE_DATASET + "/properties", GSON.toJson(propertiesToAdd));
    // get metadata and verify
    result = callServiceGet(serviceManager.getServiceURL(), "metadata/" + AppWithMetadataPrograms.METADATA_SERVICE_DATASET);
    scopeMetadata = GSON.fromJson(result, MAP_METADATASCOPE_METADATA_TYPE);
    Assert.assertFalse(scopeMetadata.get(MetadataScope.USER).getTags().isEmpty());
    Assert.assertFalse(scopeMetadata.get(MetadataScope.USER).getProperties().isEmpty());
    // delete all metadata
    callServiceDelete(serviceManager.getServiceURL(), "metadata/" + AppWithMetadataPrograms.METADATA_SERVICE_DATASET);
    // get metadata and verify
    result = callServiceGet(serviceManager.getServiceURL(), "metadata/" + AppWithMetadataPrograms.METADATA_SERVICE_DATASET);
    scopeMetadata = GSON.fromJson(result, MAP_METADATASCOPE_METADATA_TYPE);
    Assert.assertTrue(scopeMetadata.get(MetadataScope.USER).getTags().isEmpty());
    Assert.assertTrue(scopeMetadata.get(MetadataScope.USER).getProperties().isEmpty());
}
Also used : ApplicationManager(io.cdap.cdap.test.ApplicationManager) ServiceManager(io.cdap.cdap.test.ServiceManager) Metadata(io.cdap.cdap.api.metadata.Metadata) URL(java.net.URL) MetadataScope(io.cdap.cdap.api.metadata.MetadataScope) Category(org.junit.experimental.categories.Category) Test(org.junit.Test)

Example 12 with MetadataScope

use of io.cdap.cdap.api.metadata.MetadataScope in project cdap by cdapio.

the class ElasticsearchMetadataStorage method create.

/**
 * Creates the Elasticsearch index request for an entity creation or update.
 * See {@link MetadataMutation.Create} for detailed semantics.
 *
 * @param before the metadata for the mutation's entity before the change
 * @param create the mutation to apply
 *
 * @return an ElasticSearch request to be executed, and the change caused by the mutation
 */
private RequestAndChange create(VersionedMetadata before, MetadataMutation.Create create) {
    // if the entity did not exist before, none of the directives apply and this is equivalent to update()
    if (!before.existing()) {
        return update(create.getEntity(), before, create.getMetadata());
    }
    Metadata meta = create.getMetadata();
    Map<ScopedNameOfKind, MetadataDirective> directives = create.getDirectives();
    // determine the scopes that this mutation applies to (scopes that do not occur in the metadata are no changed)
    Set<MetadataScope> scopes = Stream.concat(meta.getTags().stream(), meta.getProperties().keySet().stream()).map(ScopedName::getScope).collect(Collectors.toSet());
    // compute what previously existing tags and properties have to be preserved (all others are replaced)
    Set<ScopedName> existingTagsToKeep = new HashSet<>();
    Map<ScopedName, String> existingPropertiesToKeep = new HashMap<>();
    // all tags and properties that are in a scope not affected by this mutation
    Sets.difference(MetadataScope.ALL, scopes).forEach(scope -> {
        before.getMetadata().getTags().stream().filter(tag -> tag.getScope().equals(scope)).forEach(existingTagsToKeep::add);
        before.getMetadata().getProperties().entrySet().stream().filter(entry -> entry.getKey().getScope().equals(scope)).forEach(entry -> existingPropertiesToKeep.put(entry.getKey(), entry.getValue()));
    });
    // tags and properties in affected scopes that must be kept or preserved
    directives.entrySet().stream().filter(entry -> scopes.contains(entry.getKey().getScope())).forEach(entry -> {
        ScopedNameOfKind key = entry.getKey();
        if (key.getKind() == MetadataKind.TAG && (entry.getValue() == MetadataDirective.PRESERVE || entry.getValue() == MetadataDirective.KEEP)) {
            ScopedName tag = new ScopedName(key.getScope(), key.getName());
            if (!meta.getTags().contains(tag) && before.getMetadata().getTags().contains(tag)) {
                existingTagsToKeep.add(tag);
            }
        } else if (key.getKind() == MetadataKind.PROPERTY) {
            ScopedName property = new ScopedName(key.getScope(), key.getName());
            String existingValue = before.getMetadata().getProperties().get(property);
            String newValue = meta.getProperties().get(property);
            if (existingValue != null && (entry.getValue() == MetadataDirective.PRESERVE && !existingValue.equals(newValue) || entry.getValue() == MetadataDirective.KEEP && newValue == null)) {
                existingPropertiesToKeep.put(property, existingValue);
            }
        }
    });
    // compute the new tags and properties
    Set<ScopedName> newTags = existingTagsToKeep.isEmpty() ? meta.getTags() : Sets.union(meta.getTags(), existingTagsToKeep);
    Map<ScopedName, String> newProperties = meta.getProperties();
    if (!existingPropertiesToKeep.isEmpty()) {
        newProperties = new HashMap<>(newProperties);
        newProperties.putAll(existingPropertiesToKeep);
    }
    Metadata after = new Metadata(newTags, newProperties);
    return new RequestAndChange(writeToIndex(create.getEntity(), before.getVersion(), after), new MetadataChange(create.getEntity(), before.getMetadata(), after));
}
Also used : Arrays(java.util.Arrays) SSLContext(javax.net.ssl.SSLContext) MetadataDirective(io.cdap.cdap.spi.metadata.MetadataDirective) SearchHits(org.elasticsearch.search.SearchHits) GetMappingsRequest(org.elasticsearch.action.admin.indices.mapping.get.GetMappingsRequest) Bytes(io.cdap.cdap.api.common.Bytes) RetryStrategies(io.cdap.cdap.common.service.RetryStrategies) KeyStoreException(java.security.KeyStoreException) GsonBuilder(com.google.gson.GsonBuilder) MetadataChange(io.cdap.cdap.spi.metadata.MetadataChange) DeleteRequest(org.elasticsearch.action.delete.DeleteRequest) IndexRequest(org.elasticsearch.action.index.IndexRequest) Map(java.util.Map) Closeables(com.google.common.io.Closeables) BulkResponse(org.elasticsearch.action.bulk.BulkResponse) Set(java.util.Set) KeyManagementException(java.security.KeyManagementException) ScoreMode(org.apache.lucene.search.join.ScoreMode) CreateIndexResponse(org.elasticsearch.action.admin.indices.create.CreateIndexResponse) Stream(java.util.stream.Stream) MetadataScope(io.cdap.cdap.api.metadata.MetadataScope) MetadataConstants(io.cdap.cdap.spi.metadata.MetadataConstants) RestStatus(org.elasticsearch.rest.RestStatus) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) CredentialsProvider(org.apache.http.client.CredentialsProvider) SConfiguration(io.cdap.cdap.common.conf.SConfiguration) MatchQueryBuilder(org.elasticsearch.index.query.MatchQueryBuilder) ClearScrollRequest(org.elasticsearch.action.search.ClearScrollRequest) GetMappingsResponse(org.elasticsearch.action.admin.indices.mapping.get.GetMappingsResponse) Checksums(io.cdap.cdap.common.utils.Checksums) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) ScopedNameOfKind(io.cdap.cdap.spi.metadata.ScopedNameOfKind) SearchSourceBuilder(org.elasticsearch.search.builder.SearchSourceBuilder) Read(io.cdap.cdap.spi.metadata.Read) Nullable(javax.annotation.Nullable) Charsets(com.google.common.base.Charsets) QueryBuilder(org.elasticsearch.index.query.QueryBuilder) Resources(com.google.common.io.Resources) WildcardQueryBuilder(org.elasticsearch.index.query.WildcardQueryBuilder) IOException(java.io.IOException) MetadataKind(io.cdap.cdap.spi.metadata.MetadataKind) DocWriteResponse(org.elasticsearch.action.DocWriteResponse) RestHighLevelClient(org.elasticsearch.client.RestHighLevelClient) SSLContextBuilder(org.apache.http.ssl.SSLContextBuilder) AuthScope(org.apache.http.auth.AuthScope) SearchScrollRequest(org.elasticsearch.action.search.SearchScrollRequest) MetadataRecord(io.cdap.cdap.spi.metadata.MetadataRecord) HttpHost(org.apache.http.HttpHost) ActionListener(org.elasticsearch.action.ActionListener) GetResponse(org.elasticsearch.action.get.GetResponse) RestClientBuilder(org.elasticsearch.client.RestClientBuilder) MappingMetaData(org.elasticsearch.cluster.metadata.MappingMetaData) URL(java.net.URL) Inject(com.google.inject.Inject) LoggerFactory(org.slf4j.LoggerFactory) QueryBuilders(org.elasticsearch.index.query.QueryBuilders) MetadataConflictException(io.cdap.cdap.common.metadata.MetadataConflictException) BasicCredentialsProvider(org.apache.http.impl.client.BasicCredentialsProvider) Settings(org.elasticsearch.common.settings.Settings) Gson(com.google.gson.Gson) Metadata(io.cdap.cdap.spi.metadata.Metadata) SearchResponse(org.elasticsearch.action.search.SearchResponse) RequestOptions(org.elasticsearch.client.RequestOptions) SearchRequest(io.cdap.cdap.spi.metadata.SearchRequest) ElasticsearchStatusException(org.elasticsearch.ElasticsearchStatusException) MetadataEntity(io.cdap.cdap.api.metadata.MetadataEntity) MetadataMutation(io.cdap.cdap.spi.metadata.MetadataMutation) Splitter(com.google.common.base.Splitter) Sorting(io.cdap.cdap.spi.metadata.Sorting) SearchHit(org.elasticsearch.search.SearchHit) GetRequest(org.elasticsearch.action.get.GetRequest) MultiGetResponse(org.elasticsearch.action.get.MultiGetResponse) ImmutableMap(com.google.common.collect.ImmutableMap) BulkItemResponse(org.elasticsearch.action.bulk.BulkItemResponse) MultiGetItemResponse(org.elasticsearch.action.get.MultiGetItemResponse) Collectors(java.util.stream.Collectors) Sets(com.google.common.collect.Sets) List(java.util.List) SortOrder(org.elasticsearch.search.sort.SortOrder) Pattern(java.util.regex.Pattern) BoolQueryBuilder(org.elasticsearch.index.query.BoolQueryBuilder) RestClient(org.elasticsearch.client.RestClient) Retries(io.cdap.cdap.common.service.Retries) RetryStrategy(io.cdap.cdap.common.service.RetryStrategy) XContentType(org.elasticsearch.common.xcontent.XContentType) MultiGetRequest(org.elasticsearch.action.get.MultiGetRequest) HashMap(java.util.HashMap) MetadataStorage(io.cdap.cdap.spi.metadata.MetadataStorage) HashSet(java.util.HashSet) WriteRequest(org.elasticsearch.action.support.WriteRequest) Operator(org.elasticsearch.index.query.Operator) CreateIndexRequest(org.elasticsearch.action.admin.indices.create.CreateIndexRequest) GetIndexResponse(org.elasticsearch.action.admin.indices.get.GetIndexResponse) DeleteIndexRequest(org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest) Logger(org.slf4j.Logger) Cursor(io.cdap.cdap.common.metadata.Cursor) GetIndexRequest(org.elasticsearch.action.admin.indices.get.GetIndexRequest) ScopedName(io.cdap.cdap.spi.metadata.ScopedName) ProjectInfo(io.cdap.cdap.common.utils.ProjectInfo) DocWriteRequest(org.elasticsearch.action.DocWriteRequest) AcknowledgedResponse(org.elasticsearch.action.support.master.AcknowledgedResponse) Maps(com.google.common.collect.Maps) TermQueryBuilder(org.elasticsearch.index.query.TermQueryBuilder) UsernamePasswordCredentials(org.apache.http.auth.UsernamePasswordCredentials) TimeUnit(java.util.concurrent.TimeUnit) CConfiguration(io.cdap.cdap.common.conf.CConfiguration) VisibleForTesting(com.google.common.annotations.VisibleForTesting) MutationOptions(io.cdap.cdap.spi.metadata.MutationOptions) BulkRequest(org.elasticsearch.action.bulk.BulkRequest) Collections(java.util.Collections) MetadataUtil(io.cdap.cdap.common.metadata.MetadataUtil) ScopedNameOfKind(io.cdap.cdap.spi.metadata.ScopedNameOfKind) LinkedHashMap(java.util.LinkedHashMap) HashMap(java.util.HashMap) Metadata(io.cdap.cdap.spi.metadata.Metadata) MetadataChange(io.cdap.cdap.spi.metadata.MetadataChange) ScopedName(io.cdap.cdap.spi.metadata.ScopedName) MetadataDirective(io.cdap.cdap.spi.metadata.MetadataDirective) MetadataScope(io.cdap.cdap.api.metadata.MetadataScope) HashSet(java.util.HashSet)

Example 13 with MetadataScope

use of io.cdap.cdap.api.metadata.MetadataScope in project cdap by cdapio.

the class ScopedName method fromString.

public static ScopedName fromString(String s) {
    String[] parts = s.split(":", 2);
    if (parts.length != 2) {
        throw new IllegalArgumentException(String.format("Cannot parse '%s' as a ScopedName", s));
    }
    MetadataScope scope = MetadataScope.valueOf(parts[0]);
    return new ScopedName(scope, parts[1]);
}
Also used : MetadataScope(io.cdap.cdap.api.metadata.MetadataScope)

Example 14 with MetadataScope

use of io.cdap.cdap.api.metadata.MetadataScope in project cdap by cdapio.

the class MetadataCompatibility method toV5Results.

/**
 * Convert a list of {@link MetadataRecord}s to an ordered set of 5.x {@link MetadataSearchResultRecord}s.
 *
 * The 5.x convention was that the results only contain non-empty records.
 */
private static Set<MetadataSearchResultRecord> toV5Results(List<MetadataRecord> results) {
    Set<MetadataSearchResultRecord> records = new LinkedHashSet<>();
    for (MetadataRecord record : results) {
        Map<MetadataScope, io.cdap.cdap.api.metadata.Metadata> map = toV5Metadata(record.getMetadata());
        records.add(new MetadataSearchResultRecord(record.getEntity(), Maps.filterValues(map, meta -> meta != null && !(meta.getProperties().isEmpty() && meta.getTags().isEmpty()))));
    }
    return records;
}
Also used : LinkedHashSet(java.util.LinkedHashSet) MetadataSearchResultRecord(io.cdap.cdap.proto.metadata.MetadataSearchResultRecord) Metadata(io.cdap.cdap.spi.metadata.Metadata) MetadataRecord(io.cdap.cdap.spi.metadata.MetadataRecord) MetadataScope(io.cdap.cdap.api.metadata.MetadataScope)

Example 15 with MetadataScope

use of io.cdap.cdap.api.metadata.MetadataScope in project cdap by cdapio.

the class DatasetMetadataStorage method search.

@Override
public SearchResponse search(SearchRequest request) {
    Cursor cursor = request.getCursor() != null && !request.getCursor().isEmpty() ? Cursor.fromString(request.getCursor()) : null;
    Set<String> namespaces = cursor == null ? request.getNamespaces() : cursor.getNamespaces();
    ImmutablePair<NamespaceId, Set<EntityScope>> namespaceAndScopes = determineNamespaceAndScopes(namespaces);
    CursorAndOffsetInfo cursorOffsetAndLimits = determineCursorOffsetAndLimits(request, cursor);
    String query = cursor != null ? cursor.getQuery() : request.getQuery() == null || request.getQuery().isEmpty() ? "*" : request.getQuery();
    Set<String> types = cursor != null ? cursor.getTypes() : request.getTypes();
    types = types == null ? Collections.emptySet() : types;
    Sorting sorting = cursor == null ? request.getSorting() : cursor.getSorting() == null ? null : Sorting.of(cursor.getSorting());
    SortInfo sortInfo = sorting == null ? SortInfo.DEFAULT : new SortInfo(sorting.getKey(), SortInfo.SortOrder.valueOf(sorting.getOrder().name()));
    boolean showHidden = cursor != null ? cursor.isShowHidden() : request.isShowHidden();
    MetadataScope scope = cursor != null ? cursor.getScope() : request.getScope();
    MetadataSearchResponse response = search(new io.cdap.cdap.data2.metadata.dataset.SearchRequest(namespaceAndScopes.getFirst(), query, types, sortInfo, cursorOffsetAndLimits.getOffsetToRequest(), cursorOffsetAndLimits.getLimitToRequest(), request.isCursorRequested() ? 1 : 0, cursorOffsetAndLimits.getCursor(), showHidden, namespaceAndScopes.getSecond()), scope);
    // translate results back and limit them to at most what was requested (see above where we add 1)
    int limitToRespond = cursorOffsetAndLimits.getLimitToRespond();
    int offsetToRespond = cursorOffsetAndLimits.getOffsetToRespond();
    List<MetadataRecord> results = response.getResults().stream().limit(limitToRespond).map(record -> {
        Metadata metadata = Metadata.EMPTY;
        for (Map.Entry<MetadataScope, io.cdap.cdap.api.metadata.Metadata> entry : record.getMetadata().entrySet()) {
            Metadata toAdd = new Metadata(entry.getKey(), entry.getValue().getTags(), entry.getValue().getProperties());
            metadata = mergeDisjointMetadata(metadata, toAdd);
        }
        return new MetadataRecord(record.getMetadataEntity(), metadata);
    }).collect(Collectors.toList());
    Cursor newCursor = null;
    if (response.getCursors() != null && !response.getCursors().isEmpty()) {
        String actualCursor = response.getCursors().get(0);
        if (cursor != null) {
            // the new cursor's offset is the previous cursor's offset plus the number of results
            newCursor = new Cursor(cursor, cursor.getOffset() + results.size(), actualCursor);
        } else {
            newCursor = new Cursor(offsetToRespond + results.size(), limitToRespond, showHidden, scope, namespaces, types, sorting == null ? null : sorting.toString(), actualCursor, query);
        }
    }
    // adjust the total results by the difference of requested offset and the true offset that we respond back
    int totalResults = offsetToRespond - cursorOffsetAndLimits.getOffsetToRequest() + response.getTotal();
    return new SearchResponse(request, newCursor == null ? null : newCursor.toString(), offsetToRespond, limitToRespond, totalResults, results);
}
Also used : MetadataSearchResponse(io.cdap.cdap.proto.metadata.MetadataSearchResponse) ImmutablePair(io.cdap.cdap.common.utils.ImmutablePair) MetadataDirective(io.cdap.cdap.spi.metadata.MetadataDirective) NamespaceId(io.cdap.cdap.proto.id.NamespaceId) Inject(com.google.inject.Inject) HashMap(java.util.HashMap) USER(io.cdap.cdap.api.metadata.MetadataScope.USER) MetadataChange(io.cdap.cdap.spi.metadata.MetadataChange) MetadataStorage(io.cdap.cdap.spi.metadata.MetadataStorage) HashSet(java.util.HashSet) TAG(io.cdap.cdap.spi.metadata.MetadataKind.TAG) ScopedNameOfKind(io.cdap.cdap.spi.metadata.ScopedNameOfKind) Metadata(io.cdap.cdap.spi.metadata.Metadata) Map(java.util.Map) SearchRequest(io.cdap.cdap.spi.metadata.SearchRequest) MetadataEntity(io.cdap.cdap.api.metadata.MetadataEntity) MetadataMutation(io.cdap.cdap.spi.metadata.MetadataMutation) Read(io.cdap.cdap.spi.metadata.Read) EnumSet(java.util.EnumSet) Sorting(io.cdap.cdap.spi.metadata.Sorting) SortInfo(io.cdap.cdap.data2.metadata.dataset.SortInfo) TransactionSystemClient(org.apache.tephra.TransactionSystemClient) PROPERTY(io.cdap.cdap.spi.metadata.MetadataKind.PROPERTY) ImmutableMap(com.google.common.collect.ImmutableMap) Cursor(io.cdap.cdap.common.metadata.Cursor) SYSTEM(io.cdap.cdap.api.metadata.MetadataScope.SYSTEM) Set(java.util.Set) SearchResponse(io.cdap.cdap.spi.metadata.SearchResponse) IOException(java.io.IOException) MetadataKind(io.cdap.cdap.spi.metadata.MetadataKind) ScopedName(io.cdap.cdap.spi.metadata.ScopedName) Maps(com.google.common.collect.Maps) Collectors(java.util.stream.Collectors) Sets(com.google.common.collect.Sets) List(java.util.List) EntityScope(io.cdap.cdap.proto.EntityScope) MetadataScope(io.cdap.cdap.api.metadata.MetadataScope) Named(com.google.inject.name.Named) Constants(io.cdap.cdap.common.conf.Constants) VisibleForTesting(com.google.common.annotations.VisibleForTesting) DatasetDefinition(io.cdap.cdap.api.dataset.DatasetDefinition) MetadataRecord(io.cdap.cdap.spi.metadata.MetadataRecord) MutationOptions(io.cdap.cdap.spi.metadata.MutationOptions) MetadataDataset(io.cdap.cdap.data2.metadata.dataset.MetadataDataset) Collections(java.util.Collections) HashSet(java.util.HashSet) EnumSet(java.util.EnumSet) Set(java.util.Set) Metadata(io.cdap.cdap.spi.metadata.Metadata) Cursor(io.cdap.cdap.common.metadata.Cursor) MetadataRecord(io.cdap.cdap.spi.metadata.MetadataRecord) MetadataScope(io.cdap.cdap.api.metadata.MetadataScope) MetadataSearchResponse(io.cdap.cdap.proto.metadata.MetadataSearchResponse) Sorting(io.cdap.cdap.spi.metadata.Sorting) SortInfo(io.cdap.cdap.data2.metadata.dataset.SortInfo) MetadataSearchResponse(io.cdap.cdap.proto.metadata.MetadataSearchResponse) SearchResponse(io.cdap.cdap.spi.metadata.SearchResponse) NamespaceId(io.cdap.cdap.proto.id.NamespaceId)

Aggregations

MetadataScope (io.cdap.cdap.api.metadata.MetadataScope)40 MetadataEntity (io.cdap.cdap.api.metadata.MetadataEntity)24 Metadata (io.cdap.cdap.spi.metadata.Metadata)12 MetadataRecord (io.cdap.cdap.spi.metadata.MetadataRecord)12 HashMap (java.util.HashMap)12 HashSet (java.util.HashSet)12 ImmutableMap (com.google.common.collect.ImmutableMap)10 Metadata (io.cdap.cdap.api.metadata.Metadata)10 MetadataDataset (io.cdap.cdap.data2.metadata.dataset.MetadataDataset)10 MetadataKind (io.cdap.cdap.spi.metadata.MetadataKind)10 Map (java.util.Map)10 VisibleForTesting (com.google.common.annotations.VisibleForTesting)8 Maps (com.google.common.collect.Maps)8 Sets (com.google.common.collect.Sets)8 Inject (com.google.inject.Inject)8 Cursor (io.cdap.cdap.common.metadata.Cursor)8 SortInfo (io.cdap.cdap.data2.metadata.dataset.SortInfo)8 NamespaceId (io.cdap.cdap.proto.id.NamespaceId)8 MetadataSearchResponse (io.cdap.cdap.proto.metadata.MetadataSearchResponse)8 MetadataChange (io.cdap.cdap.spi.metadata.MetadataChange)8