Search in sources :

Example 1 with MantisRxSingleThreadScheduler

use of io.mantisrx.runtime.scheduler.MantisRxSingleThreadScheduler in project mantis by Netflix.

the class IcebergWriterStage method newTransformer.

@VisibleForTesting
static Transformer newTransformer(WriterConfig writerConfig, WriterMetrics writerMetrics, IcebergWriterPool writerPool, Partitioner partitioner, WorkerInfo workerInfo) {
    int workerIdx = workerInfo.getWorkerIndex();
    String nameFormat = "IcebergWriter (" + (workerIdx + 1) + ")-%d";
    Scheduler executingService = new MantisRxSingleThreadScheduler(new ThreadFactoryBuilder().setNameFormat(nameFormat).build());
    return new Transformer(writerConfig, writerMetrics, writerPool, partitioner, Schedulers.computation(), executingService);
}
Also used : MantisRxSingleThreadScheduler(io.mantisrx.runtime.scheduler.MantisRxSingleThreadScheduler) Scheduler(rx.Scheduler) ThreadFactoryBuilder(com.google.common.util.concurrent.ThreadFactoryBuilder) MantisRxSingleThreadScheduler(io.mantisrx.runtime.scheduler.MantisRxSingleThreadScheduler) VisibleForTesting(io.mantisrx.shaded.com.google.common.annotations.VisibleForTesting)

Example 2 with MantisRxSingleThreadScheduler

use of io.mantisrx.runtime.scheduler.MantisRxSingleThreadScheduler in project mantis by Netflix.

the class StageExecutors method executeMantisGroupsInParallel.

/**
 * @param go
 * @param computation
 *
 * @return untyped to support multiple callers return types
 */
@SuppressWarnings("unchecked")
private static <K, T, R> Observable<Observable<R>> executeMantisGroupsInParallel(Observable<Observable<MantisGroup<K, T>>> go, Computation computation, final Context context, final boolean applyTimeoutToInners, final long timeout, final int concurrency) {
    logger.info("initializing {}", computation.getClass().getCanonicalName());
    computation.init(context);
    // from groups to observable
    final Func2<Context, Observable<MantisGroup<K, T>>, Observable<R>> c = (Func2<Context, Observable<MantisGroup<K, T>>, Observable<R>>) computation;
    if (concurrency == StageConfig.DEFAULT_STAGE_CONCURRENCY) {
        return go.lift(new MonitorOperator<>("worker_stage_outer")).map(observable -> c.call(context, observable.observeOn(Schedulers.computation()).lift(new MonitorOperator<>("worker_stage_inner_input"))).lift(new MonitorOperator<>("worker_stage_inner_output")));
    } else {
        final MantisRxSingleThreadScheduler[] mantisRxSingleThreadSchedulers = new MantisRxSingleThreadScheduler[concurrency];
        RxThreadFactory rxThreadFactory = new RxThreadFactory("MantisRxSingleThreadScheduler-");
        logger.info("creating {} Mantis threads", concurrency);
        for (int i = 0; i < concurrency; i++) {
            mantisRxSingleThreadSchedulers[i] = new MantisRxSingleThreadScheduler(rxThreadFactory);
        }
        return go.lift(new MonitorOperator<>("worker_stage_outer")).map(observable -> observable.groupBy(e -> Math.abs(e.getKeyValue().hashCode()) % concurrency).flatMap(gbo -> c.call(context, gbo.observeOn(mantisRxSingleThreadSchedulers[gbo.getKey().intValue()]).lift(new MonitorOperator<MantisGroup<K, T>>("worker_stage_inner_input"))).lift(new MonitorOperator<R>("worker_stage_inner_output"))));
    }
}
Also used : Context(io.mantisrx.runtime.Context) Index(io.mantisrx.runtime.source.Index) StageConfig(io.mantisrx.runtime.StageConfig) MantisRxSingleThreadScheduler(io.mantisrx.runtime.scheduler.MantisRxSingleThreadScheduler) MetricsRegistry(io.mantisrx.common.metrics.MetricsRegistry) LoggerFactory(org.slf4j.LoggerFactory) Action1(rx.functions.Action1) Observable(rx.Observable) Computation(io.mantisrx.runtime.computation.Computation) ServiceRegistry(io.mantisrx.server.core.ServiceRegistry) Func1(rx.functions.Func1) Func2(rx.functions.Func2) GroupToGroup(io.mantisrx.runtime.GroupToGroup) GroupedObservableUtils(io.reactivx.mantis.operators.GroupedObservableUtils) Schedulers(rx.schedulers.Schedulers) GroupToScalar(io.mantisrx.runtime.GroupToScalar) RxMetrics(io.reactivex.mantis.remote.observable.RxMetrics) KeyToScalar(io.mantisrx.runtime.KeyToScalar) Metrics(io.mantisrx.common.metrics.Metrics) Counter(io.mantisrx.common.metrics.Counter) Groups(io.mantisrx.runtime.Groups) Logger(org.slf4j.Logger) RxThreadFactory(rx.internal.util.RxThreadFactory) ScalarToKey(io.mantisrx.runtime.ScalarToKey) SourceHolder(io.mantisrx.runtime.SourceHolder) KeyToKey(io.mantisrx.runtime.KeyToKey) Context(io.mantisrx.runtime.Context) STAGE_CONCURRENCY(io.mantisrx.runtime.parameter.ParameterUtils.STAGE_CONCURRENCY) TimeUnit(java.util.concurrent.TimeUnit) GroupedObservable(rx.observables.GroupedObservable) ScalarToScalar(io.mantisrx.runtime.ScalarToScalar) Action0(rx.functions.Action0) ScalarToGroup(io.mantisrx.runtime.ScalarToGroup) SinkHolder(io.mantisrx.runtime.SinkHolder) MantisMarker(io.mantisrx.runtime.markers.MantisMarker) MantisGroup(io.mantisrx.common.MantisGroup) MonitorOperator(io.mantisrx.common.metrics.rx.MonitorOperator) MantisRxSingleThreadScheduler(io.mantisrx.runtime.scheduler.MantisRxSingleThreadScheduler) MantisGroup(io.mantisrx.common.MantisGroup) Observable(rx.Observable) GroupedObservable(rx.observables.GroupedObservable) MonitorOperator(io.mantisrx.common.metrics.rx.MonitorOperator) RxThreadFactory(rx.internal.util.RxThreadFactory) Func2(rx.functions.Func2)

