This is an automated email from the ASF dual-hosted git repository.
technoboy pushed a commit to branch branch-3.2
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/branch-3.2 by this push:
new a4b27cac0a4 [improve][broker] Remove ClassLoaderSwitcher to avoid
objects allocations and consistent the codestyle (#22796)
a4b27cac0a4 is described below
commit a4b27cac0a4619859d95990db911e172311c6b3a
Author: 道君 <[email protected]>
AuthorDate: Wed May 29 22:19:47 2024 +0800
[improve][broker] Remove ClassLoaderSwitcher to avoid objects allocations
and consistent the codestyle (#22796)
---
.../apache/pulsar/broker/ClassLoaderSwitcher.java | 37 ------------------
.../servlet/AdditionalServletWithClassLoader.java | 25 +++++++++---
.../protocol/ProtocolHandlerWithClassLoader.java | 44 +++++++++++++++++-----
3 files changed, 55 insertions(+), 51 deletions(-)
diff --git
a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ClassLoaderSwitcher.java
b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ClassLoaderSwitcher.java
deleted file mode 100644
index 55cb9198da2..00000000000
---
a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ClassLoaderSwitcher.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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 org.apache.pulsar.broker;
-
-/**
- * Help to switch the class loader of current thread to the NarClassLoader,
and change it back when it's done.
- * With the help of try-with-resources statement, the code would be cleaner
than using try finally every time.
- */
-public class ClassLoaderSwitcher implements AutoCloseable {
- private final ClassLoader prevClassLoader;
-
- public ClassLoaderSwitcher(ClassLoader classLoader) {
- prevClassLoader = Thread.currentThread().getContextClassLoader();
- Thread.currentThread().setContextClassLoader(classLoader);
- }
-
- @Override
- public void close() {
- Thread.currentThread().setContextClassLoader(prevClassLoader);
- }
-}
\ No newline at end of file
diff --git
a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServletWithClassLoader.java
b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServletWithClassLoader.java
index c2b4b900733..bc1f25c5af9 100644
---
a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServletWithClassLoader.java
+++
b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServletWithClassLoader.java
@@ -22,7 +22,6 @@ import java.io.IOException;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.apache.pulsar.broker.ClassLoaderSwitcher;
import org.apache.pulsar.common.configuration.PulsarConfiguration;
import org.apache.pulsar.common.nar.NarClassLoader;
import org.eclipse.jetty.servlet.ServletHolder;
@@ -40,29 +39,45 @@ public class AdditionalServletWithClassLoader implements
AdditionalServlet {
@Override
public void loadConfig(PulsarConfiguration pulsarConfiguration) {
- try (ClassLoaderSwitcher ignored = new
ClassLoaderSwitcher(classLoader)) {
+ ClassLoader prevClassLoader =
Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(classLoader);
servlet.loadConfig(pulsarConfiguration);
+ } finally {
+ Thread.currentThread().setContextClassLoader(prevClassLoader);
}
}
@Override
public String getBasePath() {
- try (ClassLoaderSwitcher ignored = new
ClassLoaderSwitcher(classLoader)) {
+ ClassLoader prevClassLoader =
Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(classLoader);
return servlet.getBasePath();
+ } finally {
+ Thread.currentThread().setContextClassLoader(prevClassLoader);
}
}
@Override
public ServletHolder getServletHolder() {
- try (ClassLoaderSwitcher ignored = new
ClassLoaderSwitcher(classLoader)) {
+ ClassLoader prevClassLoader =
Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(classLoader);
return servlet.getServletHolder();
+ } finally {
+ Thread.currentThread().setContextClassLoader(prevClassLoader);
}
}
@Override
public void close() {
- try (ClassLoaderSwitcher ignored = new
ClassLoaderSwitcher(classLoader)) {
+ ClassLoader prevClassLoader =
Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(classLoader);
servlet.close();
+ } finally {
+ Thread.currentThread().setContextClassLoader(prevClassLoader);
}
try {
classLoader.close();
diff --git
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/protocol/ProtocolHandlerWithClassLoader.java
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/protocol/ProtocolHandlerWithClassLoader.java
index d648c261403..eb4bcb0a9bf 100644
---
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/protocol/ProtocolHandlerWithClassLoader.java
+++
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/protocol/ProtocolHandlerWithClassLoader.java
@@ -26,7 +26,6 @@ import java.util.Map;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.apache.pulsar.broker.ClassLoaderSwitcher;
import org.apache.pulsar.broker.ServiceConfiguration;
import org.apache.pulsar.broker.service.BrokerService;
import org.apache.pulsar.common.nar.NarClassLoader;
@@ -44,52 +43,79 @@ class ProtocolHandlerWithClassLoader implements
ProtocolHandler {
@Override
public String protocolName() {
- try (ClassLoaderSwitcher ignored = new
ClassLoaderSwitcher(classLoader)) {
+ ClassLoader prevClassLoader =
Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(classLoader);
return handler.protocolName();
+ } finally {
+ Thread.currentThread().setContextClassLoader(prevClassLoader);
}
}
@Override
public boolean accept(String protocol) {
- try (ClassLoaderSwitcher ignored = new
ClassLoaderSwitcher(classLoader)) {
+ ClassLoader prevClassLoader =
Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(classLoader);
return handler.accept(protocol);
+ } finally {
+ Thread.currentThread().setContextClassLoader(prevClassLoader);
}
}
@Override
public void initialize(ServiceConfiguration conf) throws Exception {
- try (ClassLoaderSwitcher ignored = new
ClassLoaderSwitcher(classLoader)) {
+ ClassLoader prevClassLoader =
Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(classLoader);
handler.initialize(conf);
+ } finally {
+ Thread.currentThread().setContextClassLoader(prevClassLoader);
}
}
@Override
public String getProtocolDataToAdvertise() {
- try (ClassLoaderSwitcher ignored = new
ClassLoaderSwitcher(classLoader)) {
+ ClassLoader prevClassLoader =
Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(classLoader);
return handler.getProtocolDataToAdvertise();
+ } finally {
+ Thread.currentThread().setContextClassLoader(prevClassLoader);
}
}
@Override
public void start(BrokerService service) {
- try (ClassLoaderSwitcher ignored = new
ClassLoaderSwitcher(classLoader)) {
+ ClassLoader prevClassLoader =
Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(classLoader);
handler.start(service);
+ } finally {
+ Thread.currentThread().setContextClassLoader(prevClassLoader);
}
}
@Override
public Map<InetSocketAddress, ChannelInitializer<SocketChannel>>
newChannelInitializers() {
- try (ClassLoaderSwitcher ignored = new
ClassLoaderSwitcher(classLoader)) {
+ ClassLoader prevClassLoader =
Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(classLoader);
return handler.newChannelInitializers();
+ } finally {
+ Thread.currentThread().setContextClassLoader(prevClassLoader);
}
}
@Override
public void close() {
- try (ClassLoaderSwitcher ignored = new
ClassLoaderSwitcher(classLoader)) {
+ ClassLoader prevClassLoader =
Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(classLoader);
handler.close();
+ } finally {
+ Thread.currentThread().setContextClassLoader(prevClassLoader);
}
-
try {
classLoader.close();
} catch (IOException e) {