, simGroupWanted :: M.Map Group PreferredContentExpression
, simMaxSize :: M.Map UUID MaxSize
, simRebalance :: Bool
- , simClusters :: M.Map RepoName (S.Set RemoteName)
, simHistory :: [SimCommand]
, simVectorClock :: VectorClock
, simRootDirectory :: FilePath
, simGroupWanted = mempty
, simMaxSize = mempty
, simRebalance = False
- , simClusters = mempty
, simHistory = []
, simVectorClock = VectorClock 0
, simRootDirectory = rootdir
| CommandRandomGroupWanted Group [PreferredContentExpression]
| CommandMaxSize RepoName MaxSize
| CommandRebalance Bool
- | CommandInitCluster RepoName
- | CommandAddCluster RepoName [RemoteName]
- | CommandRemoveCluster RepoName RemoteName
| CommandVisit RepoName [String]
| CommandComment String
| CommandBlank
Right $ Right $ st
{ simRebalance = b
}
-applySimCommand' (CommandInitCluster clustername) st _ =
- checkNonexistantRepo clustername st $
- let (u, st') = genSimUUID st clustername
- st'' = st'
- { simClusters = M.insert clustername mempty
- (simClusters st')
- }
- in Right $ Right $
- addRepo clustername (newSimRepoConfig u False) st''
-applySimCommand' (CommandAddCluster clustername nodes) st _ =
- checkKnownRepo clustername st $ \u ->
- case M.lookup clustername (simClusters st) of
- Nothing -> Left $ fromRepoName clustername ++ " is not a cluster (use initcluster before addcluster)"
- Just nodeset ->
- let nodeset' = S.union nodeset (S.fromList nodes)
- in Right $ Right $ st
- { simClusters = M.insert clustername nodeset'
- (simClusters st)
- }
-applySimCommand' (CommandRemoveCluster clustername node) st _ =
- case M.lookup clustername (simClusters st) of
- Nothing -> Left $ fromRepoName clustername ++ " is not a cluster"
- Just nodeset ->
- let nodeset' = S.delete node nodeset
- in Right $ Right $ st
- { simClusters = M.insert clustername nodeset'
- (simClusters st)
- }
applySimCommand' (CommandComment _) st _ = Right $ Right st
applySimCommand' CommandBlank st _ = Right $ Right st
applySimCommand' (CommandVisit _ _) _ _ = error "applySimCommand' CommandVisit"
["maxsize", repo, showsize (fromMaxSize maxsize)] : go rest
go (CommandRebalance b : rest) =
["rebalance", if b then "on" else "off"] : go rest
- go (CommandInitCluster (RepoName repo) : rest) =
- ["initcluster", repo] : go rest
- go (CommandAddCluster (RepoName repo) nodes : rest) =
- ("addcluster" : repo : map fromRemoteName nodes) : go rest
- go (CommandRemoveCluster (RepoName repo) (RemoteName node) : rest) =
- ["removecluster", repo, node] : go rest
go (CommandVisit (RepoName repo) cmdparams : rest) =
(["visit", repo] ++ cmdparams) : go rest
go (CommandComment s : rest) =
parseSimCommand ("rebalance":onoff:[]) = case isTrueFalse onoff of
Just b -> Right $ CommandRebalance b
Nothing -> Left $ "Unable to parse rebalance value \"" ++ onoff ++ "\""
-parseSimCommand ("initcluster":name:[]) =
- Right $ CommandInitCluster (RepoName name)
-parseSimCommand ("addcluster":name:nodes) =
- Right $ CommandAddCluster (RepoName name) (map RemoteName nodes)
-parseSimCommand ("removecluster":name:node:[]) =
- Right $ CommandRemoveCluster (RepoName name) (RemoteName node)
parseSimCommand ("visit":repo:cmdparams) =
Right $ CommandVisit (RepoName repo) cmdparams
parseSimCommand ws = parseError ws
step 100
rebalance off
-* `initcluster name`
-
- Initializes a simulated cluster with the given name.
-
-* `addcluster name [node ...]`
-
- Adds each of the listed nodes to the cluster. The cluster is connected to
- each node, and will accept files sent to it and store them on the nodes.
- Repositories that are connected to the cluster will also be able to
- receive files from it.
-
- Note that adding a connection to a cluster does not automatically
- set up connections to its nodes. To replicate git-annex's behavior with
- a real cluster remote, those connections can be manually configured. For
- example:
-
- addcluster mycluster node1 node2
- connect foo -> mycluster
- connect foo -> node1
- connect foo -> node2
-
-* `removecluster name node`
-
- Removes a node from the cluster.
-
# OPTIONS
* The [[git-annex-common-options]](1) can be used.