Package org.apache.flink.runtime.iterative.concurrent

Examples of org.apache.flink.runtime.iterative.concurrent.SuperstepBarrier


  private void sync(AbstractTaskEvent event) throws InterruptedException {

    TerminationSignaled terminationSignaled = new TerminationSignaled();

    SuperstepBarrier barrier = new SuperstepBarrier(getClass().getClassLoader());
    barrier.setup();

    Thread headThread = new Thread(new IterationHead(barrier, terminationSignaled));
    Thread syncThread = new Thread(new IterationSync(barrier, event));

    headThread.start();
View Full Code Here


      solutionSet.insertOrReplace(next);
    }
  }

  private SuperstepBarrier initSuperstepBarrier() {
    SuperstepBarrier barrier = new SuperstepBarrier(getUserCodeClassLoader());
    this.toSync.subscribeToEvent(barrier, AllWorkersDoneEvent.class);
    this.toSync.subscribeToEvent(barrier, TerminationEvent.class);
    return barrier;
  }
View Full Code Here

      /* used for receiving the current iteration result from iteration tail */
      SuperstepKickoffLatch nextStepKickoff = new SuperstepKickoffLatch();
      SuperstepKickoffLatchBroker.instance().handIn(brokerKey, nextStepKickoff);
     
      BlockingBackChannel backChannel = initBackChannel();
      SuperstepBarrier barrier = initSuperstepBarrier();
      SolutionSetUpdateBarrier solutionSetUpdateBarrier = null;

      feedbackDataInput = config.getIterationHeadPartialSolutionOrWorksetInputIndex();
      feedbackTypeSerializer = this.<Y>getInputSerializer(feedbackDataInput);
      excludeFromReset(feedbackDataInput);

      if (isWorksetIteration) {
        initialSolutionSetInput = config.getIterationHeadSolutionSetInputIndex();
        TypeSerializerFactory<X> solutionTypeSerializerFactory = config
            .getSolutionSetSerializer(getUserCodeClassLoader());
        solutionTypeSerializer = solutionTypeSerializerFactory;

        // setup the index for the solution set
        @SuppressWarnings("unchecked")
        MutableObjectIterator<X> solutionSetInput = (MutableObjectIterator<X>) createInputIterator(inputReaders[initialSolutionSetInput], solutionTypeSerializer);
       
        // read the initial solution set
        if (objectSolutionSet) {
          solutionSetObjectMap = initJoinHashMap();
          readInitialSolutionSet(solutionSetObjectMap, solutionSetInput);
          SolutionSetBroker.instance().handIn(brokerKey, solutionSetObjectMap);
        } else {
          solutionSet = initCompactingHashTable();
          readInitialSolutionSet(solutionSet, solutionSetInput);
          SolutionSetBroker.instance().handIn(brokerKey, solutionSet);
        }

        if (waitForSolutionSetUpdate) {
          solutionSetUpdateBarrier = new SolutionSetUpdateBarrier();
          SolutionSetUpdateBarrierBroker.instance().handIn(brokerKey, solutionSetUpdateBarrier);
        }
      } else {
        // bulk iteration case
        initialSolutionSetInput = -1;

        @SuppressWarnings("unchecked")
        TypeSerializerFactory<X> solSer = (TypeSerializerFactory<X>) feedbackTypeSerializer;
        solutionTypeSerializer = solSer;
       
        // = termination Criterion tail
        if (waitForSolutionSetUpdate) {
          solutionSetUpdateBarrier = new SolutionSetUpdateBarrier();
          SolutionSetUpdateBarrierBroker.instance().handIn(brokerKey, solutionSetUpdateBarrier);
        }
      }

      // instantiate all aggregators and register them at the iteration global registry
      aggregatorRegistry = new RuntimeAggregatorRegistry(config.getIterationAggregators
          (getUserCodeClassLoader()));
      IterationAggregatorBroker.instance().handIn(brokerKey, aggregatorRegistry);

      DataInputView superstepResult = null;

      while (this.running && !terminationRequested()) {

        if (log.isInfoEnabled()) {
          log.info(formatLogString("starting iteration [" + currentIteration() + "]"));
        }

        barrier.setup();

        if (waitForSolutionSetUpdate) {
          solutionSetUpdateBarrier.setup();
        }

        if (!inFirstIteration()) {
          feedBackSuperstepResult(superstepResult);
        }

        super.run();

        // signal to connected tasks that we are done with the superstep
        sendEndOfSuperstepToAllIterationOutputs();

        if (waitForSolutionSetUpdate) {
          solutionSetUpdateBarrier.waitForSolutionSetUpdate();
        }

        // blocking call to wait for the result
        superstepResult = backChannel.getReadEndAfterSuperstepEnded();
        if (log.isInfoEnabled()) {
          log.info(formatLogString("finishing iteration [" + currentIteration() + "]"));
        }

        sendEventToSync(new WorkerDoneEvent(workerIndex, aggregatorRegistry.getAllAggregators()));

        if (log.isInfoEnabled()) {
          log.info(formatLogString("waiting for other workers in iteration [" + currentIteration() + "]"));
        }

        barrier.waitForOtherWorkers();

        if (barrier.terminationSignaled()) {
          if (log.isInfoEnabled()) {
            log.info(formatLogString("head received termination request in iteration ["
              + currentIteration()
              + "]"));
          }
          requestTermination();
          nextStepKickoff.signalTermination();
        } else {
          incrementIterationCounter();

          String[] globalAggregateNames = barrier.getAggregatorNames();
          Value[] globalAggregates = barrier.getAggregates();
          aggregatorRegistry.updateGlobalAggregatesAndReset(globalAggregateNames, globalAggregates);
         
          nextStepKickoff.triggerNextSuperstep();
        }
      }
View Full Code Here

TOP

Related Classes of org.apache.flink.runtime.iterative.concurrent.SuperstepBarrier

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.