on master help sign in
WIP: use individual message markers to mitigate error
4e1d107AgentM
ProjectM36/Client.hs+2−4
@@ -44,7 +44,7 @@ import ProjectM36.TransactionGraph
44import ProjectM36.TransactionGraph.Persist
44import ProjectM36.TransactionGraph.Persist
45import ProjectM36.Attribute
45import ProjectM36.Attribute
46import ProjectM36.Persist (DiskSync(..))
46import ProjectM36.Persist (DiskSync(..))
47−import ProjectM36.Daemon.RemoteCallTypes (RemoteExecution(..))
47+import ProjectM36.Daemon.RemoteCallTypes
48import Network.Transport.TCP (createTransport, defaultTCPParameters, encodeEndPointAddress)
48import Network.Transport.TCP (createTransport, defaultTCPParameters, encodeEndPointAddress)
49import Control.Distributed.Process.Node (newLocalNode, initRemoteTable, runProcess, LocalNode)
49import Control.Distributed.Process.Node (newLocalNode, initRemoteTable, runProcess, LocalNode)
50import Control.Distributed.Process.Extras.Internal.Types (whereisRemote)
50import Control.Distributed.Process.Extras.Internal.Types (whereisRemote)
@@ -55,7 +55,7 @@ import Data.UUID (UUID)
55import Data.UUID.V4 (nextRandom)
55import Data.UUID.V4 (nextRandom)
56import Control.Concurrent.STM
56import Control.Concurrent.STM
57import Data.Word
57import Data.Word
58−import Control.Distributed.Process (ProcessId, Process, getSelfPid)
58+import Control.Distributed.Process (ProcessId, Process)
59import Control.Exception (IOException)
59import Control.Exception (IOException)
60import Control.Concurrent.MVar
60import Control.Concurrent.MVar
61import qualified Data.Map as M
61import qualified Data.Map as M
@@ -168,8 +168,6 @@ runProcessResult localNode proc = do
168remoteCall :: (Serializable a, Serializable b) => Connection -> a -> IO b
168remoteCall :: (Serializable a, Serializable b) => Connection -> a -> IO b
169remoteCall (InProcessConnection _ _) _ = error "remoteCall called on local connection"
169remoteCall (InProcessConnection _ _) _ = error "remoteCall called on local connection"
170remoteCall (RemoteProcessConnection localNode serverProcessId) arg = runProcessResult localNode $ do
170remoteCall (RemoteProcessConnection localNode serverProcessId) arg = runProcessResult localNode $ do
171− pid <- getSelfPid
172− liftIO $ putStrLn (show serverProcessId)
173 ret <- safeCall serverProcessId arg
171 ret <- safeCall serverProcessId arg
174 case ret of
172 case ret of
175 Left err -> error (show err)
173 Left err -> error (show err)
ProjectM36/Daemon/Main.hs+12−11
@@ -2,7 +2,7 @@
2import ProjectM36.Client
2import ProjectM36.Client
3import ProjectM36.Daemon.ParseArgs (parseConfig, persistenceStrategy, databaseName)
3import ProjectM36.Daemon.ParseArgs (parseConfig, persistenceStrategy, databaseName)
4import ProjectM36.Daemon.EntryPoints (handleExecuteRelationalExpr, handleExecuteDatabaseContextExpr, handleLogin, handleExecuteHeadName, handleExecuteGraphExpr, handleExecuteTypeForRelationalExpr, handleRetrieveInclusionDependencies,handleRetrievePlanForDatabaseContextExpr, handleRetrieveTransactionGraph, handleRetrieveHeadTransactionUUID)
4import ProjectM36.Daemon.EntryPoints (handleExecuteRelationalExpr, handleExecuteDatabaseContextExpr, handleLogin, handleExecuteHeadName, handleExecuteGraphExpr, handleExecuteTypeForRelationalExpr, handleRetrieveInclusionDependencies,handleRetrievePlanForDatabaseContextExpr, handleRetrieveTransactionGraph, handleRetrieveHeadTransactionUUID)
5−import ProjectM36.Daemon.RemoteCallTypes (RemoteExecution(..))
5+import ProjectM36.Daemon.RemoteCallTypes
6
6
7import System.Exit (exitFailure, exitSuccess)
7import System.Exit (exitFailure, exitSuccess)
8import Control.Concurrent (threadDelay)
8import Control.Concurrent (threadDelay)
@@ -18,16 +18,17 @@ import qualified Control.Distributed.Process.Extras.Internal.Types as DIT
18
18
19serverDefinition :: ProcessDefinition Connection
19serverDefinition :: ProcessDefinition Connection
20serverDefinition = defaultProcess {
20serverDefinition = defaultProcess {
21− apiHandlers = [handleCall (\conn Login -> handleLogin conn),
21+ apiHandlers = [
22− handleCall (\conn ExecuteHeadName -> handleExecuteHeadName conn),
22+ handleCall (\conn ExecuteHeadName -> handleExecuteHeadName conn),
23− handleCall (\conn (ExecuteRelationalExpr expr) -> handleExecuteRelationalExpr conn expr),
23+ handleCall (\conn (ExecuteRelationalExpr expr) -> handleExecuteRelationalExpr conn expr),
24− handleCall (\conn (ExecuteDatabaseContextExpr expr) -> handleExecuteDatabaseContextExpr conn expr),
24+ handleCall (\conn (ExecuteDatabaseContextExpr expr) -> handleExecuteDatabaseContextExpr conn expr),
25− handleCall (\conn (ExecuteGraphExpr expr) -> handleExecuteGraphExpr conn expr),
25+ handleCall (\conn (ExecuteGraphExpr expr) -> handleExecuteGraphExpr conn expr),
26− handleCall (\conn (ExecuteTypeForRelationalExpr expr) -> handleExecuteTypeForRelationalExpr conn expr),
26+ handleCall (\conn (ExecuteTypeForRelationalExpr expr) -> handleExecuteTypeForRelationalExpr conn expr),
27− handleCall (\conn RetrieveInclusionDependencies -> handleRetrieveInclusionDependencies conn),
27+ handleCall (\conn RetrieveInclusionDependencies -> handleRetrieveInclusionDependencies conn),
28− handleCall (\conn (RetrievePlanForDatabaseContextExpr dbExpr) -> handleRetrievePlanForDatabaseContextExpr conn dbExpr),
28+ handleCall (\conn (RetrievePlanForDatabaseContextExpr dbExpr) -> handleRetrievePlanForDatabaseContextExpr conn dbExpr),
29− handleCall (\conn RetrieveHeadTransactionUUID -> handleRetrieveHeadTransactionUUID conn),
29+ handleCall (\conn RetrieveHeadTransactionUUID -> handleRetrieveHeadTransactionUUID conn),
30− handleCall (\conn RetrieveTransactionGraph -> handleRetrieveTransactionGraph conn)
30+ handleCall (\conn RetrieveTransactionGraph -> handleRetrieveTransactionGraph conn),
31+ handleCall (\conn Login -> handleLogin conn)
31 ],
32 ],
32 unhandledMessagePolicy = Log
33 unhandledMessagePolicy = Log
33 }
34 }
ProjectM36/Daemon/RemoteCallTypes.hs+22−12
@@ -5,15 +5,25 @@ import ProjectM36.TransactionGraph
5import GHC.Generics
5import GHC.Generics
6import Data.Binary
6import Data.Binary
7
7
8−data RemoteExecution = Login |
8+data Login = Login
9+ deriving (Binary, Generic)
9− Logout |
10+data Logout = Logout
11+ deriving (Binary, Generic)
10− ExecuteRelationalExpr RelationalExpr |
12+data ExecuteRelationalExpr = ExecuteRelationalExpr RelationalExpr
13+ deriving (Binary, Generic)
11− ExecuteDatabaseContextExpr DatabaseExpr |
14+data ExecuteDatabaseContextExpr = ExecuteDatabaseContextExpr DatabaseExpr
15+ deriving (Binary, Generic)
12− ExecuteGraphExpr TransactionGraphOperator |
16+data ExecuteGraphExpr = ExecuteGraphExpr TransactionGraphOperator
17+ deriving (Binary, Generic)
13− ExecuteHeadName |
18+data ExecuteHeadName = ExecuteHeadName
19+ deriving (Binary, Generic)
14− ExecuteTypeForRelationalExpr RelationalExpr |
20+data ExecuteTypeForRelationalExpr = ExecuteTypeForRelationalExpr RelationalExpr
21+ deriving (Binary, Generic)
15− RetrieveInclusionDependencies |
22+data RetrieveInclusionDependencies = RetrieveInclusionDependencies
23+ deriving (Binary, Generic)
16− RetrievePlanForDatabaseContextExpr DatabaseExpr |
24+data RetrievePlanForDatabaseContextExpr = RetrievePlanForDatabaseContextExpr DatabaseExpr
25+ deriving (Binary, Generic)
17− RetrieveTransactionGraph |
26+data RetrieveTransactionGraph = RetrieveTransactionGraph
27+ deriving (Binary, Generic)
18− RetrieveHeadTransactionUUID
28+data RetrieveHeadTransactionUUID = RetrieveHeadTransactionUUID
19− deriving (Binary, Generic)
29+ deriving (Binary, Generic)