Example 3 with MantisRxSingleThreadScheduler

use of io.mantisrx.runtime.scheduler.MantisRxSingleThreadScheduler in project mantis by Netflix.

the class StageExecutors method executeInnersInParallel.

/**
 * @param oo
 * @param computation
 *
 * @return untyped to support multiple callers return types
 */
@SuppressWarnings("unchecked")
private static <T, R> Observable<Observable<R>> executeInnersInParallel(Observable<Observable<T>> oo, Computation computation, final Context context, final boolean applyTimeoutToInners, final long timeout, final int concurrency) {
    logger.info("initializing {}", computation.getClass().getCanonicalName());
    computation.init(context);
    // from groups to observable
    final Func2<Context, Observable<T>, Observable<R>> c = (Func2<Context, Observable<T>, Observable<R>>) computation;
    if (concurrency == StageConfig.DEFAULT_STAGE_CONCURRENCY) {
        return oo.lift(new MonitorOperator<>("worker_stage_outer")).map(observable -> c.call(context, observable.observeOn(Schedulers.computation()).lift(new MonitorOperator<T>("worker_stage_inner_input"))).lift(new MonitorOperator<R>("worker_stage_inner_output")));
    } else {
        final MantisRxSingleThreadScheduler[] mantisRxSingleThreadSchedulers = new MantisRxSingleThreadScheduler[concurrency];
        RxThreadFactory rxThreadFactory = new RxThreadFactory("MantisRxSingleThreadScheduler-");
        logger.info("creating {} Mantis threads", concurrency);
        for (int i = 0; i < concurrency; i++) {
            mantisRxSingleThreadSchedulers[i] = new MantisRxSingleThreadScheduler(rxThreadFactory);
        }
        return oo.lift(new MonitorOperator<>("worker_stage_outer")).map(observable -> observable.groupBy(e -> System.nanoTime() % concurrency).flatMap(go -> c.call(context, go.observeOn(mantisRxSingleThreadSchedulers[go.getKey().intValue()]).lift(new MonitorOperator<>("worker_stage_inner_input"))).lift(new MonitorOperator<>("worker_stage_inner_output"))));
    }
}
Also used : Context(io.mantisrx.runtime.Context) Index(io.mantisrx.runtime.source.Index) StageConfig(io.mantisrx.runtime.StageConfig) MantisRxSingleThreadScheduler(io.mantisrx.runtime.scheduler.MantisRxSingleThreadScheduler) MetricsRegistry(io.mantisrx.common.metrics.MetricsRegistry) LoggerFactory(org.slf4j.LoggerFactory) Action1(rx.functions.Action1) Observable(rx.Observable) Computation(io.mantisrx.runtime.computation.Computation) ServiceRegistry(io.mantisrx.server.core.ServiceRegistry) Func1(rx.functions.Func1) Func2(rx.functions.Func2) GroupToGroup(io.mantisrx.runtime.GroupToGroup) GroupedObservableUtils(io.reactivx.mantis.operators.GroupedObservableUtils) Schedulers(rx.schedulers.Schedulers) GroupToScalar(io.mantisrx.runtime.GroupToScalar) RxMetrics(io.reactivex.mantis.remote.observable.RxMetrics) KeyToScalar(io.mantisrx.runtime.KeyToScalar) Metrics(io.mantisrx.common.metrics.Metrics) Counter(io.mantisrx.common.metrics.Counter) Groups(io.mantisrx.runtime.Groups) Logger(org.slf4j.Logger) RxThreadFactory(rx.internal.util.RxThreadFactory) ScalarToKey(io.mantisrx.runtime.ScalarToKey) SourceHolder(io.mantisrx.runtime.SourceHolder) KeyToKey(io.mantisrx.runtime.KeyToKey) Context(io.mantisrx.runtime.Context) STAGE_CONCURRENCY(io.mantisrx.runtime.parameter.ParameterUtils.STAGE_CONCURRENCY) TimeUnit(java.util.concurrent.TimeUnit) GroupedObservable(rx.observables.GroupedObservable) ScalarToScalar(io.mantisrx.runtime.ScalarToScalar) Action0(rx.functions.Action0) ScalarToGroup(io.mantisrx.runtime.ScalarToGroup) SinkHolder(io.mantisrx.runtime.SinkHolder) MantisMarker(io.mantisrx.runtime.markers.MantisMarker) MantisGroup(io.mantisrx.common.MantisGroup) MonitorOperator(io.mantisrx.common.metrics.rx.MonitorOperator) MantisRxSingleThreadScheduler(io.mantisrx.runtime.scheduler.MantisRxSingleThreadScheduler) Observable(rx.Observable) GroupedObservable(rx.observables.GroupedObservable) MonitorOperator(io.mantisrx.common.metrics.rx.MonitorOperator) RxThreadFactory(rx.internal.util.RxThreadFactory) Func2(rx.functions.Func2)

