Search in sources :

Example 41 with Query

use of com.vmware.xenon.services.common.QueryTask.Query in project photon-model by vmware.

the class AWSS3StorageEnumerationAdapterService method getLocalResources.

/**
 * Query and get list of S3 buckets present locally in disk states in current context.
 */
private void getLocalResources(S3StorageEnumerationContext aws, S3StorageEnumerationSubStage next) {
    // instance Ids. the filtering is performed on the selected resource pool.
    if (aws.localResourcesNextPageLink == null) {
        Query.Builder qBuilder = Query.Builder.create().addKindFieldClause(DiskState.class).addFieldClause(DiskState.FIELD_NAME_STORAGE_TYPE, STORAGE_TYPE_S3).addInClause(DiskState.FIELD_NAME_ID, aws.remoteBucketsByBucketName.keySet());
        addScopeCriteria(qBuilder, aws);
        QueryTask queryTask = QueryTask.Builder.createDirectTask().setQuery(qBuilder.build()).addOption(QueryOption.EXPAND_CONTENT).setResultLimit(getQueryResultLimit()).build();
        queryTask.tenantLinks = aws.parentCompute.tenantLinks;
        QueryUtils.startInventoryQueryTask(this, queryTask).whenComplete((qrt, e) -> {
            if (e != null) {
                this.logSevere(() -> String.format("Failure retrieving query" + " results: %s", e.toString()));
                signalErrorToEnumerationAdapter(aws, e);
                return;
            }
            qrt.results.documents.values().forEach(documentJson -> {
                DiskState localDisk = Utils.fromJson(documentJson, DiskState.class);
                aws.localDiskStatesByBucketName.put(localDisk.name, localDisk);
            });
            this.logFine(() -> String.format("%d S3 disk states found.", qrt.results.documentCount));
            if (qrt.results.nextPageLink != null) {
                this.logFine("Processing next page for local disk states.");
                aws.localResourcesNextPageLink = qrt.results.nextPageLink;
                handleReceivedEnumerationData(aws);
            } else {
                aws.subStage = next;
                handleReceivedEnumerationData(aws);
            }
        });
    } else {
        Operation.createGet(createInventoryUri(this.getHost(), aws.localResourcesNextPageLink)).setReferer(this.getUri()).setCompletion((o, e) -> {
            if (e != null) {
                this.logSevere(() -> String.format("Failure retrieving query" + " results: %s", e.toString()));
                signalErrorToEnumerationAdapter(aws, e);
                return;
            }
            QueryTask qrt = o.getBody(QueryTask.class);
            qrt.results.documents.values().forEach(documentJson -> {
                DiskState localDisk = Utils.fromJson(documentJson, DiskState.class);
                aws.localDiskStatesByBucketName.put(localDisk.name, localDisk);
            });
            this.logFine(() -> String.format("%d S3 disk states found.", qrt.results.documentCount));
            if (qrt.results.nextPageLink != null) {
                this.logFine("Processing next page for local disk states.");
                aws.localResourcesNextPageLink = qrt.results.nextPageLink;
                handleReceivedEnumerationData(aws);
            } else {
                aws.subStage = next;
                handleReceivedEnumerationData(aws);
            }
        }).sendWith(this);
    }
}
Also used : BUCKET_OWNER_NAME(com.vmware.photon.controller.model.adapters.awsadapter.AWSConstants.BUCKET_OWNER_NAME) BucketTaggingConfiguration(com.amazonaws.services.s3.model.BucketTaggingConfiguration) AWSResourceType(com.vmware.photon.controller.model.adapters.awsadapter.AWSConstants.AWSResourceType) QueryTask(com.vmware.xenon.services.common.QueryTask) Utils(com.vmware.xenon.common.Utils) STORAGE_TYPE_S3(com.vmware.photon.controller.model.adapters.awsadapter.AWSConstants.STORAGE_TYPE_S3) Map(java.util.Map) AWSClientManager(com.vmware.photon.controller.model.adapters.awsadapter.util.AWSClientManager) StatelessService(com.vmware.xenon.common.StatelessService) Collection(java.util.Collection) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Set(java.util.Set) DiskState(com.vmware.photon.controller.model.resources.DiskService.DiskState) AmazonS3Client(com.amazonaws.services.s3.AmazonS3Client) AdapterUtils.getDeletionState(com.vmware.photon.controller.model.adapters.util.AdapterUtils.getDeletionState) List(java.util.List) TagService(com.vmware.photon.controller.model.resources.TagService) DeferredResult(com.vmware.xenon.common.DeferredResult) TAG_KEY_TYPE(com.vmware.photon.controller.model.constants.PhotonModelConstants.TAG_KEY_TYPE) QueryOption(com.vmware.xenon.services.common.QueryTask.QuerySpecification.QueryOption) DiskService(com.vmware.photon.controller.model.resources.DiskService) OperationContext(com.vmware.xenon.common.OperationContext) HashMap(java.util.HashMap) PhotonModelUtils(com.vmware.photon.controller.model.resources.util.PhotonModelUtils) TagsUtil(com.vmware.photon.controller.model.adapters.util.TagsUtil) ArrayList(java.util.ArrayList) Regions(com.amazonaws.regions.Regions) HashSet(java.util.HashSet) AWSConstants(com.vmware.photon.controller.model.adapters.awsadapter.AWSConstants) TagState(com.vmware.photon.controller.model.resources.TagService.TagState) ServiceStateCollectionUpdateRequest(com.vmware.xenon.common.ServiceStateCollectionUpdateRequest) AuthCredentialsService(com.vmware.xenon.services.common.AuthCredentialsService) Query(com.vmware.xenon.services.common.QueryTask.Query) AdapterUtils.createPostOperation(com.vmware.photon.controller.model.adapters.util.AdapterUtils.createPostOperation) BiConsumer(java.util.function.BiConsumer) EnumerationAction(com.vmware.photon.controller.model.adapterapi.EnumerationAction) AwsClientType(com.vmware.photon.controller.model.adapters.awsadapter.AWSConstants.AwsClientType) ExecutorService(java.util.concurrent.ExecutorService) AWSConstants.getQueryResultLimit(com.vmware.photon.controller.model.adapters.awsadapter.AWSConstants.getQueryResultLimit) AdapterUtils(com.vmware.photon.controller.model.adapters.util.AdapterUtils) AmazonS3Exception(com.amazonaws.services.s3.model.AmazonS3Exception) ResourceState(com.vmware.photon.controller.model.resources.ResourceState) Operation(com.vmware.xenon.common.Operation) QueryUtils(com.vmware.photon.controller.model.query.QueryUtils) Bucket(com.amazonaws.services.s3.model.Bucket) TimeUnit(java.util.concurrent.TimeUnit) ComputeStateWithDescription(com.vmware.photon.controller.model.resources.ComputeService.ComputeStateWithDescription) ComputeEnumerateAdapterRequest(com.vmware.photon.controller.model.adapters.util.ComputeEnumerateAdapterRequest) AWSClientManagerFactory(com.vmware.photon.controller.model.adapters.awsadapter.util.AWSClientManagerFactory) Collections(java.util.Collections) AWSUriPaths(com.vmware.photon.controller.model.adapters.awsadapter.AWSUriPaths) OperationJoin(com.vmware.xenon.common.OperationJoin) PhotonModelUriUtils.createInventoryUri(com.vmware.photon.controller.model.util.PhotonModelUriUtils.createInventoryUri) QueryTask(com.vmware.xenon.services.common.QueryTask) Query(com.vmware.xenon.services.common.QueryTask.Query) DiskState(com.vmware.photon.controller.model.resources.DiskService.DiskState)

