Revision 962367fe src/Node.hs

b/src/Node.hs
6 6

  
7 7
module Node
8 8
    (
9
      Node(failN1, idx, f_mem, f_disk, p_mem, p_dsk, slist, plist)
9
      Node(failN1, idx, f_mem, f_dsk, p_mem, p_dsk, slist, plist)
10 10
    -- * Constructor
11 11
    , create
12 12
    -- ** Finalization after data loading
......
34 34

  
35 35
data Node = Node { t_mem :: Int -- ^ total memory (Mib)
36 36
                 , f_mem :: Int -- ^ free memory (MiB)
37
                 , t_disk :: Int -- ^ total disk space (MiB)
38
                 , f_disk :: Int -- ^ free disk space (MiB)
37
                 , t_dsk :: Int -- ^ total disk space (MiB)
38
                 , f_dsk :: Int -- ^ free disk space (MiB)
39 39
                 , plist :: [Int] -- ^ list of primary instance indices
40 40
                 , slist :: [Int] -- ^ list of secondary instance indices
41 41
                 , idx :: Int -- ^ internal index for book-keeping
......
55 55

  
56 56
-}
57 57
create :: String -> String -> String -> String -> Node
58
create mem_t_init mem_f_init disk_t_init disk_f_init =
58
create mem_t_init mem_f_init dsk_t_init dsk_f_init =
59 59
    let mem_t = read mem_t_init
60 60
        mem_f = read mem_f_init
61
        disk_t = read disk_t_init
62
        disk_f = read disk_f_init
61
        dsk_t = read dsk_t_init
62
        dsk_f = read dsk_f_init
63 63
    in
64 64
      Node
65 65
      {
66 66
       t_mem = read mem_t_init,
67 67
       f_mem = read mem_f_init,
68
       t_disk = read disk_t_init,
69
       f_disk = read disk_f_init,
68
       t_dsk = read dsk_t_init,
69
       f_dsk = read dsk_f_init,
70 70
       plist = [],
71 71
       slist = [],
72 72
       failN1 = True,
......
74 74
       peers = PeerMap.empty,
75 75
       maxRes = 0,
76 76
       p_mem = (fromIntegral mem_f) / (fromIntegral mem_t),
77
       p_dsk = (fromIntegral disk_f) / (fromIntegral disk_t)
77
       p_dsk = (fromIntegral dsk_f) / (fromIntegral dsk_t)
78 78
      }
79 79

  
80 80
-- | Changes the index.
......
84 84

  
85 85
-- | Given the rmem, free memory and disk, computes the failn1 status.
86 86
computeFailN1 :: Int -> Int -> Int -> Bool
87
computeFailN1 new_rmem new_mem new_disk =
88
    new_mem <= new_rmem || new_disk <= 0
87
computeFailN1 new_rmem new_mem new_dsk =
88
    new_mem <= new_rmem || new_dsk <= 0
89 89

  
90 90
-- | Computes the maximum reserved memory for peers from a peer map.
91 91
computeMaxRes :: PeerMap.PeerMap -> PeerMap.Elem
......
100 100
                (slist t)
101 101
        pmap = PeerMap.accumArray (+) 0 (0, num_nodes - 1) mdata
102 102
        new_rmem = computeMaxRes pmap
103
        new_failN1 = computeFailN1 new_rmem (f_mem t) (f_disk t)
103
        new_failN1 = computeFailN1 new_rmem (f_mem t) (f_dsk t)
104 104
    in t {peers=pmap, failN1 = new_failN1, maxRes = new_rmem}
105 105

  
106 106
-- | Removes a primary instance.
......
109 109
    let iname = Instance.idx inst
110 110
        new_plist = delete iname (plist t)
111 111
        new_mem = f_mem t + Instance.mem inst
112
        new_disk = f_disk t + Instance.disk inst
112
        new_dsk = f_dsk t + Instance.dsk inst
113 113
        new_mp = (fromIntegral new_mem) / (fromIntegral $ t_mem t)
114
        new_dp = (fromIntegral new_disk) / (fromIntegral $ t_disk t)
115
        new_failn1 = computeFailN1 (maxRes t) new_mem new_disk
116
    in t {plist = new_plist, f_mem = new_mem, f_disk = new_disk,
114
        new_dp = (fromIntegral new_dsk) / (fromIntegral $ t_dsk t)
115
        new_failn1 = computeFailN1 (maxRes t) new_mem new_dsk
116
    in t {plist = new_plist, f_mem = new_mem, f_dsk = new_dsk,
117 117
          failN1 = new_failn1, p_mem = new_mp, p_dsk = new_dp}
118 118

  
119 119
-- | Removes a secondary instance.
......
122 122
    let iname = Instance.idx inst
123 123
        pnode = Instance.pnode inst
124 124
        new_slist = delete iname (slist t)
125
        new_disk = f_disk t + Instance.disk inst
125
        new_dsk = f_dsk t + Instance.dsk inst
126 126
        old_peers = peers t
127 127
        old_peem = PeerMap.find pnode old_peers
128 128
        new_peem =  old_peem - (Instance.mem inst)
......
132 132
                       old_rmem
133 133
                   else
134 134
                       computeMaxRes new_peers
135
        new_failn1 = computeFailN1 new_rmem (f_mem t) new_disk
136
        new_dp = (fromIntegral new_disk) / (fromIntegral $ t_disk t)
137
    in t {slist = new_slist, f_disk = new_disk, peers = new_peers,
135
        new_failn1 = computeFailN1 new_rmem (f_mem t) new_dsk
136
        new_dp = (fromIntegral new_dsk) / (fromIntegral $ t_dsk t)
137
    in t {slist = new_slist, f_dsk = new_dsk, peers = new_peers,
138 138
          failN1 = new_failn1, maxRes = new_rmem, p_dsk = new_dp}
139 139

  
140 140
-- | Adds a primary instance.
......
142 142
addPri t inst =
143 143
    let iname = Instance.idx inst
144 144
        new_mem = f_mem t - Instance.mem inst
145
        new_disk = f_disk t - Instance.disk inst
146
        new_failn1 = computeFailN1 (maxRes t) new_mem new_disk in
145
        new_dsk = f_dsk t - Instance.dsk inst
146
        new_failn1 = computeFailN1 (maxRes t) new_mem new_dsk in
147 147
      if new_failn1 then
148 148
        Nothing
149 149
      else
150 150
        let new_plist = iname:(plist t)
151 151
            new_mp = (fromIntegral new_mem) / (fromIntegral $ t_mem t)
152
            new_dp = (fromIntegral new_disk) / (fromIntegral $ t_disk t)
152
            new_dp = (fromIntegral new_dsk) / (fromIntegral $ t_dsk t)
153 153
        in
154
        Just t {plist = new_plist, f_mem = new_mem, f_disk = new_disk,
154
        Just t {plist = new_plist, f_mem = new_mem, f_dsk = new_dsk,
155 155
                failN1 = new_failn1, p_mem = new_mp, p_dsk = new_dp}
156 156

  
157 157
-- | Adds a secondary instance.
......
159 159
addSec t inst pdx =
160 160
    let iname = Instance.idx inst
161 161
        old_peers = peers t
162
        new_disk = f_disk t - Instance.disk inst
162
        new_dsk = f_dsk t - Instance.dsk inst
163 163
        new_peem = PeerMap.find pdx old_peers + Instance.mem inst
164 164
        new_peers = PeerMap.add pdx new_peem old_peers
165 165
        new_rmem = max (maxRes t) new_peem
166
        new_failn1 = computeFailN1 new_rmem (f_mem t) new_disk in
166
        new_failn1 = computeFailN1 new_rmem (f_mem t) new_dsk in
167 167
    if new_failn1 then
168 168
        Nothing
169 169
    else
170 170
        let new_slist = iname:(slist t)
171
            new_dp = (fromIntegral new_disk) / (fromIntegral $ t_disk t)
171
            new_dp = (fromIntegral new_dsk) / (fromIntegral $ t_dsk t)
172 172
        in
173
        Just t {slist = new_slist, f_disk = new_disk,
173
        Just t {slist = new_slist, f_dsk = new_dsk,
174 174
                peers = new_peers, failN1 = new_failn1,
175 175
                maxRes = new_rmem, p_dsk = new_dp}
176 176

  
......
187 187
str t =
188 188
    printf ("Node %d (mem=%5d MiB, disk=%5.2f GiB)\n  Primaries:" ++
189 189
            " %s\nSecondaries: %s")
190
      (idx t) (f_mem t) ((f_disk t) `div` 1024)
190
      (idx t) (f_mem t) ((f_dsk t) `div` 1024)
191 191
      (commaJoin (map show (plist t)))
192 192
      (commaJoin (map show (slist t)))
193 193

  
......
200 200
        dp = p_dsk t
201 201
    in
202 202
      printf "  %s(%d)\t%5d\t%5d\t%3d\t%3d\t%s\t%s\t%.5f\t%.5f"
203
                 n (idx t) (f_mem t) ((f_disk t) `div` 1024)
203
                 n (idx t) (f_mem t) ((f_dsk t) `div` 1024)
204 204
                 (length pl) (length sl)
205 205
                 (commaJoin (map show pl))
206 206
                 (commaJoin (map show sl))

Also available in: Unified diff