Skip to content

Commit

Permalink
Rename PluginBootService to PluginLifecycleService (apache#23396)
Browse files Browse the repository at this point in the history
* Refactor PluginBootServiceManager

* Refactor PluginLifecycleServiceManager

* Refactor PluginLifecycleServiceManager

* Rename PluginBootService to PluginLifecycleService
  • Loading branch information
terrymanu authored Jan 7, 2023
1 parent 089e804 commit 4eefc09
Show file tree
Hide file tree
Showing 28 changed files with 145 additions and 144 deletions.
4 changes: 2 additions & 2 deletions agent/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,9 @@ java -javaagent:/xx/xx/shardingsphere-agent-{latest.release.version}.jar -jar pr
* `lib` contains dependencies common to plugins.
* `plugins` contains all plugins.

### Extend via SPI PluginBootService
### Extend via SPI PluginLifecycleService

`PluginBootService` is the plugin service definition interface, used to start the plugin service.
`PluginLifecycleService` is the plugin service definition interface, used to start the plugin service.
Custom plugins need to implement this interface.

### Configure advisors.yaml
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,12 @@
import org.apache.shardingsphere.agent.api.PluginConfiguration;

/**
* Plugin boot service that the lifecycle is from the agent start to shutdown.
* Plugin lifecycle service.
*/
public interface PluginBootService extends AutoCloseable {
public interface PluginLifecycleService extends AutoCloseable {

/**
* Start plugin boot service.
* Start plugin.
*
* @param pluginConfig plugin configuration
* @param isEnhancedForProxy is enhanced for proxy
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,17 @@
import net.bytebuddy.implementation.FieldAccessor;
import net.bytebuddy.jar.asm.Opcodes;
import net.bytebuddy.utility.JavaModule;
import org.apache.shardingsphere.agent.api.PluginConfiguration;
import org.apache.shardingsphere.agent.api.advice.TargetAdviceObject;
import org.apache.shardingsphere.agent.core.builder.advisor.AdviceFactory;
import org.apache.shardingsphere.agent.core.builder.advisor.MethodAdvisorBuilder;
import org.apache.shardingsphere.agent.core.classloader.ClassLoaderContext;
import org.apache.shardingsphere.agent.core.plugin.PluginBootServiceManager;
import org.apache.shardingsphere.agent.core.plugin.PluginJar;
import org.apache.shardingsphere.agent.core.plugin.PluginLifecycleServiceManager;
import org.apache.shardingsphere.agent.core.plugin.advisor.AdvisorConfiguration;
import org.apache.shardingsphere.agent.api.PluginConfiguration;

import java.util.Collection;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;

/**
* Agent transformer.
Expand All @@ -43,8 +44,6 @@ public final class AgentTransformer implements Transformer {

private static final String EXTRA_DATA = "_$EXTRA_DATA$_";

private static final AtomicBoolean STARTED_FLAG = new AtomicBoolean(false);

private final Map<String, PluginConfiguration> pluginConfigs;

private final Collection<PluginJar> pluginJars;
Expand All @@ -60,16 +59,9 @@ public Builder<?> transform(final Builder<?> builder, final TypeDescription type
return builder;
}
ClassLoaderContext classLoaderContext = new ClassLoaderContext(classLoader, pluginJars);
startAllServices(classLoaderContext.getAgentClassLoader());
PluginLifecycleServiceManager.init(pluginConfigs, pluginJars, classLoaderContext.getAgentClassLoader(), isEnhancedForProxy);
Builder<?> targetAdviceObjectBuilder = builder.defineField(EXTRA_DATA,
Object.class, Opcodes.ACC_PRIVATE | Opcodes.ACC_VOLATILE).implement(TargetAdviceObject.class).intercept(FieldAccessor.ofField(EXTRA_DATA));
return new MethodAdvisorBuilder(new AdviceFactory(classLoaderContext), advisorConfigs.get(typeDescription.getTypeName()), typeDescription).build(targetAdviceObjectBuilder);
}

private void startAllServices(final ClassLoader agentClassLoader) {
if (STARTED_FLAG.compareAndSet(false, true)) {
PluginBootServiceManager.startAllServices(pluginConfigs, agentClassLoader, isEnhancedForProxy);
Runtime.getRuntime().addShutdownHook(new Thread(() -> PluginBootServiceManager.closeAllServices(pluginJars)));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* limitations under the License.
*/

package org.apache.shardingsphere.agent.core.builder;
package org.apache.shardingsphere.agent.core.builder.advisor;

import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* limitations under the License.
*/

package org.apache.shardingsphere.agent.core.builder;
package org.apache.shardingsphere.agent.core.builder.advisor;

import lombok.Getter;
import lombok.RequiredArgsConstructor;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* limitations under the License.
*/

package org.apache.shardingsphere.agent.core.builder;
package org.apache.shardingsphere.agent.core.builder.advisor;

import lombok.RequiredArgsConstructor;
import net.bytebuddy.description.method.MethodDescription.InDefinedShape;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,59 +23,65 @@
import org.apache.shardingsphere.agent.core.log.LoggerFactory;
import org.apache.shardingsphere.agent.core.log.LoggerFactory.Logger;
import org.apache.shardingsphere.agent.core.spi.AgentServiceLoader;
import org.apache.shardingsphere.agent.spi.PluginBootService;
import org.apache.shardingsphere.agent.spi.PluginLifecycleService;

import java.io.IOException;
import java.util.Collection;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.atomic.AtomicBoolean;

/**
* Plugin boot service manager.
* Plugin lifecycle service manager.
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class PluginBootServiceManager {
public final class PluginLifecycleServiceManager {

private static final Logger LOGGER = LoggerFactory.getLogger(PluginBootServiceManager.class);
private static final AtomicBoolean STARTED_FLAG = new AtomicBoolean(false);

private static final Logger LOGGER = LoggerFactory.getLogger(PluginLifecycleServiceManager.class);

/**
* Start all services.
*
* Initialize all plugins.
*
* @param pluginConfigs plugin configuration map
* @param pluginJars plugin jars
* @param agentClassLoader agent class loader
* @param isEnhancedForProxy is enhanced for proxy
*/
public static void startAllServices(final Map<String, PluginConfiguration> pluginConfigs, final ClassLoader agentClassLoader, final boolean isEnhancedForProxy) {
public static void init(final Map<String, PluginConfiguration> pluginConfigs, final Collection<PluginJar> pluginJars, final ClassLoader agentClassLoader, final boolean isEnhancedForProxy) {
if (STARTED_FLAG.compareAndSet(false, true)) {
PluginLifecycleServiceManager.start(pluginConfigs, agentClassLoader, isEnhancedForProxy);
Runtime.getRuntime().addShutdownHook(new Thread(() -> PluginLifecycleServiceManager.close(pluginJars)));
}
}

private static void start(final Map<String, PluginConfiguration> pluginConfigs, final ClassLoader agentClassLoader, final boolean isEnhancedForProxy) {
ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(agentClassLoader);
for (Entry<String, PluginConfiguration> entry : pluginConfigs.entrySet()) {
AgentServiceLoader.getServiceLoader(PluginBootService.class).getServices()
.stream().filter(each -> each.getType().equalsIgnoreCase(entry.getKey())).findFirst().ifPresent(optional -> startService(entry.getValue(), optional, isEnhancedForProxy));
AgentServiceLoader.getServiceLoader(PluginLifecycleService.class).getServices()
.stream().filter(each -> each.getType().equalsIgnoreCase(entry.getKey())).findFirst().ifPresent(optional -> start(entry.getValue(), optional, isEnhancedForProxy));
}
} finally {
Thread.currentThread().setContextClassLoader(originalClassLoader);
}
}

private static void startService(final PluginConfiguration pluginConfig, final PluginBootService pluginBootService, final boolean isEnhancedForProxy) {
private static void start(final PluginConfiguration pluginConfig, final PluginLifecycleService pluginLifecycleService, final boolean isEnhancedForProxy) {
try {
LOGGER.info("Start plugin: {}", pluginBootService.getType());
pluginBootService.start(pluginConfig, isEnhancedForProxy);
LOGGER.info("Start plugin: {}", pluginLifecycleService.getType());
pluginLifecycleService.start(pluginConfig, isEnhancedForProxy);
// CHECKSTYLE:OFF
} catch (final Throwable ex) {
// CHECKSTYLE:ON
LOGGER.error("Failed to start service.", ex);
}
}

/**
* Close all services.
*
* @param pluginJars plugin jars
*/
public static void closeAllServices(final Collection<PluginJar> pluginJars) {
AgentServiceLoader.getServiceLoader(PluginBootService.class).getServices().forEach(each -> {
private static void close(final Collection<PluginJar> pluginJars) {
AgentServiceLoader.getServiceLoader(PluginLifecycleService.class).getServices().forEach(each -> {
try {
each.close();
// CHECKSTYLE:OFF
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,12 @@
package org.apache.shardingsphere.agent.plugin.logging.file;

import org.apache.shardingsphere.agent.api.PluginConfiguration;
import org.apache.shardingsphere.agent.spi.PluginBootService;
import org.apache.shardingsphere.agent.spi.PluginLifecycleService;

/**
* File logging plugin boot service.
* File logging plugin lifecycle service.
*/
public final class FileLoggingPluginBootService implements PluginBootService {
public final class FileLoggingPluginLifecycleService implements PluginLifecycleService {

@Override
public void start(final PluginConfiguration pluginConfig, final boolean isEnhancedForProxy) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@
# limitations under the License.
#

org.apache.shardingsphere.agent.plugin.logging.file.FileLoggingPluginBootService
org.apache.shardingsphere.agent.plugin.logging.file.FileLoggingPluginLifecycleService
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,16 @@
import org.apache.shardingsphere.agent.plugin.metrics.prometheus.collector.ProxyInfoCollector;
import org.apache.shardingsphere.agent.plugin.metrics.prometheus.wrapper.PrometheusWrapperFactory;
import org.apache.shardingsphere.agent.plugin.core.config.validator.PluginConfigurationValidator;
import org.apache.shardingsphere.agent.spi.PluginBootService;
import org.apache.shardingsphere.agent.spi.PluginLifecycleService;

import java.io.IOException;
import java.net.InetSocketAddress;

/**
* Prometheus plugin boot service.
* Prometheus plugin lifecycle service.
*/
@Slf4j
public final class PrometheusPluginBootService implements PluginBootService {
public final class PrometheusPluginLifecycleService implements PluginLifecycleService {

private static final String KEY_JVM_INFORMATION_COLLECTOR_ENABLED = "jvm-information-collector-enabled";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@
# limitations under the License.
#

org.apache.shardingsphere.agent.plugin.metrics.prometheus.PrometheusPluginBootService
org.apache.shardingsphere.agent.plugin.metrics.prometheus.PrometheusPluginLifecycleService
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,13 @@

import static org.mockito.Mockito.mock;

public final class PrometheusPluginBootServiceTest extends ProxyContextRestorer {
public final class PrometheusPluginLifecycleServiceTest extends ProxyContextRestorer {

private final PrometheusPluginBootService pluginBootService = new PrometheusPluginBootService();
private final PrometheusPluginLifecycleService pluginLifecycleService = new PrometheusPluginLifecycleService();

@After
public void close() {
pluginBootService.close();
pluginLifecycleService.close();
}

@Test
Expand All @@ -58,7 +58,7 @@ public void assertStart() throws IOException {
new ComputeNodeInstance(mock(InstanceMetaData.class)), new StandaloneWorkerIdGenerator(), new ModeConfiguration("Standalone", null),
mock(ModeContextManager.class), mock(LockContext.class), new EventBusContext());
ProxyContext.init(new ContextManager(metaDataContexts, instanceContext));
pluginBootService.start(new PluginConfiguration("localhost", 8090, "", PropertiesBuilder.build(new Property("JVM_INFORMATION_COLLECTOR_ENABLED", Boolean.TRUE.toString()))), true);
pluginLifecycleService.start(new PluginConfiguration("localhost", 8090, "", PropertiesBuilder.build(new Property("JVM_INFORMATION_COLLECTOR_ENABLED", Boolean.TRUE.toString()))), true);
new Socket().connect(new InetSocketAddress("localhost", 8090));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@
import io.opentracing.util.GlobalTracer;
import org.apache.shardingsphere.agent.api.PluginConfiguration;
import org.apache.shardingsphere.agent.plugin.core.config.validator.PluginConfigurationValidator;
import org.apache.shardingsphere.agent.spi.PluginBootService;
import org.apache.shardingsphere.agent.spi.PluginLifecycleService;

import java.util.Optional;

/**
* Jaeger tracing plugin boot service.
* Jaeger tracing plugin lifecycle service.
*/
public final class JaegerTracingPluginBootService implements PluginBootService {
public final class JaegerTracingPluginLifecycleService implements PluginLifecycleService {

private static final String DEFAULT_SERVICE_NAME = "shardingsphere";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@
# limitations under the License.
#

org.apache.shardingsphere.agent.plugin.tracing.jaeger.JaegerTracingPluginBootService
org.apache.shardingsphere.agent.plugin.tracing.jaeger.JaegerTracingPluginLifecycleService
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,13 @@

import static org.junit.Assert.assertTrue;

public final class JaegerTracingPluginBootServiceTest {
public final class JaegerTracingPluginLifecycleServiceTest {

private final JaegerTracingPluginBootService pluginBootService = new JaegerTracingPluginBootService();
private final JaegerTracingPluginLifecycleService pluginLifecycleService = new JaegerTracingPluginLifecycleService();

@After
public void close() throws ReflectiveOperationException {
pluginBootService.close();
pluginLifecycleService.close();
Plugins.getMemberAccessor().set(GlobalTracer.class.getDeclaredField("tracer"), GlobalTracer.class, NoopTracerFactory.create());
}

Expand All @@ -47,7 +47,7 @@ public void assertStart() {
new Property("JAEGER_SAMPLER_PARAM", "1"),
new Property("JAEGER_REPORTER_LOG_SPANS", Boolean.TRUE.toString()),
new Property("JAEGER_REPORTER_FLUSH_INTERVAL", "1"));
pluginBootService.start(new PluginConfiguration("localhost", 5775, "", props), true);
pluginLifecycleService.start(new PluginConfiguration("localhost", 5775, "", props), true);
assertTrue(GlobalTracer.isRegistered());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,12 @@
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.autoconfigure.OpenTelemetrySdkAutoConfiguration;
import org.apache.shardingsphere.agent.api.PluginConfiguration;
import org.apache.shardingsphere.agent.spi.PluginBootService;
import org.apache.shardingsphere.agent.spi.PluginLifecycleService;

public class OpenTelemetryTracingPluginBootService implements PluginBootService {
/**
* Open telemetry tracing plugin lifecycle service.
*/
public class OpenTelemetryTracingPluginLifecycleService implements PluginLifecycleService {

@Override
public void start(final PluginConfiguration pluginConfig, final boolean isEnhancedForProxy) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@
# limitations under the License.
#

org.apache.shardingsphere.agent.plugin.tracing.opentelemetry.OpenTelemetryTracingPluginBootService
org.apache.shardingsphere.agent.plugin.tracing.opentelemetry.OpenTelemetryTracingPluginLifecycleService
Original file line number Diff line number Diff line change
Expand Up @@ -26,21 +26,21 @@

import static org.junit.Assert.assertNotNull;

public final class OpenTelemetryTracingPluginBootServiceTest {
public final class OpenTelemetryTracingPluginLifecycleServiceTest {

private final OpenTelemetryTracingPluginBootService pluginBootService = new OpenTelemetryTracingPluginBootService();

@After
public void close() {
pluginBootService.close();
GlobalOpenTelemetry.resetForTest();
}
private final OpenTelemetryTracingPluginLifecycleService pluginLifecycleService = new OpenTelemetryTracingPluginLifecycleService();

@Test
public void assertStart() {
pluginBootService.start(new PluginConfiguration(null, 0, null,
pluginLifecycleService.start(new PluginConfiguration(null, 0, null,
PropertiesBuilder.build(new Property("otel.resource.attributes", "service.name=shardingsphere-agent"), new Property("otel.traces.exporter", "zipkin"))), true);
assertNotNull(GlobalOpenTelemetry.getTracerProvider());
assertNotNull(GlobalOpenTelemetry.getTracer("shardingsphere-agent"));
}

@After
public void close() {
pluginLifecycleService.close();
GlobalOpenTelemetry.resetForTest();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@
import io.opentracing.Tracer;
import io.opentracing.util.GlobalTracer;
import org.apache.shardingsphere.agent.api.PluginConfiguration;
import org.apache.shardingsphere.agent.spi.PluginBootService;
import org.apache.shardingsphere.agent.spi.PluginLifecycleService;

/**
* Open tracing plugin boot service.
* Open tracing plugin lifecycle service.
*/
public final class OpenTracingPluginBootService implements PluginBootService {
public final class OpenTracingPluginLifecycleService implements PluginLifecycleService {

private static final String KEY_OPENTRACING_TRACER_CLASS_NAME = "opentracing-tracer-class-name";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@
# limitations under the License.
#

org.apache.shardingsphere.agent.plugin.tracing.opentracing.OpenTracingPluginBootService
org.apache.shardingsphere.agent.plugin.tracing.opentracing.OpenTracingPluginLifecycleService
Loading

0 comments on commit 4eefc09

Please sign in to comment.