Project

General

Profile

root / branches / 1.1 / tests / test_mapper.py @ 847

1
from haizea.core.scheduler.policy import PolicyManager
2
from haizea.core.scheduler.slottable import ResourceReservation
3
from haizea.core.scheduler.mapper import GreedyMapper
4
from haizea.pluggable.policies.host_selection import GreedyPolicy
5
from sample_slottables import *
6
from common import create_tmp_slottable
7

    
8
class SimplePolicy(PolicyManager):
9
    def __init__(self, slottable, preemption):
10
        PolicyManager.__init__(self, None, None, None, None)
11
        self.preemption = preemption
12
        self.host_selection = GreedyPolicy(slottable)
13
    
14
    def get_lease_preemptability_score(self, preemptor, preemptee, time):
15
        if self.preemption:
16
            return 1
17
        else:
18
            return -1
19
        
20
    def accept_lease(self, lease):
21
        return True  
22
      
23
def mapping_assertions(slottable, mapper, start, end, requested_resources, strictend, mustmap, 
24
                       maxend = None, can_preempt = []):
25
    lease = create_ar_lease(lease_id = 100,
26
                            submit_time = T1200,
27
                            start = start,
28
                            end = end,
29
                            preemptible = False,
30
                            requested_resources = requested_resources)
31
    
32
    mapping, actualend, preemptions = mapper.map(lease, requested_resources,
33
                                                 start, end, 
34
                                                 strictend = strictend,
35
                                                 allow_preemption = True)
36
    
37
    if mustmap:
38
        assert(mapping != None and actualend != None and preemptions != None)
39
        if strictend:
40
            assert(end == actualend)
41
        else:
42
            assert(actualend <= maxend)
43
        assert(set(preemptions).issubset(set(can_preempt)))
44

    
45
    else:
46
        assert(mapping == None and actualend == None and preemptions == None)
47
        return
48
    
49
    # Sanity check slottable
50
    tmp_slottable = create_tmp_slottable(slottable)
51
    
52
    # Add reservation
53
    res = dict([(mapping[vnode],r) for vnode,r in requested_resources.items()])
54
    rr = ResourceReservation(lease, start, actualend, res)
55
    tmp_slottable.add_reservation(rr)
56
    
57
    if len(preemptions) > 0:
58
        passed, node, time, capacity = tmp_slottable.sanity_check()
59
        assert(not passed)
60
        
61
        # Remove preempted reservations
62
        remove = set()
63
        for rr in [x.value for x in tmp_slottable.reservations_by_start]:
64
            if rr.lease in preemptions:
65
                remove.add(rr)
66

    
67
        for rr in remove:
68
            tmp_slottable.remove_reservation(rr)
69

    
70
    passed, node, time, capacity = tmp_slottable.sanity_check()
71
    assert(passed)
72

    
73

    
74
def test_mapping_nopreemption_strictend():
75
    slottable, leases = sample_slottable_2()
76
    FULL_NODE, HALF_NODE, QRTR_NODE, EMPT_NODE = create_capacities(slottable)
77
    policy = SimplePolicy(slottable, preemption = False)
78
    mapper = GreedyMapper(slottable, policy)
79
    
80
    mapping_assertions(slottable, mapper,
81
                       start = T1300, 
82
                       end = T1345,
83
                       requested_resources = {1: FULL_NODE, 2: FULL_NODE},
84
                       strictend = True,
85
                       mustmap = True)
86

    
87
    mapping_assertions(slottable, mapper,
88
                       start = T1300, 
89
                       end = T1330,
90
                       requested_resources = {1: FULL_NODE, 2: FULL_NODE, 3: FULL_NODE, 4: HALF_NODE},
91
                       strictend = True,
92
                       mustmap = True)
93

    
94
    mapping_assertions(slottable, mapper,
95
                       start = T1300, 
96
                       end = T1315,
97
                       requested_resources = {1: FULL_NODE, 2: FULL_NODE, 3: FULL_NODE, 4: FULL_NODE},
98
                       strictend = True,
99
                       mustmap = True)
100

    
101
    mapping_assertions(slottable, mapper,
102
                       start = T1330, 
103
                       end = T1345,
104
                       requested_resources = {1: FULL_NODE, 2: FULL_NODE},
105
                       strictend = True,
106
                       mustmap = True)
107

    
108
    mapping_assertions(slottable, mapper,
109
                       start = T1330, 
110
                       end = T1345,
111
                       requested_resources = {1: HALF_NODE, 2: HALF_NODE, 3: HALF_NODE, 4: HALF_NODE},
112
                       strictend = True,
113
                       mustmap = True)
114

    
115
    mapping_assertions(slottable, mapper,
116
                       start = T1300, 
117
                       end = T1415,
118
                       requested_resources = {1: FULL_NODE, 2: FULL_NODE},
119
                       strictend = True,
120
                       mustmap = True)
121

    
122
    mapping_assertions(slottable, mapper,
123
                       start = T1300, 
124
                       end = T1415,
125
                       requested_resources = {1: FULL_NODE, 2: FULL_NODE, 3: FULL_NODE, 4: FULL_NODE},
126
                       strictend = True,
127
                       mustmap = False)
128

    
129
    mapping_assertions(slottable, mapper,
130
                       start = T1300, 
131
                       end = T1330,
132
                       requested_resources = {1: FULL_NODE, 2: FULL_NODE, 3: FULL_NODE, 4: FULL_NODE},
133
                       strictend = True,
134
                       mustmap = False)
