[Hawkular-commits] [hawkular/hawkular-metrics] 8bf12d: HWKMETRICS-330 Update filter to be async

Stefan Negrea snegrea at redhat.com
Fri Apr 29 13:39:08 EDT 2016


  Branch: refs/heads/master
  Home:   https://github.com/hawkular/hawkular-metrics
  Commit: 8bf12d6b8417dbe115d633b14bc31c057d9cf1a6
      https://github.com/hawkular/hawkular-metrics/commit/8bf12d6b8417dbe115d633b14bc31c057d9cf1a6
  Author: Thomas Segismont <tsegismo at redhat.com>
  Date:   2016-04-29 (Fri, 29 Apr 2016)

  Changed paths:
    M api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/MetricsServiceLifecycle.java
    M api/metrics-api-util/pom.xml
    A api/metrics-api-util/src/main/java/org/hawkular/metrics/api/jaxrs/util/MetricRegistryProvider.java
    M containers/hawkular-metrics-openshift-integration/pom.xml
    A containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/Authenticator.java
    R containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/BasicAuthentication.java
    A containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/BasicAuthenticator.java
    A containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/DisabledAuthenticator.java
    R containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/OpenShiftAuthenticationFilter.java
    R containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/OpenShiftTokenAuthentication.java
    A containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/OpenshiftAuthHandler.java
    A containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/OpenshiftAuthServletExtension.java
    A containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/TokenAuthenticator.java
    A containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/Utils.java
    A containers/hawkular-metrics-openshift-integration/src/main/resources/META-INF/services/io.undertow.servlet.ServletExtension
    R containers/hawkular-metrics-openshift-integration/src/main/resources/META-INF/web-fragment.xml
    M containers/metrics-api-jaxrs-openshift/pom.xml
    A containers/metrics-api-jaxrs-openshift/src/main/webapp/WEB-INF/jboss-deployment-structure.xml
    M integration-tests/load-tests/README.adoc
    M integration-tests/load-tests/src/test/scala/org/hawkular/metrics/loadtest/MetricsSimulation.scala

  Log Message:
  -----------
  HWKMETRICS-330 Update filter to be async

A bit of context first. Hawkular Metrics is a reactive application and
calls to a blocking API should be avoided as much as possible.

The Openshift integration library had a servlet filter mechanism to
authenticate users. The filter code used the JDK's HTTP client to call
Kubernetes' master server. While this was alright has a first
implementation (in order to provide the feature as quickly as possible),
it is a serious limitation to reach our performance goals.

There were two problems to tackle:
1. choose an async HTTP client API
2. make the filter code asynchronous

For the HTTP client, I considered a few options: Netty, vert.x,
Undertow. I picked undertow because it does not add a new dependency,
we can reuse the io threads (instead of creating yet another thread
pool). The downside is that the Undertow client API is low-level (no pool
implementation) and not well documented.

For the filter code, my first try was to use servlet async API from the
filter. But RestEasy throws an exception because it wants start the
async exchange itself. I wrote to the resteasy-user list but got no
reply. And even if we had a fix, we would have to wait for a new
RestEasy and Wildfly release. So I wrote an Undertow extension which is
executed in io threads  *before* the servlet handler is involved.

The implementation consists in pooling Undertow HTTP client connections and
filering the Metrics client requests (only dispatch to the servlet
handler if the user is authenticated).

While working on the implementation I had to find a way to share the
MetricsRegistry between the webapp code and the authenticator code. So
there's a MetricsRegistry provider class in core-util now.

Also, I enhanced the Gatling scenario file to support multiple
authentication mechanisms (none, Hawkular integration, Openshift
htpasswd file, Openshift token). I took the opportunity to document the
scenario options in the project README.

