1*409437e1SDaniel P. Berrange# 2*409437e1SDaniel P. Berrange# Migration test scenario parameter description 3*409437e1SDaniel P. Berrange# 4*409437e1SDaniel P. Berrange# Copyright (c) 2016 Red Hat, Inc. 5*409437e1SDaniel P. Berrange# 6*409437e1SDaniel P. Berrange# This library is free software; you can redistribute it and/or 7*409437e1SDaniel P. Berrange# modify it under the terms of the GNU Lesser General Public 8*409437e1SDaniel P. Berrange# License as published by the Free Software Foundation; either 9*409437e1SDaniel P. Berrange# version 2 of the License, or (at your option) any later version. 10*409437e1SDaniel P. Berrange# 11*409437e1SDaniel P. Berrange# This library is distributed in the hope that it will be useful, 12*409437e1SDaniel P. Berrange# but WITHOUT ANY WARRANTY; without even the implied warranty of 13*409437e1SDaniel P. Berrange# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14*409437e1SDaniel P. Berrange# Lesser General Public License for more details. 15*409437e1SDaniel P. Berrange# 16*409437e1SDaniel P. Berrange# You should have received a copy of the GNU Lesser General Public 17*409437e1SDaniel P. Berrange# License along with this library; if not, see <http://www.gnu.org/licenses/>. 18*409437e1SDaniel P. Berrange# 19*409437e1SDaniel P. Berrange 20*409437e1SDaniel P. Berrange 21*409437e1SDaniel P. Berrangeclass Scenario(object): 22*409437e1SDaniel P. Berrange 23*409437e1SDaniel P. Berrange def __init__(self, name, 24*409437e1SDaniel P. Berrange downtime=500, 25*409437e1SDaniel P. Berrange bandwidth=125000, # 1000 gig-e, effectively unlimited 26*409437e1SDaniel P. Berrange max_iters=30, 27*409437e1SDaniel P. Berrange max_time=300, 28*409437e1SDaniel P. Berrange pause=False, pause_iters=5, 29*409437e1SDaniel P. Berrange post_copy=False, post_copy_iters=5, 30*409437e1SDaniel P. Berrange auto_converge=False, auto_converge_step=10, 31*409437e1SDaniel P. Berrange compression_mt=False, compression_mt_threads=1, 32*409437e1SDaniel P. Berrange compression_xbzrle=False, compression_xbzrle_cache=10): 33*409437e1SDaniel P. Berrange 34*409437e1SDaniel P. Berrange self._name = name 35*409437e1SDaniel P. Berrange 36*409437e1SDaniel P. Berrange # General migration tunables 37*409437e1SDaniel P. Berrange self._downtime = downtime # milliseconds 38*409437e1SDaniel P. Berrange self._bandwidth = bandwidth # MiB per second 39*409437e1SDaniel P. Berrange self._max_iters = max_iters 40*409437e1SDaniel P. Berrange self._max_time = max_time # seconds 41*409437e1SDaniel P. Berrange 42*409437e1SDaniel P. Berrange 43*409437e1SDaniel P. Berrange # Strategies for ensuring completion 44*409437e1SDaniel P. Berrange self._pause = pause 45*409437e1SDaniel P. Berrange self._pause_iters = pause_iters 46*409437e1SDaniel P. Berrange 47*409437e1SDaniel P. Berrange self._post_copy = post_copy 48*409437e1SDaniel P. Berrange self._post_copy_iters = post_copy_iters 49*409437e1SDaniel P. Berrange 50*409437e1SDaniel P. Berrange self._auto_converge = auto_converge 51*409437e1SDaniel P. Berrange self._auto_converge_step = auto_converge_step # percentage CPU time 52*409437e1SDaniel P. Berrange 53*409437e1SDaniel P. Berrange self._compression_mt = compression_mt 54*409437e1SDaniel P. Berrange self._compression_mt_threads = compression_mt_threads 55*409437e1SDaniel P. Berrange 56*409437e1SDaniel P. Berrange self._compression_xbzrle = compression_xbzrle 57*409437e1SDaniel P. Berrange self._compression_xbzrle_cache = compression_xbzrle_cache # percentage of guest RAM 58*409437e1SDaniel P. Berrange 59*409437e1SDaniel P. Berrange def serialize(self): 60*409437e1SDaniel P. Berrange return { 61*409437e1SDaniel P. Berrange "name": self._name, 62*409437e1SDaniel P. Berrange "downtime": self._downtime, 63*409437e1SDaniel P. Berrange "bandwidth": self._bandwidth, 64*409437e1SDaniel P. Berrange "max_iters": self._max_iters, 65*409437e1SDaniel P. Berrange "max_time": self._max_time, 66*409437e1SDaniel P. Berrange "pause": self._pause, 67*409437e1SDaniel P. Berrange "pause_iters": self._pause_iters, 68*409437e1SDaniel P. Berrange "post_copy": self._post_copy, 69*409437e1SDaniel P. Berrange "post_copy_iters": self._post_copy_iters, 70*409437e1SDaniel P. Berrange "auto_converge": self._auto_converge, 71*409437e1SDaniel P. Berrange "auto_converge_step": self._auto_converge_step, 72*409437e1SDaniel P. Berrange "compression_mt": self._compression_mt, 73*409437e1SDaniel P. Berrange "compression_mt_threads": self._compression_mt_threads, 74*409437e1SDaniel P. Berrange "compression_xbzrle": self._compression_xbzrle, 75*409437e1SDaniel P. Berrange "compression_xbzrle_cache": self._compression_xbzrle_cache, 76*409437e1SDaniel P. Berrange } 77*409437e1SDaniel P. Berrange 78*409437e1SDaniel P. Berrange @classmethod 79*409437e1SDaniel P. Berrange def deserialize(cls, data): 80*409437e1SDaniel P. Berrange return cls( 81*409437e1SDaniel P. Berrange data["name"], 82*409437e1SDaniel P. Berrange data["downtime"], 83*409437e1SDaniel P. Berrange data["bandwidth"], 84*409437e1SDaniel P. Berrange data["max_iters"], 85*409437e1SDaniel P. Berrange data["max_time"], 86*409437e1SDaniel P. Berrange data["pause"], 87*409437e1SDaniel P. Berrange data["pause_iters"], 88*409437e1SDaniel P. Berrange data["post_copy"], 89*409437e1SDaniel P. Berrange data["post_copy_iters"], 90*409437e1SDaniel P. Berrange data["auto_converge"], 91*409437e1SDaniel P. Berrange data["auto_converge_step"], 92*409437e1SDaniel P. Berrange data["compression_mt"], 93*409437e1SDaniel P. Berrange data["compression_mt_threads"], 94*409437e1SDaniel P. Berrange data["compression_xbzrle"], 95*409437e1SDaniel P. Berrange data["compression_xbzrle_cache"]) 96