Example 42 with Query

use of com.vmware.xenon.services.common.QueryTask.Query in project photon-model by vmware.

the class TestAWSEndpointService method testCreateAndThenValidate.

@Test
public void testCreateAndThenValidate() throws Throwable {
    this.endpointTestsRunner.testCreateAndThenValidate(this.endpointState);
    // Tests that EndpointService QueryTasks can use SELECT_LINKS + EXPAND_LINKS
    Query query = Builder.create().addKindFieldClause(EndpointState.class).build();
    QueryTask queryTask = QueryTask.Builder.createDirectTask().addOptions(EnumSet.of(QueryOption.EXPAND_CONTENT, QueryOption.SELECT_LINKS, QueryOption.EXPAND_LINKS)).addLinkTerm(EndpointState.FIELD_NAME_AUTH_CREDENTIALS_LINK).setQuery(query).build();
    this.host.createQueryTaskService(queryTask, false, true, queryTask, null);
    ServiceDocumentQueryResult results = queryTask.results;
    assertEquals(Long.valueOf(1), results.documentCount);
    assertEquals(1, results.selectedLinks.size());
    assertEquals(1, results.selectedDocuments.size());
    QueryResultsProcessor processor = QueryResultsProcessor.create(results);
    for (EndpointState endpoint : processor.documents(EndpointState.class)) {
        String authCredentialSelfLink = endpoint.authCredentialsLink;
        assertNotNull(authCredentialSelfLink);
        assertNotNull(processor.selectedDocument(authCredentialSelfLink, AuthCredentialsServiceState.class));
    }
}
Also used : EndpointState(com.vmware.photon.controller.model.resources.EndpointService.EndpointState) QueryResultsProcessor(com.vmware.xenon.common.QueryResultsProcessor) QueryTask(com.vmware.xenon.services.common.QueryTask) AuthCredentialsServiceState(com.vmware.xenon.services.common.AuthCredentialsService.AuthCredentialsServiceState) Query(com.vmware.xenon.services.common.QueryTask.Query) ServiceDocumentQueryResult(com.vmware.xenon.common.ServiceDocumentQueryResult) Test(org.junit.Test)

