Commit ebb0f9e4 authored by 吴晟's avatar 吴晟
Browse files

Merge branch 'feature/3.0'

* feature/3.0:
  compile error
  refactor the way how to create worker instance
  1. Remove the primary ref. Only use ref to the parent segment. 2. Adjust globalTracerIds
  refactor cluster module, modify the way use to tell cluster worker
  Add tags test case.
  Add new test case for 3 InvokeContextTest.
  Fix interceptor instance singleton bug, and add some test cases.
  Alter TraceSegement, Add a list of DistributedTraceId as field `relatedGlobalTraces`.
  Shade akka.* in collector-worker. Prevent akka se/deserializing failure.
  Rename ServiceStarter to ServiceManager. Finish the major codes of TraceSegmentProcessQueue and CollectorClientService.
  Sync a result pom
  add recevier moudle
  fix test case issue
  fix tomcat cannot works issue
  fix #103
  Add a new ability to ServiceStarter, about finding a started service instance.
  Fix a test case failure issue.
  Recover logging-api/logging-log4j2 modules. Adjust codes for new modules.
parents b2822e9b 01a08cae
Loading
Loading
Loading
Loading
+24 −1
Original line number Diff line number Diff line
@@ -53,7 +53,30 @@
		<scala.compiler.version>2.11.7</scala.compiler.version>
		<powermock.version>1.6.4</powermock.version>
		<docker.plugin.version>0.4.13</docker.plugin.version>
		<skywalking.version>2.1-2017</skywalking.version>

        <shade.package>com.a.eye.skywalking.dependencies</shade.package>
        <shade.net.bytebuddy.source>net.bytebuddy</shade.net.bytebuddy.source>
        <shade.net.bytebuddy.target>${shade.package}.${shade.net.bytebuddy.source}</shade.net.bytebuddy.target>
        <shade.com.lmax.disruptor.source>com.lmax.disruptor</shade.com.lmax.disruptor.source>
        <shade.com.lmax.disruptor.target>${shade.package}.${shade.com.lmax.disruptor.source}</shade.com.lmax.disruptor.target>
        <shade.akka.source>akka</shade.akka.source>
        <shade.akka.target>${shade.package}.${shade.akka.source}</shade.akka.target>
        <shade.scala.source>scala</shade.scala.source>
        <shade.scala.target>${shade.package}.${shade.scala.source}</shade.scala.target>
        <shade.org.agrona.source>org.agrona</shade.org.agrona.source>
        <shade.org.agrona.target>${shade.package}.${shade.org.agrona.source}</shade.org.agrona.target>
        <shade.org.jboss.netty.source>org.jboss.netty</shade.org.jboss.netty.source>
        <shade.org.jboss.netty.target>${shade.package}.${shade.org.jboss.netty.source}</shade.org.jboss.netty.target>
        <shade.org.reactivestreams.source>org.reactivestreams</shade.org.reactivestreams.source>
        <shade.org.reactivestreams.target>${shade.package}.${shade.org.reactivestreams.source}</shade.org.reactivestreams.target>
        <shade.org.uncommons.maths.source>org.uncommons.maths</shade.org.uncommons.maths.source>
        <shade.org.uncommons.maths.target>${shade.package}.${shade.org.uncommons.maths.source}</shade.org.uncommons.maths.target>
        <shade.com.google.source>com.google</shade.com.google.source>
        <shade.com.google.target>${shade.package}.${shade.com.google.source}</shade.com.google.target>
        <shade.io.aeron.source>io.aeron</shade.io.aeron.source>
        <shade.io.aeron.target>${shade.package}.${shade.io.aeron.source}</shade.io.aeron.target>
        <shade.com.typesafe.source>com.typesafe</shade.com.typesafe.source>
        <shade.com.typesafe.target>${shade.package}.${shade.com.typesafe.source}</shade.com.typesafe.target>
	</properties>

    <dependencies>
+4 −34
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@
    <modules>
        <module>skywalking-collector-cluster</module>
        <module>skywalking-collector-worker</module>
        <module>skywalking-collector-role</module>
    </modules>
    <parent>
        <artifactId>skywalking</artifactId>
@@ -25,34 +26,9 @@
            <version>${akka.version}</version>
        </dependency>
        <dependency>
            <groupId>com.typesafe.akka</groupId>
            <artifactId>akka-cluster-metrics_2.11</artifactId>
            <version>${akka.version}</version>
        </dependency>
        <dependency>
            <groupId>com.typesafe.akka</groupId>
            <artifactId>akka-cluster-tools_2.11</artifactId>
            <version>${akka.version}</version>
        </dependency>
        <dependency>
            <groupId>com.typesafe.akka</groupId>
            <artifactId>akka-persistence_2.11</artifactId>
            <version>${akka.version}</version>
        </dependency>
        <dependency>
            <groupId>org.iq80.leveldb</groupId>
            <artifactId>leveldb</artifactId>
            <version>0.9</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.8</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.8</version>
            <groupId>com.a.eye</groupId>
            <artifactId>skywalking-logging-api</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>com.typesafe.akka</groupId>
