module Control.Distributed.Task.TaskSpawning.RemoteExecutionSupport (
withRemoteExecutionSupport,
withFullBinaryRemoteExecutionSupport,
withSerializedThunkRemoteExecutionSupport
) where
import qualified System.Log.Logger as L
import System.Environment (getArgs, getExecutablePath)
import Control.Distributed.Task.TaskSpawning.DeployFullBinary (unpackIOHandling)
import Control.Distributed.Task.TaskSpawning.TaskSpawning (executeFullBinaryArg, executionWithinSlaveProcessForFullBinaryDeployment, executeSerializedThunkArg, executionWithinSlaveProcessForThunkSerialization)
import Control.Distributed.Task.Types.TaskTypes
import Control.Distributed.Task.Util.Configuration
import Control.Distributed.Task.Util.Logging
withRemoteExecutionSupport :: (TaskInput -> TaskResult) -> IO () -> IO ()
withRemoteExecutionSupport fn = withSerializedThunkRemoteExecutionSupport . withFullBinaryRemoteExecutionSupport fn
withFullBinaryRemoteExecutionSupport :: (TaskInput -> TaskResult) -> IO () -> IO ()
withFullBinaryRemoteExecutionSupport fn mainAction = do
args <- getArgs
case args of
[mode, ioHandling] ->
if mode == executeFullBinaryArg
then
initTaskLogging >>
executionWithinSlaveProcessForFullBinaryDeployment (unpackIOHandling ioHandling) fn
else mainAction
_ -> mainAction
withSerializedThunkRemoteExecutionSupport :: IO () -> IO ()
withSerializedThunkRemoteExecutionSupport mainAction = do
args <- getArgs
case args of
[mode, taskFn, ioHandling] ->
if mode == executeSerializedThunkArg
then
initTaskLogging >>
executionWithinSlaveProcessForThunkSerialization (unpackIOHandling ioHandling) taskFn
else mainAction
_ -> mainAction
initTaskLogging :: IO ()
initTaskLogging = do
conf <- getConfiguration
initLogging L.ERROR L.INFO (_taskLogFile conf)
self <- getExecutablePath
logInfo $ "started task execution for: "++self