Search in sources :

Example 1 with PortSelectorWithinRange

use of io.reactivex.mantis.remote.observable.PortSelectorWithinRange in project mantis by Netflix.

the class StageExecutorsGroupByTest method testExecuteSource.

@SuppressWarnings({ "rawtypes", "unchecked" })
@Test
public void testExecuteSource() {
    TestGroupByJob provider = new TestGroupByJob();
    Job<Pair> job = provider.getJobInstance();
    List<StageConfig<?, ?>> stages = job.getStages();
    PortSelectorWithinRange portSelector = new PortSelectorWithinRange(8000, 9000);
    int serverPort = portSelector.acquirePort();
    WorkerPublisher producer = new WorkerPublisherRemoteObservable(serverPort, null, Observable.just(1), null);
    // execute source
    BehaviorSubject<Integer> workersInStageOneObservable = BehaviorSubject.create(1);
    StageExecutors.executeSource(0, job.getSource(), stages.get(0), producer, new Context(), workersInStageOneObservable);
    ConnectToGroupedObservable<String, Integer> config = new ConnectToGroupedObservable.Builder<String, Integer>().slotId("0").host("localhost").port(serverPort).keyDecoder(Codecs.string()).valueDecoder(Codecs.integer()).build();
    Iterator<GroupedObservable<String, Integer>> iter = RemoteObservable.connect(config).getObservable().toBlocking().getIterator();
    Assert.assertTrue(iter.hasNext());
    // verify numbers are grouped by even/odd
    // even is first due to zero
    GroupedObservable<String, Integer> even = iter.next();
    Assert.assertEquals("even", even.getKey());
    Iterator<Integer> evenIter = even.toBlocking().getIterator();
    Assert.assertEquals(0, evenIter.next().intValue());
    Assert.assertEquals(2, evenIter.next().intValue());
    Assert.assertEquals(4, evenIter.next().intValue());
    Assert.assertEquals(6, evenIter.next().intValue());
    GroupedObservable<String, Integer> odd = iter.next();
    Assert.assertEquals("odd", odd.getKey());
    Iterator<Integer> oddIter = odd.toBlocking().getIterator();
    Assert.assertEquals(1, oddIter.next().intValue());
    Assert.assertEquals(3, oddIter.next().intValue());
    Assert.assertEquals(5, oddIter.next().intValue());
    Assert.assertEquals(7, oddIter.next().intValue());
    // should only have two groups
    Assert.assertEquals(false, iter.hasNext());
}
Also used : Context(io.mantisrx.runtime.Context) PortSelectorWithinRange(io.reactivex.mantis.remote.observable.PortSelectorWithinRange) StageConfig(io.mantisrx.runtime.StageConfig) Endpoint(io.mantisrx.common.network.Endpoint) ConnectToGroupedObservable(io.reactivex.mantis.remote.observable.ConnectToGroupedObservable) ServeGroupedObservable(io.reactivex.mantis.remote.observable.ServeGroupedObservable) GroupedObservable(rx.observables.GroupedObservable) Test(org.junit.Test)

Example 2 with PortSelectorWithinRange

use of io.reactivex.mantis.remote.observable.PortSelectorWithinRange in project mantis by Netflix.

the class StageExecutorsGroupByTest method testExecuteIntermediatStage.