Aggregations

MantisRxSingleThreadScheduler (io.mantisrx.runtime.scheduler.MantisRxSingleThreadScheduler)3 MantisGroup (io.mantisrx.common.MantisGroup)2 Counter (io.mantisrx.common.metrics.Counter)2 Metrics (io.mantisrx.common.metrics.Metrics)2 MetricsRegistry (io.mantisrx.common.metrics.MetricsRegistry)2 MonitorOperator (io.mantisrx.common.metrics.rx.MonitorOperator)2 Context (io.mantisrx.runtime.Context)2 GroupToGroup (io.mantisrx.runtime.GroupToGroup)2 GroupToScalar (io.mantisrx.runtime.GroupToScalar)2 Groups (io.mantisrx.runtime.Groups)2 KeyToKey (io.mantisrx.runtime.KeyToKey)2 KeyToScalar (io.mantisrx.runtime.KeyToScalar)2 ScalarToGroup (io.mantisrx.runtime.ScalarToGroup)2 ScalarToKey (io.mantisrx.runtime.ScalarToKey)2 ScalarToScalar (io.mantisrx.runtime.ScalarToScalar)2 SinkHolder (io.mantisrx.runtime.SinkHolder)2 SourceHolder (io.mantisrx.runtime.SourceHolder)2 StageConfig (io.mantisrx.runtime.StageConfig)2 Computation (io.mantisrx.runtime.computation.Computation)2 MantisMarker (io.mantisrx.runtime.markers.MantisMarker)2