Commit c7154c11 authored by beckhampu's avatar beckhampu
Browse files

sampling control

parent a7cb7771
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import io.shardingsphere.core.executor.event.DMLExecutionEvent;
import io.shardingsphere.core.executor.event.DQLExecutionEvent;
import io.shardingsphere.core.executor.event.OverallExecutionEvent;
import io.shardingsphere.core.executor.threadlocal.ExecutorDataMap;
import io.shardingsphere.opentracing.sampling.SamplingService;
import io.shardingsphere.opentracing.tag.LocalTags;
import java.util.HashMap;
import java.util.Map;
@@ -61,6 +62,9 @@ public final class ExecuteEventListener {
    @Subscribe
    @AllowConcurrentEvents
    public void listenOverall(final OverallExecutionEvent event) {
        if (!SamplingService.getInstance().trySampling()) {
            return;
        }
        Tracer tracer = ShardingJDBCTracer.get();
        ActiveSpan activeSpan;
        switch (event.getEventExecutionType()) {
@@ -95,6 +99,7 @@ public final class ExecuteEventListener {
    private void deactivate() {
        trunkContainer.get().deactivate();
        trunkContainer.remove();
        SamplingService.getInstance().samplingAdd();
    }
    
    /**
@@ -120,6 +125,9 @@ public final class ExecuteEventListener {
    }
    
    private void handle(final AbstractSQLExecutionEvent event, final String operation) {
        if (!SamplingService.getInstance().trySampling()) {
            return;
        }
        Tracer tracer = ShardingJDBCTracer.get();
        switch (event.getEventExecutionType()) {
            case BEFORE_EXECUTE:
+4 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import io.opentracing.Tracer;
import io.opentracing.tag.Tags;
import io.shardingsphere.core.exception.ShardingException;
import io.shardingsphere.core.merger.event.ResultSetMergeEvent;
import io.shardingsphere.opentracing.sampling.SamplingService;
import io.shardingsphere.opentracing.tag.LocalTags;

import java.util.HashMap;
@@ -48,6 +49,9 @@ public final class MergeEventListener {
    @Subscribe
    @AllowConcurrentEvents
    public void listenResultSetMergeEvent(final ResultSetMergeEvent event) {
        if (!SamplingService.getInstance().trySampling()) {
            return;
        }
        Tracer tracer = ShardingJDBCTracer.get();
        ActiveSpan activeSpan;
        switch (event.getEventMergeType()) {
+18 −4
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import io.opentracing.util.GlobalTracer;
import io.shardingsphere.core.exception.ShardingException;
import io.shardingsphere.core.util.EventBusInstance;
import io.shardingsphere.opentracing.config.ConfigurationLoader;
import io.shardingsphere.opentracing.sampling.SamplingService;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;

@@ -41,9 +42,11 @@ public final class ShardingJDBCTracer {
        if (GlobalTracer.isRegistered()) {
            return;
        }
        String tracerClassName = new ConfigurationLoader().getTracerClassName();
        ConfigurationLoader configuration = new ConfigurationLoader();
        String tracerClassName = configuration.getTracerClassName();
        int sampleNumPM = configuration.getSampleNumPM();
        try {
            init((Tracer) Class.forName(tracerClassName).newInstance());
            init((Tracer) Class.forName(tracerClassName).newInstance(), sampleNumPM);
        } catch (final InstantiationException | IllegalAccessException | ClassNotFoundException ex) {
            throw new ShardingException("Parse tracer class name", ex);
        }
@@ -55,10 +58,21 @@ public final class ShardingJDBCTracer {
     * @param tracer that is delegated
     */
    public static void init(final Tracer tracer) {
        init(tracer, 0);
    }
    
    /**
     * Initialize tracer from another one.
     *
     * @param tracer      that is delegated
     * @param sampleNumPM sampling num in one minutes
     */
    public static void init(final Tracer tracer, final int sampleNumPM) {
        if (GlobalTracer.isRegistered()) {
            return;
        }
        GlobalTracer.register(tracer);
        SamplingService.getInstance().init(sampleNumPM);
        EventBusInstance.getInstance().register(new ExecuteEventListener());
        EventBusInstance.getInstance().register(new SqlRoutingEventListener());
        EventBusInstance.getInstance().register(new MergeEventListener());
+7 −3
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import io.opentracing.Tracer;
import io.opentracing.tag.Tags;
import io.shardingsphere.core.exception.ShardingException;
import io.shardingsphere.core.routing.event.SqlRoutingEvent;
import io.shardingsphere.opentracing.sampling.SamplingService;
import io.shardingsphere.opentracing.tag.LocalTags;

import java.util.HashMap;
@@ -48,6 +49,9 @@ public final class SqlRoutingEventListener {
    @Subscribe
    @AllowConcurrentEvents
    public void listenSqlRoutingEvent(final SqlRoutingEvent event) {
        if (!SamplingService.getInstance().trySampling()) {
            return;
        }
        Tracer tracer = ShardingJDBCTracer.get();
        ActiveSpan activeSpan;
        switch (event.getEventRoutingType()) {
+10 −1
Original line number Diff line number Diff line
@@ -34,9 +34,17 @@ public final class ConfigurationLoader {
    @Getter
    private final String tracerClassName;
    
    @Getter
    private final int sampleNumPM;
    
    public ConfigurationLoader() {
        String tracerClassName = null;
        int maxSampleNum = 0;
        for (ConfigurationParser each : PARSERS) {
            Optional<String> sampleNumPMOptional = each.parse("tracer.sampleNumPM");
            if (sampleNumPMOptional.isPresent()) {
                maxSampleNum = Integer.parseInt(sampleNumPMOptional.get());
            }
            Optional<String> tracerClassOptional = each.parse("tracer.class");
            if (tracerClassOptional.isPresent()) {
                tracerClassName = tracerClassOptional.get();
@@ -45,5 +53,6 @@ public final class ConfigurationLoader {
        }
        Preconditions.checkNotNull(tracerClassName);
        this.tracerClassName = tracerClassName;
        this.sampleNumPM = maxSampleNum;
    }
}
Loading