@@ -60,11 +36,5 @@
            <version>${akka.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.a.eye</groupId>
            <artifactId>skywalking-sniffer-mock</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
+2 −7
Original line number Diff line number Diff line
@@ -16,11 +16,6 @@
    </properties>

    <dependencies>
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
        </dependency>
        <dependency>
            <groupId>com.lmax</groupId>
            <artifactId>disruptor</artifactId>
@@ -28,7 +23,7 @@
        </dependency>
        <dependency>
            <groupId>com.a.eye</groupId>
            <artifactId>skywalking-api</artifactId>
            <artifactId>skywalking-util</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
+76 −0
Original line number Diff line number Diff line
package com.a.eye.skywalking.collector;

import akka.actor.ActorSystem;
import akka.actor.Props;
import com.a.eye.skywalking.collector.actor.AbstractClusterWorkerProvider;
import com.a.eye.skywalking.collector.actor.AbstractLocalWorkerProvider;
import com.a.eye.skywalking.collector.actor.ClusterWorkerContext;
import com.a.eye.skywalking.collector.actor.LocalWorkerContext;
import com.a.eye.skywalking.collector.actor.UsedRoleNameException;
import com.a.eye.skywalking.collector.cluster.ClusterConfig;
import com.a.eye.skywalking.collector.cluster.ClusterConfigInitializer;
import com.a.eye.skywalking.collector.cluster.WorkersListener;
import com.a.eye.skywalking.logging.ILog;
import com.a.eye.skywalking.logging.LogManager;
import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;
import java.util.ServiceLoader;

/**
 * @author pengys5
 */
public class CollectorSystem {
    private ILog logger = LogManager.getLogger(CollectorSystem.class);
    private ClusterWorkerContext clusterContext;

    public ClusterWorkerContext getClusterContext() {
        return clusterContext;
    }

    public void boot() throws Exception {
        createAkkaSystem();
        createListener();
        loadLocalProviders();

        createClusterWorker();
    }

    public void terminate() {
        clusterContext.getAkkaSystem().terminate();
    }

    private void createAkkaSystem() {
        ClusterConfigInitializer.initialize("collector.config");

        final Config config = ConfigFactory.parseString("akka.remote.netty.tcp.hostname=" + ClusterConfig.Cluster.Current.hostname).
                withFallback(ConfigFactory.parseString("akka.remote.netty.tcp.port=" + ClusterConfig.Cluster.Current.port)).
                withFallback(ConfigFactory.parseString("akka.cluster.roles=" + ClusterConfig.Cluster.Current.roles)).
                withFallback(ConfigFactory.parseString("akka.actor.provider=" + ClusterConfig.Cluster.provider)).
                withFallback(ConfigFactory.parseString("akka.cluster.seed-nodes=" + ClusterConfig.Cluster.nodes)).
                withFallback(ConfigFactory.load("application.conf"));
        ActorSystem akkaSystem = ActorSystem.create("ClusterSystem", config);

        clusterContext = new ClusterWorkerContext(akkaSystem);
    }

    private void createListener() {
        clusterContext.getAkkaSystem().actorOf(Props.create(WorkersListener.class, clusterContext), WorkersListener.WorkName);
    }

    private void createClusterWorker() throws Exception {
        ServiceLoader<AbstractClusterWorkerProvider> clusterServiceLoader = ServiceLoader.load(AbstractClusterWorkerProvider.class);
        for (AbstractClusterWorkerProvider provider : clusterServiceLoader) {
            logger.info("create {%s} worker using java service loader", provider.workerNum());
            for (int i = 1; i <= provider.workerNum(); i++) {
                provider.create(clusterContext, new LocalWorkerContext());
            }
        }
    }

    private void loadLocalProviders() throws UsedRoleNameException {
        ServiceLoader<AbstractLocalWorkerProvider> clusterServiceLoader = ServiceLoader.load(AbstractLocalWorkerProvider.class);
        for (AbstractLocalWorkerProvider provider : clusterServiceLoader) {
            clusterContext.putProvider(provider);
        }
    }
}
+0 −37
Original line number Diff line number Diff line
package com.a.eye.skywalking.collector.actor;

import akka.actor.ActorRef;
import com.a.eye.skywalking.collector.queue.EndOfBatchCommand;
import com.a.eye.skywalking.collector.queue.MessageHolder;
import com.lmax.disruptor.RingBuffer;

/**
 * @author pengys5
 */
public abstract class AbstractAsyncMember extends AbstractMember {

    private RingBuffer<MessageHolder> ringBuffer;

    public AbstractAsyncMember(RingBuffer<MessageHolder> ringBuffer, ActorRef actorRef) {
        super(actorRef);
        this.ringBuffer = ringBuffer;
    }

    public void onEvent(MessageHolder event, long sequence, boolean endOfBatch) throws Exception {
        Object message = event.getMessage();
        event.reset();
        receive(message);
        if (endOfBatch) {
            receive(new EndOfBatchCommand());
        }
    }

    public void beTold(Object message) throws Exception {
        long sequence = ringBuffer.next();
        try {
            ringBuffer.get(sequence).setMessage(message);
        } finally {
            ringBuffer.publish(sequence);
        }
    }
}
Loading