diff --git a/apm-commons/apm-datacarrier/pom.xml b/apm-commons/apm-datacarrier/pom.xml
new file mode 100644
index 000000000..098bf428e
--- /dev/null
+++ b/apm-commons/apm-datacarrier/pom.xml
@@ -0,0 +1,14 @@
+
+
+
+ apm-commons
+ org.skywalking
+ 3.2-2017
+
+ 4.0.0
+
+ apm-datacarrier
+
+
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/DataCarrier.java b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/DataCarrier.java
similarity index 86%
rename from apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/DataCarrier.java
rename to apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/DataCarrier.java
index 92c60cf88..e0d6f9236 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/DataCarrier.java
+++ b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/DataCarrier.java
@@ -1,11 +1,11 @@
-package org.skywalking.apm.agent.core.datacarrier;
+package org.skywalking.apm.commons.datacarrier;
-import org.skywalking.apm.agent.core.datacarrier.buffer.BufferStrategy;
-import org.skywalking.apm.agent.core.datacarrier.buffer.Channels;
-import org.skywalking.apm.agent.core.datacarrier.consumer.ConsumerPool;
-import org.skywalking.apm.agent.core.datacarrier.consumer.IConsumer;
-import org.skywalking.apm.agent.core.datacarrier.partition.IDataPartitioner;
-import org.skywalking.apm.agent.core.datacarrier.partition.SimpleRollingPartitioner;
+import org.skywalking.apm.commons.datacarrier.buffer.BufferStrategy;
+import org.skywalking.apm.commons.datacarrier.buffer.Channels;
+import org.skywalking.apm.commons.datacarrier.consumer.ConsumerPool;
+import org.skywalking.apm.commons.datacarrier.consumer.IConsumer;
+import org.skywalking.apm.commons.datacarrier.partition.IDataPartitioner;
+import org.skywalking.apm.commons.datacarrier.partition.SimpleRollingPartitioner;
/**
* DataCarrier main class.
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/buffer/Buffer.java b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/buffer/Buffer.java
similarity index 91%
rename from apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/buffer/Buffer.java
rename to apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/buffer/Buffer.java
index cdf3a9025..7c798de7f 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/buffer/Buffer.java
+++ b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/buffer/Buffer.java
@@ -1,7 +1,7 @@
-package org.skywalking.apm.agent.core.datacarrier.buffer;
+package org.skywalking.apm.commons.datacarrier.buffer;
import java.util.LinkedList;
-import org.skywalking.apm.agent.core.datacarrier.common.AtomicRangeInteger;
+import org.skywalking.apm.commons.datacarrier.common.AtomicRangeInteger;
/**
* Created by wusheng on 2016/10/25.
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/buffer/BufferStrategy.java b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/buffer/BufferStrategy.java
similarity index 67%
rename from apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/buffer/BufferStrategy.java
rename to apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/buffer/BufferStrategy.java
index 527756ee1..02ea1cc11 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/buffer/BufferStrategy.java
+++ b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/buffer/BufferStrategy.java
@@ -1,4 +1,4 @@
-package org.skywalking.apm.agent.core.datacarrier.buffer;
+package org.skywalking.apm.commons.datacarrier.buffer;
/**
* Created by wusheng on 2016/10/25.
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/buffer/Channels.java b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/buffer/Channels.java
similarity index 92%
rename from apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/buffer/Channels.java
rename to apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/buffer/Channels.java
index 7dd6d8a4a..e4b2e6182 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/buffer/Channels.java
+++ b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/buffer/Channels.java
@@ -1,6 +1,6 @@
-package org.skywalking.apm.agent.core.datacarrier.buffer;
+package org.skywalking.apm.commons.datacarrier.buffer;
-import org.skywalking.apm.agent.core.datacarrier.partition.IDataPartitioner;
+import org.skywalking.apm.commons.datacarrier.partition.IDataPartitioner;
/**
* Channels of Buffer
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/common/AtomicRangeInteger.java b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/common/AtomicRangeInteger.java
similarity index 95%
rename from apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/common/AtomicRangeInteger.java
rename to apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/common/AtomicRangeInteger.java
index 9e1407cc8..9b3ed36a7 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/common/AtomicRangeInteger.java
+++ b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/common/AtomicRangeInteger.java
@@ -1,4 +1,4 @@
-package org.skywalking.apm.agent.core.datacarrier.common;
+package org.skywalking.apm.commons.datacarrier.common;
import java.io.Serializable;
import java.util.concurrent.atomic.AtomicInteger;
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerCannotBeCreatedException.java b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/consumer/ConsumerCannotBeCreatedException.java
similarity index 76%
rename from apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerCannotBeCreatedException.java
rename to apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/consumer/ConsumerCannotBeCreatedException.java
index a7683691d..6cadcf6a2 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerCannotBeCreatedException.java
+++ b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/consumer/ConsumerCannotBeCreatedException.java
@@ -1,4 +1,4 @@
-package org.skywalking.apm.agent.core.datacarrier.consumer;
+package org.skywalking.apm.commons.datacarrier.consumer;
/**
* Created by wusheng on 2016/11/15.
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerPool.java b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/consumer/ConsumerPool.java
similarity index 95%
rename from apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerPool.java
rename to apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/consumer/ConsumerPool.java
index 6713ad465..75a2ad651 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerPool.java
+++ b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/consumer/ConsumerPool.java
@@ -1,9 +1,9 @@
-package org.skywalking.apm.agent.core.datacarrier.consumer;
+package org.skywalking.apm.commons.datacarrier.consumer;
import java.util.ArrayList;
import java.util.concurrent.locks.ReentrantLock;
-import org.skywalking.apm.agent.core.datacarrier.buffer.Buffer;
-import org.skywalking.apm.agent.core.datacarrier.buffer.Channels;
+import org.skywalking.apm.commons.datacarrier.buffer.Buffer;
+import org.skywalking.apm.commons.datacarrier.buffer.Channels;
/**
* Pool of consumers
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerThread.java b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/consumer/ConsumerThread.java
similarity index 95%
rename from apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerThread.java
rename to apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/consumer/ConsumerThread.java
index 811179562..71b34d00f 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerThread.java
+++ b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/consumer/ConsumerThread.java
@@ -1,8 +1,8 @@
-package org.skywalking.apm.agent.core.datacarrier.consumer;
+package org.skywalking.apm.commons.datacarrier.consumer;
import java.util.LinkedList;
import java.util.List;
-import org.skywalking.apm.agent.core.datacarrier.buffer.Buffer;
+import org.skywalking.apm.commons.datacarrier.buffer.Buffer;
/**
* Created by wusheng on 2016/10/25.
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/consumer/IConsumer.java b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/consumer/IConsumer.java
similarity index 78%
rename from apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/consumer/IConsumer.java
rename to apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/consumer/IConsumer.java
index 70ee5b60f..4e42f4739 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/consumer/IConsumer.java
+++ b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/consumer/IConsumer.java
@@ -1,4 +1,4 @@
-package org.skywalking.apm.agent.core.datacarrier.consumer;
+package org.skywalking.apm.commons.datacarrier.consumer;
import java.util.List;
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/partition/IDataPartitioner.java b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/partition/IDataPartitioner.java
similarity index 67%
rename from apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/partition/IDataPartitioner.java
rename to apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/partition/IDataPartitioner.java
index 140b82236..105bcbc4e 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/partition/IDataPartitioner.java
+++ b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/partition/IDataPartitioner.java
@@ -1,4 +1,4 @@
-package org.skywalking.apm.agent.core.datacarrier.partition;
+package org.skywalking.apm.commons.datacarrier.partition;
/**
* Created by wusheng on 2016/10/25.
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/partition/ProducerThreadPartitioner.java b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/partition/ProducerThreadPartitioner.java
similarity index 82%
rename from apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/partition/ProducerThreadPartitioner.java
rename to apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/partition/ProducerThreadPartitioner.java
index 118fd6327..3ebbee592 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/partition/ProducerThreadPartitioner.java
+++ b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/partition/ProducerThreadPartitioner.java
@@ -1,4 +1,4 @@
-package org.skywalking.apm.agent.core.datacarrier.partition;
+package org.skywalking.apm.commons.datacarrier.partition;
/**
* use threadid % total to partition
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/partition/SimpleRollingPartitioner.java b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/partition/SimpleRollingPartitioner.java
similarity index 88%
rename from apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/partition/SimpleRollingPartitioner.java
rename to apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/partition/SimpleRollingPartitioner.java
index c1d92d471..e44c89963 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/partition/SimpleRollingPartitioner.java
+++ b/apm-commons/apm-datacarrier/src/main/java/org/skywalking/apm/commons/datacarrier/partition/SimpleRollingPartitioner.java
@@ -1,4 +1,4 @@
-package org.skywalking.apm.agent.core.datacarrier.partition;
+package org.skywalking.apm.commons.datacarrier.partition;
/**
* use normal int to rolling.
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/DataCarrierTest.java b/apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/DataCarrierTest.java
similarity index 92%
rename from apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/DataCarrierTest.java
rename to apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/DataCarrierTest.java
index d324369ac..728ac36cd 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/DataCarrierTest.java
+++ b/apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/DataCarrierTest.java
@@ -1,16 +1,15 @@
-package org.skywalking.apm.agent.core.datacarrier;
+package org.skywalking.apm.commons.datacarrier;
-import org.skywalking.apm.agent.core.datacarrier.buffer.Buffer;
-import org.skywalking.apm.agent.core.datacarrier.buffer.BufferStrategy;
-import org.skywalking.apm.agent.core.datacarrier.buffer.Channels;
-import org.skywalking.apm.agent.core.datacarrier.consumer.IConsumer;
-import org.skywalking.apm.agent.core.datacarrier.partition.ProducerThreadPartitioner;
-import org.skywalking.apm.agent.core.datacarrier.partition.SimpleRollingPartitioner;
+import java.util.List;
import org.junit.Assert;
import org.junit.Test;
import org.powermock.api.support.membermodification.MemberModifier;
-
-import java.util.List;
+import org.skywalking.apm.commons.datacarrier.buffer.Buffer;
+import org.skywalking.apm.commons.datacarrier.buffer.BufferStrategy;
+import org.skywalking.apm.commons.datacarrier.buffer.Channels;
+import org.skywalking.apm.commons.datacarrier.consumer.IConsumer;
+import org.skywalking.apm.commons.datacarrier.partition.ProducerThreadPartitioner;
+import org.skywalking.apm.commons.datacarrier.partition.SimpleRollingPartitioner;
/**
* Created by wusheng on 2016/10/25.
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/SampleData.java b/apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/SampleData.java
similarity index 89%
rename from apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/SampleData.java
rename to apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/SampleData.java
index 347a65c56..65db2db34 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/SampleData.java
+++ b/apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/SampleData.java
@@ -1,4 +1,4 @@
-package org.skywalking.apm.agent.core.datacarrier;
+package org.skywalking.apm.commons.datacarrier;
/**
* Created by wusheng on 2016/10/25.
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/common/AtomicRangeIntegerTest.java b/apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/common/AtomicRangeIntegerTest.java
similarity index 84%
rename from apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/common/AtomicRangeIntegerTest.java
rename to apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/common/AtomicRangeIntegerTest.java
index 72003bbd0..aa417d59c 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/common/AtomicRangeIntegerTest.java
+++ b/apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/common/AtomicRangeIntegerTest.java
@@ -1,10 +1,12 @@
-package org.skywalking.apm.agent.core.datacarrier.common;
+package org.skywalking.apm.commons.datacarrier.common;
import org.junit.Assert;
import org.junit.Test;
+import static org.junit.Assert.*;
+
/**
- * Created by wusheng on 2016/10/25.
+ * Created by xin on 2017/7/14.
*/
public class AtomicRangeIntegerTest {
@Test
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerPoolTest.java b/apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/consumer/ConsumerPoolTest.java
similarity index 82%
rename from apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerPoolTest.java
rename to apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/consumer/ConsumerPoolTest.java
index 04cf88370..3158cd51b 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerPoolTest.java
+++ b/apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/consumer/ConsumerPoolTest.java
@@ -1,12 +1,12 @@
-package org.skywalking.apm.agent.core.datacarrier.consumer;
+package org.skywalking.apm.commons.datacarrier.consumer;
import org.junit.Assert;
import org.junit.Test;
import org.powermock.api.support.membermodification.MemberModifier;
-import org.skywalking.apm.agent.core.datacarrier.SampleData;
-import org.skywalking.apm.agent.core.datacarrier.buffer.BufferStrategy;
-import org.skywalking.apm.agent.core.datacarrier.buffer.Channels;
-import org.skywalking.apm.agent.core.datacarrier.partition.SimpleRollingPartitioner;
+import org.skywalking.apm.commons.datacarrier.SampleData;
+import org.skywalking.apm.commons.datacarrier.buffer.BufferStrategy;
+import org.skywalking.apm.commons.datacarrier.buffer.Channels;
+import org.skywalking.apm.commons.datacarrier.partition.SimpleRollingPartitioner;
/**
* Created by wusheng on 2016/10/26.
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerTest.java b/apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/consumer/ConsumerTest.java
similarity index 95%
rename from apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerTest.java
rename to apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/consumer/ConsumerTest.java
index a2429415f..bbe816b19 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerTest.java
+++ b/apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/consumer/ConsumerTest.java
@@ -1,4 +1,4 @@
-package org.skywalking.apm.agent.core.datacarrier.consumer;
+package org.skywalking.apm.commons.datacarrier.consumer;
import java.util.ArrayList;
import java.util.HashSet;
@@ -7,8 +7,8 @@ import java.util.concurrent.LinkedBlockingQueue;
import org.junit.Assert;
import org.junit.Test;
import org.powermock.api.support.membermodification.MemberModifier;
-import org.skywalking.apm.agent.core.datacarrier.DataCarrier;
-import org.skywalking.apm.agent.core.datacarrier.SampleData;
+import org.skywalking.apm.commons.datacarrier.DataCarrier;
+import org.skywalking.apm.commons.datacarrier.SampleData;
/**
* Created by wusheng on 2016/10/26.
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/consumer/SampleConsumer.java b/apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/consumer/SampleConsumer.java
similarity index 81%
rename from apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/consumer/SampleConsumer.java
rename to apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/consumer/SampleConsumer.java
index 2b210cd80..aa1819081 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/consumer/SampleConsumer.java
+++ b/apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/consumer/SampleConsumer.java
@@ -1,8 +1,7 @@
-package org.skywalking.apm.agent.core.datacarrier.consumer;
-
+package org.skywalking.apm.commons.datacarrier.consumer;
import java.util.List;
-import org.skywalking.apm.agent.core.datacarrier.SampleData;
+import org.skywalking.apm.commons.datacarrier.SampleData;
/**
* Created by wusheng on 2016/10/26.
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/partition/ProducerThreadPartitionerTest.java b/apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/partition/ProducerThreadPartitionerTest.java
similarity index 79%
rename from apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/partition/ProducerThreadPartitionerTest.java
rename to apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/partition/ProducerThreadPartitionerTest.java
index a0a7fed42..0072471d5 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/partition/ProducerThreadPartitionerTest.java
+++ b/apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/partition/ProducerThreadPartitionerTest.java
@@ -1,15 +1,15 @@
-package org.skywalking.apm.agent.core.datacarrier.partition;
+package org.skywalking.apm.commons.datacarrier.partition;
import org.junit.Assert;
import org.junit.Test;
-import org.skywalking.apm.agent.core.datacarrier.SampleData;
+import org.skywalking.apm.commons.datacarrier.SampleData;
/**
* Created by wusheng on 2016/10/25.
*/
public class ProducerThreadPartitionerTest {
@Test
- public void testPartition(){
+ public void testPartition() {
int partitionNum = (int)Thread.currentThread().getId() % 10;
ProducerThreadPartitioner partitioner = new ProducerThreadPartitioner();
Assert.assertEquals(partitioner.partition(10, new SampleData()), partitionNum);
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/partition/SimpleRollingPartitionerTest.java b/apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/partition/SimpleRollingPartitionerTest.java
similarity index 81%
rename from apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/partition/SimpleRollingPartitionerTest.java
rename to apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/partition/SimpleRollingPartitionerTest.java
index 6935f1900..07ca8562b 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/datacarrier/partition/SimpleRollingPartitionerTest.java
+++ b/apm-commons/apm-datacarrier/src/test/java/org/skywalking/apm/commons/datacarrier/partition/SimpleRollingPartitionerTest.java
@@ -1,8 +1,8 @@
-package org.skywalking.apm.agent.core.datacarrier.partition;
+package org.skywalking.apm.commons.datacarrier.partition;
import org.junit.Assert;
import org.junit.Test;
-import org.skywalking.apm.agent.core.datacarrier.SampleData;
+import org.skywalking.apm.commons.datacarrier.SampleData;
/**
* Created by wusheng on 2016/10/25.
diff --git a/apm-commons/apm-logging-log4j2/pom.xml b/apm-commons/apm-logging-log4j2/pom.xml
deleted file mode 100644
index ac89396f3..000000000
--- a/apm-commons/apm-logging-log4j2/pom.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
- apm-commons
- org.skywalking
- 3.2-2017
-
- 4.0.0
-
- apm-logging-log4j2
-
-
-
- org.skywalking
- apm-logging-api
- ${project.version}
-
-
- org.apache.logging.log4j
- log4j-core
- 2.8
-
-
- org.apache.logging.log4j
- log4j-api
- 2.8
-
-
-
diff --git a/apm-commons/apm-logging-log4j2/src/main/java/org/skywalking/apm/logging/log4j2/Log4j2Logger.java b/apm-commons/apm-logging-log4j2/src/main/java/org/skywalking/apm/logging/log4j2/Log4j2Logger.java
deleted file mode 100644
index 363d31db0..000000000
--- a/apm-commons/apm-logging-log4j2/src/main/java/org/skywalking/apm/logging/log4j2/Log4j2Logger.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.skywalking.apm.logging.log4j2;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.skywalking.apm.logging.ILog;
-
-/**
- * @author wusheng
- */
-public class Log4j2Logger implements ILog {
- private Logger delegateLogger;
-
- Log4j2Logger(Class> targetClass) {
- delegateLogger = LogManager.getFormatterLogger(targetClass);
- }
-
- @Override
- public void info(String format) {
- delegateLogger.info(format);
- }
-
- @Override
- public void info(String format, Object... arguments) {
- delegateLogger.info(format, arguments);
- }
-
- @Override
- public void warn(String format, Object... arguments) {
- delegateLogger.warn(format, arguments);
- }
-
- @Override
- public void error(String format, Throwable e) {
- delegateLogger.error(format, e);
- }
-
- @Override
- public void error(Throwable e, String format, Object... arguments) {
- delegateLogger.error(format, e, arguments);
- }
-
- @Override
- public boolean isDebugEnable() {
- return delegateLogger.isDebugEnabled();
- }
-
- @Override
- public boolean isInfoEnable() {
- return delegateLogger.isInfoEnabled();
- }
-
- @Override
- public boolean isWarnEnable() {
- return delegateLogger.isWarnEnabled();
- }
-
- @Override
- public boolean isErrorEnable() {
- return delegateLogger.isErrorEnabled();
- }
-
- @Override
- public void debug(String format) {
- delegateLogger.debug(format);
- }
-
- @Override
- public void debug(String format, Object... arguments) {
- delegateLogger.debug(format, arguments);
- }
-
- @Override
- public void error(String format) {
- delegateLogger.error(format);
- }
-}
diff --git a/apm-commons/apm-logging-log4j2/src/main/java/org/skywalking/apm/logging/log4j2/Log4j2Resolver.java b/apm-commons/apm-logging-log4j2/src/main/java/org/skywalking/apm/logging/log4j2/Log4j2Resolver.java
deleted file mode 100644
index 97da742c3..000000000
--- a/apm-commons/apm-logging-log4j2/src/main/java/org/skywalking/apm/logging/log4j2/Log4j2Resolver.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.skywalking.apm.logging.log4j2;
-
-import org.skywalking.apm.logging.ILog;
-import org.skywalking.apm.logging.LogResolver;
-
-/**
- * The LogResolver is an implementation of {@link LogResolver},
- *
- * @author wusheng
- */
-public class Log4j2Resolver implements LogResolver {
- @Override
- public ILog getLogger(Class> clazz) {
- return new Log4j2Logger(clazz);
- }
-}
diff --git a/apm-commons/pom.xml b/apm-commons/pom.xml
index c28ff70e1..aaaffca57 100644
--- a/apm-commons/pom.xml
+++ b/apm-commons/pom.xml
@@ -13,7 +13,7 @@
apm-util
apm-logging-api
- apm-logging-log4j2
+ apm-datacarrier
apm-commons
diff --git a/apm-sniffer/apm-agent-core/pom.xml b/apm-sniffer/apm-agent-core/pom.xml
index b0316d127..6749551f6 100644
--- a/apm-sniffer/apm-agent-core/pom.xml
+++ b/apm-sniffer/apm-agent-core/pom.xml
@@ -95,6 +95,11 @@
test
+
+ org.skywalking
+ apm-datacarrier
+ ${project.version}
+
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/Config.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/Config.java
index 5e25a95f2..6ffa2cfb5 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/Config.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/Config.java
@@ -34,7 +34,18 @@ public class Config {
}
public static class Collector {
- public static long DISCOVERY_CHECK_INTERVAL = 60 * 1000;
+ /**
+ * grpc channel status check interval
+ */
+ public static long GRPC_CHANNEL_CHECK_INTERVAL = 30;
+ /**
+ * application and service registry check interval
+ */
+ public static long APP_AND_SERVICE_REGISTER_CHECK_INTERVAL = 10;
+ /**
+ * discovery rest check interval
+ */
+ public static long DISCOVERY_CHECK_INTERVAL = 60;
/**
* Collector REST-Service address.
* e.g.
@@ -46,7 +57,7 @@ public class Config {
/**
* Collector service discovery REST service name
*/
- public static String DISCOVERY_SERVICE_NAME = "grpc/addresses";
+ public static String DISCOVERY_SERVICE_NAME = "/grpc/addresses";
}
public static class Buffer {
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/ExitSpan.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/ExitSpan.java
index caad8f651..bed47ff12 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/ExitSpan.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/ExitSpan.java
@@ -108,10 +108,12 @@ public class ExitSpan extends AbstractTracingSpan {
@Override public SpanObject.Builder transform() {
SpanObject.Builder spanBuilder = super.transform();
- if (peerId == DictionaryUtil.nullValue()) {
+ if (peerId != DictionaryUtil.nullValue()) {
spanBuilder.setPeerId(peerId);
} else {
- spanBuilder.setPeer(peer);
+ if (peer != null) {
+ spanBuilder.setPeer(peer);
+ }
}
return spanBuilder;
}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/AppAndServiceRegisterClient.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/AppAndServiceRegisterClient.java
index 1ce12cb50..af24fc93d 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/AppAndServiceRegisterClient.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/AppAndServiceRegisterClient.java
@@ -69,7 +69,7 @@ public class AppAndServiceRegisterClient implements BootService, GRPCChannelList
public void boot() throws Throwable {
applicationRegisterFuture = Executors
.newSingleThreadScheduledExecutor()
- .scheduleAtFixedRate(this, 0, 10, TimeUnit.SECONDS);
+ .scheduleAtFixedRate(this, 0, Config.Collector.APP_AND_SERVICE_REGISTER_CHECK_INTERVAL, TimeUnit.SECONDS);
}
@Override
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/CollectorDiscoveryService.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/CollectorDiscoveryService.java
index f464abe24..76461b985 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/CollectorDiscoveryService.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/CollectorDiscoveryService.java
@@ -20,7 +20,7 @@ public class CollectorDiscoveryService implements BootService {
public void boot() throws Throwable {
Executors.newSingleThreadScheduledExecutor()
.scheduleAtFixedRate(new DiscoveryRestServiceClient(), 0,
- Config.Collector.DISCOVERY_CHECK_INTERVAL, TimeUnit.MILLISECONDS);
+ Config.Collector.DISCOVERY_CHECK_INTERVAL, TimeUnit.SECONDS);
}
@Override
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/GRPCChannelManager.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/GRPCChannelManager.java
index f3034efd2..6042c55bf 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/GRPCChannelManager.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/GRPCChannelManager.java
@@ -18,6 +18,8 @@ import org.skywalking.apm.agent.core.conf.RemoteDownstreamConfig;
import org.skywalking.apm.logging.ILog;
import org.skywalking.apm.logging.LogManager;
+import static org.skywalking.apm.agent.core.conf.Config.Collector.GRPC_CHANNEL_CHECK_INTERVAL;
+
/**
* @author wusheng
*/
@@ -29,7 +31,6 @@ public class GRPCChannelManager implements BootService, Runnable {
private volatile boolean reconnect = true;
private Random random = new Random();
private List listeners = Collections.synchronizedList(new LinkedList());
- private final int retryCycle = 30;
@Override
public void beforeBoot() throws Throwable {
@@ -40,7 +41,7 @@ public class GRPCChannelManager implements BootService, Runnable {
public void boot() throws Throwable {
connectCheckFuture = Executors
.newSingleThreadScheduledExecutor()
- .scheduleAtFixedRate(this, 0, retryCycle, TimeUnit.SECONDS);
+ .scheduleAtFixedRate(this, 0, GRPC_CHANNEL_CHECK_INTERVAL, TimeUnit.SECONDS);
}
@Override
@@ -75,7 +76,7 @@ public class GRPCChannelManager implements BootService, Runnable {
}
}
- logger.debug("Selected collector grpc service is not available. Wait {} seconds to retry", retryCycle);
+ logger.debug("Selected collector grpc service is not available. Wait {} seconds to retry", GRPC_CHANNEL_CHECK_INTERVAL);
}
}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/TraceSegmentServiceClient.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/TraceSegmentServiceClient.java
index e6637b7fc..d04a625f1 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/TraceSegmentServiceClient.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/TraceSegmentServiceClient.java
@@ -8,9 +8,9 @@ import org.skywalking.apm.agent.core.boot.ServiceManager;
import org.skywalking.apm.agent.core.context.TracingContext;
import org.skywalking.apm.agent.core.context.TracingContextListener;
import org.skywalking.apm.agent.core.context.trace.TraceSegment;
-import org.skywalking.apm.agent.core.datacarrier.DataCarrier;
-import org.skywalking.apm.agent.core.datacarrier.buffer.BufferStrategy;
-import org.skywalking.apm.agent.core.datacarrier.consumer.IConsumer;
+import org.skywalking.apm.commons.datacarrier.DataCarrier;
+import org.skywalking.apm.commons.datacarrier.buffer.BufferStrategy;
+import org.skywalking.apm.commons.datacarrier.consumer.IConsumer;
import org.skywalking.apm.logging.ILog;
import org.skywalking.apm.logging.LogManager;
import org.skywalking.apm.network.proto.Downstream;
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/remote/GRPCChannelManagerTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/remote/GRPCChannelManagerTest.java
index 40e795e8a..56c53816d 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/remote/GRPCChannelManagerTest.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/remote/GRPCChannelManagerTest.java
@@ -17,6 +17,7 @@ import org.mockito.Spy;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.reflect.Whitebox;
+import org.skywalking.apm.agent.core.conf.Config;
import org.skywalking.apm.agent.core.conf.RemoteDownstreamConfig;
import org.skywalking.apm.agent.core.test.tools.AgentServiceRule;
@@ -52,7 +53,7 @@ public class GRPCChannelManagerTest {
List grpcServers = new ArrayList();
grpcServers.add("127.0.0.1:2181");
RemoteDownstreamConfig.Collector.GRPC_SERVERS = grpcServers;
- Whitebox.setInternalState(grpcChannelManager, "retryCycle", 1);
+ Config.Collector.GRPC_CHANNEL_CHECK_INTERVAL = 1;
mockStatic(NettyChannelBuilder.class);
when(NettyChannelBuilder.forAddress(anyString(), anyInt())).thenReturn(mock);
diff --git a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v3/define/MongoDBInstrumentation.java b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v3/define/MongoDBInstrumentation.java
index 9ce9154cd..5b0bd055d 100644
--- a/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v3/define/MongoDBInstrumentation.java
+++ b/apm-sniffer/apm-sdk-plugin/mongodb-3.x-plugin/src/main/java/org/skywalking/apm/plugin/mongodb/v3/define/MongoDBInstrumentation.java
@@ -1,6 +1,5 @@
package org.skywalking.apm.plugin.mongodb.v3.define;
-import com.mongodb.connection.Cluster;
import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.matcher.ElementMatcher;
import org.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
@@ -9,7 +8,7 @@ import org.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMet
import org.skywalking.apm.agent.core.plugin.match.ClassMatch;
import static net.bytebuddy.matcher.ElementMatchers.named;
-import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
+import static org.skywalking.apm.agent.core.plugin.bytebuddy.ArgumentTypeNameMatch.takesArgumentWithType;
import static org.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
public class MongoDBInstrumentation extends ClassInstanceMethodsEnhancePluginDefine {
@@ -24,7 +23,7 @@ public class MongoDBInstrumentation extends ClassInstanceMethodsEnhancePluginDef
new ConstructorInterceptPoint() {
@Override
public ElementMatcher getConstructorMatcher() {
- return takesArgument(1, Cluster.class);
+ return takesArgumentWithType(0, "com.mongodb.connection.Cluster");
}
@Override