Holumbus-MapReduce-0.1.0: Programs/MapReduceMasterDaemon/MasterDaemon.hs
-- ----------------------------------------------------------------------------
{- |
Module : MasterDaemon
Copyright : Copyright (C) 2009 Sebastian Reese
License : MIT
Maintainer : Sebastian Reese (str@holumbus.org)
Stability : experimental
Portability: portable
Version : 0.1
Daemonized Version of MASter with a tcp console
-}
-- ----------------------------------------------------------------------------
module Main(main) where
import Holumbus.Common.Logging
import Holumbus.Common.Utils ( handleAll )
import Holumbus.Network.PortRegistry.PortRegistryPort
import qualified Holumbus.FileSystem.FileSystem as FS
import qualified Holumbus.Distribution.DMapReduce as MR
import Holumbus.Distribution.Master.MasterState
import qualified Holumbus.MapReduce.DaemonInterfaceWithFS as UI
import System.Environment
import System.Log.Logger
import System.Exit
version :: String
version = "Daemon-Master 0.1"
prompt :: String
prompt = "# "++version++" > "
localLogger :: String
localLogger = "MasterDaemon"
pUsage :: IO ()
pUsage = do
putStrLn "Usage: MasterDaemon ConsolePort Logfile Statefile"
params :: IO [String]
params = do
args <- getArgs
if length args /= 3 then do
errorM localLogger "Wrong argument count"
pUsage
exitFailure
else
return args
main :: IO ()
main
= do
putStrLn version
handleAll (\e -> errorM localLogger $ "EXCEPTION: " ++ show e) $
do
(s_cport:logfile:statefile:[]) <- params
initializeFileLogging logfile [(localLogger, INFO),("Holumbus.Network.DoWithServer",INFO),("Holumbus",ERROR),("measure",ERROR),("Holumbus.MapReduce.JobController.cycle",ERROR)]
addResource statefile
p <- newPortRegistryFromXmlFile "/tmp/registry.xml"
setPortRegistry p
(mr,fs) <- initializeData
UI.runDaemon (mr,fs) version (read s_cport) prompt
deinitializeData (mr,fs)
initializeData :: IO (MR.DMapReduce, FS.FileSystem)
initializeData
= do
fs <- FS.mkFileSystemController FS.defaultFSControllerConfig
let config = MR.defaultMRMasterConfig
mr <- MR.mkMapReduceMaster fs config
return (mr,fs)
deinitializeData :: (MR.DMapReduce, FS.FileSystem) -> IO ()
deinitializeData (mr,fs)
= do
MR.closeMapReduce mr
FS.closeFileSystem fs
-- ----------------------------------------------------------------------------