Note that performance enhancements will be more visible in environments
where Kubernetes reponse time is minimal.


  Commit: 33da066d5277c6d9724ccfe9155d542432c451c6
      https://github.com/hawkular/hawkular-metrics/commit/33da066d5277c6d9724ccfe9155d542432c451c6
  Author: Thomas Segismont <tsegismo at redhat.com>
  Date:   2016-04-29 (Fri, 29 Apr 2016)

  Changed paths:
    M containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/OpenshiftAuthHandler.java

  Log Message:
  -----------
  Fix static resources access


  Commit: c6358260fe640a46bef7828f4949f8db1d0d0df8
      https://github.com/hawkular/hawkular-metrics/commit/c6358260fe640a46bef7828f4949f8db1d0d0df8
  Author: Thomas Segismont <tsegismo at redhat.com>
  Date:   2016-04-29 (Fri, 29 Apr 2016)

  Changed paths:
    M containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/BasicAuthenticator.java
    R containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/DisabledAuthenticator.java
    M containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/OpenshiftAuthHandler.java
    A containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/SecurityOption.java
    M containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/TokenAuthenticator.java

  Log Message:
  -----------
  Fix authentication selection

Multiple authenticators can be active at the same time


  Commit: d351f66518071d2f94a779c58b98b13b6b03f964
      https://github.com/hawkular/hawkular-metrics/commit/d351f66518071d2f94a779c58b98b13b6b03f964
  Author: Thomas Segismont <tsegismo at redhat.com>
  Date:   2016-04-29 (Fri, 29 Apr 2016)

  Changed paths:
    M api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/MetricsServiceLifecycle.java
    M api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/config/ConfigurationKey.java

  Log Message:
  -----------
  Add a config flag to disable metrics jmx reporting

Disables reporting for both the driver's registry and our registry


  Commit: 0a1aace72fc749ee6f8c4496d40dfebda18ddfb2
      https://github.com/hawkular/hawkular-metrics/commit/0a1aace72fc749ee6f8c4496d40dfebda18ddfb2
  Author: Stefan Negrea <snegrea at redhat.com>
  Date:   2016-04-29 (Fri, 29 Apr 2016)

  Changed paths:
    M api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/MetricsServiceLifecycle.java
    M api/metrics-api-jaxrs/src/main/java/org/hawkular/metrics/api/jaxrs/config/ConfigurationKey.java
    M api/metrics-api-util/pom.xml
    A api/metrics-api-util/src/main/java/org/hawkular/metrics/api/jaxrs/util/MetricRegistryProvider.java
    M containers/hawkular-metrics-openshift-integration/pom.xml
    A containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/Authenticator.java
    R containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/BasicAuthentication.java
    A containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/BasicAuthenticator.java
    R containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/OpenShiftAuthenticationFilter.java
    R containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/OpenShiftTokenAuthentication.java
    A containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/OpenshiftAuthHandler.java
    A containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/OpenshiftAuthServletExtension.java
    A containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/SecurityOption.java
    A containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/TokenAuthenticator.java
    A containers/hawkular-metrics-openshift-integration/src/main/java/org/hawkular/openshift/auth/Utils.java
    A containers/hawkular-metrics-openshift-integration/src/main/resources/META-INF/services/io.undertow.servlet.ServletExtension
    R containers/hawkular-metrics-openshift-integration/src/main/resources/META-INF/web-fragment.xml
    M containers/metrics-api-jaxrs-openshift/pom.xml
    A containers/metrics-api-jaxrs-openshift/src/main/webapp/WEB-INF/jboss-deployment-structure.xml
    M integration-tests/load-tests/README.adoc
    M integration-tests/load-tests/src/test/scala/org/hawkular/metrics/loadtest/MetricsSimulation.scala

  Log Message:
  -----------
  Merge pull request #481 from tsegismont/jira/HWKMETRICS-330

HWKMETRICS-330 Update filter to be async


Compare: https://github.com/hawkular/hawkular-metrics/compare/0b654ab5b2c3...0a1aace72fc7


More information about the hawkular-commits mailing list