From 1ba3a7baf0f748a57ba4da41218b77c8828c6250 Mon Sep 17 00:00:00 2001 From: shenbaoyong <13261448660@163.com> Date: Fri, 8 Jan 2021 15:01:21 +0800 Subject: [PATCH 01/20] integration transport module with spring-mvc --- sentinel-transport/pom.xml | 1 + .../sentinel-transport-spring-mvc/pom.xml | 48 +++++++ .../transport/command/SentinelApiHandler.java | 110 ++++++++++++++++ .../command/SentinelApiHandlerAdapter.java | 57 ++++++++ .../command/SentinelApiHandlerMapping.java | 81 ++++++++++++ .../command/SpringMvcHttpCommandCenter.java | 47 +++++++ .../transport/command/http/StatusCode.java | 54 ++++++++ .../SpringMvcHttpHeartbeatSender.java | 123 ++++++++++++++++++ .../heartbeat/client/HttpClientsFactory.java | 38 ++++++ ...ibaba.csp.sentinel.transport.CommandCenter | 1 + ...aba.csp.sentinel.transport.HeartbeatSender | 1 + 11 files changed, 561 insertions(+) create mode 100644 sentinel-transport/sentinel-transport-spring-mvc/pom.xml create mode 100644 sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandler.java create mode 100644 sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandlerAdapter.java create mode 100644 sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandlerMapping.java create mode 100644 sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SpringMvcHttpCommandCenter.java create mode 100644 sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/http/StatusCode.java create mode 100644 sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/SpringMvcHttpHeartbeatSender.java create mode 100644 sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/client/HttpClientsFactory.java create mode 100644 sentinel-transport/sentinel-transport-spring-mvc/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.transport.CommandCenter create mode 100644 sentinel-transport/sentinel-transport-spring-mvc/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.transport.HeartbeatSender diff --git a/sentinel-transport/pom.xml b/sentinel-transport/pom.xml index c5eb8aac0a..3aa34aeca9 100755 --- a/sentinel-transport/pom.xml +++ b/sentinel-transport/pom.xml @@ -16,5 +16,6 @@ sentinel-transport-simple-http sentinel-transport-netty-http + sentinel-transport-spring-mvc diff --git a/sentinel-transport/sentinel-transport-spring-mvc/pom.xml b/sentinel-transport/sentinel-transport-spring-mvc/pom.xml new file mode 100644 index 0000000000..4615261826 --- /dev/null +++ b/sentinel-transport/sentinel-transport-spring-mvc/pom.xml @@ -0,0 +1,48 @@ + + + + sentinel-transport + com.alibaba.csp + 1.8.1-SNAPSHOT + + 4.0.0 + + sentinel-transport-spring-mvc + + + 4.5.3 + 3.1.0 + 5.1.8.RELEASE + + + + + com.alibaba.csp + sentinel-transport-common + ${project.version} + + + junit + junit + test + + + org.springframework + spring-webmvc + ${spring.version} + + + javax.servlet + javax.servlet-api + ${servlet.api.version} + + + org.apache.httpcomponents + httpclient + ${apache.httpclient.version} + + + + \ No newline at end of file diff --git a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandler.java b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandler.java new file mode 100644 index 0000000000..80094a2c46 --- /dev/null +++ b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandler.java @@ -0,0 +1,110 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.transport.command; + +import com.alibaba.csp.sentinel.command.CommandHandler; +import com.alibaba.csp.sentinel.command.CommandRequest; +import com.alibaba.csp.sentinel.command.CommandResponse; +import com.alibaba.csp.sentinel.config.SentinelConfig; +import com.alibaba.csp.sentinel.transport.command.http.StatusCode; +import com.alibaba.csp.sentinel.transport.log.CommandCenterLog; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; +import java.util.Map; + +/** + * @author shenbaoyong + */ +public class SentinelApiHandler { + + public static final String SERVER_ERROR_MESSAGE = "Command server error"; + public static final String INVALID_COMMAND_MESSAGE = "Invalid command"; + + private CommandHandler commandHandler; + + public SentinelApiHandler(CommandHandler commandHandler) { + this.commandHandler = commandHandler; + } + + public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse){ + PrintWriter printWriter = null; + try { + long start = System.currentTimeMillis(); + printWriter = httpServletResponse.getWriter(); + CommandCenterLog.info("[SentinelApiHandler] request income: " + httpServletRequest.getRequestURL()); + CommandRequest request = new CommandRequest(); + Map parameterMap = httpServletRequest.getParameterMap(); + for (Map.Entry entry : parameterMap.entrySet()) { + String[] value = entry.getValue(); + if(value != null && value.length >= 1){ + request.addParam(entry.getKey(), value[0]); + } + } + if (commandHandler == null) { + writeResponse(httpServletResponse, printWriter, StatusCode.BAD_REQUEST, INVALID_COMMAND_MESSAGE); + return; + } + CommandResponse response = commandHandler.handle(request); + handleResponse(response, httpServletResponse, printWriter); + + long cost = System.currentTimeMillis() - start; + CommandCenterLog.info("[SentinelApiHandler] Deal request : " + httpServletRequest.getRequestURL() + + ", time cost: " + cost + " ms"); + } catch (Throwable e) { + CommandCenterLog.warn("[SentinelApiHandler] error", e); + try { + if(printWriter != null){ + String errorMessage = SERVER_ERROR_MESSAGE; + e.printStackTrace(); + writeResponse(httpServletResponse, printWriter, StatusCode.INTERNAL_SERVER_ERROR, errorMessage); + } + } catch (Exception e1) { + CommandCenterLog.warn("Failed to write error response", e1); + } + } finally { + + } + } + + private void writeResponse(HttpServletResponse httpServletResponse, PrintWriter out, StatusCode statusCode, String message) { + httpServletResponse.setStatus(statusCode.getCode()); + if (message != null) { + out.print(message); + } + out.flush(); + } + + private void handleResponse(CommandResponse response, HttpServletResponse httpServletResponse, final PrintWriter printWriter) throws Exception { + if (response.isSuccess()) { + if (response.getResult() == null) { + writeResponse(httpServletResponse, printWriter, StatusCode.OK, null); + return; + } + // Here we directly use `toString` to encode the result to plain text. + byte[] buffer = response.getResult().toString().getBytes(SentinelConfig.charset()); + writeResponse(httpServletResponse, printWriter, StatusCode.OK, new String(buffer)); + } else { + String msg = SERVER_ERROR_MESSAGE; + if (response.getException() != null) { + msg = response.getException().getMessage(); + } + writeResponse(httpServletResponse, printWriter, StatusCode.BAD_REQUEST, msg); + } + } + +} diff --git a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandlerAdapter.java b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandlerAdapter.java new file mode 100644 index 0000000000..d95e1e2689 --- /dev/null +++ b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandlerAdapter.java @@ -0,0 +1,57 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.transport.command; + +import org.springframework.core.Ordered; +import org.springframework.web.servlet.HandlerAdapter; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @author shenbaoyong + */ +public class SentinelApiHandlerAdapter implements HandlerAdapter, Ordered { + + private int order = Ordered.LOWEST_PRECEDENCE; + + public void setOrder(int order) { + this.order = order; + } + + @Override + public int getOrder() { + return order; + } + + @Override + public boolean supports(Object handler) { + return handler instanceof SentinelApiHandler; + } + + @Override + public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + SentinelApiHandler sentinelApiHandler = (SentinelApiHandler)handler; + sentinelApiHandler.handle(request, response); + return null; + } + + @Override + public long getLastModified(HttpServletRequest request, Object handler) { + return -1; + } +} diff --git a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandlerMapping.java b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandlerMapping.java new file mode 100644 index 0000000000..b2e2149416 --- /dev/null +++ b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandlerMapping.java @@ -0,0 +1,81 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.transport.command; + +import com.alibaba.csp.sentinel.command.CommandHandler; +import com.alibaba.csp.sentinel.transport.log.CommandCenterLog; +import com.alibaba.csp.sentinel.util.StringUtil; +import org.springframework.core.Ordered; +import org.springframework.web.servlet.HandlerExecutionChain; +import org.springframework.web.servlet.handler.AbstractHandlerMapping; + +import javax.servlet.http.HttpServletRequest; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @author shenbaoyong + */ +public class SentinelApiHandlerMapping extends AbstractHandlerMapping { + + final static Map handlerMap = new ConcurrentHashMap<>(); + + private boolean ignoreInterceptor = true; + + public SentinelApiHandlerMapping() { + setOrder(Ordered.LOWEST_PRECEDENCE - 10); + } + + @Override + protected Object getHandlerInternal(HttpServletRequest request) throws Exception { + String commandName = request.getRequestURI(); + if(commandName.startsWith("/")){ + commandName = commandName.substring(1); + } + CommandHandler commandHandler = handlerMap.get(commandName); + return commandHandler != null ? new SentinelApiHandler(commandHandler) : null; + } + + @Override + protected HandlerExecutionChain getHandlerExecutionChain(Object handler, HttpServletRequest request) { + return ignoreInterceptor ? new HandlerExecutionChain(handler) : super.getHandlerExecutionChain(handler, request); + } + + public void setIgnoreInterceptor(boolean ignoreInterceptor) { + this.ignoreInterceptor = ignoreInterceptor; + } + + public static void registerCommand(String commandName, CommandHandler handler) { + if (StringUtil.isEmpty(commandName) || handler == null) { + return; + } + + if (handlerMap.containsKey(commandName)) { + CommandCenterLog.warn("[SentinelApiHandlerMapping] Register failed (duplicate command): " + commandName); + return; + } + + handlerMap.put(commandName, handler); + } + + public static void registerCommands(Map handlerMap) { + if (handlerMap != null) { + for (Map.Entry e : handlerMap.entrySet()) { + registerCommand(e.getKey(), e.getValue()); + } + } + } +} diff --git a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SpringMvcHttpCommandCenter.java b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SpringMvcHttpCommandCenter.java new file mode 100644 index 0000000000..2f497c66ea --- /dev/null +++ b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SpringMvcHttpCommandCenter.java @@ -0,0 +1,47 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.transport.command; + +import com.alibaba.csp.sentinel.command.CommandHandler; +import com.alibaba.csp.sentinel.command.CommandHandlerProvider; +import com.alibaba.csp.sentinel.spi.SpiOrder; +import com.alibaba.csp.sentinel.transport.CommandCenter; + +import java.util.Map; + +/** + * @author shenbaoyong + */ +@SpiOrder(SpiOrder.LOWEST_PRECEDENCE - 100) +public class SpringMvcHttpCommandCenter implements CommandCenter { + + @Override + public void start() throws Exception { + + } + + @Override + public void stop() throws Exception { + + } + + @Override + public void beforeStart() throws Exception { + // Register handlers + Map handlers = CommandHandlerProvider.getInstance().namedHandlers(); + SentinelApiHandlerMapping.registerCommands(handlers); + } +} diff --git a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/http/StatusCode.java b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/http/StatusCode.java new file mode 100644 index 0000000000..5f6e3a885a --- /dev/null +++ b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/http/StatusCode.java @@ -0,0 +1,54 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.transport.command.http; + +/** + * @author Jason Joo + */ +public enum StatusCode { + /** + * 200 OK. + */ + OK(200, "OK"), + BAD_REQUEST(400, "Bad Request"), + REQUEST_TIMEOUT(408, "Request Timeout"), + LENGTH_REQUIRED(411, "Length Required"), + UNSUPPORTED_MEDIA_TYPE(415, "Unsupported Media Type"), + INTERNAL_SERVER_ERROR(500, "Internal Server Error"); + + private int code; + private String desc; + private String representation; + + StatusCode(int code, String desc) { + this.code = code; + this.desc = desc; + this.representation = code + " " + desc; + } + + public int getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + @Override + public String toString() { + return representation; + } +} diff --git a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/SpringMvcHttpHeartbeatSender.java b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/SpringMvcHttpHeartbeatSender.java new file mode 100644 index 0000000000..6f35eeb862 --- /dev/null +++ b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/SpringMvcHttpHeartbeatSender.java @@ -0,0 +1,123 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.transport.heartbeat; + +import com.alibaba.csp.sentinel.Constants; +import com.alibaba.csp.sentinel.config.SentinelConfig; +import com.alibaba.csp.sentinel.log.RecordLog; +import com.alibaba.csp.sentinel.spi.SpiOrder; +import com.alibaba.csp.sentinel.transport.HeartbeatSender; +import com.alibaba.csp.sentinel.transport.config.TransportConfig; +import com.alibaba.csp.sentinel.transport.endpoint.Endpoint; +import com.alibaba.csp.sentinel.transport.endpoint.Protocol; +import com.alibaba.csp.sentinel.transport.heartbeat.client.HttpClientsFactory; +import com.alibaba.csp.sentinel.util.AppNameUtil; +import com.alibaba.csp.sentinel.util.HostNameUtil; +import com.alibaba.csp.sentinel.util.PidUtil; +import com.alibaba.csp.sentinel.util.StringUtil; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.impl.client.CloseableHttpClient; + +import java.util.List; + +/** + * @author Eric Zhao + * @author Carpenter Lee + * @author Leo Li + */ +@SpiOrder(SpiOrder.LOWEST_PRECEDENCE - 100) +public class SpringMvcHttpHeartbeatSender implements HeartbeatSender { + + private final CloseableHttpClient client; + + private static final int OK_STATUS = 200; + + private final int timeoutMs = 3000; + private final RequestConfig requestConfig = RequestConfig.custom() + .setConnectionRequestTimeout(timeoutMs) + .setConnectTimeout(timeoutMs) + .setSocketTimeout(timeoutMs) + .build(); + + private final Protocol consoleProtocol; + private final String consoleHost; + private final int consolePort; + + public SpringMvcHttpHeartbeatSender() { + List dashboardList = TransportConfig.getConsoleServerList(); + if (dashboardList == null || dashboardList.isEmpty()) { + RecordLog.info("[HttpHeartbeatSender] No dashboard server available"); + consoleProtocol = Protocol.HTTP; + consoleHost = null; + consolePort = -1; + } else { + consoleProtocol = dashboardList.get(0).getProtocol(); + consoleHost = dashboardList.get(0).getHost(); + consolePort = dashboardList.get(0).getPort(); + RecordLog.info("[HttpHeartbeatSender] Dashboard address parsed: <{}:{}>", consoleHost, consolePort); + } + this.client = HttpClientsFactory.getHttpClientsByProtocol(consoleProtocol); + } + + @Override + public boolean sendHeartbeat() throws Exception { + if (StringUtil.isEmpty(consoleHost)) { + return false; + } + URIBuilder uriBuilder = new URIBuilder(); + uriBuilder.setScheme(consoleProtocol.getProtocol()).setHost(consoleHost).setPort(consolePort) + .setPath(TransportConfig.getHeartbeatApiPath()) + .setParameter("app", AppNameUtil.getAppName()) + .setParameter("app_type", String.valueOf(SentinelConfig.getAppType())) + .setParameter("v", Constants.SENTINEL_VERSION) + .setParameter("version", String.valueOf(System.currentTimeMillis())) + .setParameter("hostname", HostNameUtil.getHostName()) + .setParameter("ip", TransportConfig.getHeartbeatClientIp()) + .setParameter("port", TransportConfig.getPort()) + .setParameter("pid", String.valueOf(PidUtil.getPid())); + + HttpGet request = new HttpGet(uriBuilder.build()); + request.setConfig(requestConfig); + // Send heartbeat request. + CloseableHttpResponse response = client.execute(request); + response.close(); + int statusCode = response.getStatusLine().getStatusCode(); + if (statusCode == OK_STATUS) { + return true; + } else if (clientErrorCode(statusCode) || serverErrorCode(statusCode)) { + RecordLog.warn("[HttpHeartbeatSender] Failed to send heartbeat to " + + consoleHost + ":" + consolePort + ", http status code: " + statusCode); + } + + return false; + } + + @Override + public long intervalMs() { + return 5000; + } + + private boolean clientErrorCode(int code) { + return code > 399 && code < 500; + } + + private boolean serverErrorCode(int code) { + return code > 499 && code < 600; + } +} diff --git a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/client/HttpClientsFactory.java b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/client/HttpClientsFactory.java new file mode 100644 index 0000000000..649a24981a --- /dev/null +++ b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/client/HttpClientsFactory.java @@ -0,0 +1,38 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.transport.heartbeat.client; + +import com.alibaba.csp.sentinel.transport.endpoint.Protocol; +import com.alibaba.csp.sentinel.transport.ssl.SslFactory; +import org.apache.http.conn.ssl.NoopHostnameVerifier; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; + +/** + * @author Leo Li + */ +public class HttpClientsFactory { + + private static class SslConnectionSocketFactoryInstance { + private static final SSLConnectionSocketFactory SSL_CONNECTION_SOCKET_FACTORY = new SSLConnectionSocketFactory(SslFactory.getSslConnectionSocketFactory(), NoopHostnameVerifier.INSTANCE); + } + + public static CloseableHttpClient getHttpClientsByProtocol(Protocol protocol) { + return protocol == Protocol.HTTP ? HttpClients.createDefault() : HttpClients.custom(). + setSSLSocketFactory(SslConnectionSocketFactoryInstance.SSL_CONNECTION_SOCKET_FACTORY).build(); + } +} diff --git a/sentinel-transport/sentinel-transport-spring-mvc/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.transport.CommandCenter b/sentinel-transport/sentinel-transport-spring-mvc/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.transport.CommandCenter new file mode 100644 index 0000000000..0aec488058 --- /dev/null +++ b/sentinel-transport/sentinel-transport-spring-mvc/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.transport.CommandCenter @@ -0,0 +1 @@ +com.alibaba.csp.sentinel.transport.command.SpringMvcHttpCommandCenter \ No newline at end of file diff --git a/sentinel-transport/sentinel-transport-spring-mvc/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.transport.HeartbeatSender b/sentinel-transport/sentinel-transport-spring-mvc/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.transport.HeartbeatSender new file mode 100644 index 0000000000..d5c96378c5 --- /dev/null +++ b/sentinel-transport/sentinel-transport-spring-mvc/src/main/resources/META-INF/services/com.alibaba.csp.sentinel.transport.HeartbeatSender @@ -0,0 +1 @@ +com.alibaba.csp.sentinel.transport.heartbeat.SpringMvcHttpHeartbeatSender \ No newline at end of file From c5160e8385c69b9e5136b72dcfe6b1473910a5ce Mon Sep 17 00:00:00 2001 From: shenbaoyong <13261448660@163.com> Date: Sat, 16 Jan 2021 16:03:00 +0800 Subject: [PATCH 02/20] fix review for #1957 --- pom.xml | 5 ++ sentinel-demo/pom.xml | 1 + .../pom.xml | 34 +++++++ .../TransportSpringMvcDemoApplication.java | 90 +++++++++++++++++++ .../src/main/resources/application.properties | 1 + .../sentinel-transport-spring-mvc/pom.xml | 2 + .../command/SentinelApiHandlerMapping.java | 37 +++++++- .../SpringMvcHttpHeartbeatSender.java | 1 + 8 files changed, 170 insertions(+), 1 deletion(-) create mode 100644 sentinel-demo/sentinel-demo-transport-spring-mvc/pom.xml create mode 100644 sentinel-demo/sentinel-demo-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/demo/transport/springmvc/TransportSpringMvcDemoApplication.java create mode 100644 sentinel-demo/sentinel-demo-transport-spring-mvc/src/main/resources/application.properties diff --git a/pom.xml b/pom.xml index 6a6cc820d6..d7c143e978 100755 --- a/pom.xml +++ b/pom.xml @@ -144,6 +144,11 @@ sentinel-transport-netty-http ${project.version} + + com.alibaba.csp + sentinel-transport-spring-mvc + ${project.version} + com.alibaba.csp sentinel-transport-common diff --git a/sentinel-demo/pom.xml b/sentinel-demo/pom.xml index 990c395006..706e707b56 100755 --- a/sentinel-demo/pom.xml +++ b/sentinel-demo/pom.xml @@ -45,6 +45,7 @@ sentinel-demo-quarkus sentinel-demo-annotation-cdi-interceptor sentinel-demo-motan + sentinel-demo-transport-spring-mvc diff --git a/sentinel-demo/sentinel-demo-transport-spring-mvc/pom.xml b/sentinel-demo/sentinel-demo-transport-spring-mvc/pom.xml new file mode 100644 index 0000000000..0a26a91e6f --- /dev/null +++ b/sentinel-demo/sentinel-demo-transport-spring-mvc/pom.xml @@ -0,0 +1,34 @@ + + + + sentinel-demo + com.alibaba.csp + 1.8.1-SNAPSHOT + + 4.0.0 + + sentinel-demo-transport-spring-mvc + + + 2.1.3.RELEASE + + + + + com.alibaba.csp + sentinel-core + + + com.alibaba.csp + sentinel-transport-spring-mvc + + + org.springframework.boot + spring-boot-starter-web + ${spring.boot.version} + + + + \ No newline at end of file diff --git a/sentinel-demo/sentinel-demo-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/demo/transport/springmvc/TransportSpringMvcDemoApplication.java b/sentinel-demo/sentinel-demo-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/demo/transport/springmvc/TransportSpringMvcDemoApplication.java new file mode 100644 index 0000000000..c5aeaa8ec1 --- /dev/null +++ b/sentinel-demo/sentinel-demo-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/demo/transport/springmvc/TransportSpringMvcDemoApplication.java @@ -0,0 +1,90 @@ +/* + * Copyright 1999-2019 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.demo.transport.springmvc; + +import com.alibaba.csp.sentinel.Entry; +import com.alibaba.csp.sentinel.SphU; +import com.alibaba.csp.sentinel.slots.block.BlockException; +import com.alibaba.csp.sentinel.slots.block.RuleConstant; +import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; +import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager; +import com.alibaba.csp.sentinel.transport.command.SentinelApiHandlerAdapter; +import com.alibaba.csp.sentinel.transport.command.SentinelApiHandlerMapping; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +/** + *

Add the JVM parameter to connect to the dashboard:

+ * {@code -Dcsp.sentinel.dashboard.server=127.0.0.1:8080 -Dproject.name=sentinel-demo-transport-spring-mvc} + * + *

Add the JVM parameter to tell dashboard your application port:

+ * {@code -Dcsp.sentinel.api.port=10000} + * + * @author shenbaoyong + */ +@SpringBootApplication +@Controller +public class TransportSpringMvcDemoApplication { + + public static void main(String[] args) { + SpringApplication.run(TransportSpringMvcDemoApplication.class); + initFlowRules(); + } + + public static void initFlowRules(){ + List rules = new ArrayList<>(); + FlowRule rule = new FlowRule(); + rule.setResource("demo-hello-api"); + rule.setGrade(RuleConstant.FLOW_GRADE_QPS); + rule.setCount(1); + rules.add(rule); + FlowRuleManager.loadRules(rules); + } + + @GetMapping("/hello") + @ResponseBody + public String hello(){ + Entry entry = null; + try { + entry = SphU.entry("demo-hello-api"); + return "ok: " + LocalDateTime.now(); + } catch (BlockException e1) { + return "helloBlockHandler: " + LocalDateTime.now(); + } finally { + if (entry != null) { + entry.exit(); + } + } + } + + @Bean + public SentinelApiHandlerMapping sentinelApiHandlerMapping() { + return new SentinelApiHandlerMapping(); + } + + @Bean + public SentinelApiHandlerAdapter sentinelApiHandlerAdapter() { + return new SentinelApiHandlerAdapter(); + } +} diff --git a/sentinel-demo/sentinel-demo-transport-spring-mvc/src/main/resources/application.properties b/sentinel-demo/sentinel-demo-transport-spring-mvc/src/main/resources/application.properties new file mode 100644 index 0000000000..3d7224ca5b --- /dev/null +++ b/sentinel-demo/sentinel-demo-transport-spring-mvc/src/main/resources/application.properties @@ -0,0 +1 @@ +server.port=10000 diff --git a/sentinel-transport/sentinel-transport-spring-mvc/pom.xml b/sentinel-transport/sentinel-transport-spring-mvc/pom.xml index 4615261826..feb281cfce 100644 --- a/sentinel-transport/sentinel-transport-spring-mvc/pom.xml +++ b/sentinel-transport/sentinel-transport-spring-mvc/pom.xml @@ -32,11 +32,13 @@ org.springframework spring-webmvc ${spring.version} + provided
javax.servlet javax.servlet-api ${servlet.api.version} + provided org.apache.httpcomponents diff --git a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandlerMapping.java b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandlerMapping.java index b2e2149416..f52a2d7026 100644 --- a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandlerMapping.java +++ b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandlerMapping.java @@ -16,9 +16,16 @@ package com.alibaba.csp.sentinel.transport.command; import com.alibaba.csp.sentinel.command.CommandHandler; +import com.alibaba.csp.sentinel.log.RecordLog; +import com.alibaba.csp.sentinel.transport.config.TransportConfig; import com.alibaba.csp.sentinel.transport.log.CommandCenterLog; import com.alibaba.csp.sentinel.util.StringUtil; +import org.springframework.beans.BeanWrapper; +import org.springframework.beans.BeanWrapperImpl; +import org.springframework.context.ApplicationEvent; +import org.springframework.context.ApplicationListener; import org.springframework.core.Ordered; +import org.springframework.util.ClassUtils; import org.springframework.web.servlet.HandlerExecutionChain; import org.springframework.web.servlet.handler.AbstractHandlerMapping; @@ -29,7 +36,18 @@ /** * @author shenbaoyong */ -public class SentinelApiHandlerMapping extends AbstractHandlerMapping { +public class SentinelApiHandlerMapping extends AbstractHandlerMapping implements ApplicationListener { + + private static final String SPRING_BOOT_WEB_SERVER_INITIALIZED_EVENT_CLASS = "org.springframework.boot.web.context.WebServerInitializedEvent"; + private static Class webServerInitializedEventClass; + static { + try { + webServerInitializedEventClass = ClassUtils.forName(SPRING_BOOT_WEB_SERVER_INITIALIZED_EVENT_CLASS, null); + RecordLog.info("[SentinelApiHandlerMapping] class {} is present, this is a spring-boot app, we can auto detect port", SPRING_BOOT_WEB_SERVER_INITIALIZED_EVENT_CLASS); + } catch (ClassNotFoundException e) { + RecordLog.info("[SentinelApiHandlerMapping] class {} is not present, this is not a spring-boot app, we can not auto detect port", SPRING_BOOT_WEB_SERVER_INITIALIZED_EVENT_CLASS); + } + } final static Map handlerMap = new ConcurrentHashMap<>(); @@ -78,4 +96,21 @@ public static void registerCommands(Map handlerMap) { } } } + + @Override + public void onApplicationEvent(ApplicationEvent applicationEvent) { + if(webServerInitializedEventClass != null && webServerInitializedEventClass.isAssignableFrom(applicationEvent.getClass())){ + Integer port = null; + try { + BeanWrapper beanWrapper = new BeanWrapperImpl(applicationEvent); + port = (Integer) beanWrapper.getPropertyValue("webServer.port"); + }catch (Exception e){ + RecordLog.warn("[SentinelApiHandlerMapping] resolve port from event " + applicationEvent + " fail", e); + } + if(port != null && TransportConfig.getPort() == null){ + RecordLog.info("[SentinelApiHandlerMapping] resolve port {} from event {}", port, applicationEvent); + TransportConfig.setRuntimePort(port); + } + } + } } diff --git a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/SpringMvcHttpHeartbeatSender.java b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/SpringMvcHttpHeartbeatSender.java index 6f35eeb862..dccd496871 100644 --- a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/SpringMvcHttpHeartbeatSender.java +++ b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/SpringMvcHttpHeartbeatSender.java @@ -20,6 +20,7 @@ import com.alibaba.csp.sentinel.log.RecordLog; import com.alibaba.csp.sentinel.spi.SpiOrder; import com.alibaba.csp.sentinel.transport.HeartbeatSender; +import com.alibaba.csp.sentinel.transport.command.SentinelApiHandlerMapping; import com.alibaba.csp.sentinel.transport.config.TransportConfig; import com.alibaba.csp.sentinel.transport.endpoint.Endpoint; import com.alibaba.csp.sentinel.transport.endpoint.Protocol; From d54c2e608f4785eb58f42e9a5e997d5e28855059 Mon Sep 17 00:00:00 2001 From: shenbaoyong <13261448660@163.com> Date: Sat, 23 Jan 2021 12:13:40 +0800 Subject: [PATCH 03/20] fix review for #1957 code format & triggerSentinelInit --- .../springmvc/TransportSpringMvcDemoApplication.java | 12 +++++++++--- .../transport/command/SentinelApiHandler.java | 6 +++--- .../transport/command/SentinelApiHandlerAdapter.java | 2 +- .../transport/command/SentinelApiHandlerMapping.java | 11 ++++++----- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/sentinel-demo/sentinel-demo-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/demo/transport/springmvc/TransportSpringMvcDemoApplication.java b/sentinel-demo/sentinel-demo-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/demo/transport/springmvc/TransportSpringMvcDemoApplication.java index c5aeaa8ec1..c360d0ade0 100644 --- a/sentinel-demo/sentinel-demo-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/demo/transport/springmvc/TransportSpringMvcDemoApplication.java +++ b/sentinel-demo/sentinel-demo-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/demo/transport/springmvc/TransportSpringMvcDemoApplication.java @@ -17,6 +17,7 @@ import com.alibaba.csp.sentinel.Entry; import com.alibaba.csp.sentinel.SphU; +import com.alibaba.csp.sentinel.init.InitExecutor; import com.alibaba.csp.sentinel.slots.block.BlockException; import com.alibaba.csp.sentinel.slots.block.RuleConstant; import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; @@ -48,11 +49,12 @@ public class TransportSpringMvcDemoApplication { public static void main(String[] args) { - SpringApplication.run(TransportSpringMvcDemoApplication.class); + triggerSentinelInit(); initFlowRules(); + SpringApplication.run(TransportSpringMvcDemoApplication.class); } - public static void initFlowRules(){ + public static void initFlowRules() { List rules = new ArrayList<>(); FlowRule rule = new FlowRule(); rule.setResource("demo-hello-api"); @@ -64,7 +66,7 @@ public static void initFlowRules(){ @GetMapping("/hello") @ResponseBody - public String hello(){ + public String hello() { Entry entry = null; try { entry = SphU.entry("demo-hello-api"); @@ -78,6 +80,10 @@ public String hello(){ } } + private static void triggerSentinelInit() { + new Thread(() -> InitExecutor.doInit()).start(); + } + @Bean public SentinelApiHandlerMapping sentinelApiHandlerMapping() { return new SentinelApiHandlerMapping(); diff --git a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandler.java b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandler.java index 80094a2c46..aa5bd9bdc2 100644 --- a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandler.java +++ b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandler.java @@ -41,7 +41,7 @@ public SentinelApiHandler(CommandHandler commandHandler) { this.commandHandler = commandHandler; } - public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse){ + public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { PrintWriter printWriter = null; try { long start = System.currentTimeMillis(); @@ -51,7 +51,7 @@ public void handle(HttpServletRequest httpServletRequest, HttpServletResponse ht Map parameterMap = httpServletRequest.getParameterMap(); for (Map.Entry entry : parameterMap.entrySet()) { String[] value = entry.getValue(); - if(value != null && value.length >= 1){ + if (value != null && value.length >= 1) { request.addParam(entry.getKey(), value[0]); } } @@ -68,7 +68,7 @@ public void handle(HttpServletRequest httpServletRequest, HttpServletResponse ht } catch (Throwable e) { CommandCenterLog.warn("[SentinelApiHandler] error", e); try { - if(printWriter != null){ + if (printWriter != null) { String errorMessage = SERVER_ERROR_MESSAGE; e.printStackTrace(); writeResponse(httpServletResponse, printWriter, StatusCode.INTERNAL_SERVER_ERROR, errorMessage); diff --git a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandlerAdapter.java b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandlerAdapter.java index d95e1e2689..50ee7462ea 100644 --- a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandlerAdapter.java +++ b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandlerAdapter.java @@ -45,7 +45,7 @@ public boolean supports(Object handler) { @Override public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - SentinelApiHandler sentinelApiHandler = (SentinelApiHandler)handler; + SentinelApiHandler sentinelApiHandler = (SentinelApiHandler) handler; sentinelApiHandler.handle(request, response); return null; } diff --git a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandlerMapping.java b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandlerMapping.java index f52a2d7026..568a460d72 100644 --- a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandlerMapping.java +++ b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandlerMapping.java @@ -40,6 +40,7 @@ public class SentinelApiHandlerMapping extends AbstractHandlerMapping implements private static final String SPRING_BOOT_WEB_SERVER_INITIALIZED_EVENT_CLASS = "org.springframework.boot.web.context.WebServerInitializedEvent"; private static Class webServerInitializedEventClass; + static { try { webServerInitializedEventClass = ClassUtils.forName(SPRING_BOOT_WEB_SERVER_INITIALIZED_EVENT_CLASS, null); @@ -60,7 +61,7 @@ public SentinelApiHandlerMapping() { @Override protected Object getHandlerInternal(HttpServletRequest request) throws Exception { String commandName = request.getRequestURI(); - if(commandName.startsWith("/")){ + if (commandName.startsWith("/")) { commandName = commandName.substring(1); } CommandHandler commandHandler = handlerMap.get(commandName); @@ -99,15 +100,15 @@ public static void registerCommands(Map handlerMap) { @Override public void onApplicationEvent(ApplicationEvent applicationEvent) { - if(webServerInitializedEventClass != null && webServerInitializedEventClass.isAssignableFrom(applicationEvent.getClass())){ + if (webServerInitializedEventClass != null && webServerInitializedEventClass.isAssignableFrom(applicationEvent.getClass())) { Integer port = null; try { BeanWrapper beanWrapper = new BeanWrapperImpl(applicationEvent); port = (Integer) beanWrapper.getPropertyValue("webServer.port"); - }catch (Exception e){ - RecordLog.warn("[SentinelApiHandlerMapping] resolve port from event " + applicationEvent + " fail", e); + } catch (Exception e) { + RecordLog.warn("[SentinelApiHandlerMapping] resolve port from event " + applicationEvent + " fail", e); } - if(port != null && TransportConfig.getPort() == null){ + if (port != null && TransportConfig.getPort() == null) { RecordLog.info("[SentinelApiHandlerMapping] resolve port {} from event {}", port, applicationEvent); TransportConfig.setRuntimePort(port); } From 24e89cf7c141632f834db4f665d75c6ba7950217 Mon Sep 17 00:00:00 2001 From: shenbaoyong <13261448660@163.com> Date: Sat, 30 Jan 2021 22:10:03 +0800 Subject: [PATCH 04/20] fix pr1957 review problem --- .../transport/command/SentinelApiHandler.java | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandler.java b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandler.java index aa5bd9bdc2..473b9f6529 100644 --- a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandler.java +++ b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandler.java @@ -33,7 +33,6 @@ public class SentinelApiHandler { public static final String SERVER_ERROR_MESSAGE = "Command server error"; - public static final String INVALID_COMMAND_MESSAGE = "Invalid command"; private CommandHandler commandHandler; @@ -46,7 +45,7 @@ public void handle(HttpServletRequest httpServletRequest, HttpServletResponse ht try { long start = System.currentTimeMillis(); printWriter = httpServletResponse.getWriter(); - CommandCenterLog.info("[SentinelApiHandler] request income: " + httpServletRequest.getRequestURL()); + CommandCenterLog.debug("[SentinelApiHandler] request income: {}", httpServletRequest.getRequestURL()); CommandRequest request = new CommandRequest(); Map parameterMap = httpServletRequest.getParameterMap(); for (Map.Entry entry : parameterMap.entrySet()) { @@ -55,23 +54,16 @@ public void handle(HttpServletRequest httpServletRequest, HttpServletResponse ht request.addParam(entry.getKey(), value[0]); } } - if (commandHandler == null) { - writeResponse(httpServletResponse, printWriter, StatusCode.BAD_REQUEST, INVALID_COMMAND_MESSAGE); - return; - } CommandResponse response = commandHandler.handle(request); handleResponse(response, httpServletResponse, printWriter); long cost = System.currentTimeMillis() - start; - CommandCenterLog.info("[SentinelApiHandler] Deal request : " + httpServletRequest.getRequestURL() - + ", time cost: " + cost + " ms"); + CommandCenterLog.debug("[SentinelApiHandler] Deal request: {}, time cost: {} ms", httpServletRequest.getRequestURL(), cost); } catch (Throwable e) { CommandCenterLog.warn("[SentinelApiHandler] error", e); try { if (printWriter != null) { - String errorMessage = SERVER_ERROR_MESSAGE; - e.printStackTrace(); - writeResponse(httpServletResponse, printWriter, StatusCode.INTERNAL_SERVER_ERROR, errorMessage); + writeResponse(httpServletResponse, printWriter, StatusCode.INTERNAL_SERVER_ERROR, SERVER_ERROR_MESSAGE); } } catch (Exception e1) { CommandCenterLog.warn("Failed to write error response", e1); From 3469fd9c902db72617ce9108fceeea193c9fe965 Mon Sep 17 00:00:00 2001 From: zhangkai253 <32122715+zhangkai253@users.noreply.github.com> Date: Mon, 28 Dec 2020 14:04:40 +0800 Subject: [PATCH 05/20] dashboard: Fix issue of memory leak in real-time monitoring page (#1905) * Fix issue of memory leak in metric.js --- .../webapp/resources/app/scripts/controllers/metric.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/metric.js b/sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/metric.js index b7e2539de0..71496ebb5e 100755 --- a/sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/metric.js +++ b/sentinel-dashboard/src/main/webapp/resources/app/scripts/controllers/metric.js @@ -2,7 +2,7 @@ var app = angular.module('sentinelDashboardApp'); app.controller('MetricCtl', ['$scope', '$stateParams', 'MetricService', '$interval', '$timeout', function ($scope, $stateParams, MetricService, $interval, $timeout) { - + $scope.charts = []; $scope.endTime = new Date(); $scope.startTime = new Date(); $scope.startTime.setMinutes($scope.endTime.getMinutes() - 30); @@ -59,6 +59,11 @@ app.controller('MetricCtl', ['$scope', '$stateParams', 'MetricService', '$interv $interval.cancel(intervalId); }); $scope.initAllChart = function () { + //revoke useless charts positively + while($scope.charts.length > 0) { + let chart = $scope.charts.pop(); + chart.destroy(); + } $.each($scope.metrics, function (idx, metric) { if (idx == $scope.metrics.length - 1) { return; @@ -70,6 +75,7 @@ app.controller('MetricCtl', ['$scope', '$stateParams', 'MetricService', '$interv height: 250, padding: [10, 30, 70, 50] }); + $scope.charts.push(chart); var maxQps = 0; for (var i in metric.data) { var item = metric.data[i]; From a7f3682ccac38ec106e872eb688fefd163fb01a1 Mon Sep 17 00:00:00 2001 From: brothelul <1285823170@qq.com> Date: Thu, 31 Dec 2020 16:28:44 +0800 Subject: [PATCH 06/20] Support setting flush interval of the metric log via SentinelConfig property (#1919) --- .../csp/sentinel/config/SentinelConfig.java | 21 ++++++++++++++++ .../slots/block/flow/FlowRuleManager.java | 25 +++++++++++++++++-- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/config/SentinelConfig.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/config/SentinelConfig.java index f86bdc4e21..788f97c2a4 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/config/SentinelConfig.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/config/SentinelConfig.java @@ -55,12 +55,14 @@ public final class SentinelConfig { public static final String COLD_FACTOR = "csp.sentinel.flow.cold.factor"; public static final String STATISTIC_MAX_RT = "csp.sentinel.statistic.max.rt"; public static final String SPI_CLASSLOADER = "csp.sentinel.spi.classloader"; + public static final String METRIC_FLUSH_INTERVAL = "csp.sentinel.metric.flush.interval"; public static final String DEFAULT_CHARSET = "UTF-8"; public static final long DEFAULT_SINGLE_METRIC_FILE_SIZE = 1024 * 1024 * 50; public static final int DEFAULT_TOTAL_METRIC_FILE_COUNT = 6; public static final int DEFAULT_COLD_FACTOR = 3; public static final int DEFAULT_STATISTIC_MAX_RT = 5000; + public static final long DEFAULT_METRIC_FLUSH_INTERVAL = 1L; static { try { @@ -98,6 +100,7 @@ private static void initialize() { setConfig(TOTAL_METRIC_FILE_COUNT, String.valueOf(DEFAULT_TOTAL_METRIC_FILE_COUNT)); setConfig(COLD_FACTOR, String.valueOf(DEFAULT_COLD_FACTOR)); setConfig(STATISTIC_MAX_RT, String.valueOf(DEFAULT_STATISTIC_MAX_RT)); + setConfig(METRIC_FLUSH_INTERVAL, String.valueOf(DEFAULT_METRIC_FLUSH_INTERVAL)); } private static void loadProps() { @@ -155,6 +158,24 @@ public static int getAppType() { public static String charset() { return props.get(CHARSET); } + + /** + * Get the metric log flush interval in second + * @return the metric log flush interval in second + */ + public static long metricLogFlushIntervalSec() { + String flushIntervalStr = SentinelConfig.getConfig(METRIC_FLUSH_INTERVAL); + if (flushIntervalStr == null) { + return DEFAULT_METRIC_FLUSH_INTERVAL; + } + try { + return Long.parseLong(flushIntervalStr); + } catch (Throwable throwable) { + RecordLog.warn("[SentinelConfig] Parse the metricLogFlushInterval fail, use default value: " + + DEFAULT_METRIC_FLUSH_INTERVAL, throwable); + return DEFAULT_METRIC_FLUSH_INTERVAL; + } + } public static long singleMetricFileSize() { try { diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/FlowRuleManager.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/FlowRuleManager.java index dfcc4cb591..eda0faaf9d 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/FlowRuleManager.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/FlowRuleManager.java @@ -26,6 +26,7 @@ import java.util.concurrent.atomic.AtomicReference; import com.alibaba.csp.sentinel.concurrent.NamedThreadFactory; +import com.alibaba.csp.sentinel.config.SentinelConfig; import com.alibaba.csp.sentinel.log.RecordLog; import com.alibaba.csp.sentinel.util.AssertUtil; import com.alibaba.csp.sentinel.util.StringUtil; @@ -61,9 +62,29 @@ public class FlowRuleManager { static { flowRules.set(Collections.>emptyMap()); currentProperty.addListener(LISTENER); - SCHEDULER.scheduleAtFixedRate(new MetricTimerListener(), 0, 1, TimeUnit.SECONDS); + startMetricTimerListener(); } - + + /** + *

Start the MetricTimerListener + *

    + *
  1. If the flushInterval more than 0, + * the timer will run with the flushInterval as the rate
  2. . + *
  3. If the flushInterval less than 0(include) or value is not valid, + * then means the timer will not be started
  4. + *

      + */ + private static void startMetricTimerListener() { + long flushInterval = SentinelConfig.metricLogFlushIntervalSec(); + if (flushInterval <= 0) { + RecordLog.info("[FlowRuleManager] The MetricTimerListener is'n started. If you want to start it, " + + "please change the value(current: {}) of config({}) more than 0 to start it.", flushInterval, + SentinelConfig.METRIC_FLUSH_INTERVAL); + return; + } + SCHEDULER.scheduleAtFixedRate(new MetricTimerListener(), 0, flushInterval, TimeUnit.SECONDS); + } + /** * Listen to the {@link SentinelProperty} for {@link FlowRule}s. The property is the source of {@link FlowRule}s. * Flow rules can also be set by {@link #loadRules(List)} directly. From 7fe09ff0724d6f401e50151c26ce01d566912402 Mon Sep 17 00:00:00 2001 From: cdfive <31885791+cdfive@users.noreply.github.com> Date: Wed, 27 Jan 2021 09:45:56 +0800 Subject: [PATCH 07/20] Refactor SpiLoader and enhance SPI mechanism (#1383) * Add `@Spi` annotation as the general annotation for SPI definition. * Add isDefault in @Spi, add loadDefaultInstance and improve loadFirstInstanceOrDefault method, improve test cases * Add SpiLoaderException class for thrown when something goes wrong while loading Provider * Rearrange packages of base SPI mechanism NOTE: this PR contains breaking changes regarding API. --- .../api/GatewayApiDefinitionManager.java | 4 +- .../gateway/common/slot/GatewayFlowSlot.java | 4 +- .../common/slot/GatewaySlotChainBuilder.java | 3 +- .../codec/ClientEntityCodecProvider.java | 6 +- .../cluster/flow/DefaultTokenService.java | 2 + .../cluster/server/TokenServiceProvider.java | 5 +- .../codec/ServerEntityCodecProvider.java | 6 +- .../processor/RequestProcessorProvider.java | 10 +- .../com/alibaba/csp/sentinel/Constants.java | 12 + .../cluster/client/TokenClientProvider.java | 4 +- .../EmbeddedClusterTokenServerProvider.java | 4 +- .../csp/sentinel/config/SentinelConfig.java | 14 + .../csp/sentinel/init/InitExecutor.java | 6 +- .../extension/MetricExtensionProvider.java | 4 +- .../sentinel/slotchain/SlotChainProvider.java | 4 +- .../slots/DefaultSlotChainBuilder.java | 7 +- .../slots/block/authority/AuthoritySlot.java | 5 +- .../slots/block/degrade/DegradeSlot.java | 5 +- .../sentinel/slots/block/flow/FlowSlot.java | 5 +- .../clusterbuilder/ClusterBuilderSlot.java | 5 +- .../csp/sentinel/slots/logger/LogSlot.java | 5 +- .../slots/nodeselector/NodeSelectorSlot.java | 5 +- .../slots/statistic/StatisticSlot.java | 4 +- .../csp/sentinel/slots/system/SystemSlot.java | 5 +- .../csp/sentinel/spi/ServiceLoaderUtil.java | 45 -- .../com/alibaba/csp/sentinel/spi/Spi.java | 54 ++ .../alibaba/csp/sentinel/spi/SpiLoader.java | 534 ++++++++++++++++++ .../csp/sentinel/spi/SpiLoaderException.java | 36 ++ .../alibaba/csp/sentinel/spi/SpiOrder.java | 48 -- .../alibaba/csp/sentinel/util/SpiLoader.java | 291 ---------- .../csp/sentinel/spi/SpiLoaderTest.java | 321 +++++++++++ .../csp/sentinel/spi/TestFiveProvider.java | 9 + .../csp/sentinel/spi/TestFourProvider.java | 11 + .../csp/sentinel/spi/TestInterface.java | 8 + .../sentinel/spi/TestNoProviderInterface.java | 8 + .../sentinel/spi/TestNoSpiFileInterface.java | 8 + .../csp/sentinel/spi/TestOneProvider.java | 8 + .../csp/sentinel/spi/TestThreeProvider.java | 9 + .../csp/sentinel/spi/TestTwoProvider.java | 9 + .../csp/sentinel/util/SpiLoaderTest.java | 163 ------ ...com.alibaba.csp.sentinel.spi.TestInterface | 5 + ...a.csp.sentinel.spi.TestNoProviderInterface | 0 .../csp/sentinel/demo/slot/DemoSlot.java | 4 +- .../slots/HotParamSlotChainBuilder.java | 3 +- .../slots/block/flow/param/ParamFlowSlot.java | 4 +- .../command/CommandCenterProvider.java | 4 +- .../command/CommandHandlerProvider.java | 15 +- .../heartbeat/HeartbeatSenderProvider.java | 4 +- .../command/NettyHttpCommandCenter.java | 4 +- .../heartbeat/HttpHeartbeatSender.java | 4 +- 50 files changed, 1124 insertions(+), 619 deletions(-) delete mode 100644 sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/ServiceLoaderUtil.java create mode 100644 sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/Spi.java create mode 100644 sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/SpiLoader.java create mode 100644 sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/SpiLoaderException.java delete mode 100644 sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/SpiOrder.java delete mode 100644 sentinel-core/src/main/java/com/alibaba/csp/sentinel/util/SpiLoader.java create mode 100644 sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/SpiLoaderTest.java create mode 100644 sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestFiveProvider.java create mode 100644 sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestFourProvider.java create mode 100644 sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestInterface.java create mode 100644 sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestNoProviderInterface.java create mode 100644 sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestNoSpiFileInterface.java create mode 100644 sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestOneProvider.java create mode 100644 sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestThreeProvider.java create mode 100644 sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestTwoProvider.java delete mode 100644 sentinel-core/src/test/java/com/alibaba/csp/sentinel/util/SpiLoaderTest.java create mode 100644 sentinel-core/src/test/resources/META-INF/services/com.alibaba.csp.sentinel.spi.TestInterface create mode 100644 sentinel-core/src/test/resources/META-INF/services/com.alibaba.csp.sentinel.spi.TestNoProviderInterface diff --git a/sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/GatewayApiDefinitionManager.java b/sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/GatewayApiDefinitionManager.java index 8f24803c69..595109d7e9 100644 --- a/sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/GatewayApiDefinitionManager.java +++ b/sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/api/GatewayApiDefinitionManager.java @@ -27,7 +27,7 @@ import com.alibaba.csp.sentinel.property.PropertyListener; import com.alibaba.csp.sentinel.property.SentinelProperty; import com.alibaba.csp.sentinel.util.AssertUtil; -import com.alibaba.csp.sentinel.util.SpiLoader; +import com.alibaba.csp.sentinel.spi.SpiLoader; import com.alibaba.csp.sentinel.util.StringUtil; /** @@ -59,7 +59,7 @@ public final class GatewayApiDefinitionManager { } private static void initializeApiChangeObserverSpi() { - List listeners = SpiLoader.loadInstanceList(ApiDefinitionChangeObserver.class); + List listeners = SpiLoader.of(ApiDefinitionChangeObserver.class).loadInstanceList(); for (ApiDefinitionChangeObserver e : listeners) { API_CHANGE_OBSERVERS.put(e.getClass().getCanonicalName(), e); RecordLog.info("[GatewayApiDefinitionManager] ApiDefinitionChangeObserver added: {}" diff --git a/sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/slot/GatewayFlowSlot.java b/sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/slot/GatewayFlowSlot.java index b0932b7c99..2b6fcaa3e4 100644 --- a/sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/slot/GatewayFlowSlot.java +++ b/sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/slot/GatewayFlowSlot.java @@ -27,13 +27,13 @@ import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowException; import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRule; import com.alibaba.csp.sentinel.slots.block.flow.param.ParameterMetricStorage; -import com.alibaba.csp.sentinel.spi.SpiOrder; +import com.alibaba.csp.sentinel.spi.Spi; /** * @author Eric Zhao * @since 1.6.1 */ -@SpiOrder(-4000) +@Spi(order = -4000) public class GatewayFlowSlot extends AbstractLinkedProcessorSlot { @Override diff --git a/sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/slot/GatewaySlotChainBuilder.java b/sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/slot/GatewaySlotChainBuilder.java index 204b46198f..78cc099798 100644 --- a/sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/slot/GatewaySlotChainBuilder.java +++ b/sentinel-adapter/sentinel-api-gateway-adapter-common/src/main/java/com/alibaba/csp/sentinel/adapter/gateway/common/slot/GatewaySlotChainBuilder.java @@ -21,8 +21,9 @@ * @author Eric Zhao * @since 1.6.1 * - * @deprecated since 1.7.2, we can use @SpiOrder(-4000) to adjust the order of {@link GatewayFlowSlot}, + * @deprecated since 1.7.2, we can use @Spi(order = -4000) to adjust the order of {@link GatewayFlowSlot}, * this class is reserved for compatibility with older versions. + * * @see GatewayFlowSlot * @see DefaultSlotChainBuilder */ diff --git a/sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/codec/ClientEntityCodecProvider.java b/sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/codec/ClientEntityCodecProvider.java index e27ce68223..a01654cb5b 100644 --- a/sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/codec/ClientEntityCodecProvider.java +++ b/sentinel-cluster/sentinel-cluster-client-default/src/main/java/com/alibaba/csp/sentinel/cluster/client/codec/ClientEntityCodecProvider.java @@ -15,7 +15,7 @@ */ package com.alibaba.csp.sentinel.cluster.client.codec; -import com.alibaba.csp.sentinel.util.SpiLoader; +import com.alibaba.csp.sentinel.spi.SpiLoader; import com.alibaba.csp.sentinel.cluster.codec.request.RequestEntityWriter; import com.alibaba.csp.sentinel.cluster.codec.response.ResponseEntityDecoder; import com.alibaba.csp.sentinel.log.RecordLog; @@ -34,7 +34,7 @@ public final class ClientEntityCodecProvider { } private static void resolveInstance() { - RequestEntityWriter writer = SpiLoader.loadFirstInstance(RequestEntityWriter.class); + RequestEntityWriter writer = SpiLoader.of(RequestEntityWriter.class).loadFirstInstance(); if (writer == null) { RecordLog.warn("[ClientEntityCodecProvider] No existing request entity writer, resolve failed"); } else { @@ -42,7 +42,7 @@ private static void resolveInstance() { RecordLog.info("[ClientEntityCodecProvider] Request entity writer resolved: {}", requestEntityWriter.getClass().getCanonicalName()); } - ResponseEntityDecoder decoder = SpiLoader.loadFirstInstance(ResponseEntityDecoder.class); + ResponseEntityDecoder decoder = SpiLoader.of(ResponseEntityDecoder.class).loadFirstInstance(); if (decoder == null) { RecordLog.warn("[ClientEntityCodecProvider] No existing response entity decoder, resolve failed"); } else { diff --git a/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/DefaultTokenService.java b/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/DefaultTokenService.java index 4e78a50d30..21d82acdf7 100644 --- a/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/DefaultTokenService.java +++ b/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/DefaultTokenService.java @@ -22,6 +22,7 @@ import com.alibaba.csp.sentinel.cluster.flow.rule.ClusterParamFlowRuleManager; import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRule; +import com.alibaba.csp.sentinel.spi.Spi; import java.util.Collection; @@ -31,6 +32,7 @@ * @author Eric Zhao * @since 1.4.0 */ +@Spi(isDefault = true) public class DefaultTokenService implements TokenService { @Override diff --git a/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/server/TokenServiceProvider.java b/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/server/TokenServiceProvider.java index 1f9cd1c785..481e7a0fd8 100644 --- a/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/server/TokenServiceProvider.java +++ b/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/server/TokenServiceProvider.java @@ -16,9 +16,8 @@ package com.alibaba.csp.sentinel.cluster.server; import com.alibaba.csp.sentinel.cluster.TokenService; -import com.alibaba.csp.sentinel.cluster.flow.DefaultTokenService; import com.alibaba.csp.sentinel.log.RecordLog; -import com.alibaba.csp.sentinel.util.SpiLoader; +import com.alibaba.csp.sentinel.spi.SpiLoader; /** * @author Eric Zhao @@ -37,7 +36,7 @@ public static TokenService getService() { } private static void resolveTokenServiceSpi() { - service = SpiLoader.loadFirstInstanceOrDefault(TokenService.class, DefaultTokenService.class); + service = SpiLoader.of(TokenService.class).loadFirstInstanceOrDefault(); if (service != null) { RecordLog.info("[TokenServiceProvider] Global token service resolved: " + service.getClass().getCanonicalName()); diff --git a/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/server/codec/ServerEntityCodecProvider.java b/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/server/codec/ServerEntityCodecProvider.java index 741570e219..3ef4aaa563 100644 --- a/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/server/codec/ServerEntityCodecProvider.java +++ b/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/server/codec/ServerEntityCodecProvider.java @@ -18,7 +18,7 @@ import com.alibaba.csp.sentinel.cluster.codec.request.RequestEntityDecoder; import com.alibaba.csp.sentinel.cluster.codec.response.ResponseEntityWriter; import com.alibaba.csp.sentinel.log.RecordLog; -import com.alibaba.csp.sentinel.util.SpiLoader; +import com.alibaba.csp.sentinel.spi.SpiLoader; /** * @author Eric Zhao @@ -34,7 +34,7 @@ public final class ServerEntityCodecProvider { } private static void resolveInstance() { - ResponseEntityWriter writer = SpiLoader.loadFirstInstance(ResponseEntityWriter.class); + ResponseEntityWriter writer = SpiLoader.of(ResponseEntityWriter.class).loadFirstInstance(); if (writer == null) { RecordLog.warn("[ServerEntityCodecProvider] No existing response entity writer, resolve failed"); } else { @@ -42,7 +42,7 @@ private static void resolveInstance() { RecordLog.info("[ServerEntityCodecProvider] Response entity writer resolved: {}", responseEntityWriter.getClass().getCanonicalName()); } - RequestEntityDecoder decoder = SpiLoader.loadFirstInstance(RequestEntityDecoder.class); + RequestEntityDecoder decoder = SpiLoader.of(RequestEntityDecoder.class).loadFirstInstance(); if (decoder == null) { RecordLog.warn("[ServerEntityCodecProvider] No existing request entity decoder, resolve failed"); } else { diff --git a/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/server/processor/RequestProcessorProvider.java b/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/server/processor/RequestProcessorProvider.java index ca1bd87d52..0dcffce991 100644 --- a/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/server/processor/RequestProcessorProvider.java +++ b/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/server/processor/RequestProcessorProvider.java @@ -15,12 +15,12 @@ */ package com.alibaba.csp.sentinel.cluster.server.processor; +import java.util.List; import java.util.Map; -import java.util.ServiceLoader; import java.util.concurrent.ConcurrentHashMap; import com.alibaba.csp.sentinel.cluster.annotation.RequestType; -import com.alibaba.csp.sentinel.spi.ServiceLoaderUtil; +import com.alibaba.csp.sentinel.spi.SpiLoader; import com.alibaba.csp.sentinel.util.AssertUtil; /** @@ -31,15 +31,13 @@ public final class RequestProcessorProvider { private static final Map PROCESSOR_MAP = new ConcurrentHashMap<>(); - private static final ServiceLoader SERVICE_LOADER = ServiceLoaderUtil.getServiceLoader( - RequestProcessor.class); - static { loadAndInit(); } private static void loadAndInit() { - for (RequestProcessor processor : SERVICE_LOADER) { + List processors = SpiLoader.of(RequestProcessor.class).loadInstanceList(); + for (RequestProcessor processor : processors) { Integer type = parseRequestType(processor); if (type != null) { PROCESSOR_MAP.put(type, processor); diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/Constants.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/Constants.java index 9c50ddf832..b7c3f80896 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/Constants.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/Constants.java @@ -70,5 +70,17 @@ public final class Constants { */ public static volatile boolean ON = true; + /** + * Order of default processor slots + */ + public static final int ORDER_NODE_SELECTOR_SLOT = -10000; + public static final int ORDER_CLUSTER_BUILDER_SLOT = -9000; + public static final int ORDER_LOG_SLOT = -8000; + public static final int ORDER_STATISTIC_SLOT = -7000; + public static final int ORDER_AUTHORITY_SLOT = -6000; + public static final int ORDER_SYSTEM_SLOT = -5000; + public static final int ORDER_FLOW_SLOT = -2000; + public static final int ORDER_DEGRADE_SLOT = -1000; + private Constants() {} } diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/cluster/client/TokenClientProvider.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/cluster/client/TokenClientProvider.java index 85c9da2fac..4029ed2c82 100644 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/cluster/client/TokenClientProvider.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/cluster/client/TokenClientProvider.java @@ -16,7 +16,7 @@ package com.alibaba.csp.sentinel.cluster.client; import com.alibaba.csp.sentinel.log.RecordLog; -import com.alibaba.csp.sentinel.util.SpiLoader; +import com.alibaba.csp.sentinel.spi.SpiLoader; /** * Provider for a universal {@link ClusterTokenClient} instance. @@ -38,7 +38,7 @@ public static ClusterTokenClient getClient() { } private static void resolveTokenClientInstance() { - ClusterTokenClient resolvedClient = SpiLoader.loadFirstInstance(ClusterTokenClient.class); + ClusterTokenClient resolvedClient = SpiLoader.of(ClusterTokenClient.class).loadFirstInstance(); if (resolvedClient == null) { RecordLog.info( "[TokenClientProvider] No existing cluster token client, cluster client mode will not be activated"); diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/cluster/server/EmbeddedClusterTokenServerProvider.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/cluster/server/EmbeddedClusterTokenServerProvider.java index 2f55e8112c..560a25ce33 100644 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/cluster/server/EmbeddedClusterTokenServerProvider.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/cluster/server/EmbeddedClusterTokenServerProvider.java @@ -16,7 +16,7 @@ package com.alibaba.csp.sentinel.cluster.server; import com.alibaba.csp.sentinel.log.RecordLog; -import com.alibaba.csp.sentinel.util.SpiLoader; +import com.alibaba.csp.sentinel.spi.SpiLoader; /** * @author Eric Zhao @@ -31,7 +31,7 @@ public final class EmbeddedClusterTokenServerProvider { } private static void resolveInstance() { - EmbeddedClusterTokenServer s = SpiLoader.loadFirstInstance(EmbeddedClusterTokenServer.class); + EmbeddedClusterTokenServer s = SpiLoader.of(EmbeddedClusterTokenServer.class).loadFirstInstance(); if (s == null) { RecordLog.warn("[EmbeddedClusterTokenServerProvider] No existing cluster token server, cluster server mode will not be activated"); } else { diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/config/SentinelConfig.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/config/SentinelConfig.java index 788f97c2a4..ea9a0f02ba 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/config/SentinelConfig.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/config/SentinelConfig.java @@ -41,6 +41,11 @@ public final class SentinelConfig { */ public static final int APP_TYPE_COMMON = 0; + /** + * Parameter value for using context classloader. + */ + private static final String CLASSLOADER_CONTEXT = "context"; + private static final Map props = new ConcurrentHashMap<>(); private static int appType = APP_TYPE_COMMON; @@ -307,6 +312,15 @@ private static void resolveAppName() { private static String toEnvKey(/*@NotBlank*/ String propKey) { return propKey.toUpperCase().replace('.', '_'); } + /** + * Whether use context classloader via config parameter + * + * @return Whether use context classloader + */ + public static boolean shouldUseContextClassloader() { + String classloaderConf = SentinelConfig.getConfig(SentinelConfig.SPI_CLASSLOADER); + return CLASSLOADER_CONTEXT.equalsIgnoreCase(classloaderConf); + } private SentinelConfig() {} } diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/init/InitExecutor.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/init/InitExecutor.java index 8e63889db0..f0feb3e9ef 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/init/InitExecutor.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/init/InitExecutor.java @@ -21,7 +21,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import com.alibaba.csp.sentinel.log.RecordLog; -import com.alibaba.csp.sentinel.spi.ServiceLoaderUtil; +import com.alibaba.csp.sentinel.spi.SpiLoader; /** * Load registered init functions and execute in order. @@ -43,9 +43,9 @@ public static void doInit() { return; } try { - ServiceLoader loader = ServiceLoaderUtil.getServiceLoader(InitFunc.class); + List initFuncs = SpiLoader.of(InitFunc.class).loadInstanceListSorted(); List initList = new ArrayList(); - for (InitFunc initFunc : loader) { + for (InitFunc initFunc : initFuncs) { RecordLog.info("[InitExecutor] Found init func: {}", initFunc.getClass().getCanonicalName()); insertSorted(initList, initFunc); } diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/metric/extension/MetricExtensionProvider.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/metric/extension/MetricExtensionProvider.java index 75da7fe78e..e938ff64f3 100644 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/metric/extension/MetricExtensionProvider.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/metric/extension/MetricExtensionProvider.java @@ -19,7 +19,7 @@ import java.util.List; import com.alibaba.csp.sentinel.log.RecordLog; -import com.alibaba.csp.sentinel.util.SpiLoader; +import com.alibaba.csp.sentinel.spi.SpiLoader; /** * Get all {@link MetricExtension} via SPI. @@ -35,7 +35,7 @@ public class MetricExtensionProvider { } private static void resolveInstance() { - List extensions = SpiLoader.loadInstanceList(MetricExtension.class); + List extensions = SpiLoader.of(MetricExtension.class).loadInstanceList(); if (extensions.isEmpty()) { RecordLog.info("[MetricExtensionProvider] No existing MetricExtension found"); diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slotchain/SlotChainProvider.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slotchain/SlotChainProvider.java index 49ab60a358..5eca50647f 100644 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slotchain/SlotChainProvider.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slotchain/SlotChainProvider.java @@ -17,7 +17,7 @@ import com.alibaba.csp.sentinel.log.RecordLog; import com.alibaba.csp.sentinel.slots.DefaultSlotChainBuilder; -import com.alibaba.csp.sentinel.util.SpiLoader; +import com.alibaba.csp.sentinel.spi.SpiLoader; /** * A provider for creating slot chains via resolved slot chain builder SPI. @@ -41,7 +41,7 @@ public static ProcessorSlotChain newSlotChain() { } // Resolve the slot chain builder SPI. - slotChainBuilder = SpiLoader.loadFirstInstanceOrDefault(SlotChainBuilder.class, DefaultSlotChainBuilder.class); + slotChainBuilder = SpiLoader.of(SlotChainBuilder.class).loadFirstInstanceOrDefault(); if (slotChainBuilder == null) { // Should not go through here. diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/DefaultSlotChainBuilder.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/DefaultSlotChainBuilder.java index cf0f72c5e5..968a65c61d 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/DefaultSlotChainBuilder.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/DefaultSlotChainBuilder.java @@ -21,7 +21,8 @@ import com.alibaba.csp.sentinel.slotchain.ProcessorSlot; import com.alibaba.csp.sentinel.slotchain.ProcessorSlotChain; import com.alibaba.csp.sentinel.slotchain.SlotChainBuilder; -import com.alibaba.csp.sentinel.util.SpiLoader; +import com.alibaba.csp.sentinel.spi.Spi; +import com.alibaba.csp.sentinel.spi.SpiLoader; import java.util.List; @@ -31,14 +32,14 @@ * @author qinan.qn * @author leyou */ +@Spi(isDefault = true) public class DefaultSlotChainBuilder implements SlotChainBuilder { @Override public ProcessorSlotChain build() { ProcessorSlotChain chain = new DefaultProcessorSlotChain(); - // Note: the instances of ProcessorSlot should be different, since they are not stateless. - List sortedSlotList = SpiLoader.loadPrototypeInstanceListSorted(ProcessorSlot.class); + List sortedSlotList = SpiLoader.of(ProcessorSlot.class).loadInstanceListSorted(); for (ProcessorSlot slot : sortedSlotList) { if (!(slot instanceof AbstractLinkedProcessorSlot)) { RecordLog.warn("The ProcessorSlot(" + slot.getClass().getCanonicalName() + ") is not an instance of AbstractLinkedProcessorSlot, can't be added into ProcessorSlotChain"); diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/authority/AuthoritySlot.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/authority/AuthoritySlot.java index 617521a676..5217b7168f 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/authority/AuthoritySlot.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/authority/AuthoritySlot.java @@ -18,12 +18,13 @@ import java.util.Map; import java.util.Set; +import com.alibaba.csp.sentinel.Constants; import com.alibaba.csp.sentinel.context.Context; import com.alibaba.csp.sentinel.node.DefaultNode; import com.alibaba.csp.sentinel.slotchain.AbstractLinkedProcessorSlot; import com.alibaba.csp.sentinel.slotchain.ProcessorSlot; import com.alibaba.csp.sentinel.slotchain.ResourceWrapper; -import com.alibaba.csp.sentinel.spi.SpiOrder; +import com.alibaba.csp.sentinel.spi.Spi; /** * A {@link ProcessorSlot} that dedicates to {@link AuthorityRule} checking. @@ -31,7 +32,7 @@ * @author leyou * @author Eric Zhao */ -@SpiOrder(-6000) +@Spi(order = Constants.ORDER_AUTHORITY_SLOT) public class AuthoritySlot extends AbstractLinkedProcessorSlot { @Override diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/degrade/DegradeSlot.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/degrade/DegradeSlot.java index c66d056d4f..bd3a2e13c9 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/degrade/DegradeSlot.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/degrade/DegradeSlot.java @@ -17,6 +17,7 @@ import java.util.List; +import com.alibaba.csp.sentinel.Constants; import com.alibaba.csp.sentinel.Entry; import com.alibaba.csp.sentinel.context.Context; import com.alibaba.csp.sentinel.node.DefaultNode; @@ -25,7 +26,7 @@ import com.alibaba.csp.sentinel.slotchain.ResourceWrapper; import com.alibaba.csp.sentinel.slots.block.BlockException; import com.alibaba.csp.sentinel.slots.block.degrade.circuitbreaker.CircuitBreaker; -import com.alibaba.csp.sentinel.spi.SpiOrder; +import com.alibaba.csp.sentinel.spi.Spi; /** * A {@link ProcessorSlot} dedicates to circuit breaking. @@ -33,7 +34,7 @@ * @author Carpenter Lee * @author Eric Zhao */ -@SpiOrder(-1000) +@Spi(order = Constants.ORDER_DEGRADE_SLOT) public class DegradeSlot extends AbstractLinkedProcessorSlot { @Override diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/FlowSlot.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/FlowSlot.java index d05d51c8e7..96b051a735 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/FlowSlot.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/FlowSlot.java @@ -15,12 +15,13 @@ */ package com.alibaba.csp.sentinel.slots.block.flow; +import com.alibaba.csp.sentinel.Constants; import com.alibaba.csp.sentinel.context.Context; import com.alibaba.csp.sentinel.node.DefaultNode; import com.alibaba.csp.sentinel.slotchain.AbstractLinkedProcessorSlot; import com.alibaba.csp.sentinel.slotchain.ResourceWrapper; import com.alibaba.csp.sentinel.slots.block.BlockException; -import com.alibaba.csp.sentinel.spi.SpiOrder; +import com.alibaba.csp.sentinel.spi.Spi; import com.alibaba.csp.sentinel.util.AssertUtil; import com.alibaba.csp.sentinel.util.function.Function; @@ -137,7 +138,7 @@ * @author jialiang.linjl * @author Eric Zhao */ -@SpiOrder(-2000) +@Spi(order = Constants.ORDER_FLOW_SLOT) public class FlowSlot extends AbstractLinkedProcessorSlot { private final FlowRuleChecker checker; diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/clusterbuilder/ClusterBuilderSlot.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/clusterbuilder/ClusterBuilderSlot.java index 5994be47b5..8750bfea3c 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/clusterbuilder/ClusterBuilderSlot.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/clusterbuilder/ClusterBuilderSlot.java @@ -18,6 +18,7 @@ import java.util.HashMap; import java.util.Map; +import com.alibaba.csp.sentinel.Constants; import com.alibaba.csp.sentinel.EntryType; import com.alibaba.csp.sentinel.context.Context; import com.alibaba.csp.sentinel.context.ContextUtil; @@ -30,7 +31,7 @@ import com.alibaba.csp.sentinel.slotchain.ProcessorSlotChain; import com.alibaba.csp.sentinel.slotchain.ResourceWrapper; import com.alibaba.csp.sentinel.slotchain.StringResourceWrapper; -import com.alibaba.csp.sentinel.spi.SpiOrder; +import com.alibaba.csp.sentinel.spi.Spi; /** *

      @@ -45,7 +46,7 @@ * * @author jialiang.linjl */ -@SpiOrder(-9000) +@Spi(isSingleton = false, order = Constants.ORDER_CLUSTER_BUILDER_SLOT) public class ClusterBuilderSlot extends AbstractLinkedProcessorSlot { /** diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/logger/LogSlot.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/logger/LogSlot.java index a7515b0168..948b910154 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/logger/LogSlot.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/logger/LogSlot.java @@ -15,19 +15,20 @@ */ package com.alibaba.csp.sentinel.slots.logger; +import com.alibaba.csp.sentinel.Constants; import com.alibaba.csp.sentinel.log.RecordLog; import com.alibaba.csp.sentinel.context.Context; import com.alibaba.csp.sentinel.node.DefaultNode; import com.alibaba.csp.sentinel.slotchain.AbstractLinkedProcessorSlot; import com.alibaba.csp.sentinel.slotchain.ResourceWrapper; import com.alibaba.csp.sentinel.slots.block.BlockException; -import com.alibaba.csp.sentinel.spi.SpiOrder; +import com.alibaba.csp.sentinel.spi.Spi; /** * A {@link com.alibaba.csp.sentinel.slotchain.ProcessorSlot} that is response for logging block exceptions * to provide concrete logs for troubleshooting. */ -@SpiOrder(-8000) +@Spi(order = Constants.ORDER_LOG_SLOT) public class LogSlot extends AbstractLinkedProcessorSlot { @Override diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/nodeselector/NodeSelectorSlot.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/nodeselector/NodeSelectorSlot.java index c965137f06..553c48e84d 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/nodeselector/NodeSelectorSlot.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/nodeselector/NodeSelectorSlot.java @@ -15,6 +15,7 @@ */ package com.alibaba.csp.sentinel.slots.nodeselector; +import com.alibaba.csp.sentinel.Constants; import com.alibaba.csp.sentinel.context.Context; import com.alibaba.csp.sentinel.context.ContextUtil; import com.alibaba.csp.sentinel.node.ClusterNode; @@ -22,7 +23,7 @@ import com.alibaba.csp.sentinel.node.EntranceNode; import com.alibaba.csp.sentinel.slotchain.AbstractLinkedProcessorSlot; import com.alibaba.csp.sentinel.slotchain.ResourceWrapper; -import com.alibaba.csp.sentinel.spi.SpiOrder; +import com.alibaba.csp.sentinel.spi.Spi; import java.util.HashMap; import java.util.Map; @@ -123,7 +124,7 @@ * @see EntranceNode * @see ContextUtil */ -@SpiOrder(-10000) +@Spi(isSingleton = false, order = Constants.ORDER_NODE_SELECTOR_SLOT) public class NodeSelectorSlot extends AbstractLinkedProcessorSlot { /** diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/statistic/StatisticSlot.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/statistic/StatisticSlot.java index d491a16aca..32a1b93d1b 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/statistic/StatisticSlot.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/statistic/StatisticSlot.java @@ -21,7 +21,7 @@ import com.alibaba.csp.sentinel.slotchain.ProcessorSlotEntryCallback; import com.alibaba.csp.sentinel.slotchain.ProcessorSlotExitCallback; import com.alibaba.csp.sentinel.slots.block.flow.PriorityWaitException; -import com.alibaba.csp.sentinel.spi.SpiOrder; +import com.alibaba.csp.sentinel.spi.Spi; import com.alibaba.csp.sentinel.util.TimeUtil; import com.alibaba.csp.sentinel.Constants; import com.alibaba.csp.sentinel.EntryType; @@ -48,7 +48,7 @@ * @author jialiang.linjl * @author Eric Zhao */ -@SpiOrder(-7000) +@Spi(order = Constants.ORDER_STATISTIC_SLOT) public class StatisticSlot extends AbstractLinkedProcessorSlot { @Override diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/system/SystemSlot.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/system/SystemSlot.java index 5912e62210..c98e491c47 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/system/SystemSlot.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/system/SystemSlot.java @@ -15,12 +15,13 @@ */ package com.alibaba.csp.sentinel.slots.system; +import com.alibaba.csp.sentinel.Constants; import com.alibaba.csp.sentinel.context.Context; import com.alibaba.csp.sentinel.node.DefaultNode; import com.alibaba.csp.sentinel.slotchain.AbstractLinkedProcessorSlot; import com.alibaba.csp.sentinel.slotchain.ProcessorSlot; import com.alibaba.csp.sentinel.slotchain.ResourceWrapper; -import com.alibaba.csp.sentinel.spi.SpiOrder; +import com.alibaba.csp.sentinel.spi.Spi; /** * A {@link ProcessorSlot} that dedicates to {@link SystemRule} checking. @@ -28,7 +29,7 @@ * @author jialiang.linjl * @author leyou */ -@SpiOrder(-5000) +@Spi(order = Constants.ORDER_SYSTEM_SLOT) public class SystemSlot extends AbstractLinkedProcessorSlot { @Override diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/ServiceLoaderUtil.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/ServiceLoaderUtil.java deleted file mode 100644 index f7fe6fde03..0000000000 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/ServiceLoaderUtil.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 1999-2019 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.alibaba.csp.sentinel.spi; - -import java.util.ServiceLoader; - -import com.alibaba.csp.sentinel.config.SentinelConfig; - -/** - * @author Eric Zhao - * @since 1.7.0 - */ -public final class ServiceLoaderUtil { - - private static final String CLASSLOADER_DEFAULT = "default"; - private static final String CLASSLOADER_CONTEXT = "context"; - - public static ServiceLoader getServiceLoader(Class clazz) { - if (shouldUseContextClassloader()) { - return ServiceLoader.load(clazz); - } else { - return ServiceLoader.load(clazz, clazz.getClassLoader()); - } - } - - public static boolean shouldUseContextClassloader() { - String classloaderConf = SentinelConfig.getConfig(SentinelConfig.SPI_CLASSLOADER); - return CLASSLOADER_CONTEXT.equalsIgnoreCase(classloaderConf); - } - - private ServiceLoaderUtil() {} -} diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/Spi.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/Spi.java new file mode 100644 index 0000000000..007f5c8e0b --- /dev/null +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/Spi.java @@ -0,0 +1,54 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.spi; + +import java.lang.annotation.*; + +/** + * Annotation for Provider class of SPI. + * + * @see SpiLoader + * @author cdfive + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE}) +@Documented +public @interface Spi { + + /** + * Alias name of Provider class + */ + String value() default ""; + + /** + * Whether create singleton instance + */ + boolean isSingleton() default true; + + /** + * Whether is the default Provider + */ + boolean isDefault() default false; + + /** + * Order priority of Provider class + */ + int order() default 0; + + int ORDER_HIGHEST = Integer.MIN_VALUE; + + int ORDER_LOWEST = Integer.MAX_VALUE; +} diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/SpiLoader.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/SpiLoader.java new file mode 100644 index 0000000000..eb6d9fc5e2 --- /dev/null +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/SpiLoader.java @@ -0,0 +1,534 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.spi; + +import com.alibaba.csp.sentinel.config.SentinelConfig; +import com.alibaba.csp.sentinel.log.RecordLog; +import com.alibaba.csp.sentinel.util.AssertUtil; +import com.alibaba.csp.sentinel.util.StringUtil; + +import java.io.*; +import java.lang.reflect.Modifier; +import java.net.URL; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * A simple SPI loading facility. + * + *

      SPI is short for Service Provider Interface.

      + * + *

      + * Service is represented by a single type, that is, a single interface or an abstract class. + * Provider is implementations of Service, that is, some classes which implement the interface or extends the abstract class. + *

      + * + *

      + * For Service type: + * Must interface or abstract class. + *

      + * + *

      + * For Provider class: + * Must have a zero-argument constructor so that they can be instantiated during loading. + *

      + * + *

      + * For Provider configuration file: + * 1. The file contains a list of fully-qualified binary names of concrete provider classes, one per line. + * 2. Space and tab characters surrounding each name, as well as blank lines, are ignored. + * 3. The comment line character is #, all characters following it are ignored. + *

      + * + *

      + * Provide common functions, such as: + * Load all Provider instance unsorted/sorted list. + * Load highest/lowest order priority instance. + * Load first-found or default instance. + * Load instance by aliasname or provider class. + *

      + * + * @author Eric Zhao + * @author cdfive + * @since 1.4.0 + * @see com.alibaba.csp.sentinel.spi.Spi + * @see java.util.ServiceLoader + */ +public final class SpiLoader { + + // Default path for the folder of Provider configuration file + private static final String SPI_FILE_PREFIX = "META-INF/services/"; + + // Cache the SpiLoader instances, key: classname of Service, value: SpiLoader instance + private static final ConcurrentHashMap SPI_LOADER_MAP = new ConcurrentHashMap<>(); + + // Cache the classes of Provider + private final List> classList = Collections.synchronizedList(new ArrayList>()); + + // Cache the sorted classes of Provider + private final List> sortedClassList = Collections.synchronizedList(new ArrayList>()); + + /** + * Cache the classes of Provider, key: aliasName, value: class of Provider. + * Note: aliasName is the value of {@link Spi} when the Provider class has {@link Spi} annotation and value is not empty, + * otherwise use classname of the Provider. + */ + private final ConcurrentHashMap> classMap = new ConcurrentHashMap<>(); + + // Cache the singleton instance of Provider, key: classname of Provider, value: Provider instance + private final ConcurrentHashMap singletonMap = new ConcurrentHashMap<>(); + + // Whether this SpiLoader has beend loaded, that is, loaded the Provider configuration file + private final AtomicBoolean loaded = new AtomicBoolean(false); + + // Default provider class + private Class defaultClass = null; + + // The Service class, must be interface or abstract class + private Class service; + + /** + * Create SpiLoader instance via Service class + * Cached by className, and load from cache first + * + * @param service Service class + * @param Service type + * @return SpiLoader instance + */ + public static SpiLoader of(Class service) { + AssertUtil.notNull(service, "SPI class cannot be null"); + AssertUtil.isTrue(service.isInterface() || Modifier.isAbstract(service.getModifiers()), + "SPI class[" + service.getName() + "] must be interface or abstract class"); + + String className = service.getName(); + SpiLoader spiLoader = SPI_LOADER_MAP.get(className); + if (spiLoader == null) { + synchronized (SpiLoader.class) { + spiLoader = SPI_LOADER_MAP.get(className); + if (spiLoader == null) { + SPI_LOADER_MAP.putIfAbsent(className, new SpiLoader<>(service)); + spiLoader = SPI_LOADER_MAP.get(className); + } + } + } + + return spiLoader; + } + + /** + * Reset and clear all SpiLoader instances. + * Package privilege, used only in test cases. + */ + synchronized static void resetAndClearAll() { + Set> entries = SPI_LOADER_MAP.entrySet(); + for (Map.Entry entry : entries) { + SpiLoader spiLoader = entry.getValue(); + spiLoader.resetAndClear(); + } + SPI_LOADER_MAP.clear(); + } + + // Private access + private SpiLoader(Class service) { + this.service = service; + } + + /** + * Load all Provider instances of the specified Service + * + * @return Provider instances list + */ + public List loadInstanceList() { + load(); + + return createInstanceList(classList); + } + + /** + * Load all Provider instances of the specified Service, sorted by order value in class's {@link Spi} annotation + * + * @return Sorted Provider instances list + */ + public List loadInstanceListSorted() { + load(); + + return createInstanceList(sortedClassList); + } + + /** + * Load highest order priority instance, order value is defined in class's {@link Spi} annotation + * + * @return Provider instance of highest order priority + */ + public S loadHighestPriorityInstance() { + load(); + + if (sortedClassList.size() == 0) { + return null; + } + + Class highestClass = sortedClassList.get(0); + return createInstance(highestClass); + } + + /** + * Load lowest order priority instance, order value is defined in class's {@link Spi} annotation + * + * @return Provider instance of lowest order priority + */ + public S loadLowestPriorityInstance() { + load(); + + if (sortedClassList.size() == 0) { + return null; + } + + Class lowestClass = sortedClassList.get(sortedClassList.size() - 1); + return createInstance(lowestClass); + } + + /** + * Load the first-found Provider instance + * + * @return Provider instance of first-found specific + */ + public S loadFirstInstance() { + load(); + + if (classList.size() == 0) { + return null; + } + + Class serviceClass = classList.get(0); + S instance = createInstance(serviceClass); + return instance; + } + + /** + * Load the first-found Provider instance,if not found, return default Provider instance + * + * @return Provider instance + */ + public S loadFirstInstanceOrDefault() { + load(); + + for (Class clazz : classList) { + if (defaultClass == null || clazz != defaultClass) { + return createInstance(clazz); + } + } + + return loadDefaultInstance(); + } + + /** + * Load default Provider instance + * Provider class with @Spi(isDefault = true) + * + * @return default Provider instance + */ + public S loadDefaultInstance() { + load(); + + if (defaultClass == null) { + return null; + } + + return createInstance(defaultClass); + } + + /** + * Load instance by specific class type + * + * @param clazz class type + * @return Provider instance + */ + public S loadInstance(Class clazz) { + AssertUtil.notNull(clazz, "SPI class cannot be null"); + + if (clazz.equals(service)) { + fail(clazz.getName() + " is not subtype of " + service.getName()); + } + + load(); + + if (!classMap.containsValue(clazz)) { + fail(clazz.getName() + " is not Provider class of " + service.getName() + ",check if it is in the SPI configuration file?"); + } + + return createInstance(clazz); + } + + /** + * Load instance by aliasName of Provider class + * + * @param aliasName aliasName of Provider class + * @return Provider instance + */ + public S loadInstance(String aliasName) { + AssertUtil.notEmpty(aliasName, "aliasName cannot be empty"); + + load(); + + Class clazz = classMap.get(aliasName); + if (clazz == null) { + fail("no Provider class's aliasName is " + aliasName); + } + + return createInstance(clazz); + } + + /** + * Reset and clear all fields of current SpiLoader instance and remove instance in SPI_LOADER_MAP + */ + synchronized void resetAndClear() { + SPI_LOADER_MAP.remove(service.getName()); + classList.clear(); + sortedClassList.clear(); + classMap.clear(); + singletonMap.clear(); + defaultClass = null; + loaded.set(false); + } + + /** + * Load the Provider class from Provider configuration file + */ + public void load() { + if (!loaded.compareAndSet(false, true)) { + return; + } + + String fullFileName = SPI_FILE_PREFIX + service.getName(); + ClassLoader classLoader; + if (SentinelConfig.shouldUseContextClassloader()) { + classLoader = Thread.currentThread().getContextClassLoader(); + } else { + classLoader = service.getClassLoader(); + } + if (classLoader == null) { + classLoader = ClassLoader.getSystemClassLoader(); + } + Enumeration urls = null; + try { + urls = classLoader.getResources(fullFileName); + } catch (IOException e) { + fail("Error locating SPI configuration file,filename=" + fullFileName + ",classloader=" + classLoader, e); + } + + if (urls == null || !urls.hasMoreElements()) { + RecordLog.warn("No SPI configuration file,filename=" + fullFileName + ",classloader=" + classLoader); + return; + } + + while (urls.hasMoreElements()) { + URL url = urls.nextElement(); + + InputStream in = null; + BufferedReader br = null; + try { + in = url.openStream(); + br = new BufferedReader(new InputStreamReader(in, "utf-8")); + String line; + while ((line = br.readLine()) != null) { + if (StringUtil.isBlank(line)) { + // Skip blank line + continue; + } + + line = line.trim(); + int commentIndex = line.indexOf("#"); + if (commentIndex == 0) { + // Skip comment line + continue; + } + + if (commentIndex > 0) { + line = line.substring(0, commentIndex); + } + line = line.trim(); + + Class clazz = null; + try { + clazz = (Class) Class.forName(line, false, classLoader); + } catch (ClassNotFoundException e) { + fail("class " + line + " not found", e); + } + + if (!service.isAssignableFrom(clazz)) { + fail("class " + clazz.getName() + "is not subtype of " + service.getName() + ",SPI configuration file=" + fullFileName); + } + + classList.add(clazz); + Spi spi = clazz.getAnnotation(Spi.class); + String aliasName = spi == null || "".equals(spi.value()) ? clazz.getName() : spi.value(); + if (classMap.containsKey(aliasName)) { + Class existClass = classMap.get(aliasName); + fail("Found repeat aliasname for " + clazz.getName() + " and " + + existClass.getName() + ",SPI configuration file=" + fullFileName); + } + classMap.put(aliasName, clazz); + + if (spi != null && spi.isDefault()) { + if (defaultClass != null) { + fail("Found more than one default Provider,SPI configuration file=" + fullFileName); + } + defaultClass = clazz; + } + + RecordLog.info("[SpiLoader]Found SPI,Service={},Provider={},aliasname={},isSingleton={},isDefault={},order={}", + service.getName(), line, aliasName + , spi == null ? true : spi.isSingleton() + , spi == null ? false : spi.isDefault() + , spi == null ? 0 : spi.order()); + } + } catch (IOException e) { + fail("error reading SPI configuration file", e); + } finally { + closeResources(in, br); + } + } + + sortedClassList.addAll(classList); + Collections.sort(sortedClassList, new Comparator>() { + @Override + public int compare(Class o1, Class o2) { + Spi spi1 = o1.getAnnotation(Spi.class); + int order1 = spi1 == null ? 0 : spi1.order(); + + Spi spi2 = o2.getAnnotation(Spi.class); + int order2 = spi2 == null ? 0 : spi2.order(); + + return Integer.compare(order1, order2); + } + }); + } + + @Override + public String toString() { + return "com.alibaba.csp.sentinel.spi.SpiLoader[" + service.getName() + "]"; + } + + /** + * Create Provider instance list + * + * @param clazzList class types of Providers + * @return Provider instance list + */ + private List createInstanceList(List> clazzList) { + if (clazzList == null || clazzList.size() == 0) { + return Collections.emptyList(); + } + + List instances = new ArrayList<>(clazzList.size()); + for (Class clazz : clazzList) { + S instance = createInstance(clazz); + instances.add(instance); + } + return instances; + } + + /** + * Create Provider instance + * + * @param clazz class type of Provider + * @return Provider class + */ + private S createInstance(Class clazz) { + Spi spi = clazz.getAnnotation(Spi.class); + boolean singleton = true; + if (spi != null) { + singleton = spi.isSingleton(); + } + return createInstance(clazz, singleton); + } + + /** + * Create Provider instance + * + * @param clazz class type of Provider + * @param singleton if instance is singleton or prototype + * @return Provider instance + */ + private S createInstance(Class clazz, boolean singleton) { + S instance = null; + try { + if (singleton) { + instance = singletonMap.get(clazz.getName()); + if (instance == null) { + synchronized (this) { + instance = singletonMap.get(clazz.getName()); + if (instance == null) { + instance = service.cast(clazz.newInstance()); + singletonMap.put(clazz.getName(), instance); + } + } + } + } else { + instance = service.cast(clazz.newInstance()); + } + } catch (Throwable e) { + fail(clazz.getName() + " could not be instantiated"); + } + return instance; + } + + /** + * Close all resources + * + * @param closeables {@link Closeable} resources + */ + private void closeResources(Closeable... closeables) { + if (closeables == null || closeables.length == 0) { + return; + } + + Exception firstException = null; + for (Closeable closeable : closeables) { + try { + closeable.close(); + } catch (Exception e) { + if (firstException != null) { + firstException = e; + } + } + } + if (firstException != null) { + fail("error closing resources", firstException); + } + } + + /** + * Throw {@link SpiLoaderException} with message + * + * @param msg error message + */ + private void fail(String msg) { + RecordLog.error(msg); + throw new SpiLoaderException("[" + service.getName() + "]" + msg); + } + + /** + * Throw {@link SpiLoaderException} with message and Throwable + * + * @param msg error message + */ + private void fail(String msg, Throwable e) { + RecordLog.error(msg, e); + throw new SpiLoaderException("[" + service.getName() + "]" + msg, e); + } +} diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/SpiLoaderException.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/SpiLoaderException.java new file mode 100644 index 0000000000..c2cc1a9520 --- /dev/null +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/SpiLoaderException.java @@ -0,0 +1,36 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.spi; + +/** + * Error thrown when something goes wrong while loading Provider via {@link SpiLoader}. + * + * @author cdfive + */ +public class SpiLoaderException extends RuntimeException { + + public SpiLoaderException() { + super(); + } + + public SpiLoaderException(String message) { + super(message); + } + + public SpiLoaderException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/SpiOrder.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/SpiOrder.java deleted file mode 100644 index 279ed31062..0000000000 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/SpiOrder.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 1999-2019 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.alibaba.csp.sentinel.spi; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * @author Eric Zhao - * @since 1.6.0 - */ -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.TYPE}) -@Documented -public @interface SpiOrder { - - /** - * Represents the lowest precedence. - */ - int LOWEST_PRECEDENCE = Integer.MAX_VALUE; - /** - * Represents the highest precedence. - */ - int HIGHEST_PRECEDENCE = Integer.MIN_VALUE; - - /** - * The SPI precedence value. Lowest precedence by default. - * - * @return the precedence value - */ - int value() default LOWEST_PRECEDENCE; -} diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/util/SpiLoader.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/util/SpiLoader.java deleted file mode 100644 index 47b3342a5c..0000000000 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/util/SpiLoader.java +++ /dev/null @@ -1,291 +0,0 @@ -/* - * Copyright 1999-2018 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.alibaba.csp.sentinel.util; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.ServiceLoader; -import java.util.concurrent.ConcurrentHashMap; - -import com.alibaba.csp.sentinel.log.RecordLog; -import com.alibaba.csp.sentinel.spi.ServiceLoaderUtil; -import com.alibaba.csp.sentinel.spi.SpiOrder; - -/** - * @author Eric Zhao - * @since 1.4.0 - */ -public final class SpiLoader { - - private static final Map SERVICE_LOADER_MAP = new ConcurrentHashMap(); - - /** - * Load the first-found specific SPI instance - * - * @param clazz class of the SPI interface - * @param SPI type - * @return the first specific SPI instance if exists, or else return null - * @since 1.7.0 - */ - public static T loadFirstInstance(Class clazz) { - AssertUtil.notNull(clazz, "SPI class cannot be null"); - try { - String key = clazz.getName(); - // Not thread-safe, as it's expected to be resolved in a thread-safe context. - ServiceLoader serviceLoader = SERVICE_LOADER_MAP.get(key); - if (serviceLoader == null) { - serviceLoader = ServiceLoaderUtil.getServiceLoader(clazz); - SERVICE_LOADER_MAP.put(key, serviceLoader); - } - - Iterator iterator = serviceLoader.iterator(); - if (iterator.hasNext()) { - return iterator.next(); - } else { - return null; - } - } catch (Throwable t) { - RecordLog.error("[SpiLoader] ERROR: loadFirstInstance failed", t); - t.printStackTrace(); - return null; - } - } - - /** - * Load the first-found specific SPI instance (excluding provided default SPI class). - * If no other SPI implementation found, then create a default SPI instance. - * - * @param clazz class of the SPI interface - * @param defaultClass class of the default SPI implementation (if no other implementation found) - * @param SPI type - * @return the first specific SPI instance if exists, or else the default SPI instance - * @since 1.7.0 - */ - public static T loadFirstInstanceOrDefault(Class clazz, Class defaultClass) { - AssertUtil.notNull(clazz, "SPI class cannot be null"); - AssertUtil.notNull(defaultClass, "default SPI class cannot be null"); - try { - String key = clazz.getName(); - // Not thread-safe, as it's expected to be resolved in a thread-safe context. - ServiceLoader serviceLoader = SERVICE_LOADER_MAP.get(key); - if (serviceLoader == null) { - serviceLoader = ServiceLoaderUtil.getServiceLoader(clazz); - SERVICE_LOADER_MAP.put(key, serviceLoader); - } - - for (T instance : serviceLoader) { - if (instance.getClass() != defaultClass) { - return instance; - } - } - return defaultClass.newInstance(); - } catch (Throwable t) { - RecordLog.error("[SpiLoader] ERROR: loadFirstInstanceOrDefault failed", t); - t.printStackTrace(); - return null; - } - } - - /** - * Load the SPI instance with highest priority. - * - * Note: each call return same instances. - * - * @param clazz class of the SPI - * @param SPI type - * @return the SPI instance with highest priority if exists, or else false - * @since 1.6.0 - */ - public static T loadHighestPriorityInstance(Class clazz) { - try { - String key = clazz.getName(); - // Not thread-safe, as it's expected to be resolved in a thread-safe context. - ServiceLoader serviceLoader = SERVICE_LOADER_MAP.get(key); - if (serviceLoader == null) { - serviceLoader = ServiceLoaderUtil.getServiceLoader(clazz); - SERVICE_LOADER_MAP.put(key, serviceLoader); - } - - SpiOrderWrapper w = null; - for (T spi : serviceLoader) { - int order = SpiOrderResolver.resolveOrder(spi); - RecordLog.info("[SpiLoader] Found {} SPI: {} with order {}", clazz.getSimpleName(), - spi.getClass().getCanonicalName(), order); - if (w == null || order < w.order) { - w = new SpiOrderWrapper<>(order, spi); - } - } - return w == null ? null : w.spi; - } catch (Throwable t) { - RecordLog.error("[SpiLoader] ERROR: loadHighestPriorityInstance failed", t); - t.printStackTrace(); - return null; - } - } - - /** - * Load and sorted SPI instance list. - * Load the SPI instance list for provided SPI interface. - * - * Note: each call return same instances. - * - * @param clazz class of the SPI - * @param SPI type - * @return sorted SPI instance list - * @since 1.6.0 - */ - public static List loadInstanceList(Class clazz) { - try { - String key = clazz.getName(); - // Not thread-safe, as it's expected to be resolved in a thread-safe context. - ServiceLoader serviceLoader = SERVICE_LOADER_MAP.get(key); - if (serviceLoader == null) { - serviceLoader = ServiceLoaderUtil.getServiceLoader(clazz); - SERVICE_LOADER_MAP.put(key, serviceLoader); - } - - List list = new ArrayList<>(); - for (T spi : serviceLoader) { - RecordLog.info("[SpiLoader] Found {} SPI: {}", clazz.getSimpleName(), - spi.getClass().getCanonicalName()); - list.add(spi); - } - return list; - } catch (Throwable t) { - RecordLog.error("[SpiLoader] ERROR: loadInstanceList failed", t); - t.printStackTrace(); - return new ArrayList<>(); - } - } - - /** - * Load the sorted SPI instance list for provided SPI interface. - * - * Note: each call return same instances. - * - * @param clazz class of the SPI - * @param SPI type - * @return sorted SPI instance list - * @since 1.6.0 - */ - public static List loadInstanceListSorted(Class clazz) { - try { - String key = clazz.getName(); - // Not thread-safe, as it's expected to be resolved in a thread-safe context. - ServiceLoader serviceLoader = SERVICE_LOADER_MAP.get(key); - if (serviceLoader == null) { - serviceLoader = ServiceLoaderUtil.getServiceLoader(clazz); - SERVICE_LOADER_MAP.put(key, serviceLoader); - } - - List> orderWrappers = new ArrayList<>(); - for (T spi : serviceLoader) { - int order = SpiOrderResolver.resolveOrder(spi); - // Since SPI is lazy initialized in ServiceLoader, we use online sort algorithm here. - SpiOrderResolver.insertSorted(orderWrappers, spi, order); - RecordLog.info("[SpiLoader] Found {} SPI: {} with order {}", clazz.getSimpleName(), - spi.getClass().getCanonicalName(), order); - } - List list = new ArrayList<>(orderWrappers.size()); - for (int i = 0; i < orderWrappers.size(); i++) { - list.add(orderWrappers.get(i).spi); - } - return list; - } catch (Throwable t) { - RecordLog.error("[SpiLoader] ERROR: loadInstanceListSorted failed", t); - t.printStackTrace(); - return new ArrayList<>(); - } - } - - /** - * Load the sorted and prototype SPI instance list for provided SPI interface. - * - * Note: each call return different instances, i.e. prototype instance, not singleton instance. - * - * @param clazz class of the SPI - * @param SPI type - * @return sorted and different SPI instance list - * @since 1.7.2 - */ - public static List loadPrototypeInstanceListSorted(Class clazz) { - try { - // Not use SERVICE_LOADER_MAP, to make sure the instances loaded are different. - ServiceLoader serviceLoader = ServiceLoaderUtil.getServiceLoader(clazz); - - List> orderWrappers = new ArrayList<>(); - for (T spi : serviceLoader) { - int order = SpiOrderResolver.resolveOrder(spi); - // Since SPI is lazy initialized in ServiceLoader, we use online sort algorithm here. - SpiOrderResolver.insertSorted(orderWrappers, spi, order); - RecordLog.debug("[SpiLoader] Found {} SPI: {} with order {}", clazz.getSimpleName(), - spi.getClass().getCanonicalName(), order); - } - List list = new ArrayList<>(orderWrappers.size()); - for (int i = 0; i < orderWrappers.size(); i++) { - list.add(orderWrappers.get(i).spi); - } - return list; - } catch (Throwable t) { - RecordLog.error("[SpiLoader] ERROR: loadPrototypeInstanceListSorted failed", t); - t.printStackTrace(); - return new ArrayList<>(); - } - } - - private static class SpiOrderResolver { - private static void insertSorted(List> list, T spi, int order) { - int idx = 0; - for (; idx < list.size(); idx++) { - if (list.get(idx).getOrder() > order) { - break; - } - } - list.add(idx, new SpiOrderWrapper<>(order, spi)); - } - - private static int resolveOrder(T spi) { - if (!spi.getClass().isAnnotationPresent(SpiOrder.class)) { - // Lowest precedence by default. - return SpiOrder.LOWEST_PRECEDENCE; - } else { - return spi.getClass().getAnnotation(SpiOrder.class).value(); - } - } - } - - private static class SpiOrderWrapper { - private final int order; - private final T spi; - - SpiOrderWrapper(int order, T spi) { - this.order = order; - this.spi = spi; - } - - int getOrder() { - return order; - } - - T getSpi() { - return spi; - } - } - - private SpiLoader() {} -} diff --git a/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/SpiLoaderTest.java b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/SpiLoaderTest.java new file mode 100644 index 0000000000..7eb8f13e75 --- /dev/null +++ b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/SpiLoaderTest.java @@ -0,0 +1,321 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.csp.sentinel.spi; + +import com.alibaba.csp.sentinel.SphU; +import com.alibaba.csp.sentinel.init.InitFunc; +import com.alibaba.csp.sentinel.metric.extension.MetricCallbackInit; +import com.alibaba.csp.sentinel.slotchain.ProcessorSlot; +import com.alibaba.csp.sentinel.slotchain.SlotChainBuilder; +import com.alibaba.csp.sentinel.slots.DefaultSlotChainBuilder; +import com.alibaba.csp.sentinel.slots.block.authority.AuthoritySlot; +import com.alibaba.csp.sentinel.slots.block.degrade.DegradeSlot; +import com.alibaba.csp.sentinel.slots.block.flow.FlowSlot; +import com.alibaba.csp.sentinel.slots.clusterbuilder.ClusterBuilderSlot; +import com.alibaba.csp.sentinel.slots.logger.LogSlot; +import com.alibaba.csp.sentinel.slots.nodeselector.NodeSelectorSlot; +import com.alibaba.csp.sentinel.slots.statistic.StatisticSlot; +import com.alibaba.csp.sentinel.slots.system.SystemSlot; +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.*; +import static org.hamcrest.Matchers.*; + +/** + * Test cases for {@link SpiLoader}. + * + * @author cdfive + */ +public class SpiLoaderTest { + + @Before + public void setUp() { + SpiLoader.resetAndClearAll(); + } + + @Before + public void tearDown() { + SpiLoader.resetAndClearAll(); + } + + @Test + public void testCreateSpiLoader() { + SpiLoader slotLoader1 = SpiLoader.of(ProcessorSlot.class); + assertNotNull(slotLoader1); + + SpiLoader slotLoader2 = SpiLoader.of(ProcessorSlot.class); + assertNotNull(slotLoader2); + + assertSame(slotLoader1, slotLoader2); + + SpiLoader initFuncLoader1 = SpiLoader.of(InitFunc.class); + assertNotNull(initFuncLoader1); + assertNotSame(slotLoader1, initFuncLoader1); + assertNotEquals(slotLoader1, initFuncLoader1); + + SpiLoader initFuncLoader2 = SpiLoader.of(InitFunc.class); + assertNotNull(initFuncLoader2); + + assertSame(initFuncLoader1, initFuncLoader2); + } + + @Test + public void testCreateSpiLoaderNotInterface() { + try { + SpiLoader.of(SphU.class); + fail(); + } catch (Exception e) { + assertTrue(e instanceof IllegalArgumentException); + assertThat(e.getMessage(), containsString("must be interface or abstract class")); + } + } + + @Test + public void testLoadInstanceList() { + SpiLoader spiLoader = SpiLoader.of(ProcessorSlot.class); + List slots1 = spiLoader.loadInstanceList(); + List slots2 = spiLoader.loadInstanceList(); + assertNotSame(slots1, slots2); + + List> prototypeSlotClasses = new ArrayList<>(2); + prototypeSlotClasses.add(NodeSelectorSlot.class); + prototypeSlotClasses.add(ClusterBuilderSlot.class); + + List> singletonSlotClasses = new ArrayList<>(6); + singletonSlotClasses.add(LogSlot.class); + singletonSlotClasses.add(StatisticSlot.class); + singletonSlotClasses.add(AuthoritySlot.class); + singletonSlotClasses.add(SystemSlot.class); + singletonSlotClasses.add(FlowSlot.class); + singletonSlotClasses.add(DegradeSlot.class); + + for (int i = 0; i < slots1.size(); i++) { + ProcessorSlot slot1 = slots1.get(i); + ProcessorSlot slot2 = slots2.get(i); + assertSame(slot1.getClass(), slot2.getClass()); + + boolean found = false; + for (Class prototypeSlotClass : prototypeSlotClasses) { + if (prototypeSlotClass.equals(slot1.getClass())) { + found = true; + assertTrue(prototypeSlotClass.equals(slot2.getClass())); + // Verify prototype function + assertNotSame(slot1, slot2); + break; + } + } + + if (found) { + continue; + } + + for (Class singletonSlotClass : singletonSlotClasses) { + if (singletonSlotClass.equals(slot1.getClass())) { + found = true; + assertTrue(singletonSlotClass.equals(slot2.getClass())); + // Verify single function + assertSame(slot1, slot2); + break; + } + } + + if (!found) { + fail("Should found and not go through here"); + } + } + } + + @Test + public void testLoadInstanceListSorted() { + List sortedSlots = SpiLoader.of(ProcessorSlot.class).loadInstanceListSorted(); + assertNotNull(sortedSlots); + + // Total 8 default slot in sentinel-core + assertEquals(8, sortedSlots.size()); + + // Verify the order of slot + int index = 0; + assertTrue(sortedSlots.get(index++) instanceof NodeSelectorSlot); + assertTrue(sortedSlots.get(index++) instanceof ClusterBuilderSlot); + assertTrue(sortedSlots.get(index++) instanceof LogSlot); + assertTrue(sortedSlots.get(index++) instanceof StatisticSlot); + assertTrue(sortedSlots.get(index++) instanceof AuthoritySlot); + assertTrue(sortedSlots.get(index++) instanceof SystemSlot); + assertTrue(sortedSlots.get(index++) instanceof FlowSlot); + assertTrue(sortedSlots.get(index++) instanceof DegradeSlot); + } + + @Test + public void testLoadHighestPriorityInstance() { + ProcessorSlot slot = SpiLoader.of(ProcessorSlot.class).loadHighestPriorityInstance(); + assertNotNull(slot); + + // NodeSelectorSlot is highest order priority with @Spi(order = -10000) among all slots + assertTrue(slot instanceof NodeSelectorSlot); + } + + @Test + public void testLoadLowestPriorityInstance() { + ProcessorSlot slot = SpiLoader.of(ProcessorSlot.class).loadLowestPriorityInstance(); + assertNotNull(slot); + + // NodeSelectorSlot is lowest order priority with @Spi(order = -1000) among all slots + assertTrue(slot instanceof DegradeSlot); + } + + @Test + public void testLoadFirstInstance() { + ProcessorSlot slot = SpiLoader.of(ProcessorSlot.class).loadFirstInstance(); + assertNotNull(slot); + assertTrue(slot instanceof NodeSelectorSlot); + + SlotChainBuilder chainBuilder = SpiLoader.of(SlotChainBuilder.class).loadFirstInstance(); + assertNotNull(chainBuilder); + assertTrue(chainBuilder instanceof SlotChainBuilder); + + InitFunc initFunc = SpiLoader.of(InitFunc.class).loadFirstInstance(); + assertNotNull(initFunc); + assertTrue(initFunc instanceof MetricCallbackInit); + } + + @Test + public void testLoadFirstInstanceOrDefault() { + SlotChainBuilder slotChainBuilder = SpiLoader.of(SlotChainBuilder.class).loadFirstInstanceOrDefault(); + assertNotNull(slotChainBuilder); + assertTrue(slotChainBuilder instanceof DefaultSlotChainBuilder); + } + + @Test + public void testLoadDefaultInstance() { + SlotChainBuilder slotChainBuilder = SpiLoader.of(SlotChainBuilder.class).loadDefaultInstance(); + assertNotNull(slotChainBuilder); + assertTrue(slotChainBuilder instanceof DefaultSlotChainBuilder); + } + + @Test + public void testLoadInstanceByClass() { + ProcessorSlot slot = SpiLoader.of(ProcessorSlot.class).loadInstance(StatisticSlot.class); + assertNotNull(slot); + assertTrue(slot instanceof StatisticSlot); + } + + @Test + public void testLoadInstanceByAliasName() { + ProcessorSlot slot = SpiLoader.of(ProcessorSlot.class).loadInstance("com.alibaba.csp.sentinel.slots.statistic.StatisticSlot"); + assertNotNull(slot); + assertTrue(slot instanceof StatisticSlot); + } + + @Test + public void testToString() { + SpiLoader spiLoader = SpiLoader.of(ProcessorSlot.class); + assertEquals("com.alibaba.csp.sentinel.spi.SpiLoader[com.alibaba.csp.sentinel.slotchain.ProcessorSlot]" + , spiLoader.toString()); + } + + /** + * Following test cases are for some test Interfaces. + */ + @Test + public void test_TestNoSpiFileInterface() { + SpiLoader loader = SpiLoader.of(TestNoSpiFileInterface.class); + + List providers = loader.loadInstanceList(); + assertTrue(providers.size() == 0); + + List sortedProviders = loader.loadInstanceListSorted(); + assertTrue(sortedProviders.size() == 0); + + TestNoSpiFileInterface firstProvider = loader.loadFirstInstance(); + assertNull(firstProvider); + + TestNoSpiFileInterface defaultProvider = loader.loadDefaultInstance(); + assertNull(defaultProvider); + } + + @Test + public void test_TestNoProviderInterface() { + List providers = SpiLoader.of(TestNoProviderInterface.class).loadInstanceList(); + assertTrue(providers.size() == 0); + } + + @Test + public void test_TestInterface() { + SpiLoader loader = SpiLoader.of(TestInterface.class); + + List providers = loader.loadInstanceList(); + assertTrue(providers.size() == 4); + assertTrue(providers.get(0) instanceof TestOneProvider); + assertTrue(providers.get(1) instanceof TestTwoProvider); + assertTrue(providers.get(2) instanceof TestThreeProvider); + assertTrue(providers.get(3) instanceof TestFiveProvider); + + List sortedProviders = loader.loadInstanceListSorted(); + assertEquals(sortedProviders.size(), 4); + assertTrue(sortedProviders.get(0) instanceof TestThreeProvider); + assertTrue(sortedProviders.get(1) instanceof TestFiveProvider); + assertTrue(sortedProviders.get(2) instanceof TestTwoProvider); + assertTrue(sortedProviders.get(3) instanceof TestOneProvider); + + assertSame(providers.get(0), sortedProviders.get(3)); + assertSame(providers.get(1), sortedProviders.get(2)); + assertNotSame(providers.get(2), sortedProviders.get(0)); + assertSame(providers.get(3), sortedProviders.get(1)); + + assertTrue(loader.loadDefaultInstance() instanceof TestFiveProvider); + + assertTrue(loader.loadHighestPriorityInstance() instanceof TestThreeProvider); + assertTrue(loader.loadLowestPriorityInstance() instanceof TestOneProvider); + + assertTrue(loader.loadInstance("two") instanceof TestTwoProvider); + assertSame(loader.loadInstance("two"), loader.loadInstance("two")); + + try { + loader.loadInstance("one"); + fail(); + } catch (Exception e) { + assertTrue(e instanceof SpiLoaderException); + assertThat(e.getMessage(), containsString("no Provider class's aliasName is one")); + } + + TestInterface oneProvider1 = loader.loadInstance(TestOneProvider.class); + assertNotNull(oneProvider1); + TestInterface oneProvider2 = loader.loadInstance(TestOneProvider.class); + assertNotNull(oneProvider2); + assertSame(oneProvider1, oneProvider2); + + try { + loader.loadInstance(TestInterface.class); + fail(); + } catch (Exception e) { + assertTrue(e instanceof SpiLoaderException); + assertThat(e.getMessage(), containsString("is not subtype of")); + } + + try { + loader.loadInstance(TestFourProvider.class); + fail(); + } catch (Exception e) { + assertTrue(e instanceof SpiLoaderException); + assertThat(e.getMessage(), allOf(containsString("is not Provider class of") + , containsString("check if it is in the SPI configuration file?"))); + } + } +} diff --git a/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestFiveProvider.java b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestFiveProvider.java new file mode 100644 index 0000000000..bcad41aa8a --- /dev/null +++ b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestFiveProvider.java @@ -0,0 +1,9 @@ +package com.alibaba.csp.sentinel.spi; + +/** + * @author cdfive + */ +@Spi(value = "five", isDefault = true, order = -270) +public class TestFiveProvider implements TestInterface { + +} diff --git a/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestFourProvider.java b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestFourProvider.java new file mode 100644 index 0000000000..6e8b7b5c94 --- /dev/null +++ b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestFourProvider.java @@ -0,0 +1,11 @@ +package com.alibaba.csp.sentinel.spi; + +/** + * This Provider class isn't configured in SPI file. + * + * @author cdfive + */ +@Spi(value = "four", isSingleton = true, order = -400) +public class TestFourProvider implements TestInterface { + +} diff --git a/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestInterface.java b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestInterface.java new file mode 100644 index 0000000000..4005be9d37 --- /dev/null +++ b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestInterface.java @@ -0,0 +1,8 @@ +package com.alibaba.csp.sentinel.spi; + +/** + * @author cdfive + */ +public interface TestInterface { + +} diff --git a/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestNoProviderInterface.java b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestNoProviderInterface.java new file mode 100644 index 0000000000..3c1d5a55e1 --- /dev/null +++ b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestNoProviderInterface.java @@ -0,0 +1,8 @@ +package com.alibaba.csp.sentinel.spi; + +/** + * @author cdfive + */ +public interface TestNoProviderInterface { + +} diff --git a/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestNoSpiFileInterface.java b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestNoSpiFileInterface.java new file mode 100644 index 0000000000..dd678880ae --- /dev/null +++ b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestNoSpiFileInterface.java @@ -0,0 +1,8 @@ +package com.alibaba.csp.sentinel.spi; + +/** + * @author cdfive + */ +public interface TestNoSpiFileInterface { + +} diff --git a/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestOneProvider.java b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestOneProvider.java new file mode 100644 index 0000000000..67e83475db --- /dev/null +++ b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestOneProvider.java @@ -0,0 +1,8 @@ +package com.alibaba.csp.sentinel.spi; + +/** + * @author cdfive + */ +public class TestOneProvider implements TestInterface { + +} diff --git a/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestThreeProvider.java b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestThreeProvider.java new file mode 100644 index 0000000000..1912ef02f0 --- /dev/null +++ b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestThreeProvider.java @@ -0,0 +1,9 @@ +package com.alibaba.csp.sentinel.spi; + +/** + * @author cdfive + */ +@Spi(order = -300, isSingleton = false) +public class TestThreeProvider implements TestInterface { + +} diff --git a/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestTwoProvider.java b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestTwoProvider.java new file mode 100644 index 0000000000..710c6268de --- /dev/null +++ b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/spi/TestTwoProvider.java @@ -0,0 +1,9 @@ +package com.alibaba.csp.sentinel.spi; + +/** + * @author cdfive + */ +@Spi(value = "two", isSingleton = true, order = -200) +public class TestTwoProvider implements TestInterface { + +} diff --git a/sentinel-core/src/test/java/com/alibaba/csp/sentinel/util/SpiLoaderTest.java b/sentinel-core/src/test/java/com/alibaba/csp/sentinel/util/SpiLoaderTest.java deleted file mode 100644 index 622f7fd249..0000000000 --- a/sentinel-core/src/test/java/com/alibaba/csp/sentinel/util/SpiLoaderTest.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright 1999-2018 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.alibaba.csp.sentinel.util; - -import com.alibaba.csp.sentinel.slotchain.ProcessorSlot; -import com.alibaba.csp.sentinel.slotchain.SlotChainBuilder; -import com.alibaba.csp.sentinel.slots.DefaultSlotChainBuilder; -import com.alibaba.csp.sentinel.slots.block.authority.AuthoritySlot; -import com.alibaba.csp.sentinel.slots.block.degrade.DegradeSlot; -import com.alibaba.csp.sentinel.slots.block.flow.FlowSlot; -import com.alibaba.csp.sentinel.slots.clusterbuilder.ClusterBuilderSlot; -import com.alibaba.csp.sentinel.slots.logger.LogSlot; -import com.alibaba.csp.sentinel.slots.nodeselector.NodeSelectorSlot; -import com.alibaba.csp.sentinel.slots.statistic.StatisticSlot; -import com.alibaba.csp.sentinel.slots.system.SystemSlot; -import org.junit.Test; - -import java.util.List; - -import static org.junit.Assert.*; - -/** - * Test cases for {@link SpiLoader}. - * - * @author cdfive - */ -public class SpiLoaderTest { - - @Test - public void testLoadFirstInstance() { - ProcessorSlot processorSlot = SpiLoader.loadFirstInstance(ProcessorSlot.class); - assertNotNull(processorSlot); - - ProcessorSlot processorSlot2 = SpiLoader.loadFirstInstance(ProcessorSlot.class); - // As SERVICE_LOADER_MAP in SpiLoader cached the instance, so they're same instances - assertSame(processorSlot, processorSlot2); - - SlotChainBuilder slotChainBuilder = SpiLoader.loadFirstInstance(SlotChainBuilder.class); - assertNotNull(slotChainBuilder); - assertTrue(slotChainBuilder instanceof DefaultSlotChainBuilder); - - SlotChainBuilder slotChainBuilder2 = SpiLoader.loadFirstInstance(SlotChainBuilder.class); - // As SERVICE_LOADER_MAP in SpiLoader cached the instance, so they're same instances - assertSame(slotChainBuilder, slotChainBuilder2); - } - - @Test - public void testLoadHighestPriorityInstance() { - ProcessorSlot processorSlot = SpiLoader.loadHighestPriorityInstance(ProcessorSlot.class); - assertNotNull(processorSlot); - - // NodeSelectorSlot is highest order with @SpiOrder(-10000), among all slots - assertTrue(processorSlot instanceof NodeSelectorSlot); - - ProcessorSlot processorSlot2 = SpiLoader.loadHighestPriorityInstance(ProcessorSlot.class); - // As SERVICE_LOADER_MAP in SpiLoader cached the instance, so they're same instances - assertSame(processorSlot, processorSlot2); - } - - @Test - public void testLoadInstanceList() { - List slots = SpiLoader.loadInstanceList(ProcessorSlot.class); - assertNotNull(slots); - - // Total 8 default slot in sentinel-core - assertEquals(8, slots.size()); - - // Get the first slot of slots - ProcessorSlot firstSlot = slots.get(0); - - // Call loadInstanceList again - List slots2 = SpiLoader.loadInstanceList(ProcessorSlot.class); - // Note: the return list are different, and the item instances in list are same - assertNotSame(slots, slots2); - - // Get the first slot of slots2 - ProcessorSlot firstSlot2 = slots2.get(0); - - // As SERVICE_LOADER_MAP in SpiLoader cached the instance, so they're same instances - assertSame(firstSlot, firstSlot2); - } - - @Test - public void testLoadInstanceListSorted() { - List sortedSlots = SpiLoader.loadInstanceListSorted(ProcessorSlot.class); - assertNotNull(sortedSlots); - - // Total 8 default slot in sentinel-core - assertEquals(8, sortedSlots.size()); - - // Verify the order of slot - int index = 0; - assertTrue(sortedSlots.get(index++) instanceof NodeSelectorSlot); - assertTrue(sortedSlots.get(index++) instanceof ClusterBuilderSlot); - assertTrue(sortedSlots.get(index++) instanceof LogSlot); - assertTrue(sortedSlots.get(index++) instanceof StatisticSlot); - assertTrue(sortedSlots.get(index++) instanceof AuthoritySlot); - assertTrue(sortedSlots.get(index++) instanceof SystemSlot); - assertTrue(sortedSlots.get(index++) instanceof FlowSlot); - assertTrue(sortedSlots.get(index++) instanceof DegradeSlot); - - // Verify each call return different instances - // Note: the return list are different, and the item instances in list are same - List sortedSlots2 = SpiLoader.loadInstanceListSorted(ProcessorSlot.class); - assertNotSame(sortedSlots, sortedSlots2); - assertEquals(sortedSlots.size(), sortedSlots2.size()); - for (int i = 0; i < sortedSlots.size(); i++) { - ProcessorSlot slot = sortedSlots.get(i); - ProcessorSlot slot2 = sortedSlots2.get(i); - assertEquals(slot.getClass(), slot2.getClass()); - - // As SERVICE_LOADER_MAP in SpiLoader cached the instance, so they're same instances - assertSame(slot, slot2); - } - } - - @Test - public void testLoadPrototypeInstanceListSorted() { - List sortedSlots = SpiLoader.loadInstanceListSorted(ProcessorSlot.class); - assertNotNull(sortedSlots); - - // Total 8 default slot in sentinel-core - assertEquals(8, sortedSlots.size()); - - // Verify the order of slot - int index = 0; - assertTrue(sortedSlots.get(index++) instanceof NodeSelectorSlot); - assertTrue(sortedSlots.get(index++) instanceof ClusterBuilderSlot); - assertTrue(sortedSlots.get(index++) instanceof LogSlot); - assertTrue(sortedSlots.get(index++) instanceof StatisticSlot); - assertTrue(sortedSlots.get(index++) instanceof AuthoritySlot); - assertTrue(sortedSlots.get(index++) instanceof SystemSlot); - assertTrue(sortedSlots.get(index++) instanceof FlowSlot); - assertTrue(sortedSlots.get(index++) instanceof DegradeSlot); - - // Verify each call return new instances - List sortedSlots2 = SpiLoader.loadPrototypeInstanceListSorted(ProcessorSlot.class); - assertNotSame(sortedSlots, sortedSlots2); - assertEquals(sortedSlots.size(), sortedSlots2.size()); - for (int i = 0; i < sortedSlots.size(); i++) { - ProcessorSlot slot = sortedSlots.get(i); - ProcessorSlot slot2 = sortedSlots2.get(i); - assertEquals(slot.getClass(), slot2.getClass()); - - // Verify the instances are different - assertNotSame(slot, slot2); - assertNotEquals(slot, slot2); - } - } -} diff --git a/sentinel-core/src/test/resources/META-INF/services/com.alibaba.csp.sentinel.spi.TestInterface b/sentinel-core/src/test/resources/META-INF/services/com.alibaba.csp.sentinel.spi.TestInterface new file mode 100644 index 0000000000..7960b39c35 --- /dev/null +++ b/sentinel-core/src/test/resources/META-INF/services/com.alibaba.csp.sentinel.spi.TestInterface @@ -0,0 +1,5 @@ +# One +com.alibaba.csp.sentinel.spi.TestOneProvider +com.alibaba.csp.sentinel.spi.TestTwoProvider # Two +com.alibaba.csp.sentinel.spi.TestThreeProvider +com.alibaba.csp.sentinel.spi.TestFiveProvider \ No newline at end of file diff --git a/sentinel-core/src/test/resources/META-INF/services/com.alibaba.csp.sentinel.spi.TestNoProviderInterface b/sentinel-core/src/test/resources/META-INF/services/com.alibaba.csp.sentinel.spi.TestNoProviderInterface new file mode 100644 index 0000000000..e69de29bb2 diff --git a/sentinel-demo/sentinel-demo-slot-chain-spi/src/main/java/com/alibaba/csp/sentinel/demo/slot/DemoSlot.java b/sentinel-demo/sentinel-demo-slot-chain-spi/src/main/java/com/alibaba/csp/sentinel/demo/slot/DemoSlot.java index f43ae3ae1b..ab15c39d69 100644 --- a/sentinel-demo/sentinel-demo-slot-chain-spi/src/main/java/com/alibaba/csp/sentinel/demo/slot/DemoSlot.java +++ b/sentinel-demo/sentinel-demo-slot-chain-spi/src/main/java/com/alibaba/csp/sentinel/demo/slot/DemoSlot.java @@ -19,14 +19,14 @@ import com.alibaba.csp.sentinel.node.DefaultNode; import com.alibaba.csp.sentinel.slotchain.AbstractLinkedProcessorSlot; import com.alibaba.csp.sentinel.slotchain.ResourceWrapper; -import com.alibaba.csp.sentinel.spi.SpiOrder; +import com.alibaba.csp.sentinel.spi.Spi; /** * An example slot that records current context and entry resource. * * @author Eric Zhao */ -@SpiOrder(-3500) +@Spi(order = -3500) public class DemoSlot extends AbstractLinkedProcessorSlot { @Override diff --git a/sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/HotParamSlotChainBuilder.java b/sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/HotParamSlotChainBuilder.java index d44aab3dfa..17aebaa5f6 100644 --- a/sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/HotParamSlotChainBuilder.java +++ b/sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/HotParamSlotChainBuilder.java @@ -21,8 +21,9 @@ * @author Eric Zhao * @since 0.2.0 * - * @deprecated since 1.7.2, we can use @SpiOrder(-3000) to adjust the order of {@link ParamFlowSlot}, + * @deprecated since 1.7.2, we can use @Spi(order = -3000) to adjust the order of {@link ParamFlowSlot}, * this class is reserved for compatibility with older versions. + * * @see ParamFlowSlot * @see DefaultSlotChainBuilder */ diff --git a/sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/param/ParamFlowSlot.java b/sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/param/ParamFlowSlot.java index 8bf0dff074..0739a06a80 100644 --- a/sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/param/ParamFlowSlot.java +++ b/sentinel-extension/sentinel-parameter-flow-control/src/main/java/com/alibaba/csp/sentinel/slots/block/flow/param/ParamFlowSlot.java @@ -20,7 +20,7 @@ import com.alibaba.csp.sentinel.slotchain.AbstractLinkedProcessorSlot; import com.alibaba.csp.sentinel.slotchain.ResourceWrapper; import com.alibaba.csp.sentinel.slots.block.BlockException; -import com.alibaba.csp.sentinel.spi.SpiOrder; +import com.alibaba.csp.sentinel.spi.Spi; import java.util.List; @@ -31,7 +31,7 @@ * @author Eric Zhao * @since 0.2.0 */ -@SpiOrder(-3000) +@Spi(order = -3000) public class ParamFlowSlot extends AbstractLinkedProcessorSlot { @Override diff --git a/sentinel-transport/sentinel-transport-common/src/main/java/com/alibaba/csp/sentinel/command/CommandCenterProvider.java b/sentinel-transport/sentinel-transport-common/src/main/java/com/alibaba/csp/sentinel/command/CommandCenterProvider.java index 8d94e63014..92df74e70f 100644 --- a/sentinel-transport/sentinel-transport-common/src/main/java/com/alibaba/csp/sentinel/command/CommandCenterProvider.java +++ b/sentinel-transport/sentinel-transport-common/src/main/java/com/alibaba/csp/sentinel/command/CommandCenterProvider.java @@ -17,7 +17,7 @@ import com.alibaba.csp.sentinel.log.RecordLog; import com.alibaba.csp.sentinel.transport.CommandCenter; -import com.alibaba.csp.sentinel.util.SpiLoader; +import com.alibaba.csp.sentinel.spi.SpiLoader; /** * Provider for a universal {@link CommandCenter} instance. @@ -34,7 +34,7 @@ public final class CommandCenterProvider { } private static void resolveInstance() { - CommandCenter resolveCommandCenter = SpiLoader.loadHighestPriorityInstance(CommandCenter.class); + CommandCenter resolveCommandCenter = SpiLoader.of(CommandCenter.class).loadHighestPriorityInstance(); if (resolveCommandCenter == null) { RecordLog.warn("[CommandCenterProvider] WARN: No existing CommandCenter found"); diff --git a/sentinel-transport/sentinel-transport-common/src/main/java/com/alibaba/csp/sentinel/command/CommandHandlerProvider.java b/sentinel-transport/sentinel-transport-common/src/main/java/com/alibaba/csp/sentinel/command/CommandHandlerProvider.java index 00b8e5decf..f4a46bc94e 100755 --- a/sentinel-transport/sentinel-transport-common/src/main/java/com/alibaba/csp/sentinel/command/CommandHandlerProvider.java +++ b/sentinel-transport/sentinel-transport-common/src/main/java/com/alibaba/csp/sentinel/command/CommandHandlerProvider.java @@ -15,13 +15,10 @@ */ package com.alibaba.csp.sentinel.command; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.ServiceLoader; +import java.util.*; import com.alibaba.csp.sentinel.command.annotation.CommandMapping; -import com.alibaba.csp.sentinel.spi.ServiceLoaderUtil; +import com.alibaba.csp.sentinel.spi.SpiLoader; import com.alibaba.csp.sentinel.util.StringUtil; /** @@ -31,8 +28,7 @@ */ public class CommandHandlerProvider implements Iterable { - private final ServiceLoader serviceLoader = ServiceLoaderUtil.getServiceLoader( - CommandHandler.class); + private final SpiLoader spiLoader = SpiLoader.of(CommandHandler.class); /** * Get all command handlers annotated with {@link CommandMapping} with command name. @@ -41,7 +37,8 @@ public class CommandHandlerProvider implements Iterable { */ public Map namedHandlers() { Map map = new HashMap(); - for (CommandHandler handler : serviceLoader) { + List handlers = spiLoader.loadInstanceList(); + for (CommandHandler handler : handlers) { String name = parseCommandName(handler); if (!StringUtil.isEmpty(name)) { map.put(name, handler); @@ -61,7 +58,7 @@ private String parseCommandName(CommandHandler handler) { @Override public Iterator iterator() { - return serviceLoader.iterator(); + return spiLoader.loadInstanceList().iterator(); } private static final CommandHandlerProvider INSTANCE = new CommandHandlerProvider(); diff --git a/sentinel-transport/sentinel-transport-common/src/main/java/com/alibaba/csp/sentinel/heartbeat/HeartbeatSenderProvider.java b/sentinel-transport/sentinel-transport-common/src/main/java/com/alibaba/csp/sentinel/heartbeat/HeartbeatSenderProvider.java index 57b68662c9..4891d057a8 100644 --- a/sentinel-transport/sentinel-transport-common/src/main/java/com/alibaba/csp/sentinel/heartbeat/HeartbeatSenderProvider.java +++ b/sentinel-transport/sentinel-transport-common/src/main/java/com/alibaba/csp/sentinel/heartbeat/HeartbeatSenderProvider.java @@ -17,7 +17,7 @@ import com.alibaba.csp.sentinel.log.RecordLog; import com.alibaba.csp.sentinel.transport.HeartbeatSender; -import com.alibaba.csp.sentinel.util.SpiLoader; +import com.alibaba.csp.sentinel.spi.SpiLoader; /** * @author Eric Zhao @@ -32,7 +32,7 @@ public final class HeartbeatSenderProvider { } private static void resolveInstance() { - HeartbeatSender resolved = SpiLoader.loadHighestPriorityInstance(HeartbeatSender.class); + HeartbeatSender resolved = SpiLoader.of(HeartbeatSender.class).loadHighestPriorityInstance(); if (resolved == null) { RecordLog.warn("[HeartbeatSenderProvider] WARN: No existing HeartbeatSender found"); } else { diff --git a/sentinel-transport/sentinel-transport-netty-http/src/main/java/com/alibaba/csp/sentinel/transport/command/NettyHttpCommandCenter.java b/sentinel-transport/sentinel-transport-netty-http/src/main/java/com/alibaba/csp/sentinel/transport/command/NettyHttpCommandCenter.java index 16db0df194..0db625ac80 100755 --- a/sentinel-transport/sentinel-transport-netty-http/src/main/java/com/alibaba/csp/sentinel/transport/command/NettyHttpCommandCenter.java +++ b/sentinel-transport/sentinel-transport-netty-http/src/main/java/com/alibaba/csp/sentinel/transport/command/NettyHttpCommandCenter.java @@ -22,7 +22,7 @@ import com.alibaba.csp.sentinel.command.CommandHandler; import com.alibaba.csp.sentinel.command.CommandHandlerProvider; import com.alibaba.csp.sentinel.concurrent.NamedThreadFactory; -import com.alibaba.csp.sentinel.spi.SpiOrder; +import com.alibaba.csp.sentinel.spi.Spi; import com.alibaba.csp.sentinel.transport.command.netty.HttpServer; import com.alibaba.csp.sentinel.log.RecordLog; import com.alibaba.csp.sentinel.transport.CommandCenter; @@ -32,7 +32,7 @@ * * @author Eric Zhao */ -@SpiOrder(SpiOrder.LOWEST_PRECEDENCE - 100) +@Spi(order = Spi.ORDER_LOWEST - 100) public class NettyHttpCommandCenter implements CommandCenter { private final HttpServer server = new HttpServer(); diff --git a/sentinel-transport/sentinel-transport-netty-http/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/HttpHeartbeatSender.java b/sentinel-transport/sentinel-transport-netty-http/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/HttpHeartbeatSender.java index 7fe6837911..9aaad80b7b 100755 --- a/sentinel-transport/sentinel-transport-netty-http/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/HttpHeartbeatSender.java +++ b/sentinel-transport/sentinel-transport-netty-http/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/HttpHeartbeatSender.java @@ -18,7 +18,7 @@ import com.alibaba.csp.sentinel.Constants; import com.alibaba.csp.sentinel.config.SentinelConfig; import com.alibaba.csp.sentinel.log.RecordLog; -import com.alibaba.csp.sentinel.spi.SpiOrder; +import com.alibaba.csp.sentinel.spi.Spi; import com.alibaba.csp.sentinel.transport.HeartbeatSender; import com.alibaba.csp.sentinel.transport.config.TransportConfig; import com.alibaba.csp.sentinel.transport.endpoint.Protocol; @@ -42,7 +42,7 @@ * @author Carpenter Lee * @author Leo Li */ -@SpiOrder(SpiOrder.LOWEST_PRECEDENCE - 100) +@Spi(order = Spi.ORDER_LOWEST - 100) public class HttpHeartbeatSender implements HeartbeatSender { private final CloseableHttpClient client; From e1540d18eb8c593eb79615be2c9e45596952bd24 Mon Sep 17 00:00:00 2001 From: brothelul <1285823170@qq.com> Date: Wed, 27 Jan 2021 11:32:26 +0800 Subject: [PATCH 08/20] dashboard: authFilterExcludeUrls supports matching path pattern like /xx/** (#1971) --- .../dashboard/auth/LoginAuthenticationFilter.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/LoginAuthenticationFilter.java b/sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/LoginAuthenticationFilter.java index f489b48e7f..b8aa3945c7 100644 --- a/sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/LoginAuthenticationFilter.java +++ b/sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/auth/LoginAuthenticationFilter.java @@ -20,6 +20,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; +import org.springframework.util.AntPathMatcher; import javax.servlet.Filter; import javax.servlet.FilterChain; @@ -29,7 +30,6 @@ import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - import java.io.IOException; import java.util.List; @@ -51,6 +51,8 @@ */ @Component public class LoginAuthenticationFilter implements Filter { + + private static final AntPathMatcher PATH_MATCHER = new AntPathMatcher(); private static final String URL_SUFFIX_DOT = "."; @@ -85,7 +87,9 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha String servletPath = httpRequest.getServletPath(); // Exclude the urls which needn't auth - if (authFilterExcludeUrls.contains(servletPath)) { + boolean authFilterExcludeMatch = authFilterExcludeUrls.stream() + .anyMatch(authFilterExcludeUrl -> PATH_MATCHER.match(authFilterExcludeUrl, servletPath)); + if (authFilterExcludeMatch) { chain.doFilter(request, response); return; } From cf4f3644f375afca890eefed5494b5c9a84dc0bc Mon Sep 17 00:00:00 2001 From: samuelxw <1012890048@qq.com> Date: Thu, 28 Jan 2021 22:56:27 +0800 Subject: [PATCH 09/20] Improve MetricFetcher under concurrent conditions (#1918) --- .../dashboard/metric/MetricFetcher.java | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/metric/MetricFetcher.java b/sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/metric/MetricFetcher.java index 2c032249a8..aba1fce887 100755 --- a/sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/metric/MetricFetcher.java +++ b/sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/metric/MetricFetcher.java @@ -331,25 +331,24 @@ private void handleBody(String[] lines, MachineInfo machine, Map { + MetricEntity initMetricEntity = new MetricEntity(); + initMetricEntity.setApp(machine.getApp()); + initMetricEntity.setTimestamp(new Date(node.getTimestamp())); + initMetricEntity.setPassQps(0L); + initMetricEntity.setBlockQps(0L); + initMetricEntity.setRtAndSuccessQps(0, 0L); + initMetricEntity.setExceptionQps(0L); + initMetricEntity.setCount(0); + initMetricEntity.setResource(node.getResource()); + return initMetricEntity; + }); + metricEntity.addPassQps(node.getPassQps()); + metricEntity.addBlockQps(node.getBlockQps()); + metricEntity.addRtAndSuccessQps(node.getRt(), node.getSuccessQps()); + metricEntity.addExceptionQps(node.getExceptionQps()); + metricEntity.addCount(1); } catch (Exception e) { logger.warn("handleBody line exception, machine: {}, line: {}", machine.toLogString(), line); } From ebedd6d3da4313a710935fff96b246f82f3cdb33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=98=8E=E5=90=8C=E5=AD=A6?= <11614773+liuming-dev@users.noreply.github.com> Date: Tue, 2 Feb 2021 20:24:06 +0800 Subject: [PATCH 10/20] dependency: Upgrade fastjson to 1.2.75 (#2006) Signed-off-by: LIU Ming --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d7c143e978..d5c65a8c08 100755 --- a/pom.xml +++ b/pom.xml @@ -41,7 +41,7 @@ - 1.2.71 + 1.2.75 1.3.2 From 82d2818613935d2a0fa757d498f6cc5efa4fc090 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=98=8E=E5=90=8C=E5=AD=A6?= <11614773+liuming-dev@users.noreply.github.com> Date: Wed, 3 Feb 2021 09:26:06 +0800 Subject: [PATCH 11/20] dependency: Upgrade snakeyaml to 1.26 in sentinel-cluster-server-envoy-rls module (#2003) Signed-off-by: LIU Ming --- sentinel-cluster/sentinel-cluster-server-envoy-rls/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sentinel-cluster/sentinel-cluster-server-envoy-rls/pom.xml b/sentinel-cluster/sentinel-cluster-server-envoy-rls/pom.xml index a52247b44d..5728eb5651 100644 --- a/sentinel-cluster/sentinel-cluster-server-envoy-rls/pom.xml +++ b/sentinel-cluster/sentinel-cluster-server-envoy-rls/pom.xml @@ -65,7 +65,7 @@ org.yaml snakeyaml - 1.25 + 1.26 From 643850d72e2d7918e6e604792f359c2274fc1ca2 Mon Sep 17 00:00:00 2001 From: Peine Date: Wed, 3 Feb 2021 09:46:56 +0800 Subject: [PATCH 12/20] Improve RocketMQ integration example (#1757) - The demo was unable to run and stop because of missing namesrv configuration, and now fixed. --- .../csp/sentinel/demo/rocketmq/Constants.java | 1 + .../sentinel/demo/rocketmq/PullConsumerDemo.java | 11 +++++++++-- .../csp/sentinel/demo/rocketmq/SyncProducer.java | 15 ++++++++++----- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/sentinel-demo/sentinel-demo-rocketmq/src/main/java/com/alibaba/csp/sentinel/demo/rocketmq/Constants.java b/sentinel-demo/sentinel-demo-rocketmq/src/main/java/com/alibaba/csp/sentinel/demo/rocketmq/Constants.java index 2f67dc6cb1..d16f7cc281 100755 --- a/sentinel-demo/sentinel-demo-rocketmq/src/main/java/com/alibaba/csp/sentinel/demo/rocketmq/Constants.java +++ b/sentinel-demo/sentinel-demo-rocketmq/src/main/java/com/alibaba/csp/sentinel/demo/rocketmq/Constants.java @@ -19,6 +19,7 @@ public final class Constants { public static final String TEST_GROUP_NAME = "sentinel-group"; public static final String TEST_TOPIC_NAME = "SentinelTopicTest"; + public static final String TEST_NAMESRV_ADDR = "127.0.0.1:9876"; private Constants() {} } diff --git a/sentinel-demo/sentinel-demo-rocketmq/src/main/java/com/alibaba/csp/sentinel/demo/rocketmq/PullConsumerDemo.java b/sentinel-demo/sentinel-demo-rocketmq/src/main/java/com/alibaba/csp/sentinel/demo/rocketmq/PullConsumerDemo.java index 522c707f9d..301cca6ae2 100755 --- a/sentinel-demo/sentinel-demo-rocketmq/src/main/java/com/alibaba/csp/sentinel/demo/rocketmq/PullConsumerDemo.java +++ b/sentinel-demo/sentinel-demo-rocketmq/src/main/java/com/alibaba/csp/sentinel/demo/rocketmq/PullConsumerDemo.java @@ -17,6 +17,7 @@ import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.ExecutorService; @@ -55,10 +56,16 @@ public static void main(String[] args) throws MQClientException { initFlowControlRule(); DefaultMQPullConsumer consumer = new DefaultMQPullConsumer(Constants.TEST_GROUP_NAME); - + consumer.setNamesrvAddr(Constants.TEST_NAMESRV_ADDR); consumer.start(); - Set mqs = consumer.fetchSubscribeMessageQueues(Constants.TEST_TOPIC_NAME); + Set mqs = new HashSet<>(); + try { + mqs = consumer.fetchSubscribeMessageQueues(Constants.TEST_TOPIC_NAME); + } catch (Exception e) { + e.printStackTrace(); + } + for (MessageQueue mq : mqs) { System.out.printf("Consuming messages from the queue: %s%n", mq); SINGLE_MQ: diff --git a/sentinel-demo/sentinel-demo-rocketmq/src/main/java/com/alibaba/csp/sentinel/demo/rocketmq/SyncProducer.java b/sentinel-demo/sentinel-demo-rocketmq/src/main/java/com/alibaba/csp/sentinel/demo/rocketmq/SyncProducer.java index 8cae72a1d4..c55bb50636 100755 --- a/sentinel-demo/sentinel-demo-rocketmq/src/main/java/com/alibaba/csp/sentinel/demo/rocketmq/SyncProducer.java +++ b/sentinel-demo/sentinel-demo-rocketmq/src/main/java/com/alibaba/csp/sentinel/demo/rocketmq/SyncProducer.java @@ -24,8 +24,8 @@ public class SyncProducer { public static void main(String[] args) throws Exception { // Instantiate with a producer group name. - DefaultMQProducer producer = new - DefaultMQProducer(Constants.TEST_GROUP_NAME); + DefaultMQProducer producer = new DefaultMQProducer(Constants.TEST_GROUP_NAME); + producer.setNamesrvAddr(Constants.TEST_NAMESRV_ADDR); // Launch the instance. producer.start(); for (int i = 0; i < 1000; i++) { @@ -33,9 +33,14 @@ public static void main(String[] args) throws Exception { Message msg = new Message(Constants.TEST_TOPIC_NAME, "TagA", ("Hello RocketMQ From Sentinel " + i).getBytes(RemotingHelper.DEFAULT_CHARSET) ); - // Call send message to deliver message to one of brokers. - SendResult sendResult = producer.send(msg); - System.out.printf("%s%n", sendResult); + + try { + // Call send message to deliver message to one of brokers. + SendResult sendResult = producer.send(msg); + System.out.printf("%s%n", sendResult); + } catch (Exception e) { + e.printStackTrace(); + } } // Shut down once the producer instance is not longer in use. producer.shutdown(); From d372ff95d403bc8594c4e600d4caf8b3379adecf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E6=9E=AB?= <954649679@qq.com> Date: Thu, 4 Feb 2021 10:13:16 +0800 Subject: [PATCH 13/20] Remove unused code (#1991) Remove unused code in DefaultBlockExceptionHandler#handle --- .../webmvc/callback/DefaultBlockExceptionHandler.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/sentinel-adapter/sentinel-spring-webmvc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/callback/DefaultBlockExceptionHandler.java b/sentinel-adapter/sentinel-spring-webmvc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/callback/DefaultBlockExceptionHandler.java index acb74d0e43..0ad80095af 100644 --- a/sentinel-adapter/sentinel-spring-webmvc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/callback/DefaultBlockExceptionHandler.java +++ b/sentinel-adapter/sentinel-spring-webmvc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/callback/DefaultBlockExceptionHandler.java @@ -34,12 +34,6 @@ public void handle(HttpServletRequest request, HttpServletResponse response, Blo // Return 429 (Too Many Requests) by default. response.setStatus(429); - StringBuffer url = request.getRequestURL(); - - if ("GET".equals(request.getMethod()) && StringUtil.isNotBlank(request.getQueryString())) { - url.append("?").append(request.getQueryString()); - } - PrintWriter out = response.getWriter(); out.print("Blocked by Sentinel (flow limiting)"); out.flush(); From a66bc2bf7884b931095265d6779e14e5f62d932a Mon Sep 17 00:00:00 2001 From: Eric Zhao Date: Mon, 1 Feb 2021 09:53:32 +0800 Subject: [PATCH 14/20] Update source/target JDK version to 1.8 and update documents Signed-off-by: Eric Zhao --- README.md | 4 ++-- pom.xml | 4 ++-- .../pom.xml | 5 ----- .../sentinel-motan-adapter/pom.xml | 16 ++-------------- .../sentinel-reactor-adapter/README.md | 2 -- .../README.md | 2 -- .../sentinel-spring-webflux-adapter/README.md | 2 -- sentinel-benchmark/pom.xml | 11 ----------- sentinel-cluster/pom.xml | 3 --- .../processor/RequestProcessorProvider.java | 6 +----- sentinel-dashboard/pom.xml | 11 ----------- sentinel-demo/pom.xml | 5 ----- .../sentinel-demo-apollo-datasource/pom.xml | 2 -- sentinel-demo/sentinel-demo-dubbo/pom.xml | 14 -------------- .../sentinel-demo-dynamic-file-rule/pom.xml | 15 --------------- .../sentinel-demo-etcd-datasource/pom.xml | 18 ------------------ sentinel-demo/sentinel-demo-motan/pom.xml | 15 --------------- .../sentinel-demo-nacos-datasource/pom.xml | 14 -------------- .../pom.xml | 5 ----- sentinel-demo/sentinel-demo-rocketmq/pom.xml | 14 -------------- .../sentinel-demo-spring-cloud-gateway/pom.xml | 5 ----- .../sentinel-demo-zookeeper-datasource/pom.xml | 15 --------------- .../sentinel-datasource-consul/README.md | 2 -- .../sentinel-datasource-etcd/README.md | 2 -- .../sentinel-datasource-redis/README.md | 2 +- .../sentinel-datasource-zookeeper/pom.xml | 2 -- .../sentinel-logging-slf4j/pom.xml | 2 -- 27 files changed, 8 insertions(+), 190 deletions(-) diff --git a/README.md b/README.md index 5ece139dcd..66713e63a4 100755 --- a/README.md +++ b/README.md @@ -49,9 +49,9 @@ Below is a simple demo that guides new users to use Sentinel in just 3 steps. It ### 1. Add Dependency -**Note:** Sentinel Core requires Java 7 or later. +**Note:** Sentinel requires JDK 1.8 or later. -If your're using Maven, just add the following dependency in `pom.xml`. +If you're using Maven, just add the following dependency in `pom.xml`. ```xml diff --git a/pom.xml b/pom.xml index d5c65a8c08..776a1da1e2 100755 --- a/pom.xml +++ b/pom.xml @@ -53,8 +53,8 @@ UTF-8 - 1.7 - 1.7 + 1.8 + 1.8 UTF-8 3.8.0 2.22.1 diff --git a/sentinel-adapter/sentinel-api-gateway-adapter-common/pom.xml b/sentinel-adapter/sentinel-api-gateway-adapter-common/pom.xml index 19b37b91e6..6b059f2053 100644 --- a/sentinel-adapter/sentinel-api-gateway-adapter-common/pom.xml +++ b/sentinel-adapter/sentinel-api-gateway-adapter-common/pom.xml @@ -12,11 +12,6 @@ sentinel-api-gateway-adapter-common jar - - 1.7 - 1.7 - - com.alibaba.csp diff --git a/sentinel-adapter/sentinel-motan-adapter/pom.xml b/sentinel-adapter/sentinel-motan-adapter/pom.xml index 6ccb1a3b1d..f0f9fbbe68 100644 --- a/sentinel-adapter/sentinel-motan-adapter/pom.xml +++ b/sentinel-adapter/sentinel-motan-adapter/pom.xml @@ -20,6 +20,7 @@ com.alibaba.csp sentinel-core + com.weibo motan-core @@ -33,18 +34,5 @@ provided - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven.compiler.version} - - 1.8 - 1.8 - ${java.encoding} - - - - + \ No newline at end of file diff --git a/sentinel-adapter/sentinel-reactor-adapter/README.md b/sentinel-adapter/sentinel-reactor-adapter/README.md index 28c6bed83e..d53eaec027 100644 --- a/sentinel-adapter/sentinel-reactor-adapter/README.md +++ b/sentinel-adapter/sentinel-reactor-adapter/README.md @@ -1,7 +1,5 @@ # Sentinel Reactor Adapter -> Note: this module requires Java 8 or later version. - Sentinel provides integration module for [Reactor](https://projectreactor.io/). Add the following dependency in `pom.xml` (if you are using Maven): diff --git a/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/README.md b/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/README.md index 4961b32f2b..1a700b0efa 100644 --- a/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/README.md +++ b/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/README.md @@ -1,7 +1,5 @@ # Sentinel Spring Cloud Gateway Adapter -> Note: this module requires Java 8 or later version. - Sentinel provides integration module with Spring Cloud Gateway. The integration module is based on the Sentinel Reactor Adapter. diff --git a/sentinel-adapter/sentinel-spring-webflux-adapter/README.md b/sentinel-adapter/sentinel-spring-webflux-adapter/README.md index 158937fe93..6e165f922e 100644 --- a/sentinel-adapter/sentinel-spring-webflux-adapter/README.md +++ b/sentinel-adapter/sentinel-spring-webflux-adapter/README.md @@ -1,7 +1,5 @@ # Sentinel Spring WebFlux Adapter -> Note: this module requires Java 8 or later version. - Sentinel provides integration module with Spring WebFlux, so reactive web applications can also leverage Sentinel's flow control and circuit breaking to achieve reliability. The integration module is based on the Sentinel Reactor Adapter. diff --git a/sentinel-benchmark/pom.xml b/sentinel-benchmark/pom.xml index e0c14884ab..dd88db7cd4 100644 --- a/sentinel-benchmark/pom.xml +++ b/sentinel-benchmark/pom.xml @@ -40,22 +40,11 @@ UTF-8 1.21 - 1.8 benchmarks - - org.apache.maven.plugins - maven-compiler-plugin - ${maven.compiler.version} - - ${javac.target} - ${javac.target} - ${javac.target} - - org.apache.maven.plugins maven-pmd-plugin diff --git a/sentinel-cluster/pom.xml b/sentinel-cluster/pom.xml index 5bde8cc759..2ab0dac4f7 100644 --- a/sentinel-cluster/pom.xml +++ b/sentinel-cluster/pom.xml @@ -13,9 +13,6 @@ The parent module of Sentinel cluster server - 1.7 - 1.7 - 4.1.31.Final diff --git a/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/server/processor/RequestProcessorProvider.java b/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/server/processor/RequestProcessorProvider.java index 0dcffce991..96767f07c8 100644 --- a/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/server/processor/RequestProcessorProvider.java +++ b/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/server/processor/RequestProcessorProvider.java @@ -59,11 +59,7 @@ public static RequestProcessor getProcessor(int type) { } static void addProcessorIfAbsent(int type, RequestProcessor processor) { - // TBD: use putIfAbsent in JDK 1.8. - if (PROCESSOR_MAP.containsKey(type)) { - return; - } - PROCESSOR_MAP.put(type, processor); + PROCESSOR_MAP.putIfAbsent(type, processor); } static void addProcessor(int type, RequestProcessor processor) { diff --git a/sentinel-dashboard/pom.xml b/sentinel-dashboard/pom.xml index 9b0f504d04..46ecdaaa6c 100755 --- a/sentinel-dashboard/pom.xml +++ b/sentinel-dashboard/pom.xml @@ -13,8 +13,6 @@ jar - 1.8 - 1.8 2.0.5.RELEASE 4.0.1 @@ -158,15 +156,6 @@ - - org.apache.maven.plugins - maven-compiler-plugin - - ${maven.compiler.source} - ${maven.compiler.target} - - - org.apache.maven.plugins maven-deploy-plugin diff --git a/sentinel-demo/pom.xml b/sentinel-demo/pom.xml index 706e707b56..48de81ea2a 100755 --- a/sentinel-demo/pom.xml +++ b/sentinel-demo/pom.xml @@ -12,11 +12,6 @@ pom sentinel-demo - - 1.8 - 1.8 - - sentinel-demo-basic sentinel-demo-dynamic-file-rule diff --git a/sentinel-demo/sentinel-demo-apollo-datasource/pom.xml b/sentinel-demo/sentinel-demo-apollo-datasource/pom.xml index 8477462b1d..0b01d240a0 100644 --- a/sentinel-demo/sentinel-demo-apollo-datasource/pom.xml +++ b/sentinel-demo/sentinel-demo-apollo-datasource/pom.xml @@ -12,8 +12,6 @@ sentinel-demo-apollo-datasource - 1.8 - 1.8 2.9.1 1.7.25 diff --git a/sentinel-demo/sentinel-demo-dubbo/pom.xml b/sentinel-demo/sentinel-demo-dubbo/pom.xml index 58d00f8d76..d42372cc90 100644 --- a/sentinel-demo/sentinel-demo-dubbo/pom.xml +++ b/sentinel-demo/sentinel-demo-dubbo/pom.xml @@ -50,18 +50,4 @@ - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven.compiler.version} - - 1.8 - 1.8 - ${java.encoding} - - - - \ No newline at end of file diff --git a/sentinel-demo/sentinel-demo-dynamic-file-rule/pom.xml b/sentinel-demo/sentinel-demo-dynamic-file-rule/pom.xml index fddfb8f0c1..e2f77241a3 100755 --- a/sentinel-demo/sentinel-demo-dynamic-file-rule/pom.xml +++ b/sentinel-demo/sentinel-demo-dynamic-file-rule/pom.xml @@ -30,19 +30,4 @@ - - sentinel-demo-dynamic-file-rule - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven.compiler.version} - - 1.8 - 1.8 - ${java.encoding} - - - - \ No newline at end of file diff --git a/sentinel-demo/sentinel-demo-etcd-datasource/pom.xml b/sentinel-demo/sentinel-demo-etcd-datasource/pom.xml index 7219573263..57cb3e6dd3 100644 --- a/sentinel-demo/sentinel-demo-etcd-datasource/pom.xml +++ b/sentinel-demo/sentinel-demo-etcd-datasource/pom.xml @@ -12,37 +12,19 @@ sentinel-demo-etcd-datasource - com.alibaba.csp sentinel-core - com.alibaba.csp sentinel-datasource-etcd - com.alibaba fastjson - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven.compiler.version} - - 1.8 - 1.8 - ${java.encoding} - - - - \ No newline at end of file diff --git a/sentinel-demo/sentinel-demo-motan/pom.xml b/sentinel-demo/sentinel-demo-motan/pom.xml index 4f48a87ddf..58ee8e9f5c 100644 --- a/sentinel-demo/sentinel-demo-motan/pom.xml +++ b/sentinel-demo/sentinel-demo-motan/pom.xml @@ -50,19 +50,4 @@ - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven.compiler.version} - - 1.8 - 1.8 - ${java.encoding} - - - - - \ No newline at end of file diff --git a/sentinel-demo/sentinel-demo-nacos-datasource/pom.xml b/sentinel-demo/sentinel-demo-nacos-datasource/pom.xml index e6d853362b..dbffcfd59b 100644 --- a/sentinel-demo/sentinel-demo-nacos-datasource/pom.xml +++ b/sentinel-demo/sentinel-demo-nacos-datasource/pom.xml @@ -37,18 +37,4 @@ - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven.compiler.version} - - 1.8 - 1.8 - ${java.encoding} - - - - \ No newline at end of file diff --git a/sentinel-demo/sentinel-demo-parameter-flow-control/pom.xml b/sentinel-demo/sentinel-demo-parameter-flow-control/pom.xml index c54d6fe399..6ec442ac8e 100644 --- a/sentinel-demo/sentinel-demo-parameter-flow-control/pom.xml +++ b/sentinel-demo/sentinel-demo-parameter-flow-control/pom.xml @@ -11,11 +11,6 @@ sentinel-demo-parameter-flow-control - - 1.8 - 1.8 - - com.alibaba.csp diff --git a/sentinel-demo/sentinel-demo-rocketmq/pom.xml b/sentinel-demo/sentinel-demo-rocketmq/pom.xml index 92f4160ba0..3a000be550 100755 --- a/sentinel-demo/sentinel-demo-rocketmq/pom.xml +++ b/sentinel-demo/sentinel-demo-rocketmq/pom.xml @@ -19,18 +19,4 @@ - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven.compiler.version} - - 1.8 - 1.8 - ${java.encoding} - - - - \ No newline at end of file diff --git a/sentinel-demo/sentinel-demo-spring-cloud-gateway/pom.xml b/sentinel-demo/sentinel-demo-spring-cloud-gateway/pom.xml index b39348925d..858336b342 100644 --- a/sentinel-demo/sentinel-demo-spring-cloud-gateway/pom.xml +++ b/sentinel-demo/sentinel-demo-spring-cloud-gateway/pom.xml @@ -11,11 +11,6 @@ sentinel-demo-spring-cloud-gateway - - 1.8 - 1.8 - - org.springframework.cloud diff --git a/sentinel-demo/sentinel-demo-zookeeper-datasource/pom.xml b/sentinel-demo/sentinel-demo-zookeeper-datasource/pom.xml index 5513c822de..0eac807cc9 100644 --- a/sentinel-demo/sentinel-demo-zookeeper-datasource/pom.xml +++ b/sentinel-demo/sentinel-demo-zookeeper-datasource/pom.xml @@ -54,19 +54,4 @@ - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven.compiler.version} - - 1.8 - 1.8 - ${java.encoding} - - - - - \ No newline at end of file diff --git a/sentinel-extension/sentinel-datasource-consul/README.md b/sentinel-extension/sentinel-datasource-consul/README.md index 8a407cc873..b5c186473d 100644 --- a/sentinel-extension/sentinel-datasource-consul/README.md +++ b/sentinel-extension/sentinel-datasource-consul/README.md @@ -3,8 +3,6 @@ Sentinel DataSource Consul provides integration with Consul. The data source leverages blocking query (backed by long polling) of Consul. -> **NOTE**: This module requires JDK 1.8 or later. - ## Usage To use Sentinel DataSource Consul, you could add the following dependency: diff --git a/sentinel-extension/sentinel-datasource-etcd/README.md b/sentinel-extension/sentinel-datasource-etcd/README.md index 23d6129d4b..d63d209d6f 100644 --- a/sentinel-extension/sentinel-datasource-etcd/README.md +++ b/sentinel-extension/sentinel-datasource-etcd/README.md @@ -3,8 +3,6 @@ Sentinel DataSource Etcd provides integration with etcd so that etcd can be the dynamic rule data source of Sentinel. The data source uses push model (watcher). -> **NOTE**: This module requires JDK 1.8 or later. - To use Sentinel DataSource Etcd, you should add the following dependency: ```xml diff --git a/sentinel-extension/sentinel-datasource-redis/README.md b/sentinel-extension/sentinel-datasource-redis/README.md index 2436df046c..d04a8e42e7 100644 --- a/sentinel-extension/sentinel-datasource-redis/README.md +++ b/sentinel-extension/sentinel-datasource-redis/README.md @@ -2,7 +2,7 @@ Sentinel DataSource Redis provides integration with Redis. The data source leverages Redis pub-sub feature to implement push model (listener). -The data source uses [Lettuce](https://lettuce.io/) as the Redis client internal. Requires JDK 1.8 or later. +The data source uses [Lettuce](https://lettuce.io/) as the Redis client, which requires JDK 1.8 or later. > **NOTE**: Currently we do not support Redis Cluster now. diff --git a/sentinel-extension/sentinel-datasource-zookeeper/pom.xml b/sentinel-extension/sentinel-datasource-zookeeper/pom.xml index 912f9461a2..34a764f903 100644 --- a/sentinel-extension/sentinel-datasource-zookeeper/pom.xml +++ b/sentinel-extension/sentinel-datasource-zookeeper/pom.xml @@ -13,8 +13,6 @@ jar - 1.7 - 1.7 3.4.14 4.0.1 2.12.0 diff --git a/sentinel-logging/sentinel-logging-slf4j/pom.xml b/sentinel-logging/sentinel-logging-slf4j/pom.xml index fb7daf3201..f9e9583c61 100644 --- a/sentinel-logging/sentinel-logging-slf4j/pom.xml +++ b/sentinel-logging/sentinel-logging-slf4j/pom.xml @@ -13,8 +13,6 @@ jar - 1.7 - 1.7 1.7.25 1.2.0 From 149cf8830b510e0ffccce220a525b8cf5f72fa08 Mon Sep 17 00:00:00 2001 From: Eric Zhao Date: Mon, 1 Feb 2021 13:57:15 +0800 Subject: [PATCH 15/20] Use JDK 1.8 native LongAdder instead and remove legacy LongAdder Signed-off-by: Eric Zhao --- .../statistic/data/ClusterMetricBucket.java | 2 +- .../flow/statistic/limit/RequestLimiter.java | 2 +- .../metric/ClusterMetricLeapArray.java | 3 +- .../statistic/metric/ClusterParamMetric.java | 14 +- .../csp/sentinel/eagleeye/StatEntryFunc.java | 3 +- .../csp/sentinel/node/StatisticNode.java | 10 +- .../ExceptionCircuitBreaker.java | 5 +- .../ResponseTimeCircuitBreaker.java | 2 +- .../slots/statistic/base/LongAdder.java | 213 ----------- .../slots/statistic/base/Striped64.java | 349 ------------------ .../slots/statistic/base/UnaryLeapArray.java | 2 + .../slots/statistic/data/MetricBucket.java | 2 +- 12 files changed, 26 insertions(+), 581 deletions(-) delete mode 100755 sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/statistic/base/LongAdder.java delete mode 100755 sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/statistic/base/Striped64.java diff --git a/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/statistic/data/ClusterMetricBucket.java b/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/statistic/data/ClusterMetricBucket.java index a27dac5afe..24eb969bca 100644 --- a/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/statistic/data/ClusterMetricBucket.java +++ b/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/statistic/data/ClusterMetricBucket.java @@ -15,7 +15,7 @@ */ package com.alibaba.csp.sentinel.cluster.flow.statistic.data; -import com.alibaba.csp.sentinel.slots.statistic.base.LongAdder; +import java.util.concurrent.atomic.LongAdder; /** * @author Eric Zhao diff --git a/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/statistic/limit/RequestLimiter.java b/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/statistic/limit/RequestLimiter.java index 2aec82d542..23ea6c4392 100644 --- a/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/statistic/limit/RequestLimiter.java +++ b/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/statistic/limit/RequestLimiter.java @@ -16,9 +16,9 @@ package com.alibaba.csp.sentinel.cluster.flow.statistic.limit; import java.util.List; +import java.util.concurrent.atomic.LongAdder; import com.alibaba.csp.sentinel.slots.statistic.base.LeapArray; -import com.alibaba.csp.sentinel.slots.statistic.base.LongAdder; import com.alibaba.csp.sentinel.slots.statistic.base.UnaryLeapArray; import com.alibaba.csp.sentinel.util.AssertUtil; diff --git a/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/statistic/metric/ClusterMetricLeapArray.java b/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/statistic/metric/ClusterMetricLeapArray.java index 15bc2b884f..7d348bcdf3 100644 --- a/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/statistic/metric/ClusterMetricLeapArray.java +++ b/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/statistic/metric/ClusterMetricLeapArray.java @@ -15,10 +15,11 @@ */ package com.alibaba.csp.sentinel.cluster.flow.statistic.metric; +import java.util.concurrent.atomic.LongAdder; + import com.alibaba.csp.sentinel.cluster.flow.statistic.data.ClusterFlowEvent; import com.alibaba.csp.sentinel.cluster.flow.statistic.data.ClusterMetricBucket; import com.alibaba.csp.sentinel.slots.statistic.base.LeapArray; -import com.alibaba.csp.sentinel.slots.statistic.base.LongAdder; import com.alibaba.csp.sentinel.slots.statistic.base.WindowWrap; /** diff --git a/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/statistic/metric/ClusterParamMetric.java b/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/statistic/metric/ClusterParamMetric.java index 20279b0589..f44be1903d 100644 --- a/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/statistic/metric/ClusterParamMetric.java +++ b/sentinel-cluster/sentinel-cluster-server-default/src/main/java/com/alibaba/csp/sentinel/cluster/flow/statistic/metric/ClusterParamMetric.java @@ -15,13 +15,19 @@ */ package com.alibaba.csp.sentinel.cluster.flow.statistic.metric; -import com.alibaba.csp.sentinel.slots.statistic.base.LongAdder; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.concurrent.atomic.LongAdder; + import com.alibaba.csp.sentinel.slots.statistic.cache.CacheMap; import com.alibaba.csp.sentinel.util.AssertUtil; -import java.util.*; -import java.util.Map.Entry; - /** * @author Eric Zhao * @since 1.4.0 diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/eagleeye/StatEntryFunc.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/eagleeye/StatEntryFunc.java index 41b6cf8e3b..17e1bf724e 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/eagleeye/StatEntryFunc.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/eagleeye/StatEntryFunc.java @@ -16,8 +16,7 @@ package com.alibaba.csp.sentinel.eagleeye; import java.util.concurrent.atomic.AtomicReference; - -import com.alibaba.csp.sentinel.slots.statistic.base.LongAdder; +import java.util.concurrent.atomic.LongAdder; interface StatEntryFunc { diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/node/StatisticNode.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/node/StatisticNode.java index a722269afd..2a7d0a1c67 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/node/StatisticNode.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/node/StatisticNode.java @@ -15,17 +15,17 @@ */ package com.alibaba.csp.sentinel.node; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.LongAdder; + import com.alibaba.csp.sentinel.node.metric.MetricNode; -import com.alibaba.csp.sentinel.slots.statistic.base.LongAdder; import com.alibaba.csp.sentinel.slots.statistic.metric.ArrayMetric; import com.alibaba.csp.sentinel.slots.statistic.metric.Metric; import com.alibaba.csp.sentinel.util.TimeUtil; import com.alibaba.csp.sentinel.util.function.Predicate; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - /** *

      The statistic node keep three kinds of real-time statistics metrics:

      *
        diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/degrade/circuitbreaker/ExceptionCircuitBreaker.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/degrade/circuitbreaker/ExceptionCircuitBreaker.java index be8c1b20ab..8e87e66ad4 100644 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/degrade/circuitbreaker/ExceptionCircuitBreaker.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/degrade/circuitbreaker/ExceptionCircuitBreaker.java @@ -16,18 +16,17 @@ package com.alibaba.csp.sentinel.slots.block.degrade.circuitbreaker; import java.util.List; +import java.util.concurrent.atomic.LongAdder; import com.alibaba.csp.sentinel.Entry; import com.alibaba.csp.sentinel.context.Context; -import com.alibaba.csp.sentinel.slotchain.ResourceWrapper; import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule; import com.alibaba.csp.sentinel.slots.statistic.base.LeapArray; -import com.alibaba.csp.sentinel.slots.statistic.base.LongAdder; import com.alibaba.csp.sentinel.slots.statistic.base.WindowWrap; import com.alibaba.csp.sentinel.util.AssertUtil; -import static com.alibaba.csp.sentinel.slots.block.RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO; import static com.alibaba.csp.sentinel.slots.block.RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT; +import static com.alibaba.csp.sentinel.slots.block.RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO; /** * @author Eric Zhao diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/degrade/circuitbreaker/ResponseTimeCircuitBreaker.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/degrade/circuitbreaker/ResponseTimeCircuitBreaker.java index 2ab98d4dfd..42a185388a 100644 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/degrade/circuitbreaker/ResponseTimeCircuitBreaker.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/degrade/circuitbreaker/ResponseTimeCircuitBreaker.java @@ -16,13 +16,13 @@ package com.alibaba.csp.sentinel.slots.block.degrade.circuitbreaker; import java.util.List; +import java.util.concurrent.atomic.LongAdder; import com.alibaba.csp.sentinel.Entry; import com.alibaba.csp.sentinel.context.Context; import com.alibaba.csp.sentinel.slots.block.RuleConstant; import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule; import com.alibaba.csp.sentinel.slots.statistic.base.LeapArray; -import com.alibaba.csp.sentinel.slots.statistic.base.LongAdder; import com.alibaba.csp.sentinel.slots.statistic.base.WindowWrap; import com.alibaba.csp.sentinel.util.AssertUtil; import com.alibaba.csp.sentinel.util.TimeUtil; diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/statistic/base/LongAdder.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/statistic/base/LongAdder.java deleted file mode 100755 index e0e638a181..0000000000 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/statistic/base/LongAdder.java +++ /dev/null @@ -1,213 +0,0 @@ -package com.alibaba.csp.sentinel.slots.statistic.base; - -/* - * Written by Doug Lea with assistance from members of JCP JSR-166 - * Expert Group and released to the public domain, as explained at - * http://creativecommons.org/publicdomain/zero/1.0/ - * - * From http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/jsr166e/ - */ - -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.Serializable; -import java.util.concurrent.atomic.AtomicLong; - -/** - * One or more variables that together maintain an initially zero - * {@code long} sum. When updates (method {@link #add}) are contended - * across threads, the set of variables may grow dynamically to reduce - * contention. Method {@link #sum} (or, equivalently, {@link - * #longValue}) returns the current total combined across the - * variables maintaining the sum. - * - *

        This class is usually preferable to {@link AtomicLong} when - * multiple threads update a common sum that is used for purposes such - * as collecting statistics, not for fine-grained synchronization - * control. Under low update contention, the two classes have similar - * characteristics. But under high contention, expected throughput of - * this class is significantly higher, at the expense of higher space - * consumption. - * - *

        This class extends {@link Number}, but does not define - * methods such as {@code hashCode} and {@code compareTo} because - * instances are expected to be mutated, and so are not useful as - * collection keys. - * - *

        jsr166e note: This class is targeted to be placed in - * java.util.concurrent.atomic - * - * @author Doug Lea - * @since 1.8 - */ -public class LongAdder extends Striped64 implements Serializable { - private static final long serialVersionUID = 7249069246863182397L; - - /** - * Version of plus for use in retryUpdate - */ - @Override - final long fn(long v, long x) { return v + x; } - - /** - * Creates a new adder with initial sum of zero. - */ - public LongAdder() { - } - - /** - * Adds the given value. - * - * @param x the value to add - */ - public void add(long x) { - Cell[] as; - long b, v; - HashCode hc; - Cell a; - int n; - if ((as = cells) != null || !casBase(b = base, b + x)) { - boolean uncontended = true; - int h = (hc = threadHashCode.get()).code; - if (as == null || (n = as.length) < 1 || - (a = as[(n - 1) & h]) == null || - !(uncontended = a.cas(v = a.value, v + x))) { retryUpdate(x, hc, uncontended); } - } - } - - /** - * Equivalent to {@code add(1)}. - */ - public void increment() { - add(1L); - } - - /** - * Equivalent to {@code add(-1)}. - */ - public void decrement() { - add(-1L); - } - - /** - * Returns the current sum. The returned value is NOT an - * atomic snapshot: Invocation in the absence of concurrent - * updates returns an accurate result, but concurrent updates that - * occur while the sum is being calculated might not be - * incorporated. - * - * @return the sum - */ - public long sum() { - long sum = base; - Cell[] as = cells; - if (as != null) { - int n = as.length; - for (int i = 0; i < n; ++i) { - Cell a = as[i]; - if (a != null) { sum += a.value; } - } - } - return sum; - } - - /** - * Resets variables maintaining the sum to zero. This method may - * be a useful alternative to creating a new adder, but is only - * effective if there are no concurrent updates. Because this - * method is intrinsically racy, it should only be used when it is - * known that no threads are concurrently updating. - */ - public void reset() { - internalReset(0L); - } - - /** - * Equivalent in effect to {@link #sum} followed by {@link - * #reset}. This method may apply for example during quiescent - * points between multithreaded computations. If there are - * updates concurrent with this method, the returned value is - * not guaranteed to be the final value occurring before - * the reset. - * - * @return the sum - */ - public long sumThenReset() { - long sum = base; - Cell[] as = cells; - base = 0L; - if (as != null) { - int n = as.length; - for (int i = 0; i < n; ++i) { - Cell a = as[i]; - if (a != null) { - sum += a.value; - a.value = 0L; - } - } - } - return sum; - } - - /** - * Returns the String representation of the {@link #sum}. - * - * @return the String representation of the {@link #sum} - */ - @Override - public String toString() { - return Long.toString(sum()); - } - - /** - * Equivalent to {@link #sum}. - * - * @return the sum - */ - @Override - public long longValue() { - return sum(); - } - - /** - * Returns the {@link #sum} as an {@code int} after a narrowing - * primitive conversion. - */ - @Override - public int intValue() { - return (int)sum(); - } - - /** - * Returns the {@link #sum} as a {@code float} - * after a widening primitive conversion. - */ - @Override - public float floatValue() { - return (float)sum(); - } - - /** - * Returns the {@link #sum} as a {@code double} after a widening - * primitive conversion. - */ - @Override - public double doubleValue() { - return (double)sum(); - } - - private void writeObject(java.io.ObjectOutputStream s) - throws java.io.IOException { - s.defaultWriteObject(); - s.writeLong(sum()); - } - - private void readObject(ObjectInputStream s) - throws IOException, ClassNotFoundException { - s.defaultReadObject(); - busy = 0; - cells = null; - base = s.readLong(); - } - -} \ No newline at end of file diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/statistic/base/Striped64.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/statistic/base/Striped64.java deleted file mode 100755 index cab42f0a42..0000000000 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/statistic/base/Striped64.java +++ /dev/null @@ -1,349 +0,0 @@ - -package com.alibaba.csp.sentinel.slots.statistic.base; - -/* - * Written by Doug Lea with assistance from members of JCP JSR-166 - * Expert Group and released to the public domain, as explained at - * http://creativecommons.org/publicdomain/zero/1.0/ - * - * From http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/jsr166e/ - */ - -import java.util.Random; - -/** - * A package-local class holding common representation and mechanics - * for classes supporting dynamic striping on 64bit values. The class - * extends Number so that concrete subclasses must publicly do so. - */ -abstract class Striped64 extends Number { - /* - * This class maintains a lazily-initialized table of atomically - * updated variables, plus an extra "base" field. The table size - * is a power of two. Indexing uses masked per-thread hash codes. - * Nearly all declarations in this class are package-private, - * accessed directly by subclasses. - * - * Table entries are of class Cell; a variant of AtomicLong padded - * to reduce cache contention on most processors. Padding is - * overkill for most Atomics because they are usually irregularly - * scattered in memory and thus don't interfere much with each - * other. But Atomic objects residing in arrays will tend to be - * placed adjacent to each other, and so will most often share - * cache lines (with a huge negative performance impact) without - * this precaution. - * - * In part because Cells are relatively large, we avoid creating - * them until they are needed. When there is no contention, all - * updates are made to the base field. Upon first contention (a - * failed CAS on base update), the table is initialized to size 2. - * The table size is doubled upon further contention until - * reaching the nearest power of two greater than or equal to the - * number of CPUS. Table slots remain empty (null) until they are - * needed. - * - * A single spinlock ("busy") is used for initializing and - * resizing the table, as well as populating slots with new Cells. - * There is no need for a blocking lock: When the lock is not - * available, threads try other slots (or the base). During these - * retries, there is increased contention and reduced locality, - * which is still better than alternatives. - * - * Per-thread hash codes are initialized to random values. - * Contention and/or table collisions are indicated by failed - * CASes when performing an update operation (see method - * retryUpdate). Upon a collision, if the table size is less than - * the capacity, it is doubled in size unless some other thread - * holds the lock. If a hashed slot is empty, and lock is - * available, a new Cell is created. Otherwise, if the slot - * exists, a CAS is tried. Retries proceed by "double hashing", - * using a secondary hash (Marsaglia XorShift) to try to find a - * free slot. - * - * The table size is capped because, when there are more threads - * than CPUs, supposing that each thread were bound to a CPU, - * there would exist a perfect hash function mapping threads to - * slots that eliminates collisions. When we reach capacity, we - * search for this mapping by randomly varying the hash codes of - * colliding threads. Because search is random, and collisions - * only become known via CAS failures, convergence can be slow, - * and because threads are typically not bound to CPUS forever, - * may not occur at all. However, despite these limitations, - * observed contention rates are typically low in these cases. - * - * It is possible for a Cell to become unused when threads that - * once hashed to it terminate, as well as in the case where - * doubling the table causes no thread to hash to it under - * expanded mask. We do not try to detect or remove such cells, - * under the assumption that for long-running instances, observed - * contention levels will recur, so the cells will eventually be - * needed again; and for short-lived ones, it does not matter. - */ - - private static final long serialVersionUID = -3403386352761423917L; - - /** - * Padded variant of AtomicLong supporting only raw accesses plus CAS. - * The value field is placed between pads, hoping that the JVM doesn't - * reorder them. - * - * JVM intrinsics note: It would be possible to use a release-only - * form of CAS here, if it were provided. - */ - static final class Cell { - volatile long p0, p1, p2, p3, p4, p5, p6; - volatile long value; - volatile long q0, q1, q2, q3, q4, q5, q6; - - Cell(long x) { value = x; } - - final boolean cas(long cmp, long val) { - return UNSAFE.compareAndSwapLong(this, valueOffset, cmp, val); - } - - // Unsafe mechanics - private static final sun.misc.Unsafe UNSAFE; - private static final long valueOffset; - - static { - try { - UNSAFE = getUnsafe(); - Class ak = Cell.class; - valueOffset = UNSAFE.objectFieldOffset - (ak.getDeclaredField("value")); - } catch (Exception e) { - throw new Error(e); - } - } - - } - - /** - * Holder for the thread-local hash code. The code is initially - * random, but may be set to a different value upon collisions. - */ - static final class HashCode { - static final Random rng = new Random(); - int code; - - HashCode() { - int h = rng.nextInt(); // Avoid zero to allow xorShift rehash - code = (h == 0) ? 1 : h; - } - } - - /** - * The corresponding ThreadLocal class - */ - static final class ThreadHashCode extends ThreadLocal { - @Override - public HashCode initialValue() { return new HashCode(); } - } - - /** - * Static per-thread hash codes. Shared across all instances to - * reduce ThreadLocal pollution and because adjustments due to - * collisions in one table are likely to be appropriate for - * others. - */ - static final ThreadHashCode threadHashCode = new ThreadHashCode(); - - /** - * Number of CPUS, to place bound on table size - */ - static final int NCPU = Runtime.getRuntime().availableProcessors(); - - /** - * Table of cells. When non-null, size is a power of 2. - */ - transient volatile Cell[] cells; - - /** - * Base value, used mainly when there is no contention, but also as - * a fallback during table initialization races. Updated via CAS. - */ - transient volatile long base; - - /** - * Spinlock (locked via CAS) used when resizing and/or creating Cells. - */ - transient volatile int busy; - - /** - * Package-private default constructor - */ - Striped64() { - } - - /** - * CASes the base field. - */ - final boolean casBase(long cmp, long val) { - return UNSAFE.compareAndSwapLong(this, baseOffset, cmp, val); - } - - /** - * CASes the busy field from 0 to 1 to acquire lock. - */ - final boolean casBusy() { - return UNSAFE.compareAndSwapInt(this, busyOffset, 0, 1); - } - - /** - * Computes the function of current and new value. Subclasses - * should open-code this update function for most uses, but the - * virtualized form is needed within retryUpdate. - * - * @param currentValue the current value (of either base or a cell) - * @param newValue the argument from a user update call - * @return result of the update function - */ - abstract long fn(long currentValue, long newValue); - - /** - * Handles cases of updates involving initialization, resizing, - * creating new Cells, and/or contention. See above for - * explanation. This method suffers the usual non-modularity - * problems of optimistic retry code, relying on rechecked sets of - * reads. - * - * @param x the value - * @param hc the hash code holder - * @param wasUncontended false if CAS failed before call - */ - final void retryUpdate(long x, HashCode hc, boolean wasUncontended) { - int h = hc.code; - boolean collide = false; // True if last slot nonempty - for (; ; ) { - Cell[] as; - Cell a; - int n; - long v; - if ((as = cells) != null && (n = as.length) > 0) { - if ((a = as[(n - 1) & h]) == null) { - if (busy == 0) { // Try to attach new Cell - Cell r = new Cell(x); // Optimistically create - if (busy == 0 && casBusy()) { - boolean created = false; - try { // Recheck under lock - Cell[] rs; - int m, j; - if ((rs = cells) != null && - (m = rs.length) > 0 && - rs[j = (m - 1) & h] == null) { - rs[j] = r; - created = true; - } - } finally { - busy = 0; - } - if (created) { break; } - continue; // Slot is now non-empty - } - } - collide = false; - } else if (!wasUncontended) // CAS already known to fail - { - wasUncontended = true; // Continue after rehash - } else if (a.cas(v = a.value, fn(v, x))) { break; } else if (n >= NCPU || cells != as) { - collide = false; // At max size or stale - } else if (!collide) { collide = true; } else if (busy == 0 && casBusy()) { - try { - if (cells == as) { // Expand table unless stale - Cell[] rs = new Cell[n << 1]; - for (int i = 0; i < n; ++i) { rs[i] = as[i]; } - cells = rs; - } - } finally { - busy = 0; - } - collide = false; - continue; // Retry with expanded table - } - h ^= h << 13; // Rehash - h ^= h >>> 17; - h ^= h << 5; - } else if (busy == 0 && cells == as && casBusy()) { - boolean init = false; - try { // Initialize table - if (cells == as) { - Cell[] rs = new Cell[2]; - rs[h & 1] = new Cell(x); - cells = rs; - init = true; - } - } finally { - busy = 0; - } - if (init) { break; } - } else if (casBase(v = base, fn(v, x))) { - break; // Fall back on using base - } - } - hc.code = h; // Record index for next time - } - - /** - * Sets base and all cells to the given value. - */ - final void internalReset(long initialValue) { - Cell[] as = cells; - base = initialValue; - if (as != null) { - int n = as.length; - for (int i = 0; i < n; ++i) { - Cell a = as[i]; - if (a != null) { a.value = initialValue; } - } - } - } - - // Unsafe mechanics - private static final sun.misc.Unsafe UNSAFE; - private static final long baseOffset; - private static final long busyOffset; - - static { - try { - UNSAFE = getUnsafe(); - Class sk = Striped64.class; - baseOffset = UNSAFE.objectFieldOffset - (sk.getDeclaredField("base")); - busyOffset = UNSAFE.objectFieldOffset - (sk.getDeclaredField("busy")); - } catch (Exception e) { - throw new Error(e); - } - } - - /** - * Returns a sun.misc.Unsafe. Suitable for use in a 3rd party package. - * Replace with a simple call to Unsafe.getUnsafe when integrating - * into a jdk. - * - * @return a sun.misc.Unsafe - */ - private static sun.misc.Unsafe getUnsafe() { - try { - return sun.misc.Unsafe.getUnsafe(); - } catch (SecurityException se) { - try { - return java.security.AccessController.doPrivileged - (new java.security - .PrivilegedExceptionAction() { - @Override - public sun.misc.Unsafe run() throws Exception { - java.lang.reflect.Field f = sun.misc - .Unsafe.class.getDeclaredField("theUnsafe"); - f.setAccessible(true); - return (sun.misc.Unsafe)f.get(null); - } - }); - } catch (java.security.PrivilegedActionException e) { - throw new RuntimeException("Could not initialize intrinsics", - e.getCause()); - } - } - } - -} \ No newline at end of file diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/statistic/base/UnaryLeapArray.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/statistic/base/UnaryLeapArray.java index 2d92dd814b..879a6e38da 100644 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/statistic/base/UnaryLeapArray.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/statistic/base/UnaryLeapArray.java @@ -15,6 +15,8 @@ */ package com.alibaba.csp.sentinel.slots.statistic.base; +import java.util.concurrent.atomic.LongAdder; + /** * @author Eric Zhao */ diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/statistic/data/MetricBucket.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/statistic/data/MetricBucket.java index 6c35e174b3..aaeb87e9d9 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/statistic/data/MetricBucket.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/statistic/data/MetricBucket.java @@ -17,7 +17,7 @@ import com.alibaba.csp.sentinel.config.SentinelConfig; import com.alibaba.csp.sentinel.slots.statistic.MetricEvent; -import com.alibaba.csp.sentinel.slots.statistic.base.LongAdder; +import java.util.concurrent.atomic.LongAdder; /** * Represents metrics data in a period of time span. From c291c33ab255b81b9f134497623eee8258ffd86b Mon Sep 17 00:00:00 2001 From: Eric Zhao Date: Thu, 4 Feb 2021 14:36:11 +0800 Subject: [PATCH 16/20] Polish SpiLoader and SentinelConfig Signed-off-by: Eric Zhao --- .../csp/sentinel/config/SentinelConfig.java | 1 + .../alibaba/csp/sentinel/spi/SpiLoader.java | 33 ++++++++++--------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/config/SentinelConfig.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/config/SentinelConfig.java index ea9a0f02ba..9ef544e4ea 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/config/SentinelConfig.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/config/SentinelConfig.java @@ -167,6 +167,7 @@ public static String charset() { /** * Get the metric log flush interval in second * @return the metric log flush interval in second + * @since 1.8.1 */ public static long metricLogFlushIntervalSec() { String flushIntervalStr = SentinelConfig.getConfig(METRIC_FLUSH_INTERVAL); diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/SpiLoader.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/SpiLoader.java index eb6d9fc5e2..4b78fb104e 100644 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/SpiLoader.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/SpiLoader.java @@ -23,12 +23,13 @@ import java.io.*; import java.lang.reflect.Modifier; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; /** - * A simple SPI loading facility. + * A simple SPI loading facility (refactored since 1.8.1). * *

        SPI is short for Service Provider Interface.

        * @@ -54,13 +55,14 @@ * 3. The comment line character is #, all characters following it are ignored. *

        * - *

        - * Provide common functions, such as: - * Load all Provider instance unsorted/sorted list. - * Load highest/lowest order priority instance. - * Load first-found or default instance. - * Load instance by aliasname or provider class. - *

        + * + *

        {@code SpiLoader} provide common functions, such as:

        + *
          + *
        • Load all Provider instance unsorted/sorted list.
        • + *
        • Load highest/lowest order priority instance.
        • + *
        • Load first-found or default instance.
        • + *
        • Load instance by alias name or provider class.
        • + *
        * * @author Eric Zhao * @author cdfive @@ -92,7 +94,7 @@ public final class SpiLoader { // Cache the singleton instance of Provider, key: classname of Provider, value: Provider instance private final ConcurrentHashMap singletonMap = new ConcurrentHashMap<>(); - // Whether this SpiLoader has beend loaded, that is, loaded the Provider configuration file + // Whether this SpiLoader has been loaded, that is, loaded the Provider configuration file private final AtomicBoolean loaded = new AtomicBoolean(false); // Default provider class @@ -327,11 +329,11 @@ public void load() { try { urls = classLoader.getResources(fullFileName); } catch (IOException e) { - fail("Error locating SPI configuration file,filename=" + fullFileName + ",classloader=" + classLoader, e); + fail("Error locating SPI configuration file, filename=" + fullFileName + ", classloader=" + classLoader, e); } if (urls == null || !urls.hasMoreElements()) { - RecordLog.warn("No SPI configuration file,filename=" + fullFileName + ",classloader=" + classLoader); + RecordLog.warn("No SPI configuration file, filename=" + fullFileName + ", classloader=" + classLoader); return; } @@ -342,7 +344,7 @@ public void load() { BufferedReader br = null; try { in = url.openStream(); - br = new BufferedReader(new InputStreamReader(in, "utf-8")); + br = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8)); String line; while ((line = br.readLine()) != null) { if (StringUtil.isBlank(line)) { @@ -378,19 +380,20 @@ public void load() { String aliasName = spi == null || "".equals(spi.value()) ? clazz.getName() : spi.value(); if (classMap.containsKey(aliasName)) { Class existClass = classMap.get(aliasName); - fail("Found repeat aliasname for " + clazz.getName() + " and " + fail("Found repeat alias name for " + clazz.getName() + " and " + existClass.getName() + ",SPI configuration file=" + fullFileName); } classMap.put(aliasName, clazz); if (spi != null && spi.isDefault()) { if (defaultClass != null) { - fail("Found more than one default Provider,SPI configuration file=" + fullFileName); + fail("Found more than one default Provider, SPI configuration file=" + fullFileName); } defaultClass = clazz; } - RecordLog.info("[SpiLoader]Found SPI,Service={},Provider={},aliasname={},isSingleton={},isDefault={},order={}", + RecordLog.info("[SpiLoader] Found SPI implementation for SPI {}, provider={}, aliasName={}" + + ", isSingleton={}, isDefault={}, order={}", service.getName(), line, aliasName , spi == null ? true : spi.isSingleton() , spi == null ? false : spi.isDefault() From 5d634172b6d7d5fbb2e04a0550792697a72ca55c Mon Sep 17 00:00:00 2001 From: Eric Zhao Date: Thu, 4 Feb 2021 15:30:44 +0800 Subject: [PATCH 17/20] Bump version to 1.8.1 Signed-off-by: Eric Zhao --- README.md | 2 +- pom.xml | 2 +- sentinel-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-apache-dubbo-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-apache-httpclient-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-api-gateway-adapter-common/pom.xml | 2 +- sentinel-adapter/sentinel-dubbo-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-grpc-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-jax-rs-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-motan-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-okhttp-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-quarkus-adapter/pom.xml | 2 +- .../sentinel-annotation-quarkus-adapter-deployment/pom.xml | 2 +- .../sentinel-annotation-quarkus-adapter-runtime/pom.xml | 2 +- .../sentinel-jax-rs-quarkus-adapter-deployment/pom.xml | 2 +- .../sentinel-jax-rs-quarkus-adapter-runtime/pom.xml | 2 +- .../sentinel-native-image-quarkus-adapter-deployment/pom.xml | 2 +- .../sentinel-native-image-quarkus-adapter-runtime/pom.xml | 2 +- sentinel-adapter/sentinel-reactor-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-sofa-rpc-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-spring-cloud-gateway-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-spring-webflux-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-spring-webmvc-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-web-servlet/pom.xml | 2 +- sentinel-adapter/sentinel-zuul-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-zuul2-adapter/pom.xml | 2 +- sentinel-benchmark/pom.xml | 2 +- sentinel-cluster/pom.xml | 2 +- sentinel-cluster/sentinel-cluster-client-default/pom.xml | 2 +- sentinel-cluster/sentinel-cluster-common-default/pom.xml | 2 +- sentinel-cluster/sentinel-cluster-server-default/pom.xml | 2 +- sentinel-cluster/sentinel-cluster-server-envoy-rls/pom.xml | 2 +- sentinel-core/pom.xml | 2 +- sentinel-dashboard/pom.xml | 2 +- sentinel-demo/pom.xml | 2 +- sentinel-demo/sentinel-demo-annotation-cdi-interceptor/pom.xml | 2 +- sentinel-demo/sentinel-demo-annotation-spring-aop/pom.xml | 2 +- sentinel-demo/sentinel-demo-apache-dubbo/pom.xml | 2 +- sentinel-demo/sentinel-demo-apache-httpclient/pom.xml | 2 +- sentinel-demo/sentinel-demo-apollo-datasource/pom.xml | 2 +- sentinel-demo/sentinel-demo-basic/pom.xml | 2 +- sentinel-demo/sentinel-demo-cluster/pom.xml | 2 +- .../sentinel-demo-cluster-embedded/pom.xml | 2 +- .../sentinel-demo-cluster-server-alone/pom.xml | 2 +- sentinel-demo/sentinel-demo-command-handler/pom.xml | 2 +- sentinel-demo/sentinel-demo-dubbo/pom.xml | 2 +- sentinel-demo/sentinel-demo-dynamic-file-rule/pom.xml | 2 +- sentinel-demo/sentinel-demo-etcd-datasource/pom.xml | 2 +- sentinel-demo/sentinel-demo-jax-rs/pom.xml | 2 +- sentinel-demo/sentinel-demo-log-logback/pom.xml | 2 +- sentinel-demo/sentinel-demo-motan/pom.xml | 2 +- sentinel-demo/sentinel-demo-nacos-datasource/pom.xml | 2 +- sentinel-demo/sentinel-demo-okhttp/pom.xml | 2 +- sentinel-demo/sentinel-demo-parameter-flow-control/pom.xml | 2 +- sentinel-demo/sentinel-demo-quarkus/pom.xml | 2 +- sentinel-demo/sentinel-demo-rocketmq/pom.xml | 2 +- sentinel-demo/sentinel-demo-slot-chain-spi/pom.xml | 2 +- sentinel-demo/sentinel-demo-sofa-rpc/pom.xml | 2 +- sentinel-demo/sentinel-demo-spring-cloud-gateway/pom.xml | 2 +- sentinel-demo/sentinel-demo-spring-webflux/pom.xml | 2 +- sentinel-demo/sentinel-demo-spring-webmvc/pom.xml | 2 +- sentinel-demo/sentinel-demo-zookeeper-datasource/pom.xml | 2 +- sentinel-demo/sentinel-demo-zuul-gateway/pom.xml | 2 +- sentinel-demo/sentinel-demo-zuul2-gateway/pom.xml | 2 +- sentinel-extension/pom.xml | 2 +- sentinel-extension/sentinel-annotation-aspectj/pom.xml | 2 +- sentinel-extension/sentinel-annotation-cdi-interceptor/pom.xml | 2 +- sentinel-extension/sentinel-datasource-apollo/pom.xml | 2 +- sentinel-extension/sentinel-datasource-consul/pom.xml | 2 +- sentinel-extension/sentinel-datasource-etcd/pom.xml | 2 +- sentinel-extension/sentinel-datasource-eureka/pom.xml | 2 +- sentinel-extension/sentinel-datasource-extension/pom.xml | 2 +- sentinel-extension/sentinel-datasource-nacos/pom.xml | 2 +- sentinel-extension/sentinel-datasource-redis/pom.xml | 2 +- .../sentinel-datasource-spring-cloud-config/pom.xml | 2 +- sentinel-extension/sentinel-datasource-zookeeper/pom.xml | 2 +- sentinel-extension/sentinel-parameter-flow-control/pom.xml | 2 +- sentinel-logging/pom.xml | 2 +- sentinel-logging/sentinel-logging-slf4j/pom.xml | 2 +- sentinel-transport/pom.xml | 2 +- sentinel-transport/sentinel-transport-common/pom.xml | 2 +- sentinel-transport/sentinel-transport-netty-http/pom.xml | 2 +- sentinel-transport/sentinel-transport-simple-http/pom.xml | 2 +- 83 files changed, 83 insertions(+), 83 deletions(-) diff --git a/README.md b/README.md index 66713e63a4..04540a4a63 100755 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ If you're using Maven, just add the following dependency in `pom.xml`. com.alibaba.csp sentinel-core - 1.8.0 + 1.8.1 ``` diff --git a/pom.xml b/pom.xml index 776a1da1e2..3aa2dface5 100755 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.alibaba.csp sentinel-parent - 1.8.1-SNAPSHOT + 1.8.1 pom ${project.artifactId} diff --git a/sentinel-adapter/pom.xml b/sentinel-adapter/pom.xml index f153452e74..1954c62321 100755 --- a/sentinel-adapter/pom.xml +++ b/sentinel-adapter/pom.xml @@ -7,7 +7,7 @@ com.alibaba.csp sentinel-parent - 1.8.1-SNAPSHOT + 1.8.1 sentinel-adapter pom diff --git a/sentinel-adapter/sentinel-apache-dubbo-adapter/pom.xml b/sentinel-adapter/sentinel-apache-dubbo-adapter/pom.xml index cc7d379969..19e0ea66ef 100644 --- a/sentinel-adapter/sentinel-apache-dubbo-adapter/pom.xml +++ b/sentinel-adapter/sentinel-apache-dubbo-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-adapter/sentinel-apache-httpclient-adapter/pom.xml b/sentinel-adapter/sentinel-apache-httpclient-adapter/pom.xml index ae7864d4d9..9d3354029c 100644 --- a/sentinel-adapter/sentinel-apache-httpclient-adapter/pom.xml +++ b/sentinel-adapter/sentinel-apache-httpclient-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-adapter/sentinel-api-gateway-adapter-common/pom.xml b/sentinel-adapter/sentinel-api-gateway-adapter-common/pom.xml index 6b059f2053..66e5fa8c52 100644 --- a/sentinel-adapter/sentinel-api-gateway-adapter-common/pom.xml +++ b/sentinel-adapter/sentinel-api-gateway-adapter-common/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-adapter/sentinel-dubbo-adapter/pom.xml b/sentinel-adapter/sentinel-dubbo-adapter/pom.xml index eba2c16ad9..fef19eb408 100755 --- a/sentinel-adapter/sentinel-dubbo-adapter/pom.xml +++ b/sentinel-adapter/sentinel-dubbo-adapter/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-adapter - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 sentinel-dubbo-adapter diff --git a/sentinel-adapter/sentinel-grpc-adapter/pom.xml b/sentinel-adapter/sentinel-grpc-adapter/pom.xml index 909e397a2f..43aa044900 100755 --- a/sentinel-adapter/sentinel-grpc-adapter/pom.xml +++ b/sentinel-adapter/sentinel-grpc-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 sentinel-grpc-adapter diff --git a/sentinel-adapter/sentinel-jax-rs-adapter/pom.xml b/sentinel-adapter/sentinel-jax-rs-adapter/pom.xml index 7b1a9b6074..3c5053593a 100755 --- a/sentinel-adapter/sentinel-jax-rs-adapter/pom.xml +++ b/sentinel-adapter/sentinel-jax-rs-adapter/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-adapter - 1.8.1-SNAPSHOT + 1.8.1 sentinel-jax-rs-adapter diff --git a/sentinel-adapter/sentinel-motan-adapter/pom.xml b/sentinel-adapter/sentinel-motan-adapter/pom.xml index f0f9fbbe68..07d7abe888 100644 --- a/sentinel-adapter/sentinel-motan-adapter/pom.xml +++ b/sentinel-adapter/sentinel-motan-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 sentinel-motan-adapter diff --git a/sentinel-adapter/sentinel-okhttp-adapter/pom.xml b/sentinel-adapter/sentinel-okhttp-adapter/pom.xml index 23a638026c..d7d741dc54 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/pom.xml +++ b/sentinel-adapter/sentinel-okhttp-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-adapter/sentinel-quarkus-adapter/pom.xml b/sentinel-adapter/sentinel-quarkus-adapter/pom.xml index d316da7300..62ddfb2fd8 100755 --- a/sentinel-adapter/sentinel-quarkus-adapter/pom.xml +++ b/sentinel-adapter/sentinel-quarkus-adapter/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-adapter - 1.8.1-SNAPSHOT + 1.8.1 sentinel-quarkus-adapter-parent diff --git a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-deployment/pom.xml b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-deployment/pom.xml index a94b8cd6b8..31d928319c 100644 --- a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-deployment/pom.xml +++ b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-deployment/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-quarkus-adapter-parent - 1.8.1-SNAPSHOT + 1.8.1 ../pom.xml diff --git a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-runtime/pom.xml b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-runtime/pom.xml index 2e066f6816..1e44c1963e 100644 --- a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-runtime/pom.xml +++ b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-runtime/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-quarkus-adapter-parent - 1.8.1-SNAPSHOT + 1.8.1 ../pom.xml diff --git a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-deployment/pom.xml b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-deployment/pom.xml index 3137c5828d..4b5d2497bb 100644 --- a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-deployment/pom.xml +++ b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-deployment/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-quarkus-adapter-parent - 1.8.1-SNAPSHOT + 1.8.1 ../pom.xml diff --git a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-runtime/pom.xml b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-runtime/pom.xml index 6f72725b50..3905a5c00f 100644 --- a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-runtime/pom.xml +++ b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-runtime/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-quarkus-adapter-parent - 1.8.1-SNAPSHOT + 1.8.1 ../pom.xml diff --git a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-deployment/pom.xml b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-deployment/pom.xml index 471966f2ce..07579c6335 100644 --- a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-deployment/pom.xml +++ b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-deployment/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-quarkus-adapter-parent - 1.8.1-SNAPSHOT + 1.8.1 ../pom.xml diff --git a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-runtime/pom.xml b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-runtime/pom.xml index c8591cc261..9ff5765406 100644 --- a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-runtime/pom.xml +++ b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-runtime/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-quarkus-adapter-parent - 1.8.1-SNAPSHOT + 1.8.1 ../pom.xml diff --git a/sentinel-adapter/sentinel-reactor-adapter/pom.xml b/sentinel-adapter/sentinel-reactor-adapter/pom.xml index abb6a11650..fd352b8a73 100644 --- a/sentinel-adapter/sentinel-reactor-adapter/pom.xml +++ b/sentinel-adapter/sentinel-reactor-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-adapter/sentinel-sofa-rpc-adapter/pom.xml b/sentinel-adapter/sentinel-sofa-rpc-adapter/pom.xml index f0f84a723d..b1105d0282 100644 --- a/sentinel-adapter/sentinel-sofa-rpc-adapter/pom.xml +++ b/sentinel-adapter/sentinel-sofa-rpc-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/pom.xml b/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/pom.xml index 015d54850b..3ae6c5ef31 100644 --- a/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/pom.xml +++ b/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-adapter/sentinel-spring-webflux-adapter/pom.xml b/sentinel-adapter/sentinel-spring-webflux-adapter/pom.xml index 9965c09bea..ac14e1351e 100644 --- a/sentinel-adapter/sentinel-spring-webflux-adapter/pom.xml +++ b/sentinel-adapter/sentinel-spring-webflux-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-adapter/sentinel-spring-webmvc-adapter/pom.xml b/sentinel-adapter/sentinel-spring-webmvc-adapter/pom.xml index 23755f477c..429dd064d9 100644 --- a/sentinel-adapter/sentinel-spring-webmvc-adapter/pom.xml +++ b/sentinel-adapter/sentinel-spring-webmvc-adapter/pom.xml @@ -5,7 +5,7 @@ com.alibaba.csp sentinel-adapter - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-adapter/sentinel-web-servlet/pom.xml b/sentinel-adapter/sentinel-web-servlet/pom.xml index 618f71f6ef..e713f50228 100755 --- a/sentinel-adapter/sentinel-web-servlet/pom.xml +++ b/sentinel-adapter/sentinel-web-servlet/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-adapter - 1.8.1-SNAPSHOT + 1.8.1 sentinel-web-servlet diff --git a/sentinel-adapter/sentinel-zuul-adapter/pom.xml b/sentinel-adapter/sentinel-zuul-adapter/pom.xml index 7aa5181d2e..b55d126f0e 100755 --- a/sentinel-adapter/sentinel-zuul-adapter/pom.xml +++ b/sentinel-adapter/sentinel-zuul-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 sentinel-zuul-adapter diff --git a/sentinel-adapter/sentinel-zuul2-adapter/pom.xml b/sentinel-adapter/sentinel-zuul2-adapter/pom.xml index c841a53588..3c12a1449b 100644 --- a/sentinel-adapter/sentinel-zuul2-adapter/pom.xml +++ b/sentinel-adapter/sentinel-zuul2-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-benchmark/pom.xml b/sentinel-benchmark/pom.xml index dd88db7cd4..3d3095f2ff 100644 --- a/sentinel-benchmark/pom.xml +++ b/sentinel-benchmark/pom.xml @@ -5,7 +5,7 @@ sentinel-parent com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-cluster/pom.xml b/sentinel-cluster/pom.xml index 2ab0dac4f7..ecb593563a 100644 --- a/sentinel-cluster/pom.xml +++ b/sentinel-cluster/pom.xml @@ -5,7 +5,7 @@ sentinel-parent com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 pom diff --git a/sentinel-cluster/sentinel-cluster-client-default/pom.xml b/sentinel-cluster/sentinel-cluster-client-default/pom.xml index 630c1ff6df..483d2c42bd 100644 --- a/sentinel-cluster/sentinel-cluster-client-default/pom.xml +++ b/sentinel-cluster/sentinel-cluster-client-default/pom.xml @@ -5,7 +5,7 @@ sentinel-cluster com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-cluster/sentinel-cluster-common-default/pom.xml b/sentinel-cluster/sentinel-cluster-common-default/pom.xml index 1a9f2a3bf5..032d918c75 100644 --- a/sentinel-cluster/sentinel-cluster-common-default/pom.xml +++ b/sentinel-cluster/sentinel-cluster-common-default/pom.xml @@ -5,7 +5,7 @@ sentinel-cluster com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-cluster/sentinel-cluster-server-default/pom.xml b/sentinel-cluster/sentinel-cluster-server-default/pom.xml index d383015627..99d60bf98f 100644 --- a/sentinel-cluster/sentinel-cluster-server-default/pom.xml +++ b/sentinel-cluster/sentinel-cluster-server-default/pom.xml @@ -5,7 +5,7 @@ sentinel-cluster com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-cluster/sentinel-cluster-server-envoy-rls/pom.xml b/sentinel-cluster/sentinel-cluster-server-envoy-rls/pom.xml index 5728eb5651..213216039a 100644 --- a/sentinel-cluster/sentinel-cluster-server-envoy-rls/pom.xml +++ b/sentinel-cluster/sentinel-cluster-server-envoy-rls/pom.xml @@ -5,7 +5,7 @@ sentinel-cluster com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-core/pom.xml b/sentinel-core/pom.xml index 06c50f4aa4..7eb34aae74 100755 --- a/sentinel-core/pom.xml +++ b/sentinel-core/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-parent - 1.8.1-SNAPSHOT + 1.8.1 sentinel-core jar diff --git a/sentinel-dashboard/pom.xml b/sentinel-dashboard/pom.xml index 46ecdaaa6c..818d9e38f4 100755 --- a/sentinel-dashboard/pom.xml +++ b/sentinel-dashboard/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-parent - 1.8.1-SNAPSHOT + 1.8.1 sentinel-dashboard diff --git a/sentinel-demo/pom.xml b/sentinel-demo/pom.xml index 48de81ea2a..bcc602dc33 100755 --- a/sentinel-demo/pom.xml +++ b/sentinel-demo/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-parent - 1.8.1-SNAPSHOT + 1.8.1 sentinel-demo pom diff --git a/sentinel-demo/sentinel-demo-annotation-cdi-interceptor/pom.xml b/sentinel-demo/sentinel-demo-annotation-cdi-interceptor/pom.xml index 4844a8dd47..58cc47b3f4 100644 --- a/sentinel-demo/sentinel-demo-annotation-cdi-interceptor/pom.xml +++ b/sentinel-demo/sentinel-demo-annotation-cdi-interceptor/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-annotation-spring-aop/pom.xml b/sentinel-demo/sentinel-demo-annotation-spring-aop/pom.xml index f18015a9a3..72d6e61b9f 100644 --- a/sentinel-demo/sentinel-demo-annotation-spring-aop/pom.xml +++ b/sentinel-demo/sentinel-demo-annotation-spring-aop/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-apache-dubbo/pom.xml b/sentinel-demo/sentinel-demo-apache-dubbo/pom.xml index 4503687899..21a3328ab8 100644 --- a/sentinel-demo/sentinel-demo-apache-dubbo/pom.xml +++ b/sentinel-demo/sentinel-demo-apache-dubbo/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-apache-httpclient/pom.xml b/sentinel-demo/sentinel-demo-apache-httpclient/pom.xml index 80a33821f8..c7705f9085 100644 --- a/sentinel-demo/sentinel-demo-apache-httpclient/pom.xml +++ b/sentinel-demo/sentinel-demo-apache-httpclient/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-apollo-datasource/pom.xml b/sentinel-demo/sentinel-demo-apollo-datasource/pom.xml index 0b01d240a0..b65e5a82ba 100644 --- a/sentinel-demo/sentinel-demo-apollo-datasource/pom.xml +++ b/sentinel-demo/sentinel-demo-apollo-datasource/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-basic/pom.xml b/sentinel-demo/sentinel-demo-basic/pom.xml index d30e00be38..f589d5c8e4 100755 --- a/sentinel-demo/sentinel-demo-basic/pom.xml +++ b/sentinel-demo/sentinel-demo-basic/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-demo - 1.8.1-SNAPSHOT + 1.8.1 sentinel-demo-basic diff --git a/sentinel-demo/sentinel-demo-cluster/pom.xml b/sentinel-demo/sentinel-demo-cluster/pom.xml index 9fbda3e673..f30df32529 100644 --- a/sentinel-demo/sentinel-demo-cluster/pom.xml +++ b/sentinel-demo/sentinel-demo-cluster/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-embedded/pom.xml b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-embedded/pom.xml index ceda6b9450..ef9192a165 100644 --- a/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-embedded/pom.xml +++ b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-embedded/pom.xml @@ -5,7 +5,7 @@ sentinel-demo-cluster com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/pom.xml b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/pom.xml index 3a97f85fd3..d197d57b58 100644 --- a/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/pom.xml +++ b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/pom.xml @@ -5,7 +5,7 @@ sentinel-demo-cluster com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-command-handler/pom.xml b/sentinel-demo/sentinel-demo-command-handler/pom.xml index 4bc5ff7f43..970cc2094c 100644 --- a/sentinel-demo/sentinel-demo-command-handler/pom.xml +++ b/sentinel-demo/sentinel-demo-command-handler/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-dubbo/pom.xml b/sentinel-demo/sentinel-demo-dubbo/pom.xml index d42372cc90..b370281298 100644 --- a/sentinel-demo/sentinel-demo-dubbo/pom.xml +++ b/sentinel-demo/sentinel-demo-dubbo/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-dynamic-file-rule/pom.xml b/sentinel-demo/sentinel-demo-dynamic-file-rule/pom.xml index e2f77241a3..17132cd07a 100755 --- a/sentinel-demo/sentinel-demo-dynamic-file-rule/pom.xml +++ b/sentinel-demo/sentinel-demo-dynamic-file-rule/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-demo - 1.8.1-SNAPSHOT + 1.8.1 sentinel-demo-dynamic-file-rule diff --git a/sentinel-demo/sentinel-demo-etcd-datasource/pom.xml b/sentinel-demo/sentinel-demo-etcd-datasource/pom.xml index 57cb3e6dd3..07573801a3 100644 --- a/sentinel-demo/sentinel-demo-etcd-datasource/pom.xml +++ b/sentinel-demo/sentinel-demo-etcd-datasource/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-jax-rs/pom.xml b/sentinel-demo/sentinel-demo-jax-rs/pom.xml index 7e200de7cf..fbf08e57d2 100644 --- a/sentinel-demo/sentinel-demo-jax-rs/pom.xml +++ b/sentinel-demo/sentinel-demo-jax-rs/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-log-logback/pom.xml b/sentinel-demo/sentinel-demo-log-logback/pom.xml index 2f4e35f178..d39828ed10 100644 --- a/sentinel-demo/sentinel-demo-log-logback/pom.xml +++ b/sentinel-demo/sentinel-demo-log-logback/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-motan/pom.xml b/sentinel-demo/sentinel-demo-motan/pom.xml index 58ee8e9f5c..ed57026a44 100644 --- a/sentinel-demo/sentinel-demo-motan/pom.xml +++ b/sentinel-demo/sentinel-demo-motan/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 sentinel-demo-motan diff --git a/sentinel-demo/sentinel-demo-nacos-datasource/pom.xml b/sentinel-demo/sentinel-demo-nacos-datasource/pom.xml index dbffcfd59b..eb20952c43 100644 --- a/sentinel-demo/sentinel-demo-nacos-datasource/pom.xml +++ b/sentinel-demo/sentinel-demo-nacos-datasource/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-okhttp/pom.xml b/sentinel-demo/sentinel-demo-okhttp/pom.xml index e8bcb27bd8..da32dc4ac2 100644 --- a/sentinel-demo/sentinel-demo-okhttp/pom.xml +++ b/sentinel-demo/sentinel-demo-okhttp/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-parameter-flow-control/pom.xml b/sentinel-demo/sentinel-demo-parameter-flow-control/pom.xml index 6ec442ac8e..c335246e15 100644 --- a/sentinel-demo/sentinel-demo-parameter-flow-control/pom.xml +++ b/sentinel-demo/sentinel-demo-parameter-flow-control/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-quarkus/pom.xml b/sentinel-demo/sentinel-demo-quarkus/pom.xml index 23c05dd15a..02e3214929 100644 --- a/sentinel-demo/sentinel-demo-quarkus/pom.xml +++ b/sentinel-demo/sentinel-demo-quarkus/pom.xml @@ -6,7 +6,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-rocketmq/pom.xml b/sentinel-demo/sentinel-demo-rocketmq/pom.xml index 3a000be550..aa21a5363f 100755 --- a/sentinel-demo/sentinel-demo-rocketmq/pom.xml +++ b/sentinel-demo/sentinel-demo-rocketmq/pom.xml @@ -5,7 +5,7 @@ com.alibaba.csp sentinel-demo - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-slot-chain-spi/pom.xml b/sentinel-demo/sentinel-demo-slot-chain-spi/pom.xml index 66658aa964..b6bc86cdf6 100644 --- a/sentinel-demo/sentinel-demo-slot-chain-spi/pom.xml +++ b/sentinel-demo/sentinel-demo-slot-chain-spi/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-sofa-rpc/pom.xml b/sentinel-demo/sentinel-demo-sofa-rpc/pom.xml index b9db5ace48..73443e69cc 100644 --- a/sentinel-demo/sentinel-demo-sofa-rpc/pom.xml +++ b/sentinel-demo/sentinel-demo-sofa-rpc/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-spring-cloud-gateway/pom.xml b/sentinel-demo/sentinel-demo-spring-cloud-gateway/pom.xml index 858336b342..a6a35b4e38 100644 --- a/sentinel-demo/sentinel-demo-spring-cloud-gateway/pom.xml +++ b/sentinel-demo/sentinel-demo-spring-cloud-gateway/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-spring-webflux/pom.xml b/sentinel-demo/sentinel-demo-spring-webflux/pom.xml index 22928e82c2..cc57022356 100644 --- a/sentinel-demo/sentinel-demo-spring-webflux/pom.xml +++ b/sentinel-demo/sentinel-demo-spring-webflux/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-spring-webmvc/pom.xml b/sentinel-demo/sentinel-demo-spring-webmvc/pom.xml index ba8fcb1b5f..a7a3dbe602 100644 --- a/sentinel-demo/sentinel-demo-spring-webmvc/pom.xml +++ b/sentinel-demo/sentinel-demo-spring-webmvc/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-zookeeper-datasource/pom.xml b/sentinel-demo/sentinel-demo-zookeeper-datasource/pom.xml index 0eac807cc9..21d7be0521 100644 --- a/sentinel-demo/sentinel-demo-zookeeper-datasource/pom.xml +++ b/sentinel-demo/sentinel-demo-zookeeper-datasource/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-zuul-gateway/pom.xml b/sentinel-demo/sentinel-demo-zuul-gateway/pom.xml index 4c049ca72d..f1eb2f9fdc 100644 --- a/sentinel-demo/sentinel-demo-zuul-gateway/pom.xml +++ b/sentinel-demo/sentinel-demo-zuul-gateway/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-demo/sentinel-demo-zuul2-gateway/pom.xml b/sentinel-demo/sentinel-demo-zuul2-gateway/pom.xml index 1a9848c2d2..7b9d33e148 100644 --- a/sentinel-demo/sentinel-demo-zuul2-gateway/pom.xml +++ b/sentinel-demo/sentinel-demo-zuul2-gateway/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-extension/pom.xml b/sentinel-extension/pom.xml index 5283516527..06f7294c25 100755 --- a/sentinel-extension/pom.xml +++ b/sentinel-extension/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-parent - 1.8.1-SNAPSHOT + 1.8.1 sentinel-extension pom diff --git a/sentinel-extension/sentinel-annotation-aspectj/pom.xml b/sentinel-extension/sentinel-annotation-aspectj/pom.xml index f1eabe7052..41e36d214b 100644 --- a/sentinel-extension/sentinel-annotation-aspectj/pom.xml +++ b/sentinel-extension/sentinel-annotation-aspectj/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-extension/sentinel-annotation-cdi-interceptor/pom.xml b/sentinel-extension/sentinel-annotation-cdi-interceptor/pom.xml index f85c4c4574..70f517804b 100644 --- a/sentinel-extension/sentinel-annotation-cdi-interceptor/pom.xml +++ b/sentinel-extension/sentinel-annotation-cdi-interceptor/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-extension/sentinel-datasource-apollo/pom.xml b/sentinel-extension/sentinel-datasource-apollo/pom.xml index 9253fb8bcf..fd20ac5213 100644 --- a/sentinel-extension/sentinel-datasource-apollo/pom.xml +++ b/sentinel-extension/sentinel-datasource-apollo/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-extension/sentinel-datasource-consul/pom.xml b/sentinel-extension/sentinel-datasource-consul/pom.xml index 641e2354ce..4c58c395f4 100644 --- a/sentinel-extension/sentinel-datasource-consul/pom.xml +++ b/sentinel-extension/sentinel-datasource-consul/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-extension/sentinel-datasource-etcd/pom.xml b/sentinel-extension/sentinel-datasource-etcd/pom.xml index 987e6bef29..0e645f7ca5 100644 --- a/sentinel-extension/sentinel-datasource-etcd/pom.xml +++ b/sentinel-extension/sentinel-datasource-etcd/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-extension/sentinel-datasource-eureka/pom.xml b/sentinel-extension/sentinel-datasource-eureka/pom.xml index 8db411d069..9e98baf77b 100644 --- a/sentinel-extension/sentinel-datasource-eureka/pom.xml +++ b/sentinel-extension/sentinel-datasource-eureka/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-extension/sentinel-datasource-extension/pom.xml b/sentinel-extension/sentinel-datasource-extension/pom.xml index a347a13fc5..e1ac0d84fb 100755 --- a/sentinel-extension/sentinel-datasource-extension/pom.xml +++ b/sentinel-extension/sentinel-datasource-extension/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-extension - 1.8.1-SNAPSHOT + 1.8.1 sentinel-datasource-extension diff --git a/sentinel-extension/sentinel-datasource-nacos/pom.xml b/sentinel-extension/sentinel-datasource-nacos/pom.xml index f9dd3d4f33..a5bbf989cd 100644 --- a/sentinel-extension/sentinel-datasource-nacos/pom.xml +++ b/sentinel-extension/sentinel-datasource-nacos/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-extension/sentinel-datasource-redis/pom.xml b/sentinel-extension/sentinel-datasource-redis/pom.xml index e69d8faa27..2a23486317 100644 --- a/sentinel-extension/sentinel-datasource-redis/pom.xml +++ b/sentinel-extension/sentinel-datasource-redis/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-extension/sentinel-datasource-spring-cloud-config/pom.xml b/sentinel-extension/sentinel-datasource-spring-cloud-config/pom.xml index 6469b05b53..9a6a9eff1c 100644 --- a/sentinel-extension/sentinel-datasource-spring-cloud-config/pom.xml +++ b/sentinel-extension/sentinel-datasource-spring-cloud-config/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-extension/sentinel-datasource-zookeeper/pom.xml b/sentinel-extension/sentinel-datasource-zookeeper/pom.xml index 34a764f903..62cabcb5ab 100644 --- a/sentinel-extension/sentinel-datasource-zookeeper/pom.xml +++ b/sentinel-extension/sentinel-datasource-zookeeper/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-extension/sentinel-parameter-flow-control/pom.xml b/sentinel-extension/sentinel-parameter-flow-control/pom.xml index e306f1d8d7..df712745a5 100644 --- a/sentinel-extension/sentinel-parameter-flow-control/pom.xml +++ b/sentinel-extension/sentinel-parameter-flow-control/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-logging/pom.xml b/sentinel-logging/pom.xml index 534b67a0a2..9d2a9a6aed 100755 --- a/sentinel-logging/pom.xml +++ b/sentinel-logging/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-parent - 1.8.1-SNAPSHOT + 1.8.1 sentinel-logging pom diff --git a/sentinel-logging/sentinel-logging-slf4j/pom.xml b/sentinel-logging/sentinel-logging-slf4j/pom.xml index f9e9583c61..5642538543 100644 --- a/sentinel-logging/sentinel-logging-slf4j/pom.xml +++ b/sentinel-logging/sentinel-logging-slf4j/pom.xml @@ -5,7 +5,7 @@ sentinel-logging com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 diff --git a/sentinel-transport/pom.xml b/sentinel-transport/pom.xml index 3aa34aeca9..69b4657c43 100755 --- a/sentinel-transport/pom.xml +++ b/sentinel-transport/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-parent - 1.8.1-SNAPSHOT + 1.8.1 sentinel-transport The transport module of Sentinel diff --git a/sentinel-transport/sentinel-transport-common/pom.xml b/sentinel-transport/sentinel-transport-common/pom.xml index 7351753d73..a8e0549b7d 100755 --- a/sentinel-transport/sentinel-transport-common/pom.xml +++ b/sentinel-transport/sentinel-transport-common/pom.xml @@ -5,7 +5,7 @@ com.alibaba.csp sentinel-transport - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 jar diff --git a/sentinel-transport/sentinel-transport-netty-http/pom.xml b/sentinel-transport/sentinel-transport-netty-http/pom.xml index 0895669e88..1f6cf54bf5 100755 --- a/sentinel-transport/sentinel-transport-netty-http/pom.xml +++ b/sentinel-transport/sentinel-transport-netty-http/pom.xml @@ -5,7 +5,7 @@ com.alibaba.csp sentinel-transport - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 sentinel-transport-netty-http diff --git a/sentinel-transport/sentinel-transport-simple-http/pom.xml b/sentinel-transport/sentinel-transport-simple-http/pom.xml index 0fbd761bcd..acd8788637 100755 --- a/sentinel-transport/sentinel-transport-simple-http/pom.xml +++ b/sentinel-transport/sentinel-transport-simple-http/pom.xml @@ -5,7 +5,7 @@ sentinel-transport com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.1 4.0.0 From efcda7ede9d52f33dcffd6a7f11db97c64236d7b Mon Sep 17 00:00:00 2001 From: Eric Zhao Date: Thu, 4 Feb 2021 16:45:40 +0800 Subject: [PATCH 18/20] Bump version to 1.8.2-SNAPSHOT Signed-off-by: Eric Zhao --- pom.xml | 2 +- sentinel-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-apache-dubbo-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-apache-httpclient-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-api-gateway-adapter-common/pom.xml | 2 +- sentinel-adapter/sentinel-dubbo-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-grpc-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-jax-rs-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-motan-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-okhttp-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-quarkus-adapter/pom.xml | 2 +- .../sentinel-annotation-quarkus-adapter-deployment/pom.xml | 2 +- .../sentinel-annotation-quarkus-adapter-runtime/pom.xml | 2 +- .../sentinel-jax-rs-quarkus-adapter-deployment/pom.xml | 2 +- .../sentinel-jax-rs-quarkus-adapter-runtime/pom.xml | 2 +- .../sentinel-native-image-quarkus-adapter-deployment/pom.xml | 2 +- .../sentinel-native-image-quarkus-adapter-runtime/pom.xml | 2 +- sentinel-adapter/sentinel-reactor-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-sofa-rpc-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-spring-cloud-gateway-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-spring-webflux-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-spring-webmvc-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-web-servlet/pom.xml | 2 +- sentinel-adapter/sentinel-zuul-adapter/pom.xml | 2 +- sentinel-adapter/sentinel-zuul2-adapter/pom.xml | 2 +- sentinel-benchmark/pom.xml | 2 +- sentinel-cluster/pom.xml | 2 +- sentinel-cluster/sentinel-cluster-client-default/pom.xml | 2 +- sentinel-cluster/sentinel-cluster-common-default/pom.xml | 2 +- sentinel-cluster/sentinel-cluster-server-default/pom.xml | 2 +- sentinel-cluster/sentinel-cluster-server-envoy-rls/pom.xml | 2 +- sentinel-core/pom.xml | 2 +- .../src/main/java/com/alibaba/csp/sentinel/Constants.java | 2 +- sentinel-dashboard/pom.xml | 2 +- sentinel-demo/pom.xml | 2 +- sentinel-demo/sentinel-demo-annotation-cdi-interceptor/pom.xml | 2 +- sentinel-demo/sentinel-demo-annotation-spring-aop/pom.xml | 2 +- sentinel-demo/sentinel-demo-apache-dubbo/pom.xml | 2 +- sentinel-demo/sentinel-demo-apache-httpclient/pom.xml | 2 +- sentinel-demo/sentinel-demo-apollo-datasource/pom.xml | 2 +- sentinel-demo/sentinel-demo-basic/pom.xml | 2 +- sentinel-demo/sentinel-demo-cluster/pom.xml | 2 +- .../sentinel-demo-cluster-embedded/pom.xml | 2 +- .../sentinel-demo-cluster-server-alone/pom.xml | 2 +- sentinel-demo/sentinel-demo-command-handler/pom.xml | 2 +- sentinel-demo/sentinel-demo-dubbo/pom.xml | 2 +- sentinel-demo/sentinel-demo-dynamic-file-rule/pom.xml | 2 +- sentinel-demo/sentinel-demo-etcd-datasource/pom.xml | 2 +- sentinel-demo/sentinel-demo-jax-rs/pom.xml | 2 +- sentinel-demo/sentinel-demo-log-logback/pom.xml | 2 +- sentinel-demo/sentinel-demo-motan/pom.xml | 2 +- sentinel-demo/sentinel-demo-nacos-datasource/pom.xml | 2 +- sentinel-demo/sentinel-demo-okhttp/pom.xml | 2 +- sentinel-demo/sentinel-demo-parameter-flow-control/pom.xml | 2 +- sentinel-demo/sentinel-demo-quarkus/pom.xml | 2 +- sentinel-demo/sentinel-demo-rocketmq/pom.xml | 2 +- sentinel-demo/sentinel-demo-slot-chain-spi/pom.xml | 2 +- sentinel-demo/sentinel-demo-sofa-rpc/pom.xml | 2 +- sentinel-demo/sentinel-demo-spring-cloud-gateway/pom.xml | 2 +- sentinel-demo/sentinel-demo-spring-webflux/pom.xml | 2 +- sentinel-demo/sentinel-demo-spring-webmvc/pom.xml | 2 +- sentinel-demo/sentinel-demo-zookeeper-datasource/pom.xml | 2 +- sentinel-demo/sentinel-demo-zuul-gateway/pom.xml | 2 +- sentinel-demo/sentinel-demo-zuul2-gateway/pom.xml | 2 +- sentinel-extension/pom.xml | 2 +- sentinel-extension/sentinel-annotation-aspectj/pom.xml | 2 +- sentinel-extension/sentinel-annotation-cdi-interceptor/pom.xml | 2 +- sentinel-extension/sentinel-datasource-apollo/pom.xml | 2 +- sentinel-extension/sentinel-datasource-consul/pom.xml | 2 +- sentinel-extension/sentinel-datasource-etcd/pom.xml | 2 +- sentinel-extension/sentinel-datasource-eureka/pom.xml | 2 +- sentinel-extension/sentinel-datasource-extension/pom.xml | 2 +- sentinel-extension/sentinel-datasource-nacos/pom.xml | 2 +- sentinel-extension/sentinel-datasource-redis/pom.xml | 2 +- .../sentinel-datasource-spring-cloud-config/pom.xml | 2 +- sentinel-extension/sentinel-datasource-zookeeper/pom.xml | 2 +- sentinel-extension/sentinel-parameter-flow-control/pom.xml | 2 +- sentinel-logging/pom.xml | 2 +- sentinel-logging/sentinel-logging-slf4j/pom.xml | 2 +- sentinel-transport/pom.xml | 2 +- sentinel-transport/sentinel-transport-common/pom.xml | 2 +- sentinel-transport/sentinel-transport-netty-http/pom.xml | 2 +- sentinel-transport/sentinel-transport-simple-http/pom.xml | 2 +- 83 files changed, 83 insertions(+), 83 deletions(-) diff --git a/pom.xml b/pom.xml index 3aa2dface5..b9299afe24 100755 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.alibaba.csp sentinel-parent - 1.8.1 + 1.8.2-SNAPSHOT pom ${project.artifactId} diff --git a/sentinel-adapter/pom.xml b/sentinel-adapter/pom.xml index 1954c62321..71a237c4ae 100755 --- a/sentinel-adapter/pom.xml +++ b/sentinel-adapter/pom.xml @@ -7,7 +7,7 @@ com.alibaba.csp sentinel-parent - 1.8.1 + 1.8.2-SNAPSHOT sentinel-adapter pom diff --git a/sentinel-adapter/sentinel-apache-dubbo-adapter/pom.xml b/sentinel-adapter/sentinel-apache-dubbo-adapter/pom.xml index 19e0ea66ef..5dcf45e717 100644 --- a/sentinel-adapter/sentinel-apache-dubbo-adapter/pom.xml +++ b/sentinel-adapter/sentinel-apache-dubbo-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-adapter/sentinel-apache-httpclient-adapter/pom.xml b/sentinel-adapter/sentinel-apache-httpclient-adapter/pom.xml index 9d3354029c..a4ec896f36 100644 --- a/sentinel-adapter/sentinel-apache-httpclient-adapter/pom.xml +++ b/sentinel-adapter/sentinel-apache-httpclient-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-adapter/sentinel-api-gateway-adapter-common/pom.xml b/sentinel-adapter/sentinel-api-gateway-adapter-common/pom.xml index 66e5fa8c52..45e4006451 100644 --- a/sentinel-adapter/sentinel-api-gateway-adapter-common/pom.xml +++ b/sentinel-adapter/sentinel-api-gateway-adapter-common/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-adapter/sentinel-dubbo-adapter/pom.xml b/sentinel-adapter/sentinel-dubbo-adapter/pom.xml index fef19eb408..d0c5710f08 100755 --- a/sentinel-adapter/sentinel-dubbo-adapter/pom.xml +++ b/sentinel-adapter/sentinel-dubbo-adapter/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-adapter - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 sentinel-dubbo-adapter diff --git a/sentinel-adapter/sentinel-grpc-adapter/pom.xml b/sentinel-adapter/sentinel-grpc-adapter/pom.xml index 43aa044900..8e6ee33355 100755 --- a/sentinel-adapter/sentinel-grpc-adapter/pom.xml +++ b/sentinel-adapter/sentinel-grpc-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 sentinel-grpc-adapter diff --git a/sentinel-adapter/sentinel-jax-rs-adapter/pom.xml b/sentinel-adapter/sentinel-jax-rs-adapter/pom.xml index 3c5053593a..892d599131 100755 --- a/sentinel-adapter/sentinel-jax-rs-adapter/pom.xml +++ b/sentinel-adapter/sentinel-jax-rs-adapter/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-adapter - 1.8.1 + 1.8.2-SNAPSHOT sentinel-jax-rs-adapter diff --git a/sentinel-adapter/sentinel-motan-adapter/pom.xml b/sentinel-adapter/sentinel-motan-adapter/pom.xml index 07d7abe888..30fcca7f50 100644 --- a/sentinel-adapter/sentinel-motan-adapter/pom.xml +++ b/sentinel-adapter/sentinel-motan-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 sentinel-motan-adapter diff --git a/sentinel-adapter/sentinel-okhttp-adapter/pom.xml b/sentinel-adapter/sentinel-okhttp-adapter/pom.xml index d7d741dc54..5919b5d357 100644 --- a/sentinel-adapter/sentinel-okhttp-adapter/pom.xml +++ b/sentinel-adapter/sentinel-okhttp-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-adapter/sentinel-quarkus-adapter/pom.xml b/sentinel-adapter/sentinel-quarkus-adapter/pom.xml index 62ddfb2fd8..cc49a99646 100755 --- a/sentinel-adapter/sentinel-quarkus-adapter/pom.xml +++ b/sentinel-adapter/sentinel-quarkus-adapter/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-adapter - 1.8.1 + 1.8.2-SNAPSHOT sentinel-quarkus-adapter-parent diff --git a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-deployment/pom.xml b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-deployment/pom.xml index 31d928319c..39ab7c477b 100644 --- a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-deployment/pom.xml +++ b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-deployment/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-quarkus-adapter-parent - 1.8.1 + 1.8.2-SNAPSHOT ../pom.xml diff --git a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-runtime/pom.xml b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-runtime/pom.xml index 1e44c1963e..7bcf26dee7 100644 --- a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-runtime/pom.xml +++ b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-annotation-quarkus-adapter-runtime/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-quarkus-adapter-parent - 1.8.1 + 1.8.2-SNAPSHOT ../pom.xml diff --git a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-deployment/pom.xml b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-deployment/pom.xml index 4b5d2497bb..46a0ffb642 100644 --- a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-deployment/pom.xml +++ b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-deployment/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-quarkus-adapter-parent - 1.8.1 + 1.8.2-SNAPSHOT ../pom.xml diff --git a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-runtime/pom.xml b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-runtime/pom.xml index 3905a5c00f..63f2c03375 100644 --- a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-runtime/pom.xml +++ b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-jax-rs-quarkus-adapter-runtime/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-quarkus-adapter-parent - 1.8.1 + 1.8.2-SNAPSHOT ../pom.xml diff --git a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-deployment/pom.xml b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-deployment/pom.xml index 07579c6335..3e03ffeffb 100644 --- a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-deployment/pom.xml +++ b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-deployment/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-quarkus-adapter-parent - 1.8.1 + 1.8.2-SNAPSHOT ../pom.xml diff --git a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-runtime/pom.xml b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-runtime/pom.xml index 9ff5765406..b5912b1f14 100644 --- a/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-runtime/pom.xml +++ b/sentinel-adapter/sentinel-quarkus-adapter/sentinel-native-image-quarkus-adapter-runtime/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-quarkus-adapter-parent - 1.8.1 + 1.8.2-SNAPSHOT ../pom.xml diff --git a/sentinel-adapter/sentinel-reactor-adapter/pom.xml b/sentinel-adapter/sentinel-reactor-adapter/pom.xml index fd352b8a73..6e4fd96ba8 100644 --- a/sentinel-adapter/sentinel-reactor-adapter/pom.xml +++ b/sentinel-adapter/sentinel-reactor-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-adapter/sentinel-sofa-rpc-adapter/pom.xml b/sentinel-adapter/sentinel-sofa-rpc-adapter/pom.xml index b1105d0282..556f1def28 100644 --- a/sentinel-adapter/sentinel-sofa-rpc-adapter/pom.xml +++ b/sentinel-adapter/sentinel-sofa-rpc-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/pom.xml b/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/pom.xml index 3ae6c5ef31..0058e93b2c 100644 --- a/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/pom.xml +++ b/sentinel-adapter/sentinel-spring-cloud-gateway-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-adapter/sentinel-spring-webflux-adapter/pom.xml b/sentinel-adapter/sentinel-spring-webflux-adapter/pom.xml index ac14e1351e..6b7daf3a06 100644 --- a/sentinel-adapter/sentinel-spring-webflux-adapter/pom.xml +++ b/sentinel-adapter/sentinel-spring-webflux-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-adapter/sentinel-spring-webmvc-adapter/pom.xml b/sentinel-adapter/sentinel-spring-webmvc-adapter/pom.xml index 429dd064d9..95925175af 100644 --- a/sentinel-adapter/sentinel-spring-webmvc-adapter/pom.xml +++ b/sentinel-adapter/sentinel-spring-webmvc-adapter/pom.xml @@ -5,7 +5,7 @@ com.alibaba.csp sentinel-adapter - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-adapter/sentinel-web-servlet/pom.xml b/sentinel-adapter/sentinel-web-servlet/pom.xml index e713f50228..bd48e74356 100755 --- a/sentinel-adapter/sentinel-web-servlet/pom.xml +++ b/sentinel-adapter/sentinel-web-servlet/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-adapter - 1.8.1 + 1.8.2-SNAPSHOT sentinel-web-servlet diff --git a/sentinel-adapter/sentinel-zuul-adapter/pom.xml b/sentinel-adapter/sentinel-zuul-adapter/pom.xml index b55d126f0e..38535d132a 100755 --- a/sentinel-adapter/sentinel-zuul-adapter/pom.xml +++ b/sentinel-adapter/sentinel-zuul-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 sentinel-zuul-adapter diff --git a/sentinel-adapter/sentinel-zuul2-adapter/pom.xml b/sentinel-adapter/sentinel-zuul2-adapter/pom.xml index 3c12a1449b..ad3aac5c4a 100644 --- a/sentinel-adapter/sentinel-zuul2-adapter/pom.xml +++ b/sentinel-adapter/sentinel-zuul2-adapter/pom.xml @@ -5,7 +5,7 @@ sentinel-adapter com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-benchmark/pom.xml b/sentinel-benchmark/pom.xml index 3d3095f2ff..e8452cf3d8 100644 --- a/sentinel-benchmark/pom.xml +++ b/sentinel-benchmark/pom.xml @@ -5,7 +5,7 @@ sentinel-parent com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-cluster/pom.xml b/sentinel-cluster/pom.xml index ecb593563a..0860db1603 100644 --- a/sentinel-cluster/pom.xml +++ b/sentinel-cluster/pom.xml @@ -5,7 +5,7 @@ sentinel-parent com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 pom diff --git a/sentinel-cluster/sentinel-cluster-client-default/pom.xml b/sentinel-cluster/sentinel-cluster-client-default/pom.xml index 483d2c42bd..9a5e26c9f1 100644 --- a/sentinel-cluster/sentinel-cluster-client-default/pom.xml +++ b/sentinel-cluster/sentinel-cluster-client-default/pom.xml @@ -5,7 +5,7 @@ sentinel-cluster com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-cluster/sentinel-cluster-common-default/pom.xml b/sentinel-cluster/sentinel-cluster-common-default/pom.xml index 032d918c75..b584ca9e89 100644 --- a/sentinel-cluster/sentinel-cluster-common-default/pom.xml +++ b/sentinel-cluster/sentinel-cluster-common-default/pom.xml @@ -5,7 +5,7 @@ sentinel-cluster com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-cluster/sentinel-cluster-server-default/pom.xml b/sentinel-cluster/sentinel-cluster-server-default/pom.xml index 99d60bf98f..b05d45dec0 100644 --- a/sentinel-cluster/sentinel-cluster-server-default/pom.xml +++ b/sentinel-cluster/sentinel-cluster-server-default/pom.xml @@ -5,7 +5,7 @@ sentinel-cluster com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-cluster/sentinel-cluster-server-envoy-rls/pom.xml b/sentinel-cluster/sentinel-cluster-server-envoy-rls/pom.xml index 213216039a..49c34db4c5 100644 --- a/sentinel-cluster/sentinel-cluster-server-envoy-rls/pom.xml +++ b/sentinel-cluster/sentinel-cluster-server-envoy-rls/pom.xml @@ -5,7 +5,7 @@ sentinel-cluster com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-core/pom.xml b/sentinel-core/pom.xml index 7eb34aae74..f7bcf6112d 100755 --- a/sentinel-core/pom.xml +++ b/sentinel-core/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-parent - 1.8.1 + 1.8.2-SNAPSHOT sentinel-core jar diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/Constants.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/Constants.java index b7c3f80896..a271061719 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/Constants.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/Constants.java @@ -31,7 +31,7 @@ */ public final class Constants { - public static final String SENTINEL_VERSION = VersionUtil.getVersion("1.8.1"); + public static final String SENTINEL_VERSION = VersionUtil.getVersion("1.8.2"); public final static int MAX_CONTEXT_NAME_SIZE = 2000; public final static int MAX_SLOT_CHAIN_SIZE = 6000; diff --git a/sentinel-dashboard/pom.xml b/sentinel-dashboard/pom.xml index 818d9e38f4..bf3291e1e3 100755 --- a/sentinel-dashboard/pom.xml +++ b/sentinel-dashboard/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-parent - 1.8.1 + 1.8.2-SNAPSHOT sentinel-dashboard diff --git a/sentinel-demo/pom.xml b/sentinel-demo/pom.xml index bcc602dc33..68e06ff4cf 100755 --- a/sentinel-demo/pom.xml +++ b/sentinel-demo/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-parent - 1.8.1 + 1.8.2-SNAPSHOT sentinel-demo pom diff --git a/sentinel-demo/sentinel-demo-annotation-cdi-interceptor/pom.xml b/sentinel-demo/sentinel-demo-annotation-cdi-interceptor/pom.xml index 58cc47b3f4..25758759f7 100644 --- a/sentinel-demo/sentinel-demo-annotation-cdi-interceptor/pom.xml +++ b/sentinel-demo/sentinel-demo-annotation-cdi-interceptor/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-annotation-spring-aop/pom.xml b/sentinel-demo/sentinel-demo-annotation-spring-aop/pom.xml index 72d6e61b9f..aed0b25b88 100644 --- a/sentinel-demo/sentinel-demo-annotation-spring-aop/pom.xml +++ b/sentinel-demo/sentinel-demo-annotation-spring-aop/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-apache-dubbo/pom.xml b/sentinel-demo/sentinel-demo-apache-dubbo/pom.xml index 21a3328ab8..d5dfc97c56 100644 --- a/sentinel-demo/sentinel-demo-apache-dubbo/pom.xml +++ b/sentinel-demo/sentinel-demo-apache-dubbo/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-apache-httpclient/pom.xml b/sentinel-demo/sentinel-demo-apache-httpclient/pom.xml index c7705f9085..db5bdf7faa 100644 --- a/sentinel-demo/sentinel-demo-apache-httpclient/pom.xml +++ b/sentinel-demo/sentinel-demo-apache-httpclient/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-apollo-datasource/pom.xml b/sentinel-demo/sentinel-demo-apollo-datasource/pom.xml index b65e5a82ba..990ba2aa6f 100644 --- a/sentinel-demo/sentinel-demo-apollo-datasource/pom.xml +++ b/sentinel-demo/sentinel-demo-apollo-datasource/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-basic/pom.xml b/sentinel-demo/sentinel-demo-basic/pom.xml index f589d5c8e4..b755cf2b4e 100755 --- a/sentinel-demo/sentinel-demo-basic/pom.xml +++ b/sentinel-demo/sentinel-demo-basic/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-demo - 1.8.1 + 1.8.2-SNAPSHOT sentinel-demo-basic diff --git a/sentinel-demo/sentinel-demo-cluster/pom.xml b/sentinel-demo/sentinel-demo-cluster/pom.xml index f30df32529..079c166dc1 100644 --- a/sentinel-demo/sentinel-demo-cluster/pom.xml +++ b/sentinel-demo/sentinel-demo-cluster/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-embedded/pom.xml b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-embedded/pom.xml index ef9192a165..89f32d451b 100644 --- a/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-embedded/pom.xml +++ b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-embedded/pom.xml @@ -5,7 +5,7 @@ sentinel-demo-cluster com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/pom.xml b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/pom.xml index d197d57b58..873dfcc85d 100644 --- a/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/pom.xml +++ b/sentinel-demo/sentinel-demo-cluster/sentinel-demo-cluster-server-alone/pom.xml @@ -5,7 +5,7 @@ sentinel-demo-cluster com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-command-handler/pom.xml b/sentinel-demo/sentinel-demo-command-handler/pom.xml index 970cc2094c..d5f6251293 100644 --- a/sentinel-demo/sentinel-demo-command-handler/pom.xml +++ b/sentinel-demo/sentinel-demo-command-handler/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-dubbo/pom.xml b/sentinel-demo/sentinel-demo-dubbo/pom.xml index b370281298..eac3472d56 100644 --- a/sentinel-demo/sentinel-demo-dubbo/pom.xml +++ b/sentinel-demo/sentinel-demo-dubbo/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-dynamic-file-rule/pom.xml b/sentinel-demo/sentinel-demo-dynamic-file-rule/pom.xml index 17132cd07a..16b428194f 100755 --- a/sentinel-demo/sentinel-demo-dynamic-file-rule/pom.xml +++ b/sentinel-demo/sentinel-demo-dynamic-file-rule/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-demo - 1.8.1 + 1.8.2-SNAPSHOT sentinel-demo-dynamic-file-rule diff --git a/sentinel-demo/sentinel-demo-etcd-datasource/pom.xml b/sentinel-demo/sentinel-demo-etcd-datasource/pom.xml index 07573801a3..54cd619aef 100644 --- a/sentinel-demo/sentinel-demo-etcd-datasource/pom.xml +++ b/sentinel-demo/sentinel-demo-etcd-datasource/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-jax-rs/pom.xml b/sentinel-demo/sentinel-demo-jax-rs/pom.xml index fbf08e57d2..4232d84c47 100644 --- a/sentinel-demo/sentinel-demo-jax-rs/pom.xml +++ b/sentinel-demo/sentinel-demo-jax-rs/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-log-logback/pom.xml b/sentinel-demo/sentinel-demo-log-logback/pom.xml index d39828ed10..1024b11d69 100644 --- a/sentinel-demo/sentinel-demo-log-logback/pom.xml +++ b/sentinel-demo/sentinel-demo-log-logback/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-motan/pom.xml b/sentinel-demo/sentinel-demo-motan/pom.xml index ed57026a44..f87bf98d32 100644 --- a/sentinel-demo/sentinel-demo-motan/pom.xml +++ b/sentinel-demo/sentinel-demo-motan/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 sentinel-demo-motan diff --git a/sentinel-demo/sentinel-demo-nacos-datasource/pom.xml b/sentinel-demo/sentinel-demo-nacos-datasource/pom.xml index eb20952c43..2b9a4cbe71 100644 --- a/sentinel-demo/sentinel-demo-nacos-datasource/pom.xml +++ b/sentinel-demo/sentinel-demo-nacos-datasource/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-okhttp/pom.xml b/sentinel-demo/sentinel-demo-okhttp/pom.xml index da32dc4ac2..d3a7d5cfbc 100644 --- a/sentinel-demo/sentinel-demo-okhttp/pom.xml +++ b/sentinel-demo/sentinel-demo-okhttp/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-parameter-flow-control/pom.xml b/sentinel-demo/sentinel-demo-parameter-flow-control/pom.xml index c335246e15..71ef499500 100644 --- a/sentinel-demo/sentinel-demo-parameter-flow-control/pom.xml +++ b/sentinel-demo/sentinel-demo-parameter-flow-control/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-quarkus/pom.xml b/sentinel-demo/sentinel-demo-quarkus/pom.xml index 02e3214929..1d7d084c1a 100644 --- a/sentinel-demo/sentinel-demo-quarkus/pom.xml +++ b/sentinel-demo/sentinel-demo-quarkus/pom.xml @@ -6,7 +6,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-rocketmq/pom.xml b/sentinel-demo/sentinel-demo-rocketmq/pom.xml index aa21a5363f..d4d3719490 100755 --- a/sentinel-demo/sentinel-demo-rocketmq/pom.xml +++ b/sentinel-demo/sentinel-demo-rocketmq/pom.xml @@ -5,7 +5,7 @@ com.alibaba.csp sentinel-demo - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-slot-chain-spi/pom.xml b/sentinel-demo/sentinel-demo-slot-chain-spi/pom.xml index b6bc86cdf6..ff7942e1aa 100644 --- a/sentinel-demo/sentinel-demo-slot-chain-spi/pom.xml +++ b/sentinel-demo/sentinel-demo-slot-chain-spi/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-sofa-rpc/pom.xml b/sentinel-demo/sentinel-demo-sofa-rpc/pom.xml index 73443e69cc..464b928099 100644 --- a/sentinel-demo/sentinel-demo-sofa-rpc/pom.xml +++ b/sentinel-demo/sentinel-demo-sofa-rpc/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-spring-cloud-gateway/pom.xml b/sentinel-demo/sentinel-demo-spring-cloud-gateway/pom.xml index a6a35b4e38..59662ea154 100644 --- a/sentinel-demo/sentinel-demo-spring-cloud-gateway/pom.xml +++ b/sentinel-demo/sentinel-demo-spring-cloud-gateway/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-spring-webflux/pom.xml b/sentinel-demo/sentinel-demo-spring-webflux/pom.xml index cc57022356..c5ff9c949b 100644 --- a/sentinel-demo/sentinel-demo-spring-webflux/pom.xml +++ b/sentinel-demo/sentinel-demo-spring-webflux/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-spring-webmvc/pom.xml b/sentinel-demo/sentinel-demo-spring-webmvc/pom.xml index a7a3dbe602..a784c103cf 100644 --- a/sentinel-demo/sentinel-demo-spring-webmvc/pom.xml +++ b/sentinel-demo/sentinel-demo-spring-webmvc/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-zookeeper-datasource/pom.xml b/sentinel-demo/sentinel-demo-zookeeper-datasource/pom.xml index 21d7be0521..8395a889cd 100644 --- a/sentinel-demo/sentinel-demo-zookeeper-datasource/pom.xml +++ b/sentinel-demo/sentinel-demo-zookeeper-datasource/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-zuul-gateway/pom.xml b/sentinel-demo/sentinel-demo-zuul-gateway/pom.xml index f1eb2f9fdc..16d36e062d 100644 --- a/sentinel-demo/sentinel-demo-zuul-gateway/pom.xml +++ b/sentinel-demo/sentinel-demo-zuul-gateway/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-demo/sentinel-demo-zuul2-gateway/pom.xml b/sentinel-demo/sentinel-demo-zuul2-gateway/pom.xml index 7b9d33e148..27bfc49a3f 100644 --- a/sentinel-demo/sentinel-demo-zuul2-gateway/pom.xml +++ b/sentinel-demo/sentinel-demo-zuul2-gateway/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-extension/pom.xml b/sentinel-extension/pom.xml index 06f7294c25..30ac337a80 100755 --- a/sentinel-extension/pom.xml +++ b/sentinel-extension/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-parent - 1.8.1 + 1.8.2-SNAPSHOT sentinel-extension pom diff --git a/sentinel-extension/sentinel-annotation-aspectj/pom.xml b/sentinel-extension/sentinel-annotation-aspectj/pom.xml index 41e36d214b..1f7876dd34 100644 --- a/sentinel-extension/sentinel-annotation-aspectj/pom.xml +++ b/sentinel-extension/sentinel-annotation-aspectj/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-extension/sentinel-annotation-cdi-interceptor/pom.xml b/sentinel-extension/sentinel-annotation-cdi-interceptor/pom.xml index 70f517804b..974d0d6505 100644 --- a/sentinel-extension/sentinel-annotation-cdi-interceptor/pom.xml +++ b/sentinel-extension/sentinel-annotation-cdi-interceptor/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-extension/sentinel-datasource-apollo/pom.xml b/sentinel-extension/sentinel-datasource-apollo/pom.xml index fd20ac5213..b41aae2cc4 100644 --- a/sentinel-extension/sentinel-datasource-apollo/pom.xml +++ b/sentinel-extension/sentinel-datasource-apollo/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-extension/sentinel-datasource-consul/pom.xml b/sentinel-extension/sentinel-datasource-consul/pom.xml index 4c58c395f4..012d6e68cb 100644 --- a/sentinel-extension/sentinel-datasource-consul/pom.xml +++ b/sentinel-extension/sentinel-datasource-consul/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-extension/sentinel-datasource-etcd/pom.xml b/sentinel-extension/sentinel-datasource-etcd/pom.xml index 0e645f7ca5..859b013048 100644 --- a/sentinel-extension/sentinel-datasource-etcd/pom.xml +++ b/sentinel-extension/sentinel-datasource-etcd/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-extension/sentinel-datasource-eureka/pom.xml b/sentinel-extension/sentinel-datasource-eureka/pom.xml index 9e98baf77b..e3f5e9c6a6 100644 --- a/sentinel-extension/sentinel-datasource-eureka/pom.xml +++ b/sentinel-extension/sentinel-datasource-eureka/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-extension/sentinel-datasource-extension/pom.xml b/sentinel-extension/sentinel-datasource-extension/pom.xml index e1ac0d84fb..9d0c76fa0c 100755 --- a/sentinel-extension/sentinel-datasource-extension/pom.xml +++ b/sentinel-extension/sentinel-datasource-extension/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-extension - 1.8.1 + 1.8.2-SNAPSHOT sentinel-datasource-extension diff --git a/sentinel-extension/sentinel-datasource-nacos/pom.xml b/sentinel-extension/sentinel-datasource-nacos/pom.xml index a5bbf989cd..57c7a63ffa 100644 --- a/sentinel-extension/sentinel-datasource-nacos/pom.xml +++ b/sentinel-extension/sentinel-datasource-nacos/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-extension/sentinel-datasource-redis/pom.xml b/sentinel-extension/sentinel-datasource-redis/pom.xml index 2a23486317..dd23c1410a 100644 --- a/sentinel-extension/sentinel-datasource-redis/pom.xml +++ b/sentinel-extension/sentinel-datasource-redis/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-extension/sentinel-datasource-spring-cloud-config/pom.xml b/sentinel-extension/sentinel-datasource-spring-cloud-config/pom.xml index 9a6a9eff1c..e2a0967bcc 100644 --- a/sentinel-extension/sentinel-datasource-spring-cloud-config/pom.xml +++ b/sentinel-extension/sentinel-datasource-spring-cloud-config/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-extension/sentinel-datasource-zookeeper/pom.xml b/sentinel-extension/sentinel-datasource-zookeeper/pom.xml index 62cabcb5ab..fd780f5240 100644 --- a/sentinel-extension/sentinel-datasource-zookeeper/pom.xml +++ b/sentinel-extension/sentinel-datasource-zookeeper/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-extension/sentinel-parameter-flow-control/pom.xml b/sentinel-extension/sentinel-parameter-flow-control/pom.xml index df712745a5..5d23124e2f 100644 --- a/sentinel-extension/sentinel-parameter-flow-control/pom.xml +++ b/sentinel-extension/sentinel-parameter-flow-control/pom.xml @@ -5,7 +5,7 @@ sentinel-extension com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-logging/pom.xml b/sentinel-logging/pom.xml index 9d2a9a6aed..89ba13cfae 100755 --- a/sentinel-logging/pom.xml +++ b/sentinel-logging/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-parent - 1.8.1 + 1.8.2-SNAPSHOT sentinel-logging pom diff --git a/sentinel-logging/sentinel-logging-slf4j/pom.xml b/sentinel-logging/sentinel-logging-slf4j/pom.xml index 5642538543..10cdf5dbe3 100644 --- a/sentinel-logging/sentinel-logging-slf4j/pom.xml +++ b/sentinel-logging/sentinel-logging-slf4j/pom.xml @@ -5,7 +5,7 @@ sentinel-logging com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-transport/pom.xml b/sentinel-transport/pom.xml index 69b4657c43..0756fb6957 100755 --- a/sentinel-transport/pom.xml +++ b/sentinel-transport/pom.xml @@ -6,7 +6,7 @@ com.alibaba.csp sentinel-parent - 1.8.1 + 1.8.2-SNAPSHOT sentinel-transport The transport module of Sentinel diff --git a/sentinel-transport/sentinel-transport-common/pom.xml b/sentinel-transport/sentinel-transport-common/pom.xml index a8e0549b7d..e1bc0290ae 100755 --- a/sentinel-transport/sentinel-transport-common/pom.xml +++ b/sentinel-transport/sentinel-transport-common/pom.xml @@ -5,7 +5,7 @@ com.alibaba.csp sentinel-transport - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 jar diff --git a/sentinel-transport/sentinel-transport-netty-http/pom.xml b/sentinel-transport/sentinel-transport-netty-http/pom.xml index 1f6cf54bf5..d5de58566c 100755 --- a/sentinel-transport/sentinel-transport-netty-http/pom.xml +++ b/sentinel-transport/sentinel-transport-netty-http/pom.xml @@ -5,7 +5,7 @@ com.alibaba.csp sentinel-transport - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 sentinel-transport-netty-http diff --git a/sentinel-transport/sentinel-transport-simple-http/pom.xml b/sentinel-transport/sentinel-transport-simple-http/pom.xml index acd8788637..9356d6dea2 100755 --- a/sentinel-transport/sentinel-transport-simple-http/pom.xml +++ b/sentinel-transport/sentinel-transport-simple-http/pom.xml @@ -5,7 +5,7 @@ sentinel-transport com.alibaba.csp - 1.8.1 + 1.8.2-SNAPSHOT 4.0.0 From 6cc868408057cc8e946a8a0fe6cb28c08ac14a6d Mon Sep 17 00:00:00 2001 From: shenbaoyong <13261448660@163.com> Date: Fri, 5 Feb 2021 20:36:24 +0800 Subject: [PATCH 19/20] fix pr1957 review spi-order --- .../csp/sentinel/transport/command/SentinelApiHandler.java | 2 -- .../transport/command/SpringMvcHttpCommandCenter.java | 4 ++-- .../transport/heartbeat/SpringMvcHttpHeartbeatSender.java | 5 ++--- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandler.java b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandler.java index 473b9f6529..7cbe2a11d3 100644 --- a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandler.java +++ b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SentinelApiHandler.java @@ -68,8 +68,6 @@ public void handle(HttpServletRequest httpServletRequest, HttpServletResponse ht } catch (Exception e1) { CommandCenterLog.warn("Failed to write error response", e1); } - } finally { - } } diff --git a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SpringMvcHttpCommandCenter.java b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SpringMvcHttpCommandCenter.java index 2f497c66ea..8dc9fb06d3 100644 --- a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SpringMvcHttpCommandCenter.java +++ b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/command/SpringMvcHttpCommandCenter.java @@ -17,7 +17,7 @@ import com.alibaba.csp.sentinel.command.CommandHandler; import com.alibaba.csp.sentinel.command.CommandHandlerProvider; -import com.alibaba.csp.sentinel.spi.SpiOrder; +import com.alibaba.csp.sentinel.spi.Spi; import com.alibaba.csp.sentinel.transport.CommandCenter; import java.util.Map; @@ -25,7 +25,7 @@ /** * @author shenbaoyong */ -@SpiOrder(SpiOrder.LOWEST_PRECEDENCE - 100) +@Spi(order = Spi.ORDER_LOWEST - 100) public class SpringMvcHttpCommandCenter implements CommandCenter { @Override diff --git a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/SpringMvcHttpHeartbeatSender.java b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/SpringMvcHttpHeartbeatSender.java index dccd496871..0e00956e8f 100644 --- a/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/SpringMvcHttpHeartbeatSender.java +++ b/sentinel-transport/sentinel-transport-spring-mvc/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/SpringMvcHttpHeartbeatSender.java @@ -18,9 +18,8 @@ import com.alibaba.csp.sentinel.Constants; import com.alibaba.csp.sentinel.config.SentinelConfig; import com.alibaba.csp.sentinel.log.RecordLog; -import com.alibaba.csp.sentinel.spi.SpiOrder; +import com.alibaba.csp.sentinel.spi.Spi; import com.alibaba.csp.sentinel.transport.HeartbeatSender; -import com.alibaba.csp.sentinel.transport.command.SentinelApiHandlerMapping; import com.alibaba.csp.sentinel.transport.config.TransportConfig; import com.alibaba.csp.sentinel.transport.endpoint.Endpoint; import com.alibaba.csp.sentinel.transport.endpoint.Protocol; @@ -42,7 +41,7 @@ * @author Carpenter Lee * @author Leo Li */ -@SpiOrder(SpiOrder.LOWEST_PRECEDENCE - 100) +@Spi(order = Spi.ORDER_LOWEST - 100) public class SpringMvcHttpHeartbeatSender implements HeartbeatSender { private final CloseableHttpClient client; From 4ab9f410d53377486c1160641101c3d694efb502 Mon Sep 17 00:00:00 2001 From: shenbaoyong <13261448660@163.com> Date: Fri, 5 Feb 2021 20:58:24 +0800 Subject: [PATCH 20/20] fix transport-spring-mvc version --- sentinel-demo/sentinel-demo-transport-spring-mvc/pom.xml | 2 +- sentinel-transport/sentinel-transport-spring-mvc/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sentinel-demo/sentinel-demo-transport-spring-mvc/pom.xml b/sentinel-demo/sentinel-demo-transport-spring-mvc/pom.xml index 0a26a91e6f..eff5409572 100644 --- a/sentinel-demo/sentinel-demo-transport-spring-mvc/pom.xml +++ b/sentinel-demo/sentinel-demo-transport-spring-mvc/pom.xml @@ -5,7 +5,7 @@ sentinel-demo com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.2-SNAPSHOT 4.0.0 diff --git a/sentinel-transport/sentinel-transport-spring-mvc/pom.xml b/sentinel-transport/sentinel-transport-spring-mvc/pom.xml index feb281cfce..6bb6c168e1 100644 --- a/sentinel-transport/sentinel-transport-spring-mvc/pom.xml +++ b/sentinel-transport/sentinel-transport-spring-mvc/pom.xml @@ -5,7 +5,7 @@ sentinel-transport com.alibaba.csp - 1.8.1-SNAPSHOT + 1.8.2-SNAPSHOT 4.0.0