Search in sources :

Example 6 with HttpServiceHandlerSpecification

use of io.cdap.cdap.api.service.http.HttpServiceHandlerSpecification in project cdap by cdapio.

the class ServiceSpecificationCodec method deserialize.

@Override
public ServiceSpecification deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
    JsonObject jsonObj = (JsonObject) json;
    if (isOldSpec(jsonObj)) {
        return decodeOldSpec(jsonObj);
    }
    String className = jsonObj.get("className").getAsString();
    String name = jsonObj.get("name").getAsString();
    String description = jsonObj.get("description").getAsString();
    Map<String, Plugin> plugins = deserializeMap(jsonObj.get("plugins"), context, Plugin.class);
    Map<String, HttpServiceHandlerSpecification> handlers = deserializeMap(jsonObj.get("handlers"), context, HttpServiceHandlerSpecification.class);
    Resources resources = context.deserialize(jsonObj.get("resources"), Resources.class);
    int instances = jsonObj.get("instances").getAsInt();
    Map<String, String> properties = deserializeMap(jsonObj.get("properties"), context, String.class);
    return new ServiceSpecification(className, name, description, handlers, resources, instances, plugins, properties);
}
Also used : ServiceSpecification(io.cdap.cdap.api.service.ServiceSpecification) JsonObject(com.google.gson.JsonObject) Resources(io.cdap.cdap.api.Resources) HttpServiceHandlerSpecification(io.cdap.cdap.api.service.http.HttpServiceHandlerSpecification) Plugin(io.cdap.cdap.api.plugin.Plugin)

Example 7 with HttpServiceHandlerSpecification

use of io.cdap.cdap.api.service.http.HttpServiceHandlerSpecification in project cdap by cdapio.

the class ServiceSpecificationCodec method decodeOldSpec.

private ServiceSpecification decodeOldSpec(JsonObject json) {
    String className = json.get("classname").getAsString();
    TwillSpecification twillSpec = twillSpecificationAdapter.fromJson(json.get("spec").getAsString()).getTwillSpecification();
    Map<String, HttpServiceHandlerSpecification> handlers = Maps.newHashMap();
    RuntimeSpecification handlerSpec = twillSpec.getRunnables().get(twillSpec.getName());
    Map<String, String> configs = handlerSpec.getRunnableSpecification().getConfigs();
    // Get the class names of all handlers. It is stored in the handler runnable spec configs
    List<String> handlerClasses = GSON.fromJson(configs.get("service.runnable.handlers"), new TypeToken<List<String>>() {
    }.getType());
    List<JsonObject> handlerSpecs = GSON.fromJson(configs.get("service.runnable.handler.spec"), new TypeToken<List<JsonObject>>() {
    }.getType());
    for (int i = 0; i < handlerClasses.size(); i++) {
        String handlerClass = handlerClasses.get(i);
        JsonObject spec = handlerSpecs.get(i);
        Map<String, String> properties = GSON.fromJson(spec.get("properties"), new TypeToken<Map<String, String>>() {
        }.getType());
        // Reconstruct the HttpServiceSpecification. However there is no way to determine the datasets or endpoints
        // as it is not recorded in old spec. It's ok since the spec is only used to load data from MDS during redeploy.
        handlers.put(spec.get("name").getAsString(), new HttpServiceHandlerSpecification(handlerClass, spec.get("name").getAsString(), spec.get("description").getAsString(), properties, Collections.emptySet(), Collections.emptyList()));
    }
    ResourceSpecification resourceSpec = handlerSpec.getResourceSpecification();
    return new ServiceSpecification(className, twillSpec.getName(), twillSpec.getName(), handlers, new Resources(resourceSpec.getMemorySize(), resourceSpec.getVirtualCores()), resourceSpec.getInstances(), Collections.emptyMap());
}
Also used : ServiceSpecification(io.cdap.cdap.api.service.ServiceSpecification) JsonObject(com.google.gson.JsonObject) ResourceSpecification(org.apache.twill.api.ResourceSpecification) HttpServiceHandlerSpecification(io.cdap.cdap.api.service.http.HttpServiceHandlerSpecification) RuntimeSpecification(org.apache.twill.api.RuntimeSpecification) TwillSpecification(org.apache.twill.api.TwillSpecification) TypeToken(com.google.common.reflect.TypeToken) Resources(io.cdap.cdap.api.Resources)

Example 8 with HttpServiceHandlerSpecification

use of io.cdap.cdap.api.service.http.HttpServiceHandlerSpecification in project cdap by cdapio.

the class ProgramLifecycleHttpHandlerTest method testServiceSpecification.

@Test
public void testServiceSpecification() throws Exception {
    deploy(AppWithServices.class, 200);
    HttpResponse response = doGet("/v3/namespaces/default/apps/AppWithServices/services/NoOpService");
    Assert.assertEquals(200, response.getResponseCode());
    Set<ServiceHttpEndpoint> expectedEndpoints = ImmutableSet.of(new ServiceHttpEndpoint("GET", "/ping"), new ServiceHttpEndpoint("POST", "/multi"), new ServiceHttpEndpoint("GET", "/multi"), new ServiceHttpEndpoint("GET", "/multi/ping"));
    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.registerTypeAdapter(ServiceSpecification.class, new ServiceSpecificationCodec());
    Gson gson = gsonBuilder.create();
    ServiceSpecification specification = readResponse(response, ServiceSpecification.class, gson);
    Set<ServiceHttpEndpoint> returnedEndpoints = new HashSet<>();
    for (HttpServiceHandlerSpecification httpServiceHandlerSpecification : specification.getHandlers().values()) {
        returnedEndpoints.addAll(httpServiceHandlerSpecification.getEndpoints());
    }
    Assert.assertEquals("NoOpService", specification.getName());
    Assert.assertEquals(returnedEndpoints, expectedEndpoints);
}
Also used : ServiceHttpEndpoint(io.cdap.cdap.api.service.http.ServiceHttpEndpoint) ServiceSpecificationCodec(io.cdap.cdap.internal.app.ServiceSpecificationCodec) ServiceSpecification(io.cdap.cdap.api.service.ServiceSpecification) GsonBuilder(com.google.gson.GsonBuilder) HttpResponse(io.cdap.common.http.HttpResponse) Gson(com.google.gson.Gson) HttpServiceHandlerSpecification(io.cdap.cdap.api.service.http.HttpServiceHandlerSpecification) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 9 with HttpServiceHandlerSpecification

