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