You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2022/04/21 13:16:58 UTC
[skywalking] branch master updated: HTTPServer support the handler register with allowed HTTP methods (#8917)
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/master by this push:
new 70560e3b2d HTTPServer support the handler register with allowed HTTP methods (#8917)
70560e3b2d is described below
commit 70560e3b2d263a92f677eacb1a1dc7983ae414d3
Author: Wan Kai <wa...@foxmail.com>
AuthorDate: Thu Apr 21 21:16:51 2022 +0800
HTTPServer support the handler register with allowed HTTP methods (#8917)
---
docs/en/changes/changes.md | 1 +
docs/en/concepts-and-designs/mal.md | 4 ++--
.../oap/server/core/server/HTTPHandlerRegister.java | 4 +++-
.../oap/server/core/server/HTTPHandlerRegisterImpl.java | 6 ++++--
.../skywalking/oap/server/core/remote/HTTPServerTest.java | 4 +++-
.../oap/server/library/server/http/HTTPServer.java | 15 +++++++++++++--
.../oap/query/graphql/GraphQLQueryProvider.java | 6 +++++-
.../receiver/browser/provider/BrowserModuleProvider.java | 4 +++-
.../oap/server/receiver/event/EventModuleProvider.java | 6 +++++-
.../server/recevier/log/provider/LogModuleProvider.java | 6 +++++-
.../register/provider/RegisterModuleProvider.java | 6 +++++-
.../sharing/server/ReceiverHTTPHandlerRegister.java | 6 ++++--
.../receiver/trace/provider/TraceModuleProvider.java | 6 +++++-
.../server/receiver/zipkin/ZipkinReceiverProvider.java | 6 +++++-
.../tool/profile/core/mock/MockHTTPHandlerRegister.java | 5 ++++-
15 files changed, 67 insertions(+), 18 deletions(-)
diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index 0a5e3f6387..9b8ff5f79e 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -22,6 +22,7 @@
* [Breaking Change] Add layer field to event, report an event without layer is not allowed.
* Fix ES flush thread stops when flush schedule task throws exception, such as ElasticSearch flush failed.
* Fix ES BulkProcessor in BatchProcessEsDAO was initialized multiple times and created multiple ES flush schedule tasks.
+* HTTPServer support the handler register with allowed HTTP methods.
#### UI
diff --git a/docs/en/concepts-and-designs/mal.md b/docs/en/concepts-and-designs/mal.md
index 99a6ecd503..d224f43c43 100644
--- a/docs/en/concepts-and-designs/mal.md
+++ b/docs/en/concepts-and-designs/mal.md
@@ -141,7 +141,7 @@ This returns a resulting sample family containing the error rate of trace analys
have no match and will not show up in the result:
```
-{region="us-west",az="az-1"} 0.8 // 20 / 100
+{region="us-west",az="az-1"} 0.2 // 20 / 100
{region="asia-north",az="az-1"} 0.3333 // 11 / 33
```
@@ -176,7 +176,7 @@ instance_trace_count{az="az-3"} 20
### Function
-`Duraton` is a textual representation of a time range. The formats accepted are based on the ISO-8601 duration format {@code PnDTnHnMn.nS}
+`Duration` is a textual representation of a time range. The formats accepted are based on the ISO-8601 duration format {@code PnDTnHnMn.nS}
where a day is regarded as exactly 24 hours.
Examples:
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/server/HTTPHandlerRegister.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/server/HTTPHandlerRegister.java
index 1b6ef4300f..c1d3f21ec2 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/server/HTTPHandlerRegister.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/server/HTTPHandlerRegister.java
@@ -18,8 +18,10 @@
package org.apache.skywalking.oap.server.core.server;
+import com.linecorp.armeria.common.HttpMethod;
+import java.util.List;
import org.apache.skywalking.oap.server.library.module.Service;
public interface HTTPHandlerRegister extends Service {
- void addHandler(Object httpService);
+ void addHandler(Object httpService, List<HttpMethod> httpMethods);
}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/server/HTTPHandlerRegisterImpl.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/server/HTTPHandlerRegisterImpl.java
index 6fc2699b8b..2efabe1367 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/server/HTTPHandlerRegisterImpl.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/server/HTTPHandlerRegisterImpl.java
@@ -18,6 +18,8 @@
package org.apache.skywalking.oap.server.core.server;
+import com.linecorp.armeria.common.HttpMethod;
+import java.util.List;
import org.apache.skywalking.oap.server.library.server.http.HTTPServer;
public class HTTPHandlerRegisterImpl implements HTTPHandlerRegister {
@@ -29,7 +31,7 @@ public class HTTPHandlerRegisterImpl implements HTTPHandlerRegister {
}
@Override
- public void addHandler(Object httpService) {
- server.addHandler(httpService);
+ public void addHandler(final Object httpService, final List<HttpMethod> httpMethods) {
+ server.addHandler(httpService, httpMethods);
}
}
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/remote/HTTPServerTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/remote/HTTPServerTest.java
index 4f6f220b92..68e5f90d7a 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/remote/HTTPServerTest.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/remote/HTTPServerTest.java
@@ -19,9 +19,11 @@
package org.apache.skywalking.oap.server.core.remote;
import com.linecorp.armeria.client.WebClient;
+import com.linecorp.armeria.common.HttpMethod;
import com.linecorp.armeria.common.HttpResponse;
import com.linecorp.armeria.common.HttpStatus;
import com.linecorp.armeria.server.annotation.Post;
+import java.util.Collections;
import org.apache.skywalking.oap.server.library.server.http.HTTPServer;
import org.apache.skywalking.oap.server.library.server.http.HTTPServerConfig;
import org.junit.Assert;
@@ -42,7 +44,7 @@ public class HTTPServerTest {
SERVER = new HTTPServer(config);
SERVER.initialize();
- SERVER.addHandler(new TestPostHandler());
+ SERVER.addHandler(new TestPostHandler(), Collections.singletonList(HttpMethod.POST));
SERVER.start();
}
diff --git a/oap-server/server-library/library-server/src/main/java/org/apache/skywalking/oap/server/library/server/http/HTTPServer.java b/oap-server/server-library/library-server/src/main/java/org/apache/skywalking/oap/server/library/server/http/HTTPServer.java
index d7ed25ee87..7f59096c57 100644
--- a/oap-server/server-library/library-server/src/main/java/org/apache/skywalking/oap/server/library/server/http/HTTPServer.java
+++ b/oap-server/server-library/library-server/src/main/java/org/apache/skywalking/oap/server/library/server/http/HTTPServer.java
@@ -27,14 +27,19 @@ import com.linecorp.armeria.server.docs.DocService;
import com.linecorp.armeria.server.logging.LoggingService;
import java.net.InetSocketAddress;
import java.time.Duration;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.skywalking.oap.server.library.server.Server;
+import static java.util.Objects.requireNonNull;
@Slf4j
public class HTTPServer implements Server {
private final HTTPServerConfig config;
private ServerBuilder sb;
+ private final Set<HttpMethod> allowedMethods = new HashSet<>();
public HTTPServer(HTTPServerConfig config) {
this.config = config;
@@ -55,7 +60,7 @@ public class HTTPServer implements Server {
.http1MaxHeaderSize(config.getMaxRequestHeaderSize())
.idleTimeout(Duration.ofMillis(config.getIdleTimeOut()))
.decorator(Route.ofCatchAll(), (delegate, ctx, req) -> {
- if (ctx.method() != HttpMethod.POST) {
+ if (!this.allowedMethods.contains(ctx.method())) {
return HttpResponse.of(HttpStatus.METHOD_NOT_ALLOWED);
}
return delegate.serve(ctx, req);
@@ -69,7 +74,12 @@ public class HTTPServer implements Server {
log.info("Server root context path: {}", contextPath);
}
- public void addHandler(Object handler) {
+ /**
+ * @param handler Specific service provider.
+ * @param httpMethods Register the http methods which the handler service accepts. Other methods respond "405, Method Not Allowed".
+ */
+ public void addHandler(Object handler, List<HttpMethod> httpMethods) {
+ requireNonNull(allowedMethods, "allowedMethods");
log.info(
"Bind handler {} into http server {}:{}",
handler.getClass().getSimpleName(), config.getHost(), config.getPort()
@@ -78,6 +88,7 @@ public class HTTPServer implements Server {
sb.annotatedService()
.pathPrefix(config.getContextPath())
.build(handler);
+ this.allowedMethods.addAll(httpMethods);
}
@Override
diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/GraphQLQueryProvider.java b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/GraphQLQueryProvider.java
index 01434c74b1..c9c2adcafb 100644
--- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/GraphQLQueryProvider.java
+++ b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/GraphQLQueryProvider.java
@@ -18,9 +18,11 @@
package org.apache.skywalking.oap.query.graphql;
+import com.linecorp.armeria.common.HttpMethod;
import graphql.kickstart.tools.SchemaParser;
import graphql.kickstart.tools.SchemaParserBuilder;
import graphql.scalars.ExtendedScalars;
+import java.util.Collections;
import org.apache.skywalking.oap.query.graphql.resolver.AggregationQuery;
import org.apache.skywalking.oap.query.graphql.resolver.AlarmQuery;
import org.apache.skywalking.oap.query.graphql.resolver.BrowserLogQuery;
@@ -127,7 +129,9 @@ public class GraphQLQueryProvider extends ModuleProvider {
.provider()
.getService(HTTPHandlerRegister.class);
service.addHandler(
- new GraphQLQueryHandler(config, schemaBuilder.build().makeExecutableSchema()));
+ new GraphQLQueryHandler(config, schemaBuilder.build().makeExecutableSchema()),
+ Collections.singletonList(HttpMethod.POST)
+ );
}
@Override
diff --git a/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/BrowserModuleProvider.java b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/BrowserModuleProvider.java
index f24e474a22..daf2d3e48b 100644
--- a/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/BrowserModuleProvider.java
+++ b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/BrowserModuleProvider.java
@@ -17,6 +17,8 @@
package org.apache.skywalking.oap.server.receiver.browser.provider;
+import com.linecorp.armeria.common.HttpMethod;
+import java.util.Collections;
import org.apache.skywalking.oap.server.configuration.api.ConfigurationModule;
import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.oal.rt.OALEngineLoaderService;
@@ -87,7 +89,7 @@ public class BrowserModuleProvider extends ModuleProvider {
httpHandlerRegister.addHandler(
new BrowserPerfServiceHTTPHandler(getManager(), moduleConfig,
errorLogParserListenerManager,
- perfDataListenerManager()));
+ perfDataListenerManager()), Collections.singletonList(HttpMethod.POST));
}
@Override
diff --git a/oap-server/server-receiver-plugin/skywalking-event-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/event/EventModuleProvider.java b/oap-server/server-receiver-plugin/skywalking-event-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/event/EventModuleProvider.java
index e18f6f7ad1..6018d70ea1 100755
--- a/oap-server/server-receiver-plugin/skywalking-event-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/event/EventModuleProvider.java
+++ b/oap-server/server-receiver-plugin/skywalking-event-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/event/EventModuleProvider.java
@@ -18,6 +18,8 @@
package org.apache.skywalking.oap.server.receiver.event;
+import com.linecorp.armeria.common.HttpMethod;
+import java.util.Collections;
import org.apache.skywalking.oap.server.analyzer.event.EventAnalyzerModule;
import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.server.GRPCHandlerRegister;
@@ -61,7 +63,9 @@ public class EventModuleProvider extends ModuleProvider {
HTTPHandlerRegister httpHandlerRegister = getManager().find(SharingServerModule.NAME)
.provider()
.getService(HTTPHandlerRegister.class);
- httpHandlerRegister.addHandler(new EventRestServiceHandler(getManager()));
+ httpHandlerRegister.addHandler(new EventRestServiceHandler(getManager()),
+ Collections.singletonList(HttpMethod.POST)
+ );
}
@Override
diff --git a/oap-server/server-receiver-plugin/skywalking-log-recevier-plugin/src/main/java/org/apache/skywalking/oap/server/recevier/log/provider/LogModuleProvider.java b/oap-server/server-receiver-plugin/skywalking-log-recevier-plugin/src/main/java/org/apache/skywalking/oap/server/recevier/log/provider/LogModuleProvider.java
index 5c950f0a8b..a064eba565 100644
--- a/oap-server/server-receiver-plugin/skywalking-log-recevier-plugin/src/main/java/org/apache/skywalking/oap/server/recevier/log/provider/LogModuleProvider.java
+++ b/oap-server/server-receiver-plugin/skywalking-log-recevier-plugin/src/main/java/org/apache/skywalking/oap/server/recevier/log/provider/LogModuleProvider.java
@@ -17,6 +17,8 @@
package org.apache.skywalking.oap.server.recevier.log.provider;
+import com.linecorp.armeria.common.HttpMethod;
+import java.util.Collections;
import org.apache.skywalking.oap.log.analyzer.module.LogAnalyzerModule;
import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.server.GRPCHandlerRegister;
@@ -65,7 +67,9 @@ public class LogModuleProvider extends ModuleProvider {
HTTPHandlerRegister httpHandlerRegister = getManager().find(SharingServerModule.NAME)
.provider()
.getService(HTTPHandlerRegister.class);
- httpHandlerRegister.addHandler(new LogReportServiceHTTPHandler(getManager()));
+ httpHandlerRegister.addHandler(new LogReportServiceHTTPHandler(getManager()),
+ Collections.singletonList(HttpMethod.POST)
+ );
}
@Override
diff --git a/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/RegisterModuleProvider.java b/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/RegisterModuleProvider.java
index 6a14f70b74..785140f355 100644
--- a/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/RegisterModuleProvider.java
+++ b/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/RegisterModuleProvider.java
@@ -18,6 +18,8 @@
package org.apache.skywalking.oap.server.receiver.register.provider;
+import com.linecorp.armeria.common.HttpMethod;
+import java.util.Collections;
import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.server.GRPCHandlerRegister;
import org.apache.skywalking.oap.server.core.server.HTTPHandlerRegister;
@@ -63,7 +65,9 @@ public class RegisterModuleProvider extends ModuleProvider {
HTTPHandlerRegister httpHandlerRegister = getManager().find(SharingServerModule.NAME)
.provider()
.getService(HTTPHandlerRegister.class);
- httpHandlerRegister.addHandler(new ManagementServiceHTTPHandler(getManager()));
+ httpHandlerRegister.addHandler(new ManagementServiceHTTPHandler(getManager()),
+ Collections.singletonList(HttpMethod.POST)
+ );
}
@Override
diff --git a/oap-server/server-receiver-plugin/skywalking-sharing-server-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/sharing/server/ReceiverHTTPHandlerRegister.java b/oap-server/server-receiver-plugin/skywalking-sharing-server-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/sharing/server/ReceiverHTTPHandlerRegister.java
index e4e18677a7..6bff270334 100644
--- a/oap-server/server-receiver-plugin/skywalking-sharing-server-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/sharing/server/ReceiverHTTPHandlerRegister.java
+++ b/oap-server/server-receiver-plugin/skywalking-sharing-server-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/sharing/server/ReceiverHTTPHandlerRegister.java
@@ -18,6 +18,8 @@
package org.apache.skywalking.oap.server.receiver.sharing.server;
+import com.linecorp.armeria.common.HttpMethod;
+import java.util.List;
import lombok.Setter;
import org.apache.skywalking.oap.server.core.server.HTTPHandlerRegister;
@@ -27,7 +29,7 @@ public class ReceiverHTTPHandlerRegister implements HTTPHandlerRegister {
private HTTPHandlerRegister httpHandlerRegister;
@Override
- public void addHandler(Object httpService) {
- httpHandlerRegister.addHandler(httpService);
+ public void addHandler(final Object httpService, final List<HttpMethod> httpMethods) {
+ httpHandlerRegister.addHandler(httpService, httpMethods);
}
}
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceModuleProvider.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceModuleProvider.java
index 7ed969fa89..8d24687ca0 100755
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceModuleProvider.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceModuleProvider.java
@@ -18,6 +18,8 @@
package org.apache.skywalking.oap.server.receiver.trace.provider;
+import com.linecorp.armeria.common.HttpMethod;
+import java.util.Collections;
import org.apache.skywalking.oap.server.analyzer.module.AnalyzerModule;
import org.apache.skywalking.oap.server.configuration.api.ConfigurationModule;
import org.apache.skywalking.oap.server.core.CoreModule;
@@ -69,7 +71,9 @@ public class TraceModuleProvider extends ModuleProvider {
grpcHandlerRegister.addHandler(traceSegmentReportServiceHandler);
grpcHandlerRegister.addHandler(new TraceSegmentReportServiceHandlerCompat(traceSegmentReportServiceHandler));
- httpHandlerRegister.addHandler(new TraceSegmentReportHandler(getManager()));
+ httpHandlerRegister.addHandler(new TraceSegmentReportHandler(getManager()),
+ Collections.singletonList(HttpMethod.POST)
+ );
}
@Override
diff --git a/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/zipkin/ZipkinReceiverProvider.java b/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/zipkin/ZipkinReceiverProvider.java
index d18e57e503..63948bba43 100644
--- a/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/zipkin/ZipkinReceiverProvider.java
+++ b/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/zipkin/ZipkinReceiverProvider.java
@@ -18,6 +18,8 @@
package org.apache.skywalking.oap.server.receiver.zipkin;
+import com.linecorp.armeria.common.HttpMethod;
+import java.util.Collections;
import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.library.module.ModuleConfig;
import org.apache.skywalking.oap.server.library.module.ModuleDefine;
@@ -74,7 +76,9 @@ public class ZipkinReceiverProvider extends ModuleProvider {
httpServer = new HTTPServer(httpServerConfig);
httpServer.initialize();
- httpServer.addHandler(new ZipkinSpanHTTPHandler(config, getManager()));
+ httpServer.addHandler(new ZipkinSpanHTTPHandler(config, getManager()),
+ Collections.singletonList(HttpMethod.POST)
+ );
}
@Override
diff --git a/oap-server/server-tools/profile-exporter/tool-profile-snapshot-server-mock/src/main/java/org/apache/skywalking/oap/server/tool/profile/core/mock/MockHTTPHandlerRegister.java b/oap-server/server-tools/profile-exporter/tool-profile-snapshot-server-mock/src/main/java/org/apache/skywalking/oap/server/tool/profile/core/mock/MockHTTPHandlerRegister.java
index 429ae389f5..e0c01fbf8d 100644
--- a/oap-server/server-tools/profile-exporter/tool-profile-snapshot-server-mock/src/main/java/org/apache/skywalking/oap/server/tool/profile/core/mock/MockHTTPHandlerRegister.java
+++ b/oap-server/server-tools/profile-exporter/tool-profile-snapshot-server-mock/src/main/java/org/apache/skywalking/oap/server/tool/profile/core/mock/MockHTTPHandlerRegister.java
@@ -18,6 +18,8 @@
package org.apache.skywalking.oap.server.tool.profile.core.mock;
+import com.linecorp.armeria.common.HttpMethod;
+import java.util.List;
import org.apache.skywalking.oap.server.core.server.HTTPHandlerRegister;
/**
@@ -25,6 +27,7 @@ import org.apache.skywalking.oap.server.core.server.HTTPHandlerRegister;
*/
public class MockHTTPHandlerRegister implements HTTPHandlerRegister {
@Override
- public void addHandler(Object httpService) {
+ public void addHandler(final Object httpService, final List<HttpMethod> httpMethods) {
+
}
}