Skip to content

Commit

Permalink
[HWKMETRICS-185] fix jboss-as plugin config and blocking subscriber code
Browse files Browse the repository at this point in the history
There are three changes with this commit. First, the jboss-as plugin seems to
ignore the <javaOpts> config property. It does recognize <jvmArgs>.

Secondly, there was a subtle JSON mapping issue. When creating a metric with no
tags, MetricDefinition.tags is null and not an empty map. This was leading to a
NPE. I guard against it in MetricDefinition.getTags().

Lastly, in both GaugeHandler.createGaugeMetric and
AvailabilityHandler.createAvailabilityMetric we had,

    observable.toBlocking().last();

The Observable does not emit any items so the last() call results in a
NoSuchElementException. Changing it to lastOrDefault(null) fixes it.
  • Loading branch information
John Sanda authored and Stefan Negrea committed Aug 13, 2015
1 parent ec72c27 commit 1ef7227
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 108 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,16 @@
*/
package org.hawkular.metrics.api.jaxrs.request;

import static java.util.Collections.emptyMap;
import static java.util.Collections.unmodifiableMap;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.wordnik.swagger.annotations.ApiModel;
import org.hawkular.metrics.core.api.Metric;

import java.util.Map;
import java.util.Objects;

import org.hawkular.metrics.core.api.Metric;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.wordnik.swagger.annotations.ApiModel;
import static java.util.Collections.emptyMap;
import static java.util.Collections.unmodifiableMap;

/**
* @author jsanda
Expand Down Expand Up @@ -69,6 +68,9 @@ public String getId() {
}

public Map<String, String> getTags() {
if (tags == null) {
return emptyMap();
}
return tags;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,36 +16,7 @@
*/
package org.hawkular.metrics.api.jaxrs.handler;

import static java.util.concurrent.TimeUnit.HOURS;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
import static org.hawkular.metrics.api.jaxrs.util.ApiUtils.noContent;
import static org.hawkular.metrics.api.jaxrs.util.ApiUtils.requestToAvailabilities;
import static org.hawkular.metrics.api.jaxrs.util.ApiUtils.requestToAvailabilityDataPoints;
import static org.hawkular.metrics.api.jaxrs.util.ApiUtils.valueToResponse;
import static org.hawkular.metrics.core.api.MetricType.AVAILABILITY;

import java.net.URI;
import java.util.List;
import java.util.Map;
import java.util.Optional;

import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;

import com.wordnik.swagger.annotations.*;
import org.hawkular.metrics.api.jaxrs.ApiError;
import org.hawkular.metrics.api.jaxrs.filter.TenantFilter;
import org.hawkular.metrics.api.jaxrs.handler.observer.EntityCreatedObserver;
Expand All @@ -57,24 +28,26 @@
import org.hawkular.metrics.api.jaxrs.request.MetricDefinition;
import org.hawkular.metrics.api.jaxrs.request.TagRequest;
import org.hawkular.metrics.api.jaxrs.util.ApiUtils;
import org.hawkular.metrics.core.api.AvailabilityType;
import org.hawkular.metrics.core.api.BucketedOutput;
import org.hawkular.metrics.core.api.Buckets;
import org.hawkular.metrics.core.api.DataPoint;
import org.hawkular.metrics.core.api.Metric;
import org.hawkular.metrics.core.api.MetricAlreadyExistsException;
import org.hawkular.metrics.core.api.MetricId;
import org.hawkular.metrics.core.api.MetricsService;
import org.hawkular.metrics.core.api.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import rx.Observable;

import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiOperation;
import com.wordnik.swagger.annotations.ApiParam;
import com.wordnik.swagger.annotations.ApiResponse;
import com.wordnik.swagger.annotations.ApiResponses;
import javax.inject.Inject;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import java.net.URI;
import java.util.List;
import java.util.Map;
import java.util.Optional;

import rx.Observable;
import static java.util.concurrent.TimeUnit.HOURS;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
import static org.hawkular.metrics.api.jaxrs.util.ApiUtils.*;
import static org.hawkular.metrics.core.api.MetricType.AVAILABILITY;

/**
* @author Stefan Negrea
Expand Down Expand Up @@ -117,7 +90,7 @@ public Response createAvailabilityMetric(
EntityCreatedObserver<MetricAlreadyExistsException> observer = new MetricCreatedObserver(location);
Observable<Void> observable = metricsService.createMetric(metric);
observable.subscribe(observer);
observable.toBlocking().last();
observable.toBlocking().lastOrDefault(null);
return observer.getResponse();
} catch (Exception e) {
return ApiUtils.serverError(e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,35 +16,7 @@
*/
package org.hawkular.metrics.api.jaxrs.handler;

import static java.util.concurrent.TimeUnit.HOURS;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
import static org.hawkular.metrics.api.jaxrs.filter.TenantFilter.TENANT_HEADER_NAME;
import static org.hawkular.metrics.api.jaxrs.util.ApiUtils.badRequest;
import static org.hawkular.metrics.api.jaxrs.util.ApiUtils.requestToGaugeDataPoints;
import static org.hawkular.metrics.api.jaxrs.util.ApiUtils.requestToGauges;
import static org.hawkular.metrics.core.api.MetricType.GAUGE;