Example 43 with Query

use of com.vmware.xenon.services.common.QueryTask.Query in project photon-model by vmware.

the class ResourceOperationUtils method lookUp.

/**
 * Lookup for {@link ResourceOperationSpec}s by given {@code endpointType},
 * {@code resourceType} and optionally {@code operation}
 * <p>
 * If operation not specified then return all resource operation specs for the given
 * {@code endpointType} and {@code resourceType}
 * @param host
 *         host to use to create operation
 * @param refererURI
 *         the referer to use when send the operation
 * @param endpointType
 *         the resource's endpoint type
 * @param resourceType
 *         the resource type
 * @param operation
 *         optional operation id argument
 * @param queryTaskTenantLinks
 *         tenant links used for the QueryTask
 * @param authorizationContext
 *         authorization context that will be used for operations (if set to null the context
 *         will not be changed)
 * @return
 */
private static DeferredResult<List<ResourceOperationSpec>> lookUp(ServiceHost host, URI refererURI, String endpointType, ResourceType resourceType, String operation, List<String> queryTaskTenantLinks, AuthorizationContext authorizationContext) {
    Query.Builder builder = Query.Builder.create().addKindFieldClause(ResourceOperationSpec.class).addFieldClause(ResourceOperationSpec.FIELD_NAME_ENDPOINT_TYPE, endpointType).addFieldClause(ResourceOperationSpec.FIELD_NAME_RESOURCE_TYPE, resourceType);
    if (operation != null) {
        builder.addFieldClause(ResourceOperationSpec.FIELD_NAME_OPERATION, operation);
    }
    Query query = builder.build();
    QueryTop<ResourceOperationSpec> top = new QueryTop<>(host, query, ResourceOperationSpec.class, null).setQueryTaskTenantLinks(queryTaskTenantLinks).setAuthorizationContext(authorizationContext);
    if (operation != null) {
        // resource operation spec id and selfLink are built from the endpoint type, resource
        // type and operation id, so the query result is guaranteed to return at most 1 element
        top.setMaxResultsLimit(1);
    }
    top.setReferer(refererURI);
    return top.collectDocuments(Collectors.toList());
}
Also used : Query(com.vmware.xenon.services.common.QueryTask.Query) ResourceOperationSpec(com.vmware.photon.controller.model.adapters.registry.operations.ResourceOperationSpecService.ResourceOperationSpec) QueryTop(com.vmware.photon.controller.model.query.QueryUtils.QueryTop)

Example 44 with Query

use of com.vmware.xenon.services.common.QueryTask.Query in project photon-model by vmware.

the class PhotonModelAdaptersRegistryServiceTest method testGetByEndpointType.

