On Fri, Dec 20, 2013 at 11:20 AM, Helga Velroyen <[email protected]> wrote:
> > > > On Fri, Dec 20, 2013 at 10:09 AM, Hrvoje Ribicic <[email protected]> wrote: > >> This patch further expands the workload by performing various node >> operations. >> >> Signed-off-by: Hrvoje Ribicic <[email protected]> >> --- >> qa/rapi-workload.py | 83 >> +++++++++++++++++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 83 insertions(+) >> >> diff --git a/qa/rapi-workload.py b/qa/rapi-workload.py >> index 7d9699d..af7469c 100755 >> --- a/qa/rapi-workload.py >> +++ b/qa/rapi-workload.py >> @@ -29,6 +29,7 @@ >> >> import sys >> >> +import ganeti.constants as constants >> from ganeti.rapi.client import GanetiApiError >> >> import qa_config >> @@ -333,6 +334,84 @@ def TestSingleInstance(client, instance_name, >> alternate_name, node_one, >> Finish(client, client.DeleteInstance, instance_name) >> >> >> +def MarkUnmarkNode(client, node, state): >> + """ Given a certain node state, marks a node as being in that state, >> and then >> + unmarks it. >> + >> + @type client C{GanetiRapiClientWrapper} >> + @param client A wrapped RAPI client. >> + @type node string >> + @type state string >> > > colons after variable names for consistency > > Will fix in one last swooping patch. > + >> + """ >> + # pylint: disable=W0142 >> + Finish(client, client.ModifyNode, node, **{state: True}) >> + Finish(client, client.ModifyNode, node, **{state: False}) >> + # pylint: enable=W0142 >> + >> + >> +def TestNodeOperations(client, non_master_node): >> + """ Tests various operations related to nodes only >> + >> + @type client C{GanetiRapiClientWrapper} >> + @param client A wrapped RAPI client. >> + @type non_master_node string >> + @param non_master_node The name of a non-master node in the cluster. >> + >> + """ >> + >> + client.GetNode(non_master_node) >> + >> + old_role = client.GetNodeRole(non_master_node) >> + >> + # Should fail >> + Finish(client, client.SetNodeRole, >> + non_master_node, "master", False, auto_promote=True) >> + >> + Finish(client, client.SetNodeRole, >> + non_master_node, "regular", False, auto_promote=True) >> + >> + Finish(client, client.SetNodeRole, >> + non_master_node, "master-candidate", False, auto_promote=True) >> + >> + Finish(client, client.SetNodeRole, >> + non_master_node, "drained", False, auto_promote=True) >> + >> + Finish(client, client.SetNodeRole, >> + non_master_node, old_role, False, auto_promote=True) >> + >> + Finish(client, client.PowercycleNode, >> + non_master_node, force=False) >> + >> + storage_units_fields = [ >> + "name", "allocatable", "free", "node", "size", "type", "used", >> + ] >> + >> + for storage_type in [constants.ST_LVM_PV, >> + constants.ST_LVM_VG, >> + constants.ST_FILE, >> + ]: >> > > Consider using the constant constants.STS_REPORT which captures exactly > those types that report storage space. > > ACK > > >> + storage_units = Finish(client, client.GetNodeStorageUnits, >> + non_master_node, storage_type, >> + ",".join(storage_units_fields)) >> + >> + if len(storage_units) > 0 and len(storage_units[0]) > 0: >> + # Name is the first entry of the first result, allocatable the >> other >> + unit_name = storage_units[0][0] >> + Finish(client, client.ModifyNodeStorageUnits, >> + non_master_node, storage_type, unit_name, >> + allocatable=not storage_units[0][1]) >> + Finish(client, client.ModifyNodeStorageUnits, >> + non_master_node, storage_type, unit_name, >> + allocatable=storage_units[0][1]) >> + Finish(client, client.RepairNodeStorageUnits, >> + non_master_node, storage_type, unit_name) >> + >> + MarkUnmarkNode(client, non_master_node, "drained") >> + MarkUnmarkNode(client, non_master_node, "powered") >> + MarkUnmarkNode(client, non_master_node, "offline") >> + >> + >> def Workload(client): >> """ The actual RAPI workload used for tests. >> >> @@ -370,6 +449,10 @@ def Workload(client): >> instance_one.Release() >> qa_config.ReleaseManyNodes(nodes) >> >> + node = qa_config.AcquireNode(exclude=qa_config.GetMasterNode()) >> + TestNodeOperations(client, node.primary) >> + node.Release() >> + >> >> def Usage(): >> sys.stderr.write("Usage:\n\trapi-workload.py qa-config-file") >> -- >> 1.8.5.1 >> >> > Rest LGTM > > -- > -- > Helga Velroyen | Software Engineer | [email protected] | > > Google Germany GmbH > Dienerstr. 12 > 80331 München > > Registergericht und -nummer: Hamburg, HRB 86891 > Sitz der Gesellschaft: Hamburg > Geschäftsführer: Graham Law, Christine Elizabeth Flores > Thanks, interdiff for constant change is: diff --git a/qa/rapi-workload.py b/qa/rapi-workload.py index 7a5d13d..19a5e31 100755 --- a/qa/rapi-workload.py +++ b/qa/rapi-workload.py @@ -387,10 +387,7 @@ def TestNodeOperations(client, non_master_node): "name", "allocatable", "free", "node", "size", "type", "used", ] - for storage_type in [constants.ST_LVM_PV, - constants.ST_LVM_VG, - constants.ST_FILE, - ]: + for storage_type in constants.STS_REPORT: storage_units = Finish(client, client.GetNodeStorageUnits, non_master_node, storage_type, ",".join(storage_units_fields))