@SuppressWarnings({ "rawtypes", "unchecked" })
@Test
public void testExecuteIntermediatStage() throws InterruptedException {
    // Note, this test has a timing issue, client starts
    // sending data before server is ready, resulting
    // in a RST (connection reset by peer)
    TestGroupByJob provider = new TestGroupByJob();
    Job<Pair> job = provider.getJobInstance();
    List<StageConfig<?, ?>> stages = job.getStages();
    PortSelectorWithinRange portSelector = new PortSelectorWithinRange(8000, 9000);
    final int publishPort = portSelector.acquirePort();
    final int consumerPort = portSelector.acquirePort();
    Observable<Observable<GroupedObservable<String, Integer>>> go = Observable.just(Observable.range(0, 10).groupBy(new Func1<Integer, String>() {

        @Override
        public String call(Integer t1) {
            if ((t1 % 2) == 0) {
                return "even";
            } else {
                return "odd";
            }
        }
    }));
    // mimic previous stage with a server
    ServeGroupedObservable<String, Integer> config = new ServeGroupedObservable.Builder<String, Integer>().keyEncoder(Codecs.string()).valueEncoder(Codecs.integer()).observable(go).build();
    RemoteRxServer server = new RemoteRxServer.Builder().addObservable(config).port(consumerPort).build();
    server.start();
    EndpointInjector staticEndpoints = new EndpointInjector() {

        @Override
        public Observable<EndpointChange> deltas() {
            return Observable.create(new OnSubscribe<EndpointChange>() {

                @Override
                public void call(Subscriber<? super EndpointChange> subscriber) {
                    subscriber.onNext(new EndpointChange(EndpointChange.Type.add, new Endpoint("localhost", consumerPort, "0")));
                    subscriber.onNext(new EndpointChange(EndpointChange.Type.add, new Endpoint("localhost", consumerPort, "1")));
                    subscriber.onCompleted();
                }
            });
        }
    };
    WorkerConsumer consumer = new WorkerConsumerRemoteObservable(null, staticEndpoints);
    WorkerPublisher producer = new WorkerPublisherRemoteObservable(publishPort, null, Observable.just(1), null);
    // execute source
    StageExecutors.executeIntermediate(consumer, stages.get(1), producer, new Context());
    ConnectToGroupedObservable<String, Integer> connectConfig = new ConnectToGroupedObservable.Builder<String, Integer>().host("localhost").port(publishPort).keyDecoder(Codecs.string()).valueDecoder(Codecs.integer()).build();
    Iterator<GroupedObservable<String, Integer>> iter = RemoteObservable.connect(connectConfig).getObservable().toBlocking().getIterator();
    // verify numbers are grouped by even/odd
    // even is first due to zero
    GroupedObservable<String, Integer> even = iter.next();
    Assert.assertEquals("even", even.getKey());
    Iterator<Integer> evenIter = even.toBlocking().getIterator();
    Assert.assertEquals(0, evenIter.next().intValue());
    Assert.assertEquals(4, evenIter.next().intValue());
    Assert.assertEquals(16, evenIter.next().intValue());
    Assert.assertEquals(36, evenIter.next().intValue());
    GroupedObservable<String, Integer> odd = iter.next();
    Assert.assertEquals("odd", odd.getKey());
    Iterator<Integer> oddIter = odd.toBlocking().getIterator();
    Assert.assertEquals(1, oddIter.next().intValue());
    Assert.assertEquals(9, oddIter.next().intValue());
    Assert.assertEquals(25, oddIter.next().intValue());
    Assert.assertEquals(49, oddIter.next().intValue());
    // should only have two groups
    Assert.assertEquals(false, iter.hasNext());
}
Also used : EndpointChange(io.reactivex.mantis.remote.observable.EndpointChange) PortSelectorWithinRange(io.reactivex.mantis.remote.observable.PortSelectorWithinRange) ConnectToGroupedObservable(io.reactivex.mantis.remote.observable.ConnectToGroupedObservable) Endpoint(io.mantisrx.common.network.Endpoint) Func1(rx.functions.Func1) Context(io.mantisrx.runtime.Context) RemoteRxServer(io.reactivex.mantis.remote.observable.RemoteRxServer) StageConfig(io.mantisrx.runtime.StageConfig) Endpoint(io.mantisrx.common.network.Endpoint) ConnectToGroupedObservable(io.reactivex.mantis.remote.observable.ConnectToGroupedObservable) ServeGroupedObservable(io.reactivex.mantis.remote.observable.ServeGroupedObservable) RemoteObservable(io.reactivex.mantis.remote.observable.RemoteObservable) Observable(rx.Observable) GroupedObservable(rx.observables.GroupedObservable) EndpointInjector(io.reactivex.mantis.remote.observable.EndpointInjector) ConnectToGroupedObservable(io.reactivex.mantis.remote.observable.ConnectToGroupedObservable) ServeGroupedObservable(io.reactivex.mantis.remote.observable.ServeGroupedObservable) GroupedObservable(rx.observables.GroupedObservable) Test(org.junit.Test)

Example 3 with PortSelectorWithinRange

use of io.reactivex.mantis.remote.observable.PortSelectorWithinRange in project mantis by Netflix.

the class StageExecutorsTest method testExecuteIntermediatStage.