import java.net.URI;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;

import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;

import com.wordnik.swagger.annotations.*;
import org.hawkular.metrics.api.jaxrs.ApiError;
import org.hawkular.metrics.api.jaxrs.handler.observer.EntityCreatedObserver;
import org.hawkular.metrics.api.jaxrs.handler.observer.MetricCreatedObserver;
Expand All @@ -55,19 +27,25 @@
import org.hawkular.metrics.api.jaxrs.request.MetricDefinition;
import org.hawkular.metrics.api.jaxrs.request.TagRequest;
import org.hawkular.metrics.api.jaxrs.util.ApiUtils;
import org.hawkular.metrics.core.api.BucketedOutput;
import org.hawkular.metrics.core.api.Buckets;
import org.hawkular.metrics.core.api.Metric;
import org.hawkular.metrics.core.api.MetricId;
import org.hawkular.metrics.core.api.MetricsService;
import org.hawkular.metrics.core.api.*;
import rx.Observable;

import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiOperation;
import com.wordnik.swagger.annotations.ApiParam;
import com.wordnik.swagger.annotations.ApiResponse;
import com.wordnik.swagger.annotations.ApiResponses;
import javax.inject.Inject;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import java.net.URI;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;

import rx.Observable;
import static java.util.concurrent.TimeUnit.HOURS;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
import static org.hawkular.metrics.api.jaxrs.filter.TenantFilter.TENANT_HEADER_NAME;
import static org.hawkular.metrics.api.jaxrs.util.ApiUtils.*;
import static org.hawkular.metrics.core.api.MetricType.GAUGE;

/**
* @author Stefan Negrea
Expand Down Expand Up @@ -112,7 +90,7 @@ public Response createGaugeMetric(
EntityCreatedObserver<?> observer = new MetricCreatedObserver(location);
Observable<Void> observable = metricsService.createMetric(metric);
observable.subscribe(observer);
observable.toBlocking().last();
observable.toBlocking().lastOrDefault(null);
return observer.getResponse();
} catch (Exception e) {
return ApiUtils.serverError(e);
Expand Down
31 changes: 16 additions & 15 deletions tests/rest-integration-tests-jaxrs-1.1/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -193,21 +193,22 @@
<goal>start</goal>
</goals>
<configuration>
<javaOpts>
<javaOpt>-Xms64m</javaOpt>
<javaOpt>-Xmx512m</javaOpt>
<javaOpt>-Xss256k</javaOpt>
<javaOpt>-Djava.net.preferIPv4Stack=true</javaOpt>
<javaOpt>-Dsun.rmi.dgc.client.gcInterval=3600000</javaOpt>
<javaOpt>-Dsun.rmi.dgc.server.gcInterval=3600000</javaOpt>
<javaOpt>-Djboss.socket.binding.port-offset=${wildfly.port.offset}</javaOpt>
<javaOpt>-Dcassandra.keyspace=${cassandra.keyspace}</javaOpt>
<javaOpt>-Dcassandra.resetdb</javaOpt>
<javaOpt>-Dhawkular.metrics.waitForService</javaOpt>
<javaOpt>-Dhawkular.scheduler.time-units=${scheduler.units}</javaOpt>
<javaOpt>-Xdebug</javaOpt>
<javaOpt>-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787</javaOpt>
</javaOpts>
<jvmArgs>-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787 -Dhawkular.metrics.waitForService -Dcassandra.resetdb -Dcassandra.keyspace=${cassandra.keyspace}</jvmArgs>
<!--<javaOpts>-->
<!--<javaOpt>-Xms64m</javaOpt>-->
<!--<javaOpt>-Xmx512m</javaOpt>-->
<!--<javaOpt>-Xss256k</javaOpt>-->
<!--<javaOpt>-Djava.net.preferIPv4Stack=true</javaOpt>-->
<!--<javaOpt>-Dsun.rmi.dgc.client.gcInterval=3600000</javaOpt>-->
<!--<javaOpt>-Dsun.rmi.dgc.server.gcInterval=3600000</javaOpt>-->
<!--<javaOpt>-Djboss.socket.binding.port-offset=${wildfly.port.offset}</javaOpt>-->
<!--<javaOpt>-Dcassandra.keyspace=${cassandra.keyspace}</javaOpt>-->
<!--<javaOpt>-Dcassandra.resetdb</javaOpt>-->
<!--<javaOpt>-Dhawkular.metrics.waitForService</javaOpt>-->
<!--<javaOpt>-Dhawkular.scheduler.time-units=${scheduler.units}</javaOpt>-->
<!--<javaOpt>-Xdebug</javaOpt>-->
<!--<javaOpt>-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787</javaOpt>-->
<!--</javaOpts>-->
</configuration>
</execution>
<execution>
Expand Down

0 comments on commit 1ef7227

Please sign in to comment.