blob: 8929d37fb5b07b3d50aee74c44cccf8c2eba5659 [file] [log] [blame]
"""This 'testing' executor is built to be run in the vagrant VM.
It is basically the same as the normal Mysos executor except that it doesn't rely on HDFS.
"""
import os
import stat
from mysos.common.pkgutil import unpack_assets
from mysos.executor.mysql_task_control import MySQLTaskControlProvider
from mysos.executor.executor import MysosExecutor
from mysos.executor.mysos_task_runner import MysosTaskRunnerProvider
from mysos.executor.noop_installer import NoopPackageInstallerProvider
from mysos.executor.sandbox import Sandbox
from mysos.executor.backup import NoopBackupStoreProvider
from twitter.common import app, log
from twitter.common.log.options import LogOptions
import mesos.native
MYSOS_MODULE = 'mysos.executor'
ASSET_RELPATH = 'files'
def chmod_scripts(path):
"""Make scripts executable."""
if path.endswith('.sh'):
st = os.stat(path)
os.chmod(path, st.st_mode | stat.S_IEXEC)
LogOptions.disable_disk_logging()
LogOptions.set_stderr_log_level('google:INFO')
def proxy_main():
def main(args, options):
# 'sandbox' directory resides under the working directory assigned by the Mesos slave.
sandbox_root = os.path.join(os.path.realpath('.'), "sandbox")
unpack_assets(sandbox_root, MYSOS_MODULE, ASSET_RELPATH, execute=chmod_scripts)
log.info("Starting Vagrant Mysos executor within sandbox %s" % sandbox_root)
sandbox = Sandbox(sandbox_root)
executor = MysosExecutor(
MysosTaskRunnerProvider(
MySQLTaskControlProvider(),
NoopPackageInstallerProvider(), # Do not install any package.
NoopBackupStoreProvider()), # Do not recover any state.
sandbox)
driver = mesos.native.MesosExecutorDriver(executor)
driver.run()
log.info('Exiting executor main')
app.main()