@Test
public void testGetByEndpointType() throws Exception {
    String k1 = "k1";
    String k2 = "k2";
    String k3 = "k3";
    PhotonModelAdapterConfig config1 = getPhotonModelAdapterConfig("testGetByEndpointType-1", "Test Get By Endpoint Type 1", "testGetByEndpointType-1.png", k1, k3);
    Operation registerOp1 = Operation.createPost(super.host, PhotonModelAdaptersRegistryService.FACTORY_LINK).setBody(config1);
    super.host.waitForResponse(registerOp1);
    PhotonModelAdapterConfig config2 = getPhotonModelAdapterConfig("testGetByEndpointType-2", "Test Get By Endpoint Type 2", "testGetByEndpointType-2.png", k2, k3);
    Operation registerOp2 = Operation.createPost(super.host, PhotonModelAdaptersRegistryService.FACTORY_LINK).setBody(config2);
    super.host.waitForResponse(registerOp2);
    Query query = Query.Builder.create().addKindFieldClause(PhotonModelAdapterConfig.class).addFieldClause(QuerySpecification.buildCompositeFieldName(PhotonModelAdapterConfig.FIELD_NAME_ADAPTER_ENDPOINTS, k2), "*", MatchType.WILDCARD).build();
    QueryTask queryTask = QueryTask.Builder.createDirectTask().addOption(QueryOption.EXPAND_CONTENT).setQuery(query).build();
    Operation queryOp = Operation.createPost(super.host, ServiceUriPaths.CORE_QUERY_TASKS).setReferer(getClass().getSimpleName()).setBody(queryTask);
    Operation response = super.host.waitForResponse(queryOp);
    QueryTask qTask = response.getBody(QueryTask.class);
    Collection<Object> values = qTask.results.documents.values();
    Assert.assertEquals(1, values.size());
    JsonObject k2Config = (JsonObject) values.iterator().next();
    Assert.assertEquals(config2.id, k2Config.getAsJsonPrimitive(PhotonModelAdapterConfig.FIELD_NAME_ID).getAsString());
}
Also used : QueryTask(com.vmware.xenon.services.common.QueryTask) Query(com.vmware.xenon.services.common.QueryTask.Query) JsonObject(com.google.gson.JsonObject) JsonObject(com.google.gson.JsonObject) Operation(com.vmware.xenon.common.Operation) PhotonModelAdapterConfig(com.vmware.photon.controller.model.adapters.registry.PhotonModelAdaptersRegistryService.PhotonModelAdapterConfig) Test(org.junit.Test)

Example 45 with Query

use of com.vmware.xenon.services.common.QueryTask.Query in project photon-model by vmware.

the class TestVSpherePortgroupProvisioning method findDvs.

protected String findDvs(String name) throws Throwable {
    Query q = Query.Builder.create().addKindFieldClause(NetworkState.class).addCompositeFieldClause(NetworkState.FIELD_NAME_CUSTOM_PROPERTIES, CustomProperties.TYPE, VimNames.TYPE_DVS).addFieldClause(NetworkState.FIELD_NAME_NAME, name).build();
    QueryTask task = QueryTask.Builder.createDirectTask().setQuery(q).build();
    Operation op = QueryUtils.createQueryTaskOperation(this.host, task, ServiceTypeCluster.INVENTORY_SERVICE);
    Operation result = this.host.waitForResponse(op);
    try {
        return result.getBody(QueryTask.class).results.documentLinks.get(0);
    } catch (Exception e) {
        Assert.fail(e.getMessage());
        return null;
    }
}
Also used : QueryTask(com.vmware.xenon.services.common.QueryTask) Query(com.vmware.xenon.services.common.QueryTask.Query) NetworkState(com.vmware.photon.controller.model.resources.NetworkService.NetworkState) Operation(com.vmware.xenon.common.Operation)

Aggregations

Query (com.vmware.xenon.services.common.QueryTask.Query)81 QueryTask (com.vmware.xenon.services.common.QueryTask)50 Operation (com.vmware.xenon.common.Operation)39 ArrayList (java.util.ArrayList)29 HashMap (java.util.HashMap)26 ComputeState (com.vmware.photon.controller.model.resources.ComputeService.ComputeState)25 Utils (com.vmware.xenon.common.Utils)22 List (java.util.List)21 Map (java.util.Map)21 QueryUtils (com.vmware.photon.controller.model.query.QueryUtils)20 UriUtils (com.vmware.xenon.common.UriUtils)20 HashSet (java.util.HashSet)20 QueryByPages (com.vmware.photon.controller.model.query.QueryUtils.QueryByPages)19 ServiceTypeCluster (com.vmware.photon.controller.model.util.ClusterUtil.ServiceTypeCluster)18 Set (java.util.Set)18 URI (java.net.URI)17 OperationJoin (com.vmware.xenon.common.OperationJoin)16 StatelessService (com.vmware.xenon.common.StatelessService)16 Collections (java.util.Collections)15 Collectors (java.util.stream.Collectors)15