def frameworkMessage (self, driver, executorId, slaveId, message):

        self.messagesReceived += 1
        logging.info("Mesos Scheduler: slave %s executor %s", slaveId.value, executorId.value)
        logging.info("message %d received: %s", self.messagesReceived, str(message))

        if self.messagesReceived == self._n_workers:
            if self.messagesReceived != self.messagesSent:
                logging.critical("Mesos Scheduler: framework messages lost! sent %d received %d", self.messagesSent, self.messagesReceived)
                sys.exit(1)

            for exe in self._executors.values():
                logging.debug(exe.report())

            logging.info("all worker services launched and init tasks completed")
            exe_info = self._executors.values()
            worker_list = [ exe.get_shard_uri() for exe in exe_info ]

            # run UnitOfWork orchestration via REST endpoints on the workers
            fra = Framework(self._uow_name, self._prefix)
            fra.set_worker_list(worker_list, exe_info)

            time.sleep(1)
            fra.orchestrate_uow()

            # shutdown the Executors after the end of an algorithm run
            driver.stop()
Invoked when an executor sends a message. These messages are
dataset/ETHPy150Open ceteri/exelixi/src/resource.py/MesosScheduler.frameworkMessage