135

    
136
    mapping_assertions(slottable, mapper,
137
                       start = T1330, 
138
                       end = T1345,
139
                       requested_resources = {1: HALF_NODE, 2: HALF_NODE, 3: HALF_NODE, 4: HALF_NODE, 5: HALF_NODE},
140
                       strictend = True,
141
                       mustmap = False)
142

    
143
def test_mapping_nopreemption_nostrictend():
144
    slottable, leases = sample_slottable_3()
145
    FULL_NODE, HALF_NODE, QRTR_NODE, EMPT_NODE = create_capacities(slottable)
146
    policy = SimplePolicy(slottable, preemption = False)
147
    mapper = GreedyMapper(slottable, policy)
148
    
149
    mapping_assertions(slottable, mapper,
150
                       start = T1315, 
151
                       end = T1415,
152
                       requested_resources = {1: FULL_NODE, 2: FULL_NODE, 3: HALF_NODE},
153
                       strictend = False,
154
                       mustmap = True,
155
                       maxend = T1400)
156
    
157
    mapping_assertions(slottable, mapper,
158
                       start = T1315, 
159
                       end = T1415,
160
                       requested_resources = {1: FULL_NODE, 2: FULL_NODE, 3: FULL_NODE, 4: FULL_NODE},
161
                       strictend = False,
162
                       mustmap = True,
163
                       maxend = T1330)
164

    
165
    mapping_assertions(slottable, mapper,
166
                       start = T1315, 
167
                       end = T1415,
168
                       requested_resources = {1: FULL_NODE, 2: FULL_NODE, 3: FULL_NODE, 4: HALF_NODE},
169
                       strictend = False,
170
                       mustmap = True,
171
                       maxend = T1345)
172
    
173
    mapping_assertions(slottable, mapper,
174
                       start = T1315, 
175
                       end = T1415,
176
                       requested_resources = {1: FULL_NODE, 2: FULL_NODE, 3: HALF_NODE, 4: HALF_NODE, 5: HALF_NODE, 6: HALF_NODE},
177
                       strictend = False,
178
                       mustmap = True,
179
                       maxend = T1330)
180

    
181
    mapping_assertions(slottable, mapper,
182
                       start = T1330, 
183
                       end = T1415,
184
                       requested_resources = {1: FULL_NODE, 2: FULL_NODE, 3: FULL_NODE, 4: HALF_NODE},
185
                       strictend = False,
186
                       mustmap = True,
187
                       maxend = T1345)
188

    
189
    mapping_assertions(slottable, mapper,
190
                       start = T1345, 
191
                       end = T1415,
192
                       requested_resources = {1: FULL_NODE, 2: FULL_NODE, 3: HALF_NODE},
193
                       strictend = False,
194
                       mustmap = True,
195
                       maxend = T1400)
196

    
197
    mapping_assertions(slottable, mapper,
198
                       start = T1330, 
199
                       end = T1415,
200
                       requested_resources = {1: FULL_NODE, 2: FULL_NODE, 3: FULL_NODE, 4: FULL_NODE},
201
                       strictend = False,
202
                       mustmap = False)
203
    
204
    mapping_assertions(slottable, mapper,
205
                       start = T1400, 
206
                       end = T1415,
207
                       requested_resources = {1: FULL_NODE, 2: FULL_NODE, 3: HALF_NODE},
208
                       strictend = False,
209
                       mustmap = False)
210
    
211
def test_mapping_preemption_strictend():
212
    slottable, leases = sample_slottable_3()
213
    FULL_NODE, HALF_NODE, QRTR_NODE, EMPT_NODE = create_capacities(slottable)
214
    policy = SimplePolicy(slottable, preemption = True)        
215
    mapper = GreedyMapper(slottable, policy)
216

    
217
    mapping_assertions(slottable, mapper,
218
                       start = T1315, 
219
                            end = T1345,
220
                            requested_resources = {1: FULL_NODE, 2: FULL_NODE, 3: FULL_NODE, 4: FULL_NODE},
221
                            strictend = True,
222
                            mustmap = True,
223
                            can_preempt = [leases[1]])
224

    
225
    mapping_assertions(slottable, mapper,
226
                       start = T1330, 
227
                            end = T1345,
228
                            requested_resources = {1: FULL_NODE, 2: FULL_NODE, 3: FULL_NODE, 4: FULL_NODE},
229
                            strictend = True,
230
                            mustmap = True,
231
                            can_preempt = [leases[1]])
232

    
233
    mapping_assertions(slottable, mapper,
234
                       start = T1345, 
235
                            end = T1400,
236
                            requested_resources = {1: FULL_NODE, 2: FULL_NODE, 3: FULL_NODE},
237
                            strictend = True,
238
                            mustmap = True,
239
                            can_preempt = [leases[0],leases[1]])
240
    
241
    mapping_assertions(slottable, mapper,
242
                       start = T1315, 
243
                            end = T1415,
244
                            requested_resources = {1: FULL_NODE, 2: FULL_NODE, 3: FULL_NODE, 4: FULL_NODE},
245
                            strictend = True,
246
                            mustmap = True,
247
                            can_preempt = leases)
248
            
249
    mapping_assertions(slottable, mapper,
250
                       start = T1315, 
251
                            end = T1415,
252
                            requested_resources = {1: FULL_NODE, 2: FULL_NODE, 3: HALF_NODE},
253
                            strictend = True,
254
                            mustmap = True,
255
                            can_preempt = leases)