@@ -134,23 +134,21 @@ class TestDirtyBitmapMigration(iotests.QMPTestCase):
134
134
self .check_bitmap (self .vm_a , sha256 if persistent else False )
135
135
136
136
def do_test_migration (self , persistent , migrate_bitmaps , online ,
137
- shared_storage ):
137
+ shared_storage , pre_shutdown ):
138
138
granularity = 512
139
139
140
140
# regions = ((start, count), ...)
141
141
regions = ((0 , 0x10000 ),
142
142
(0xf0000 , 0x10000 ),
143
143
(0xa0201 , 0x1000 ))
144
144
145
- should_migrate = migrate_bitmaps or persistent and shared_storage
145
+ should_migrate = \
146
+ (migrate_bitmaps and (persistent or not pre_shutdown )) or \
147
+ (persistent and shared_storage )
146
148
mig_caps = [{'capability' : 'events' , 'state' : True }]
147
149
if migrate_bitmaps :
148
150
mig_caps .append ({'capability' : 'dirty-bitmaps' , 'state' : True })
149
151
150
- result = self .vm_a .qmp ('migrate-set-capabilities' ,
151
- capabilities = mig_caps )
152
- self .assert_qmp (result , 'return' , {})
153
-
154
152
self .vm_b .add_incoming (incoming_cmd if online else "defer" )
155
153
self .vm_b .add_drive (disk_a if shared_storage else disk_b )
156
154
@@ -166,6 +164,14 @@ class TestDirtyBitmapMigration(iotests.QMPTestCase):
166
164
self .vm_a .hmp_qemu_io ('drive0' , 'write %d %d' % r )
167
165
sha256 = self .get_bitmap_hash (self .vm_a )
168
166
167
+ if pre_shutdown :
168
+ self .vm_a .shutdown ()
169
+ self .vm_a .launch ()
170
+
171
+ result = self .vm_a .qmp ('migrate-set-capabilities' ,
172
+ capabilities = mig_caps )
173
+ self .assert_qmp (result , 'return' , {})
174
+
169
175
result = self .vm_a .qmp ('migrate' , uri = mig_cmd )
170
176
while True :
171
177
event = self .vm_a .event_wait ('MIGRATION' )
@@ -210,11 +216,13 @@ def inject_test_case(klass, name, method, *args, **kwargs):
210
216
mc = operator .methodcaller (method , * args , ** kwargs )
211
217
setattr (klass , 'test_' + method + name , lambda self : mc (self ))
212
218
213
- for cmb in list (itertools .product ((True , False ), repeat = 4 )):
219
+ for cmb in list (itertools .product ((True , False ), repeat = 5 )):
214
220
name = ('_' if cmb [0 ] else '_not_' ) + 'persistent_'
215
221
name += ('_' if cmb [1 ] else '_not_' ) + 'migbitmap_'
216
222
name += '_online' if cmb [2 ] else '_offline'
217
223
name += '_shared' if cmb [3 ] else '_nonshared'
224
+ if (cmb [4 ]):
225
+ name += '__pre_shutdown'
218
226
219
227
inject_test_case (TestDirtyBitmapMigration , name , 'do_test_migration' ,
220
228
* list (cmb ))
0 commit comments