on master help sign in
WIP: add graph operator to remote functionality
78a58e0AgentM
ProjectM36/Client.hs+3
@@ -202,6 +202,9 @@ executeGraphExpr (InProcessConnection strat tvar) graphExpr = do
202 --this should really grab a lock at the beginning of the method to be threadsafe
202 --this should really grab a lock at the beginning of the method to be threadsafe
203 processPersistence strat newGraph
203 processPersistence strat newGraph
204 return Nothing
204 return Nothing
205+executeGraphExpr (RemoteProcessConnection localNode serverProcessId) graphExpr = do
206+ runProcessResult localNode $ do
207+ call serverProcessId (ExecuteGraphExpr graphExpr)
205
208
206commit :: Connection -> IO (Maybe RelationalError)
209commit :: Connection -> IO (Maybe RelationalError)
207commit conn = executeGraphExpr conn Commit
210commit conn = executeGraphExpr conn Commit
ProjectM36/Daemon/EntryPoints.hs+6−3
@@ -23,6 +23,9 @@ handleExecuteHeadName conn = do
23 reply ret conn
23 reply ret conn
24
24
25handleLogin :: Connection -> Process (ProcessReply Bool Connection)
25handleLogin :: Connection -> Process (ProcessReply Bool Connection)
26−handleLogin conn = do
26+handleLogin conn = reply True conn
27− reply True conn
27+
28−
28+handleExecuteGraphExpr :: Connection -> TransactionGraphOperator -> Process (ProcessReply (Maybe RelationalError) Connection)
29+handleExecuteGraphExpr conn graphExpr = do
30+ ret <- liftIO $ executeGraphExpr conn graphExpr
31+ reply ret conn
ProjectM36/Daemon/Main.hs+3−2
@@ -1,7 +1,7 @@
1{-# LANGUAGE ScopedTypeVariables #-}
1{-# LANGUAGE ScopedTypeVariables #-}
2import ProjectM36.Client
2import ProjectM36.Client
3import ProjectM36.Daemon.ParseArgs (parseConfig, persistenceStrategy, databaseName)
3import ProjectM36.Daemon.ParseArgs (parseConfig, persistenceStrategy, databaseName)
4−import ProjectM36.Daemon.EntryPoints (handleExecuteRelationalExpr, handleExecuteDatabaseContextExpr, handleLogin, handleExecuteHeadName)
4+import ProjectM36.Daemon.EntryPoints (handleExecuteRelationalExpr, handleExecuteDatabaseContextExpr, handleLogin, handleExecuteHeadName, handleExecuteGraphExpr)
5import ProjectM36.Daemon.RemoteCallTypes (RemoteExecution(..))
5import ProjectM36.Daemon.RemoteCallTypes (RemoteExecution(..))
6
6
7import System.Exit (exitFailure, exitSuccess)
7import System.Exit (exitFailure, exitSuccess)
@@ -21,7 +21,8 @@ serverDefinition = defaultProcess {
21 apiHandlers = [handleCall (\conn Login -> handleLogin conn),
21 apiHandlers = [handleCall (\conn Login -> handleLogin conn),
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 ],
26 ],
26 unhandledMessagePolicy = Log
27 unhandledMessagePolicy = Log
27 }
28 }
ProjectM36/Daemon/RemoteCallTypes.hs+2
@@ -1,6 +1,7 @@
1{-# LANGUAGE DeriveAnyClass, DeriveGeneric #-}
1{-# LANGUAGE DeriveAnyClass, DeriveGeneric #-}
2module ProjectM36.Daemon.RemoteCallTypes where
2module ProjectM36.Daemon.RemoteCallTypes where
3import ProjectM36.Base
3import ProjectM36.Base
4+import ProjectM36.TransactionGraph
4import GHC.Generics
5import GHC.Generics
5import Data.Binary
6import Data.Binary
6
7
@@ -8,5 +9,6 @@ data RemoteExecution = Login |
8 Logout |
9 Logout |
9 ExecuteRelationalExpr RelationalExpr |
10 ExecuteRelationalExpr RelationalExpr |
10 ExecuteDatabaseContextExpr DatabaseExpr |
11 ExecuteDatabaseContextExpr DatabaseExpr |
12+ ExecuteGraphExpr TransactionGraphOperator |
11 ExecuteHeadName
13 ExecuteHeadName
12 deriving (Binary, Generic)
14 deriving (Binary, Generic)
ProjectM36/TransactionGraph.hs+4−1
@@ -1,4 +1,4 @@
1−{-# LANGUAGE OverloadedStrings #-}
1+{-# LANGUAGE OverloadedStrings, DeriveAnyClass, DeriveGeneric #-}
2module ProjectM36.TransactionGraph where
2module ProjectM36.TransactionGraph where
3import ProjectM36.Base
3import ProjectM36.Base
4import ProjectM36.Error
4import ProjectM36.Error
@@ -14,6 +14,8 @@ import qualified Data.Set as S
14import qualified Data.Map as M
14import qualified Data.Map as M
15import Control.Monad
15import Control.Monad
16import qualified Data.Text as T
16import qualified Data.Text as T
17+import GHC.Generics
18+import Data.Binary
17
19
18--operators which manipulate a transaction graph
20--operators which manipulate a transaction graph
19data TransactionGraphOperator = JumpToHead HeadName |
21data TransactionGraphOperator = JumpToHead HeadName |
@@ -21,6 +23,7 @@ data TransactionGraphOperator = JumpToHead HeadName |
21 Branch HeadName |
23 Branch HeadName |
22 Commit |
24 Commit |
23 Rollback
25 Rollback
26+ deriving (Eq, Show, Binary, Generic)
24
27
25data ROTransactionGraphOperator = ShowGraph
28data ROTransactionGraphOperator = ShowGraph
26
29