use of io.cdap.cdap.api.service.http.HttpServiceHandlerSpecification in project cdap by cdapio.

the class DefaultServiceConfigurer method createHandlerSpecs.

/**
 * Constructs HttpServiceSpecifications for each of the handlers in the {@param handlers} list.
 * Also performs verifications on these handlers (that a NettyHttpService can be constructed from them).
 */
private Map<String, HttpServiceHandlerSpecification> createHandlerSpecs(List<? extends HttpServiceHandler> handlers) {
    verifyHandlers(handlers);
    Map<String, HttpServiceHandlerSpecification> handleSpecs = Maps.newHashMap();
    for (HttpServiceHandler handler : handlers) {
        DefaultHttpServiceHandlerConfigurer configurer = new DefaultHttpServiceHandlerConfigurer(handler, deployNamespace, artifactId, pluginFinder, pluginInstantiator, systemTableConfigurer, runtimeInfo, getFeatureFlagsProvider());
        handler.configure(configurer);
        HttpServiceHandlerSpecification spec = configurer.createSpecification();
        Preconditions.checkArgument(!handleSpecs.containsKey(spec.getName()), "Handler with name %s already existed.", spec.getName());
        handleSpecs.put(spec.getName(), spec);
        addDatasetModules(configurer.getDatasetModules());
        addDatasetSpecs(configurer.getDatasetSpecs());
        addPlugins(configurer.getPlugins());
    }
    return handleSpecs;
}
Also used : HttpServiceHandler(io.cdap.cdap.api.service.http.HttpServiceHandler) HttpServiceHandlerSpecification(io.cdap.cdap.api.service.http.HttpServiceHandlerSpecification)

Example 10 with HttpServiceHandlerSpecification

use of io.cdap.cdap.api.service.http.HttpServiceHandlerSpecification in project cdap by caskdata.

the class DefaultServiceConfigurer method createHandlerSpecs.

/**
 * Constructs HttpServiceSpecifications for each of the handlers in the {@param handlers} list.
 * Also performs verifications on these handlers (that a NettyHttpService can be constructed from them).
 */
private Map<String, HttpServiceHandlerSpecification> createHandlerSpecs(List<? extends HttpServiceHandler> handlers) {
    verifyHandlers(handlers);
    Map<String, HttpServiceHandlerSpecification> handleSpecs = Maps.newHashMap();
    for (HttpServiceHandler handler : handlers) {
        DefaultHttpServiceHandlerConfigurer configurer = new DefaultHttpServiceHandlerConfigurer(handler, deployNamespace, artifactId, pluginFinder, pluginInstantiator, systemTableConfigurer, runtimeInfo, getFeatureFlagsProvider());
        handler.configure(configurer);
        HttpServiceHandlerSpecification spec = configurer.createSpecification();
        Preconditions.checkArgument(!handleSpecs.containsKey(spec.getName()), "Handler with name %s already existed.", spec.getName());
        handleSpecs.put(spec.getName(), spec);
        addDatasetModules(configurer.getDatasetModules());
        addDatasetSpecs(configurer.getDatasetSpecs());
        addPlugins(configurer.getPlugins());
    }
    return handleSpecs;
}
Also used : HttpServiceHandler(io.cdap.cdap.api.service.http.HttpServiceHandler) HttpServiceHandlerSpecification(io.cdap.cdap.api.service.http.HttpServiceHandlerSpecification)

Aggregations

HttpServiceHandlerSpecification (io.cdap.cdap.api.service.http.HttpServiceHandlerSpecification)16 ServiceSpecification (io.cdap.cdap.api.service.ServiceSpecification)10 ServiceHttpEndpoint (io.cdap.cdap.api.service.http.ServiceHttpEndpoint)6 JsonObject (com.google.gson.JsonObject)4 Resources (io.cdap.cdap.api.Resources)4 HttpServiceHandler (io.cdap.cdap.api.service.http.HttpServiceHandler)4 ArrayList (java.util.ArrayList)4 ImmutableList (com.google.common.collect.ImmutableList)2 TypeToken (com.google.common.reflect.TypeToken)2 Gson (com.google.gson.Gson)2 GsonBuilder (com.google.gson.GsonBuilder)2 ApplicationSpecification (io.cdap.cdap.api.app.ApplicationSpecification)2 MapReduceSpecification (io.cdap.cdap.api.mapreduce.MapReduceSpecification)2 MetricsContext (io.cdap.cdap.api.metrics.MetricsContext)2 Plugin (io.cdap.cdap.api.plugin.Plugin)2 AbstractSystemHttpServiceHandler (io.cdap.cdap.api.service.http.AbstractSystemHttpServiceHandler)2 SparkSpecification (io.cdap.cdap.api.spark.SparkSpecification)2 InstantiatorFactory (io.cdap.cdap.common.lang.InstantiatorFactory)2 ServiceSpecificationCodec (io.cdap.cdap.internal.app.ServiceSpecificationCodec)2 DataSetFieldExtractor (io.cdap.cdap.internal.specification.DataSetFieldExtractor)2