diff --git a/src/Node.hs b/src/Node.hs index 2d128a40a5fa95f00f07823caa0ce3e98603a741..e153ee6af8eaf90b17780ee4117bb79790fc411a 100644 --- a/src/Node.hs +++ b/src/Node.hs @@ -6,7 +6,7 @@ module Node ( - Node(failN1, idx, f_mem, f_dsk, p_mem, p_dsk, slist, plist) + Node(failN1, idx, f_mem, f_dsk, p_mem, p_dsk, slist, plist, p_rem) -- * Constructor , create -- ** Finalization after data loading @@ -46,6 +46,7 @@ data Node = Node { t_mem :: Double -- ^ total memory (Mib) -- failover by primaries of this node , p_mem :: Double , p_dsk :: Double + , p_rem :: Double } deriving (Show) {- | Create a new node. @@ -74,7 +75,8 @@ create mem_t_init mem_f_init dsk_t_init dsk_f_init = peers = PeerMap.empty, maxRes = 0, p_mem = (fromIntegral mem_f) / (fromIntegral mem_t), - p_dsk = (fromIntegral dsk_f) / (fromIntegral dsk_t) + p_dsk = (fromIntegral dsk_f) / (fromIntegral dsk_t), + p_rem = 0 } -- | Changes the index. @@ -105,7 +107,8 @@ buildPeers t il num_nodes = pmap = PeerMap.accumArray (+) 0 (0, num_nodes - 1) mdata new_rmem = computeMaxRes pmap new_failN1 = computeFailN1 new_rmem (f_mem t) (f_dsk t) - in t {peers=pmap, failN1 = new_failN1, maxRes = new_rmem} + new_prem = (fromIntegral new_rmem) / (t_mem t) + in t {peers=pmap, failN1 = new_failN1, maxRes = new_rmem, p_rem = new_prem} -- | Removes a primary instance. removePri :: Node -> Instance.Instance -> Node @@ -136,10 +139,12 @@ removeSec t inst = old_rmem else computeMaxRes new_peers + new_prem = (fromIntegral new_rmem) / (t_mem t) new_failn1 = computeFailN1 new_rmem (f_mem t) new_dsk new_dp = (fromIntegral new_dsk) / (t_dsk t) in t {slist = new_slist, f_dsk = new_dsk, peers = new_peers, - failN1 = new_failn1, maxRes = new_rmem, p_dsk = new_dp} + failN1 = new_failn1, maxRes = new_rmem, p_dsk = new_dp, + p_rem = new_prem} -- | Adds a primary instance. addPri :: Node -> Instance.Instance -> Maybe Node @@ -168,6 +173,7 @@ addSec t inst pdx = new_peem = PeerMap.find pdx old_peers + Instance.mem inst new_peers = PeerMap.add pdx new_peem old_peers new_rmem = max (maxRes t) new_peem + new_prem = (fromIntegral new_rmem) / (t_mem t) new_failn1 = computeFailN1 new_rmem old_mem new_dsk in if (failHealth old_mem new_dsk) || (new_failn1 && not (failN1 t)) then Nothing @@ -177,7 +183,8 @@ addSec t inst pdx = in Just t {slist = new_slist, f_dsk = new_dsk, peers = new_peers, failN1 = new_failn1, - maxRes = new_rmem, p_dsk = new_dp} + maxRes = new_rmem, p_dsk = new_dp, + p_rem = new_prem} -- | Add a primary instance to a node without other updates setPri :: Node -> Int -> Node