def main(): global shutdown global accept_offers global driver cfg = get_configuration() # Configure logging setup_logging(cfg) framework = mesos_framework(cfg) #credentials = mesos_credentials(cfg) mesos_scheduler = OurJobScheduler(cfg) #driver = MesosSchedulerDriver(mesos_scheduler, framework, # cfg.mesos.master, cfg.mesos.imp_ack, # credentials) driver = MesosSchedulerDriver(mesos_scheduler, framework, cfg.mesos.master, cfg.mesos.imp_ack) shutdown = Shutdown() accept_offers = AcceptOffers() # driver.run() blocks, so run it in a separate thread. def run_driver_async(): status = 0 if driver.run() == MesosPb2.DRIVER_STOPPED else 1 if cfg.debug > 0: logger.debug('Stopping Driver') driver.stop() logger.info('Terminating Framework') sys.exit(status) framework_thread = Thread(target=run_driver_async, args=()) framework_thread.start() logger.info('Beginning Processing') while framework_thread.is_alive(): # If a shutdown has been requested, suppress offers and wait for the # framework thread to complete. if shutdown.flag: if cfg.debug > 0: logger.debug('Suppressing Offers') driver.suppressOffers() while framework_thread.is_alive(): logger.debug('Child Thread Still Alive') sleep(5) break # If the max number of jobs are already running, suppress offers and # wait for some jobs to finish. if (mesos_scheduler.tasks_launched == cfg.mesos.max_jobs): driver.suppressOffers() if cfg.debug > 0: logger.debug('Suppressing Offers') # Sleep until we have room for more tasks while (not shutdown.flag and mesos_scheduler.tasks_launched == cfg.mesos.max_jobs): if cfg.debug > 0: logger.debug('Waiting for more available tasks') sleep(5) # Sleep until more processing is requested while not shutdown.flag and not mesos_scheduler.have_work(): if cfg.debug > 0: logger.debug('Waiting for more work') sleep(5) if not shutdown.flag: if cfg.debug > 0: logger.debug('Reviving Offers') driver.reviveOffers() # If there's no new work to be done, suppress offers until we have # more work if not shutdown.flag and not mesos_scheduler.have_work(): driver.suppressOffers() # Sleep until more processing is requested while not shutdown.flag and not mesos_scheduler.have_work(): if cfg.debug > 0: logger.debug('Waiting for more work') sleep(5) if not shutdown.flag: if cfg.debug > 0: logger.debug('Reviving Offers') driver.reviveOffers() # Sleep for a second, so that we are not flying through the loop sleep(1) logger.info('Terminated Processing')