@SuppressWarnings({ "rawtypes", "unchecked" })
@Test
public void testExecuteIntermediatStage() throws InterruptedException {
    TestJob provider = new TestJob();
    Job<Integer> job = provider.getJobInstance();
    List<StageConfig<?, ?>> stages = job.getStages();
    PortSelectorWithinRange portSelector = new PortSelectorWithinRange(8000, 9000);
    final int publishPort = portSelector.acquirePort();
    final int consumerPort = portSelector.acquirePort();
    // mimic previous stage with a server
    RemoteRxServer server1 = RemoteObservable.serve(consumerPort, Observable.range(0, 10), Codecs.integer());
    server1.start();
    EndpointInjector staticEndpoints = new EndpointInjector() {

        @Override
        public Observable<EndpointChange> deltas() {
            return Observable.create(new OnSubscribe<EndpointChange>() {

                @Override
                public void call(Subscriber<? super EndpointChange> subscriber) {
                    subscriber.onNext(new EndpointChange(EndpointChange.Type.add, new Endpoint("localhost", consumerPort, "1")));
                    subscriber.onCompleted();
                }
            });
        }
    };
    WorkerConsumer consumer = new WorkerConsumerRemoteObservable(null, staticEndpoints);
    WorkerPublisher producer = new WorkerPublisherRemoteObservable(publishPort, null, Observable.just(1), null);
    // execute intermediate, flatten results
    StageExecutors.executeIntermediate(consumer, stages.get(1), producer, new Context());
    Iterator<Integer> iter = RemoteObservable.connect(new ConnectToObservable.Builder<Integer>().host("localhost").slotId("0").port(publishPort).decoder(Codecs.integer()).build()).getObservable().toBlocking().getIterator();
    // verify numbers are even
    Assert.assertEquals(0, iter.next().intValue());
    Assert.assertEquals(2, iter.next().intValue());
    Assert.assertEquals(4, iter.next().intValue());
}
Also used : Context(io.mantisrx.runtime.Context) EndpointChange(io.reactivex.mantis.remote.observable.EndpointChange) PortSelectorWithinRange(io.reactivex.mantis.remote.observable.PortSelectorWithinRange) RemoteRxServer(io.reactivex.mantis.remote.observable.RemoteRxServer) StageConfig(io.mantisrx.runtime.StageConfig) Endpoint(io.mantisrx.common.network.Endpoint) ConnectToObservable(io.reactivex.mantis.remote.observable.ConnectToObservable) Endpoint(io.mantisrx.common.network.Endpoint) EndpointInjector(io.reactivex.mantis.remote.observable.EndpointInjector) Test(org.junit.Test)

Example 4 with PortSelectorWithinRange

use of io.reactivex.mantis.remote.observable.PortSelectorWithinRange in project mantis by Netflix.

the class StageExecutorsTest method testExecuteSink.

@SuppressWarnings({ "rawtypes", "unchecked" })
@Test
public void testExecuteSink() throws InterruptedException {
    TestJob provider = new TestJob();
    Job<Integer> job = provider.getJobInstance();
    List<StageConfig<?, ?>> stages = job.getStages();
    PortSelectorWithinRange portSelector = new PortSelectorWithinRange(8000, 9000);
    final int consumerPort = portSelector.acquirePort();
    // mimic previous stage with a server
    RemoteRxServer server1 = RemoteObservable.serve(consumerPort, Observable.range(0, 10), Codecs.integer());
    server1.start();
    EndpointInjector staticEndpoints = new EndpointInjector() {

        @Override
        public Observable<EndpointChange> deltas() {
            return Observable.create(new OnSubscribe<EndpointChange>() {

                @Override
                public void call(Subscriber<? super EndpointChange> subscriber) {
                    subscriber.onNext(new EndpointChange(EndpointChange.Type.add, new Endpoint("localhost", consumerPort, "1")));
                    subscriber.onCompleted();
                }
            });
        }
    };
    Action0 noOpAction = new Action0() {

        @Override
        public void call() {
        }
    };
    Action1<Throwable> noOpError = new Action1<Throwable>() {

        @Override
        public void call(Throwable t) {
        }
    };
    WorkerConsumer consumer = new WorkerConsumerRemoteObservable(null, staticEndpoints);
    // execute source
    StageExecutors.executeSink(consumer, stages.get(1), job.getSink(), new TestPortSelector(), new RxMetrics(), new Context(), noOpAction, null, null, noOpAction, noOpError);
    Iterator<Integer> iter = provider.getItemsWritten().iterator();
    // verify numbers are even
    Assert.assertEquals(0, iter.next().intValue());
    Assert.assertEquals(2, iter.next().intValue());
    Assert.assertEquals(4, iter.next().intValue());
}
Also used : Context(io.mantisrx.runtime.Context) Action0(rx.functions.Action0) Action1(rx.functions.Action1) EndpointChange(io.reactivex.mantis.remote.observable.EndpointChange) PortSelectorWithinRange(io.reactivex.mantis.remote.observable.PortSelectorWithinRange) RemoteRxServer(io.reactivex.mantis.remote.observable.RemoteRxServer) StageConfig(io.mantisrx.runtime.StageConfig) Endpoint(io.mantisrx.common.network.Endpoint) Endpoint(io.mantisrx.common.network.Endpoint) RxMetrics(io.reactivex.mantis.remote.observable.RxMetrics) EndpointInjector(io.reactivex.mantis.remote.observable.EndpointInjector) Test(org.junit.Test)

