diff --git a/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/selector/AbstractHashMessage.java b/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/selector/AbstractHashMessage.java index 0a5f64a14c1c955ba2a72ccc4b05f1a6f694c83d..c3f336f83c90e901ced4e7807bb4cd0ad5a9b9ec 100644 --- a/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/selector/AbstractHashMessage.java +++ b/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/selector/AbstractHashMessage.java @@ -1,6 +1,12 @@ package com.a.eye.skywalking.collector.actor.selector; /** + * The AbstractHashMessage should be implemented by any class whose instances + * are intended to provide send message with {@link HashCodeSelector}. + *

+ * Usually the implemented class used to persistence data to database + * or aggregation the metric, + * * @author pengys5 */ public abstract class AbstractHashMessage { diff --git a/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/selector/HashCodeSelector.java b/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/selector/HashCodeSelector.java index a3d46df68173cde101381d3029678d6c7933c68d..aef766ab1e6122f87168f6236abb17049524cb43 100644 --- a/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/selector/HashCodeSelector.java +++ b/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/selector/HashCodeSelector.java @@ -1,14 +1,26 @@ package com.a.eye.skywalking.collector.actor.selector; +import com.a.eye.skywalking.collector.actor.AbstractWorker; import com.a.eye.skywalking.collector.actor.WorkerRef; import java.util.List; /** + * The HashCodeSelector is a simple implementation of {@link WorkerSelector}. + * It choose {@link WorkerRef} by message {@link AbstractHashMessage} key's hashcode, so it can use to send the same hashcode + * message to same {@link WorkerRef}. Usually, use to database operate which avoid dirty data. + * * @author pengys5 */ public class HashCodeSelector implements WorkerSelector { + /** + * Use message hashcode to select {@link WorkerRef}. + * + * @param members given {@link WorkerRef} list, which size is greater than 0; + * @param message the {@link AbstractWorker} is going to send. + * @return the selected {@link WorkerRef} + */ @Override public WorkerRef select(List members, Object message) { if (message instanceof AbstractHashMessage) { diff --git a/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/selector/RollingSelector.java b/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/selector/RollingSelector.java index ec0f89822bc3a9313800e45de5fbc525fe24081b..e56fed4140af151b86f1af43f5ae72d2d1d331c5 100644 --- a/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/selector/RollingSelector.java +++ b/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/selector/RollingSelector.java @@ -1,16 +1,27 @@ package com.a.eye.skywalking.collector.actor.selector; +import com.a.eye.skywalking.collector.actor.AbstractWorker; import com.a.eye.skywalking.collector.actor.WorkerRef; import java.util.List; /** + * The RollingSelector is a simple implementation of {@link WorkerSelector}. + * It choose {@link WorkerRef} nearly random, by round-robin. + * * @author pengys5 */ public class RollingSelector implements WorkerSelector { private int index = 0; + /** + * Use round-robin to select {@link WorkerRef}. + * + * @param members given {@link WorkerRef} list, which size is greater than 0; + * @param message message the {@link AbstractWorker} is going to send. + * @return the selected {@link WorkerRef} + */ @Override public WorkerRef select(List members, Object message) { int size = members.size(); diff --git a/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/selector/WorkerSelector.java b/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/selector/WorkerSelector.java index c7a607f47b7cc7da9fe03b9bd4a9f5a619540d71..733c9f23f25ca940ceed540f11eead54a4814f99 100644 --- a/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/selector/WorkerSelector.java +++ b/skywalking-collector/skywalking-collector-cluster/src/main/java/com/a/eye/skywalking/collector/actor/selector/WorkerSelector.java @@ -1,12 +1,26 @@ package com.a.eye.skywalking.collector.actor.selector; +import com.a.eye.skywalking.collector.actor.AbstractWorker; import com.a.eye.skywalking.collector.actor.WorkerRef; import java.util.List; /** + * The WorkerSelector should be implemented by any class whose instances + * are intended to provide select a {@link WorkerRef} from a {@link WorkerRef} list. + *

+ * Actually, the WorkerRef is designed to provide a routing ability in the collector cluster + * * @author pengys5 */ public interface WorkerSelector { + + /** + * select a {@link WorkerRef} from a {@link WorkerRef} list. + * + * @param members given {@link WorkerRef} list, which size is greater than 0; + * @param message the {@link AbstractWorker} is going to send. + * @return the selected {@link WorkerRef} + */ T select(List members, Object message); }