Example #1
0
  /** De-register our {@link MesosLocation} and its children. */
  @Override
  public void stop() {
    disconnectSensors();

    sensors().set(SERVICE_UP, Boolean.FALSE);

    deleteLocation();

    Duration timeout = config().get(SHUTDOWN_TIMEOUT);

    // Find all applications and stop, blocking for up to five minutes until ended
    try {
      Iterable<Entity> entities =
          Iterables.filter(
              getManagementContext().getEntityManager().getEntities(),
              Predicates.and(
                  MesosUtils.sameCluster(this),
                  Predicates.not(EntityPredicates.applicationIdEqualTo(getApplicationId()))));
      Set<Application> applications =
          ImmutableSet.copyOf(
              Iterables.transform(
                  entities,
                  new Function<Entity, Application>() {
                    @Override
                    public Application apply(Entity input) {
                      return input.getApplication();
                    }
                  }));
      LOG.debug("Stopping applications: {}", Iterables.toString(applications));
      Entities.invokeEffectorList(this, applications, Startable.STOP).get(timeout);
    } catch (Exception e) {
      LOG.warn("Error stopping applications", e);
    }

    // Stop all framework tasks in parallel
    try {
      Group frameworks = sensors().get(MESOS_FRAMEWORKS);
      LOG.debug("Stopping framework tasks in: {}", Iterables.toString(frameworks.getMembers()));
      Entities.invokeEffectorList(this, frameworks.getMembers(), Startable.STOP).get(timeout);
    } catch (Exception e) {
      LOG.warn("Error stopping frameworks", e);
    }

    // Stop anything else left over
    // TODO Stop slave entities
    try {
      super.stop();
    } catch (Exception e) {
      LOG.warn("Error stopping children", e);
    }
  }
Example #2
0
  @Override
  public void doStart(Collection<? extends Location> locs) {
    List<Location> locations = MutableList.of();

    sensors().set(SERVICE_UP, Boolean.FALSE);
    ServiceStateLogic.setExpectedState(this, Lifecycle.STARTING);

    LOG.info("Creating new MesosLocation");
    createLocation(MutableMap.<String, Object>of());

    // Start frameworks
    try {
      Group frameworks = sensors().get(MESOS_FRAMEWORKS);
      Entities.invokeEffectorList(
              this,
              frameworks.getMembers(),
              Startable.START,
              ImmutableMap.of("locations", locations))
          .getUnchecked();
    } catch (Exception e) {
      LOG.warn("Error starting frameworks", e);
      ServiceStateLogic.setExpectedState(this, Lifecycle.ON_FIRE);
      Exceptions.propagate(e);
    }

    super.doStart(locations);

    connectSensors();

    ServiceStateLogic.setExpectedState(this, Lifecycle.RUNNING);
    sensors().set(SERVICE_UP, Boolean.TRUE);
  }