Example 5 with PortSelectorWithinRange

use of io.reactivex.mantis.remote.observable.PortSelectorWithinRange in project mantis by Netflix.

the class StageExecutorsTest method testExecuteSource.

@SuppressWarnings({ "rawtypes", "unchecked" })
@Test
public void testExecuteSource() {
    TestJob provider = new TestJob();
    Job<Integer> job = provider.getJobInstance();
    List<StageConfig<?, ?>> stages = job.getStages();
    PortSelectorWithinRange portSelector = new PortSelectorWithinRange(8000, 9000);
    int serverPort = portSelector.acquirePort();
    WorkerPublisher producer = new WorkerPublisherRemoteObservable(serverPort, null, Observable.just(1), null);
    // execute source
    BehaviorSubject<Integer> workersInStageOneObservable = BehaviorSubject.create(1);
    StageExecutors.executeSource(0, job.getSource(), stages.get(0), producer, new Context(), workersInStageOneObservable);
    Iterator<Integer> iter = RemoteObservable.connect(new ConnectToObservable.Builder<Integer>().host("localhost").slotId("0").port(serverPort).decoder(Codecs.integer()).build()).getObservable().toBlocking().getIterator();
    // verify numbers are doubled
    Assert.assertEquals(0, iter.next().intValue());
    Assert.assertEquals(1, iter.next().intValue());
    Assert.assertEquals(4, iter.next().intValue());
    Assert.assertEquals(9, iter.next().intValue());
}
Also used : Context(io.mantisrx.runtime.Context) PortSelectorWithinRange(io.reactivex.mantis.remote.observable.PortSelectorWithinRange) StageConfig(io.mantisrx.runtime.StageConfig) Endpoint(io.mantisrx.common.network.Endpoint) ConnectToObservable(io.reactivex.mantis.remote.observable.ConnectToObservable) Test(org.junit.Test)

Aggregations

Endpoint (io.mantisrx.common.network.Endpoint)5 Context (io.mantisrx.runtime.Context)5 StageConfig (io.mantisrx.runtime.StageConfig)5 PortSelectorWithinRange (io.reactivex.mantis.remote.observable.PortSelectorWithinRange)5 Test (org.junit.Test)5 EndpointChange (io.reactivex.mantis.remote.observable.EndpointChange)3 EndpointInjector (io.reactivex.mantis.remote.observable.EndpointInjector)3 RemoteRxServer (io.reactivex.mantis.remote.observable.RemoteRxServer)3 ConnectToGroupedObservable (io.reactivex.mantis.remote.observable.ConnectToGroupedObservable)2 ConnectToObservable (io.reactivex.mantis.remote.observable.ConnectToObservable)2 ServeGroupedObservable (io.reactivex.mantis.remote.observable.ServeGroupedObservable)2 GroupedObservable (rx.observables.GroupedObservable)2 RemoteObservable (io.reactivex.mantis.remote.observable.RemoteObservable)1 RxMetrics (io.reactivex.mantis.remote.observable.RxMetrics)1 Observable (rx.Observable)1 Action0 (rx.functions.Action0)1 Action1 (rx.functions.Action1)1 Func1 (rx.functions.Func1)1