<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-04-12T00:19:03.445263" rpa="false" schemaversion="5">
<suite id="s1" name="controller-ddb-expl-lead-movement-longevity.txt">
<suite id="s1-s1" name="Restart Odl With Tell Based True" source="/w/workspace/controller-csit-3node-ddb-expl-lead-movement-longevity-only-vanadium/test/csit/suites/controller/dom_data_broker/restart_odl_with_tell_based_true.robot">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils" type="SETUP">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.151764" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:19:04.147339" elapsed="0.004496"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-12T00:19:04.146842" elapsed="0.005084"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.157508" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-12T00:19:04.153383" elapsed="0.004157"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-12T00:19:04.157790" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:19:04.157660" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-04-12T00:19:04.157616" elapsed="0.000254"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.158406" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:19:04.158033" elapsed="0.000420"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.159016" level="INFO">${cluster_size} = 0</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-12T00:19:04.158650" elapsed="0.000396"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-12T00:19:04.159619" elapsed="0.000309"/>
</kw>
<msg time="2026-04-12T00:19:04.160040" level="INFO">${status} = PASS</msg>
<msg time="2026-04-12T00:19:04.160088" level="INFO">${possibly_int_of_members} = 0</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-12T00:19:04.159224" elapsed="0.000887"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.160685" level="INFO">${int_of_members} = 0</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.160283" elapsed="0.000430"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.162376" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.162096" elapsed="0.000309"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.162848" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.162556" elapsed="0.000318"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.163496" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:19:04.163035" elapsed="0.000489"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.166152" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:04.165955" elapsed="0.000270"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.163588" elapsed="0.002668"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.166860" level="INFO">${ClusterManagement__member_index_list} = []</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:19:04.166423" elapsed="0.000482"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.167454" level="INFO">${ClusterManagement__index_to_ip_mapping} = {}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:19:04.167071" elapsed="0.000426"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.168051" level="INFO">${ClusterManagement__session_list} = []</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:19:04.167680" elapsed="0.000413"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-12T00:19:04.161595" elapsed="0.006557"/>
</kw>
<arg>http_timeout=${http_timeout}</arg>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-12T00:19:04.153010" elapsed="0.015200"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.168394" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:19:04.168279" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-04-12T00:19:04.168259" elapsed="0.000203"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.171672" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.171268" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.172214" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.171922" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:04.172286" elapsed="0.000044"/>
</return>
<msg time="2026-04-12T00:19:04.172462" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:04.170934" elapsed="0.001552"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.172850" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:04.172671" elapsed="0.000238"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.172539" elapsed="0.000396"/>
</for>
<arg>iptables -I INPUT -p tcp --dport ${KARAF_SHELL_PORT} -j ACCEPT; iptables-save</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-12T00:19:04.168701" elapsed="0.004290"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>First connections to Karaf console may fail, so WUKS is used. TODO: Track as a Bug.</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-04-12T00:19:04.173140" elapsed="0.000209"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<arg>BuiltIn.Wait_Until_Keyword_Succeeds</arg>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.173677" elapsed="0.000022"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:04.173524" elapsed="0.000219"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.173400" elapsed="0.000369"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-12T00:19:04.152336" elapsed="0.021490"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Test_Suite_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.176553" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:19:04.176441" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-12T00:19:04.176421" elapsed="0.000202"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.181558" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:19:04.181452" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-04-12T00:19:04.181433" elapsed="0.000217"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.182586" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.182202" elapsed="0.000410"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.183104" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.182816" elapsed="0.000314"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:04.183175" elapsed="0.000030"/>
</return>
<msg time="2026-04-12T00:19:04.183331" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:04.181874" elapsed="0.001481"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.183726" elapsed="0.000023"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.183973" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:19:04.183827" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:19:04.183810" elapsed="0.000238"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:04.183565" elapsed="0.000506"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.183407" elapsed="0.000689"/>
</for>
<arg>Starting suite ${SUITE_SOURCE}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-12T00:19:04.181166" elapsed="0.002985"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-12T00:19:04.174393" elapsed="0.009810"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-12T00:19:04.173978" elapsed="0.010272"/>
</kw>
<arg>http_timeout=125</arg>
<doc>Prepare both FailFast and Karaf logging, log that the caller suite has started.
This keyword is to be used in suite setup, and without it the other keywords may not work properly.</doc>
<status status="PASS" start="2026-04-12T00:19:04.146354" elapsed="0.037944"/>
</kw>
<test id="s1-s1-t1" name="Stop_All_Members" line="30">
<kw name="Stop_Members_From_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.190107" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.189717" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.190620" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.190332" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:04.190740" elapsed="0.000033"/>
</return>
<msg time="2026-04-12T00:19:04.190905" level="INFO">${stop_index_list} = []</msg>
<var>${stop_index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:04.189327" elapsed="0.001602"/>
</kw>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.191905" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.191508" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.192369" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.192090" elapsed="0.000304"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:04.192441" elapsed="0.000031"/>
</return>
<msg time="2026-04-12T00:19:04.192597" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${original_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:04.191136" elapsed="0.001485"/>
</kw>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.194065" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.193694" elapsed="0.000397"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.194532" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.194249" elapsed="0.000309"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:04.194602" elapsed="0.000044"/>
</return>
<msg time="2026-04-12T00:19:04.194794" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:04.193316" elapsed="0.001503"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.195157" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:04.194988" elapsed="0.000228"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.194872" elapsed="0.000370"/>
</for>
<arg>command=${NODE_STOP_COMMAND}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-12T00:19:04.192840" elapsed="0.002455"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.195751" level="INFO">${updated_index_list} = []</msg>
<var>${updated_index_list}</var>
<arg>@{index_list}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.195443" elapsed="0.000333"/>
</kw>
<kw name="Remove Values From List" owner="Collections">
<arg>${updated_index_list}</arg>
<arg>@{stop_index_list}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:19:04.196020" elapsed="0.000233"/>
</kw>
<if>
<branch type="IF" condition="not ${confirm}">
<return>
<value>${updated_index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.196431" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:19:04.196327" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-04-12T00:19:04.196308" elapsed="0.000190"/>
</if>
<for flavor="IN">
<iter>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>${timeout}</arg>
<arg>2s</arg>
<arg>Verify_Karaf_Is_Not_Running_On_Member</arg>
<arg>member_index=${index}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.196818" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:04.196671" elapsed="0.000208"/>
</iter>
<var>${index}</var>
<value>@{stop_index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.196537" elapsed="0.000367"/>
</for>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.200272" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.199897" elapsed="0.000402"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.200754" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.200457" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:04.200824" elapsed="0.000029"/>
</return>
<msg time="2026-04-12T00:19:04.200977" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:04.199508" elapsed="0.001493"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.201377" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:04.201207" elapsed="0.000230"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.201089" elapsed="0.000374"/>
</for>
<arg>command=netstat -pnatu | grep 2550</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-12T00:19:04.197100" elapsed="0.004418"/>
</kw>
<return>
<value>${updated_index_list}</value>
<status status="PASS" start="2026-04-12T00:19:04.201556" elapsed="0.000028"/>
</return>
<doc>If the list is empty, stops all ODL instances. Otherwise stop members based on ${stop_index_list}
If ${confirm} is True, verify stopped instances are not there anymore.
The KW will return a list of available members: ${updated index_list}=${original_index_list}-${member_index_list}</doc>
<status status="PASS" start="2026-04-12T00:19:04.184994" elapsed="0.016702"/>
</kw>
<doc>Stop every odl node.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-04-12T00:19:04.184367" elapsed="0.017441"/>
</test>
<test id="s1-s1-t2" name="Set_Tell_Based_Protocol_Usage" line="34">
<kw name="Change_Use_Tell_Based_Protocol" owner="DdbCommons">
<kw name="Check_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.206136" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.205757" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.206603" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.206320" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:04.206690" elapsed="0.000047"/>
</return>
<msg time="2026-04-12T00:19:04.206875" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:04.205370" elapsed="0.001535"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.207235" elapsed="0.000023"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:04.207082" elapsed="0.000223"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.206961" elapsed="0.000371"/>
</for>
<arg>sed -ie "s/^#use-tell-based-protocol=true/use-tell-based-protocol=true/g" ${DATASTORE_CFG}</arg>
<doc>Cycle through indices (or all), run bash command on each, using temporary SSH session and restoring the previously active one.</doc>
<status status="PASS" start="2026-04-12T00:19:04.203027" elapsed="0.004358"/>
</kw>
<kw name="Check_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.210826" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.210387" elapsed="0.000465"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.211294" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.211012" elapsed="0.000307"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:04.211362" elapsed="0.000028"/>
</return>
<msg time="2026-04-12T00:19:04.211513" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:04.210011" elapsed="0.001525"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.211858" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:04.211710" elapsed="0.000224"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.211586" elapsed="0.000374"/>
</for>
<arg>sed -ie "s/^#use-tell-based-protocol=false/use-tell-based-protocol=false/g" ${DATASTORE_CFG}</arg>
<doc>Cycle through indices (or all), run bash command on each, using temporary SSH session and restoring the previously active one.</doc>
<status status="PASS" start="2026-04-12T00:19:04.207600" elapsed="0.004413"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Check_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.216015" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.215638" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.216482" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.216200" elapsed="0.000308"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:04.216551" elapsed="0.000029"/>
</return>
<msg time="2026-04-12T00:19:04.216721" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:04.215251" elapsed="0.001495"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.217098" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:04.216948" elapsed="0.000220"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.216835" elapsed="0.000359"/>
</for>
<arg>sed -ie "s/^use-tell-based-protocol=false/use-tell-based-protocol=true/g" ${DATASTORE_CFG}</arg>
<doc>Cycle through indices (or all), run bash command on each, using temporary SSH session and restoring the previously active one.</doc>
<status status="PASS" start="2026-04-12T00:19:04.212671" elapsed="0.004576"/>
</kw>
<msg time="2026-04-12T00:19:04.217288" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>"${status}" == "True"</arg>
<arg>ClusterManagement.Check_Bash_Command_On_List_Or_All</arg>
<arg>sed -ie "s/^use-tell-based-protocol=false/use-tell-based-protocol=true/g" ${DATASTORE_CFG}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:19:04.212168" elapsed="0.005176"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"${status}" == "False"</arg>
<arg>ClusterManagement.Check_Bash_Command_On_List_Or_All</arg>
<arg>sed -ie "s/^use-tell-based-protocol=true/use-tell-based-protocol=false/g" ${DATASTORE_CFG}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.217505" elapsed="0.000021"/>
</kw>
<kw name="Fail" owner="BuiltIn">
<arg>Failure in status. Status can be True or False.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.217690" elapsed="0.000021"/>
</kw>
<arg>True</arg>
<arg>${DATASTORE_CFG}</arg>
<doc>Change status use-tell-based-protocol to True or False</doc>
<status status="PASS" start="2026-04-12T00:19:04.202566" elapsed="0.015209"/>
</kw>
<kw name="Check_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.221103" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.220721" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.221571" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.221289" elapsed="0.000307"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:04.221655" elapsed="0.000030"/>
</return>
<msg time="2026-04-12T00:19:04.221809" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:04.220338" elapsed="0.001495"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.222136" elapsed="0.000025"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:04.221990" elapsed="0.000216"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.221883" elapsed="0.000348"/>
</for>
<arg>cat ${DATASTORE_CFG}</arg>
<doc>Cycle through indices (or all), run bash command on each, using temporary SSH session and restoring the previously active one.</doc>
<status status="PASS" start="2026-04-12T00:19:04.217992" elapsed="0.004291"/>
</kw>
<kw name="Clean_Directories_On_List_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.232490" level="INFO">${path_list} = ['tmp/', 'data/', 'cache/', 'snapshots/', 'journal/', 'segmented-journal/', 'etc/opendaylight/current/', 'etc/host.key']</msg>
<var>${path_list}</var>
<arg>"${directory_list}" == "${EMPTY}"</arg>
<arg>${ODL_DEFAULT_DATA_PATHS}</arg>
<arg>${directory_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.230249" elapsed="0.002270"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${tmp_dir}&quot;&quot;&quot; != &quot;&quot;">
<kw name="Check_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.234223" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.233850" elapsed="0.000399"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.234709" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.234409" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:04.234790" elapsed="0.000028"/>
</return>
<msg time="2026-04-12T00:19:04.234944" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:04.233464" elapsed="0.001504"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.235276" elapsed="0.000023"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:04.235129" elapsed="0.000215"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.235019" elapsed="0.000350"/>
</for>
<arg>mkdir -p '${tmp_dir}' &amp;&amp; rm -vrf '${tmp_dir}/log' &amp;&amp; mv -vf '${karaf_home}/data/log' '${tmp_dir}/'</arg>
<arg>${member_index_list}</arg>
<doc>Cycle through indices (or all), run bash command on each, using temporary SSH session and restoring the previously active one.</doc>
<status status="PASS" start="2026-04-12T00:19:04.232879" elapsed="0.002579"/>
</kw>
<status status="PASS" start="2026-04-12T00:19:04.232599" elapsed="0.002895"/>
</branch>
<status status="PASS" start="2026-04-12T00:19:04.232579" elapsed="0.002940"/>
</if>
<kw name="Safe_With_Ssh_To_List_Or_All_Run_Keyword" owner="ClusterManagement">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-04-12T00:19:04.236961" level="INFO">index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-04-12T00:19:04.237070" level="INFO">${current_connection} = index=None
host=None
alias=None
port=22
timeout=3 seconds
newline=

prompt=None
term_type=vt100
width=80
height=24
path_separator=/
encoding=utf8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-04-12T00:19:04.236762" elapsed="0.000335"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="With_Ssh_To_List_Or_All_Run_Keyword" owner="ClusterManagement">
<kw name="Comment" owner="BuiltIn">
<arg>This keyword is experimental and there is high risk of being replaced by another approach.</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-04-12T00:19:04.238200" elapsed="0.000207"/>
</kw>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.239438" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.239057" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.239931" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.239639" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:04.240002" elapsed="0.000029"/>
</return>
<msg time="2026-04-12T00:19:04.240152" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:04.238610" elapsed="0.001566"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<var>${member_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.240669" elapsed="0.000025"/>
</kw>
<kw name="Run_Unsafely_Keyword_Over_Temporary_Odl_Session" owner="SSHKeywords">
<arg>${member_ip}</arg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Open connection to given IP address, run keyword, close connection, return result.
This is unsafe in the sense that previously active session will be switched out off, but safe in the sense only the temporary connection is closed.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.240950" elapsed="0.000023"/>
</kw>
<var name="${member_index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:04.240482" elapsed="0.000534"/>
</iter>
<var>${member_index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.240227" elapsed="0.000814"/>
</for>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>For each index in given list (or all): activate SSH connection, run given Keyword, close active connection. Return None.
Beware that in order to avoid "got positional argument after named arguments", first two arguments in the call should not be named.</doc>
<status status="PASS" start="2026-04-12T00:19:04.237776" elapsed="0.003319"/>
</kw>
<msg time="2026-04-12T00:19:04.241138" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:19:04.237255" elapsed="0.003935"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:19:04.244200" elapsed="0.000308"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-04-12T00:19:04.244691" elapsed="0.000163"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-04-12T00:19:04.245005" elapsed="0.000103"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-04-12T00:19:04.241491" elapsed="0.003669"/>
</kw>
<arg>With_Ssh_To_List_Or_All_Run_Keyword</arg>
<arg>${member_index_list}</arg>
<arg>${keyword_name}</arg>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Store current connection index, run keyword returning its result, restore connection in teardown.
Note that in order to avoid "got positional argument after named arguments", it is safer to use positional (not named) arguments on call.</doc>
<status status="PASS" start="2026-04-12T00:19:04.236197" elapsed="0.009020"/>
</kw>
<arg>${member_index_list}</arg>
<arg>ClusterManagement__Clean_Directories</arg>
<arg>${path_list}</arg>
<arg>${karaf_home}</arg>
<doc>Remember active ssh connection index, call With_Ssh_To_List_Or_All_Run_Keyword, return None. Restore the conection index on teardown.</doc>
<status status="PASS" start="2026-04-12T00:19:04.235698" elapsed="0.009580"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${tmp_dir}&quot;&quot;&quot; != &quot;&quot;">
<kw name="Check_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.247016" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.246591" elapsed="0.000451"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.247481" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.247201" elapsed="0.000305"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:04.247550" elapsed="0.000029"/>
</return>
<msg time="2026-04-12T00:19:04.247717" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:04.246222" elapsed="0.001556"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Check_Bash_Command_On_Member" owner="ClusterManagement">
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<arg>return_success_only=${return_success_only}</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Open SSH session, call SSHKeywords.Execute_Command_Passes, close session, restore previously active session and return output.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.248090" elapsed="0.000023"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:04.247942" elapsed="0.000217"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.247832" elapsed="0.000352"/>
</for>
<arg>mkdir -p '${karaf_home}/data' &amp;&amp; rm -vrf '${karaf_home}/log' &amp;&amp; mv -vf '${tmp_dir}/log' '${karaf_home}/data/'</arg>
<arg>${member_index_list}</arg>
<doc>Cycle through indices (or all), run bash command on each, using temporary SSH session and restoring the previously active one.</doc>
<status status="PASS" start="2026-04-12T00:19:04.245623" elapsed="0.002614"/>
</kw>
<status status="PASS" start="2026-04-12T00:19:04.245357" elapsed="0.002915"/>
</branch>
<status status="PASS" start="2026-04-12T00:19:04.245335" elapsed="0.002962"/>
</if>
<arg>tmp_dir=/tmp</arg>
<doc>Clear @{directory_list} or ['tmp/', 'data/', 'cache/', 'snapshots/', 'journal/', 'segmented-journal/', 'etc/opendaylight/current/', 'etc/host.key'] for members in given list or all. Return None.
If ${tmp_dir} is nonempty, use that location to preserve data/log/.
This is intended to return Karaf (offline) to the state it was upon the first boot.</doc>
<status status="PASS" start="2026-04-12T00:19:04.226114" elapsed="0.022226"/>
</kw>
<doc>Un-comment the flag usage in config file. Also clean most data except data/log/.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-04-12T00:19:04.202015" elapsed="0.046429"/>
</test>
<test id="s1-s1-t3" name="Start_All_And_Sync" line="40">
<kw name="Start_Members_From_List_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.261439" level="INFO">${base_command} = /tmp/karaf-0.23.1-SNAPSHOT/bin/start</msg>
<var>${base_command}</var>
<arg>"""${karaf_home}""" != ""</arg>
<arg>${karaf_home}/bin/start</arg>
<arg>${NODE_START_COMMAND}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.261064" elapsed="0.000402"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.262008" level="INFO">${command} = /tmp/karaf-0.23.1-SNAPSHOT/bin/start</msg>
<var>${command}</var>
<arg>"""${export_java_home}""" != ""</arg>
<arg>export JAVA_HOME="${export_java_home}"; ${base_command}</arg>
<arg>${base_command}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.261651" elapsed="0.000383"/>
</kw>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-04-12T00:19:04.262500" level="INFO">${epoch} = 1775953144.262423</msg>
<var>${epoch}</var>
<arg>time_zone=UTC</arg>
<arg>result_format=epoch</arg>
<arg>exclude_millis=False</arg>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-04-12T00:19:04.262222" elapsed="0.000305"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.263132" level="INFO">${gc_filepath} = /tmp/karaf-0.23.1-SNAPSHOT/data/log/gc_1775953144.262423.log</msg>
<var>${gc_filepath}</var>
<arg>"""${karaf_home}""" != ""</arg>
<arg>${karaf_home}/data/log/gc_${epoch}.log</arg>
<arg>${GC_LOG_PATH}/gc_${epoch}.log</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.262711" elapsed="0.000448"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.263704" level="INFO">${gc_options} = -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/tmp/karaf-0.23.1-SNAPSHOT/data/log/gc_1775953144.262423.log</msg>
<var>${gc_options}</var>
<arg>"docker" not in """${node_start_command}"""</arg>
<arg>-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:${gc_filepath}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.263325" elapsed="0.000406"/>
</kw>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.265200" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.264827" elapsed="0.000399"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.265680" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.265383" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:04.265751" elapsed="0.000029"/>
</return>
<msg time="2026-04-12T00:19:04.265902" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:04.264437" elapsed="0.001488"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.266258" elapsed="0.000023"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:04.266083" elapsed="0.000233"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.265976" elapsed="0.000366"/>
</for>
<arg>command=${command} ${gc_options}</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-12T00:19:04.263935" elapsed="0.002459"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Verify_Members_Are_Ready" owner="ClusterManagement">
<if>
<branch type="IF" condition="${verify_cluster_sync}">
<kw name="Check_Cluster_Is_In_Sync" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.278408" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.278034" elapsed="0.000400"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.278928" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.278594" elapsed="0.000401"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:04.279044" elapsed="0.000030"/>
</return>
<msg time="2026-04-12T00:19:04.279201" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:04.277659" elapsed="0.001566"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Sync_Status_Of_Member" owner="ClusterManagement">
<var>${status}</var>
<arg>member_index=${index}</arg>
<doc>Obtain IP, two GETs from jolokia URIs, return combined sync status as string.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.279669" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="'True' == '${status}'">
<continue>
<status status="NOT RUN" start="2026-04-12T00:19:04.279804" elapsed="0.000019"/>
</continue>
<status status="NOT RUN" start="2026-04-12T00:19:04.279762" elapsed="0.000088"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:19:04.279746" elapsed="0.000125"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Index ${index} has incorrect status: ${status}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.280010" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:04.279432" elapsed="0.000631"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.279275" elapsed="0.000813"/>
</for>
<arg>${member_index_list}</arg>
<doc>Fail if no-sync is detected on a member from list (or any).</doc>
<status status="PASS" start="2026-04-12T00:19:04.277256" elapsed="0.002885"/>
</kw>
<status status="PASS" start="2026-04-12T00:19:04.276954" elapsed="0.003217"/>
</branch>
<status status="PASS" start="2026-04-12T00:19:04.276934" elapsed="0.003260"/>
</if>
<if>
<branch type="IF" condition="${verify_restconf}">
<kw name="Verify_Restconf_Is_Available" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.281644" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.281257" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.282115" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.281834" elapsed="0.000306"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:04.282184" elapsed="0.000029"/>
</return>
<msg time="2026-04-12T00:19:04.282334" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:04.280890" elapsed="0.001468"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${session}</var>
<arg>member_index=${index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.282701" elapsed="0.000025"/>
</kw>
<kw name="Get_As_Json_Templated" owner="TemplatedRequests">
<arg>session=${session}</arg>
<arg>folder=${RESTCONF_MODULES_DIR}</arg>
<arg>verify=False</arg>
<doc>Add arguments sensible for JSON data, return Get_Templated response text.
Optionally, verification against JSON data (may be iterated) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.286909" elapsed="0.000027"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:04.282520" elapsed="0.004457"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.282407" elapsed="0.004596"/>
</for>
<arg>${member_index_list}</arg>
<status status="PASS" start="2026-04-12T00:19:04.280508" elapsed="0.006550"/>
</kw>
<status status="PASS" start="2026-04-12T00:19:04.280247" elapsed="0.006838"/>
</branch>
<status status="PASS" start="2026-04-12T00:19:04.280231" elapsed="0.006877"/>
</if>
<if>
<branch type="IF" condition="${verify_system_status} and (&quot;${service_list}&quot; != &quot;[[]]&quot;)">
<kw name="Check Status Of Services Is OPERATIONAL" owner="ClusterManagement">
<arg>@{service_list}</arg>
<doc>This keyword will verify whether all the services are operational in all the ODL nodes</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.287490" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:19:04.287164" elapsed="0.000384"/>
</branch>
<status status="PASS" start="2026-04-12T00:19:04.287148" elapsed="0.000423"/>
</if>
<arg>${member_index_list}</arg>
<arg>${wait_for_sync}</arg>
<arg>${verify_restconf}</arg>
<arg>${check_system_status}</arg>
<arg>${service_list}</arg>
<doc>Verifies the specified readiness conditions for the given listed members after startup.
If ${verify_cluster_sync}, verifies the datastores have synced with the rest of the cluster.
If True, verifies RESTCONF is available.
If ${verify_system_status}, verifies the system services are OPERATIONAL.</doc>
<status status="PASS" start="2026-04-12T00:19:04.276516" elapsed="0.011102"/>
</kw>
<arg>${timeout}</arg>
<arg>10s</arg>
<arg>Verify_Members_Are_Ready</arg>
<arg>${member_index_list}</arg>
<arg>${wait_for_sync}</arg>
<arg>${verify_restconf}</arg>
<arg>${check_system_status}</arg>
<arg>${service_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-12T00:19:04.266550" elapsed="0.021146"/>
</kw>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement" type="TEARDOWN">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.291020" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.290615" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.291486" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.291205" elapsed="0.000306"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:04.291555" elapsed="0.000028"/>
</return>
<msg time="2026-04-12T00:19:04.291722" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:04.290216" elapsed="0.001531"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.292114" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:04.291943" elapsed="0.000230"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.291832" elapsed="0.000366"/>
</for>
<arg>command=netstat -pnatu | grep 2550</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-12T00:19:04.287960" elapsed="0.004292"/>
</kw>
<doc>If the list is empty, start all cluster members. Otherwise, start members based on present indices.
If ${wait_for_sync}, wait for cluster sync on listed members.
Optionally karaf_home can be overriden. Optionally specific JAVA_HOME is used for starting.
Garbage collection is unconditionally logged to files. TODO: Make that reasonable conditional?</doc>
<status status="PASS" start="2026-04-12T00:19:04.253271" elapsed="0.039027"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.306061" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:19:04.305757" elapsed="0.000331"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:19:04.325782" elapsed="0.000224"/>
</kw>
<msg time="2026-04-12T00:19:04.326059" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:19:04.325124" elapsed="0.000988"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational', 'entity-ownership:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:19:04.324666" elapsed="0.001520"/>
</kw>
<msg time="2026-04-12T00:19:04.326232" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:19:04.315841" elapsed="0.010434"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:19:04.315444" elapsed="0.010902"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:19:04.327057" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:19:04.327102" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:19:04.326806" elapsed="0.000318"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.329910" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.329514" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.330375" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.330095" elapsed="0.000305"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:04.330445" elapsed="0.000029"/>
</return>
<msg time="2026-04-12T00:19:04.330598" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:04.328973" elapsed="0.001649"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:19:04.330803" elapsed="0.000158"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.331453" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:04.331121" elapsed="0.000358"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.331889" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.331650" elapsed="0.000265"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.332296" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:04.332062" elapsed="0.000258"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.332737" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.332995" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:19:04.332848" elapsed="0.000201"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.333212" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:19:04.333073" elapsed="0.000232"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.333477" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:19:04.333330" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:19:04.332825" elapsed="0.000726"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:04.332553" elapsed="0.001021"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.332366" elapsed="0.001232"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:19:04.333656" elapsed="0.000029"/>
</return>
<msg time="2026-04-12T00:19:04.333861" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:19:04.333907" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:19:04.328237" elapsed="0.005692"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.334506" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:19:04.334585" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:19:04.334099" elapsed="0.000510"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:19:04.335898" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:19:04.335203" elapsed="0.000877">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:19:04.334697" elapsed="0.001540">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:19:04.334678" elapsed="0.001632">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.336683" elapsed="0.000050"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.337077" elapsed="0.000044"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.337219" elapsed="0.000034"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:19:04.327401" elapsed="0.010068">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.337897" elapsed="0.000048"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.338261" elapsed="0.000042"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:04.338617" elapsed="0.000072"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:19:04.326553" elapsed="0.012358">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:19:04.326398" elapsed="0.012677">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:19:04.339192" elapsed="0.000036"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:19:04.301574" elapsed="0.037832">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:19:14.359685" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:19:14.359273" elapsed="0.000447"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:19:14.379443" elapsed="0.000249"/>
</kw>
<msg time="2026-04-12T00:19:14.379748" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:19:14.378787" elapsed="0.001024"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:19:14.378310" elapsed="0.001578"/>
</kw>
<msg time="2026-04-12T00:19:14.379959" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:19:14.369395" elapsed="0.010610"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:19:14.369008" elapsed="0.011071"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:19:14.380803" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:19:14.380848" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:19:14.380535" elapsed="0.000335"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:14.383502" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:14.383111" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:14.384012" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:14.383703" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:14.384085" elapsed="0.000031"/>
</return>
<msg time="2026-04-12T00:19:14.384243" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:14.382731" elapsed="0.001536"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:19:14.384417" elapsed="0.000154"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:14.385075" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:14.384743" elapsed="0.000357"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:14.385489" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:14.385256" elapsed="0.000257"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:14.385905" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:14.385673" elapsed="0.000258"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:14.386329" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:14.386595" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:19:14.386448" elapsed="0.000216"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:14.386829" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:19:14.386690" elapsed="0.000190"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:14.387046" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:19:14.386902" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:19:14.386427" elapsed="0.000690"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:14.386163" elapsed="0.000977"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:14.385976" elapsed="0.001190"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:19:14.387205" elapsed="0.000026"/>
</return>
<msg time="2026-04-12T00:19:14.387400" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:19:14.387445" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:19:14.381998" elapsed="0.005470"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:19:14.389257" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:19:14.389338" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:19:14.387648" elapsed="0.001714"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:19:14.389953" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:19:14.389667" elapsed="0.000367">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:19:14.389433" elapsed="0.000669">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:19:14.389415" elapsed="0.000720">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:14.390289" elapsed="0.000022"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:14.390462" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:14.390527" elapsed="0.000017"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:19:14.381163" elapsed="0.009521">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:14.390859" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:14.391026" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:14.391188" elapsed="0.000020"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:19:14.380392" elapsed="0.010869">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:19:14.380219" elapsed="0.011097">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:19:14.391367" elapsed="0.000015"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:19:14.353643" elapsed="0.037818">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:19:24.411478" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:19:24.410907" elapsed="0.000619"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:19:24.431769" elapsed="0.000252"/>
</kw>
<msg time="2026-04-12T00:19:24.432077" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:19:24.431083" elapsed="0.001058"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:19:24.430607" elapsed="0.001622"/>
</kw>
<msg time="2026-04-12T00:19:24.432276" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:19:24.421575" elapsed="0.010745"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:19:24.421170" elapsed="0.011223"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:19:24.433066" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:19:24.433112" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:19:24.432804" elapsed="0.000330"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:24.435799" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:24.435367" elapsed="0.000458"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:24.436266" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:24.435985" elapsed="0.000307"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:24.436338" elapsed="0.000033"/>
</return>
<msg time="2026-04-12T00:19:24.436496" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:24.434996" elapsed="0.001524"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:19:24.436689" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:24.437329" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:24.437004" elapsed="0.000351"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:24.437978" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:24.437510" elapsed="0.000495"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:24.438401" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:24.438154" elapsed="0.000273"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:24.438841" elapsed="0.000024"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:24.439194" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:19:24.439041" elapsed="0.000208"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:24.439426" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:19:24.439274" elapsed="0.000207"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:24.439660" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:19:24.439503" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:19:24.439020" elapsed="0.000715"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:24.438671" elapsed="0.001089"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:24.438474" elapsed="0.001312"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:19:24.439826" elapsed="0.000027"/>
</return>
<msg time="2026-04-12T00:19:24.440028" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:19:24.440073" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:19:24.434269" elapsed="0.005827"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:19:24.440539" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:19:24.440615" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:19:24.440267" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:19:24.441220" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:19:24.440938" elapsed="0.000368">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:19:24.440723" elapsed="0.000649">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:19:24.440706" elapsed="0.000697">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:24.441554" elapsed="0.000021"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:24.441744" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:24.441810" elapsed="0.000016"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:19:24.433426" elapsed="0.008490">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:24.442087" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:24.442248" elapsed="0.000027"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:24.442419" elapsed="0.000019"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:19:24.432660" elapsed="0.009828">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:19:24.432457" elapsed="0.010087">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:19:24.442593" elapsed="0.000016"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:19:24.404987" elapsed="0.037715">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:19:34.457583" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:19:34.457191" elapsed="0.000428"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:19:34.477358" elapsed="0.000250"/>
</kw>
<msg time="2026-04-12T00:19:34.477679" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:19:34.476710" elapsed="0.001034"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:19:34.476235" elapsed="0.001589"/>
</kw>
<msg time="2026-04-12T00:19:34.478002" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:19:34.467274" elapsed="0.010776"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:19:34.466886" elapsed="0.011239"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:19:34.478777" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:19:34.478821" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:19:34.478508" elapsed="0.000335"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:34.481751" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:34.481346" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:34.482225" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:34.481939" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:34.482299" elapsed="0.000033"/>
</return>
<msg time="2026-04-12T00:19:34.482461" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:34.480748" elapsed="0.001736"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:19:34.482652" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:34.483300" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:34.482967" elapsed="0.000378"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:34.483766" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:34.483507" elapsed="0.000286"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:34.484175" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:34.483941" elapsed="0.000258"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:34.484595" elapsed="0.000024"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:34.484872" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:19:34.484723" elapsed="0.000203"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:34.485090" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:19:34.484951" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:34.485303" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:19:34.485164" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:19:34.484702" elapsed="0.000673"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:34.484425" elapsed="0.000973"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:34.484245" elapsed="0.001179"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:19:34.485465" elapsed="0.000027"/>
</return>
<msg time="2026-04-12T00:19:34.485676" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:19:34.485723" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:19:34.480026" elapsed="0.005720"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:19:34.486189" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:19:34.486265" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:19:34.485915" elapsed="0.000374"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:19:34.486876" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:19:34.486570" elapsed="0.000394">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:19:34.486356" elapsed="0.000674">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:19:34.486339" elapsed="0.000722">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:34.487212" elapsed="0.000073"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:34.487461" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:34.487528" elapsed="0.000016"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:19:34.479141" elapsed="0.008509">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:34.487825" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:34.487987" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:34.488147" elapsed="0.000020"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:19:34.478366" elapsed="0.009850">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:19:34.478191" elapsed="0.010081">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:19:34.488322" elapsed="0.000015"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:19:34.451590" elapsed="0.036827">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:19:44.507561" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:19:44.507145" elapsed="0.000451"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:19:44.527842" elapsed="0.000243"/>
</kw>
<msg time="2026-04-12T00:19:44.528142" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:19:44.527114" elapsed="0.001090"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:19:44.526613" elapsed="0.001672"/>
</kw>
<msg time="2026-04-12T00:19:44.528332" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:19:44.517396" elapsed="0.010980"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:19:44.516979" elapsed="0.011472"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:19:44.529104" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:19:44.529148" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:19:44.528852" elapsed="0.000320"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:44.531880" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:44.531473" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:44.532347" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:44.532064" elapsed="0.000308"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:44.532420" elapsed="0.000032"/>
</return>
<msg time="2026-04-12T00:19:44.532579" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:44.531075" elapsed="0.001529"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:19:44.532772" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:44.533413" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:44.533084" elapsed="0.000355"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:44.533874" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:44.533618" elapsed="0.000282"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:44.534364" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:44.534129" elapsed="0.000261"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:44.534801" elapsed="0.000024"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:44.535070" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:19:44.534920" elapsed="0.000205"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:44.535290" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:19:44.535150" elapsed="0.000192"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:44.535506" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:19:44.535365" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:19:44.534899" elapsed="0.000680"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:44.534617" elapsed="0.000986"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:44.534436" elapsed="0.001208"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:19:44.535688" elapsed="0.000028"/>
</return>
<msg time="2026-04-12T00:19:44.535885" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:19:44.535931" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:19:44.530324" elapsed="0.005630"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:19:44.536399" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:19:44.536475" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:19:44.536124" elapsed="0.000393"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:19:44.537160" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:19:44.536859" elapsed="0.000389">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:19:44.536612" elapsed="0.000704">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:19:44.536588" elapsed="0.000761">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:44.537503" elapsed="0.000021"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:44.537714" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:44.537781" elapsed="0.000016"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:19:44.529460" elapsed="0.008426">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:44.538055" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:44.538215" elapsed="0.000019"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:44.538375" elapsed="0.000019"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:19:44.528709" elapsed="0.009735">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:19:44.528515" elapsed="0.009984">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:19:44.538548" elapsed="0.000015"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:19:44.501336" elapsed="0.037318">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:19:54.559428" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:19:54.558806" elapsed="0.000678"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:19:54.579330" elapsed="0.000275"/>
</kw>
<msg time="2026-04-12T00:19:54.579688" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:19:54.578576" elapsed="0.001348"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:19:54.578119" elapsed="0.001896"/>
</kw>
<msg time="2026-04-12T00:19:54.580063" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:19:54.569164" elapsed="0.010942"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:19:54.568780" elapsed="0.011399"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:19:54.580880" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:19:54.580932" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:19:54.580600" elapsed="0.000354"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:54.583708" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:54.583292" elapsed="0.000443"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:54.584177" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:54.583895" elapsed="0.000307"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:19:54.584253" elapsed="0.000038"/>
</return>
<msg time="2026-04-12T00:19:54.584425" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:19:54.582842" elapsed="0.001607"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:19:54.584600" elapsed="0.000174"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:19:54.585263" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:19:54.584934" elapsed="0.000355"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:54.585695" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:54.585444" elapsed="0.000276"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:19:54.586095" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:19:54.585865" elapsed="0.000255"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:54.586522" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:54.586830" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:19:54.586668" elapsed="0.000218"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:54.587079" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:19:54.586915" elapsed="0.000228"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:54.587311" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:19:54.587168" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:19:54.586623" elapsed="0.000760"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:19:54.586345" elapsed="0.001064"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:54.586166" elapsed="0.001274"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:19:54.587482" elapsed="0.000027"/>
</return>
<msg time="2026-04-12T00:19:54.587694" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:19:54.587740" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:19:54.582122" elapsed="0.005641"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:19:54.588220" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:19:54.588296" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:19:54.587933" elapsed="0.000386"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:19:54.589136" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:19:54.588838" elapsed="0.000409">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:19:54.588597" elapsed="0.000727">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:19:54.588414" elapsed="0.000941">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:54.589507" elapsed="0.000021"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:54.589695" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:19:54.589762" elapsed="0.000016"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:19:54.581260" elapsed="0.008610">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:54.590040" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:54.590201" elapsed="0.000019"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:19:54.590360" elapsed="0.000019"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:19:54.580455" elapsed="0.009975">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:19:54.580257" elapsed="0.010228">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:19:54.590534" elapsed="0.000015"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:19:54.552776" elapsed="0.037862">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:20:04.610611" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:20:04.609967" elapsed="0.000715"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:20:04.630457" elapsed="0.000263"/>
</kw>
<msg time="2026-04-12T00:20:04.630780" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:20:04.629766" elapsed="0.001082"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:20:04.629290" elapsed="0.001642"/>
</kw>
<msg time="2026-04-12T00:20:04.630979" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:20:04.620407" elapsed="0.010616"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:20:04.620016" elapsed="0.011081"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:20:04.631757" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:20:04.631804" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:20:04.631492" elapsed="0.000336"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:20:04.634505" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:20:04.634078" elapsed="0.000454"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:20:04.634999" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:20:04.634709" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:20:04.635076" elapsed="0.000033"/>
</return>
<msg time="2026-04-12T00:20:04.635235" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:20:04.633702" elapsed="0.001557"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:20:04.635412" elapsed="0.000320"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:20:04.636237" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:20:04.635895" elapsed="0.000368"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:20:04.636890" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:20:04.636423" elapsed="0.000494"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:20:04.637306" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:20:04.637067" elapsed="0.000265"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:04.637746" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:04.638012" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:20:04.637862" elapsed="0.000205"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:04.638231" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:20:04.638092" elapsed="0.000193"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:04.638462" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:20:04.638320" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:20:04.637841" elapsed="0.000696"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:20:04.637561" elapsed="0.000999"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:20:04.637380" elapsed="0.001206"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:20:04.638641" elapsed="0.000029"/>
</return>
<msg time="2026-04-12T00:20:04.638841" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:20:04.638887" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:20:04.632972" elapsed="0.005939"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:20:04.639356" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:20:04.639433" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:20:04.639081" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:20:04.640035" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:20:04.639754" elapsed="0.000371">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:20:04.639524" elapsed="0.000668">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:20:04.639507" elapsed="0.000717">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:04.640375" elapsed="0.000021"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:04.640547" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:20:04.640612" elapsed="0.000030"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:20:04.632127" elapsed="0.008604">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:04.640902" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:04.641064" elapsed="0.000019"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:04.641226" elapsed="0.000019"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:20:04.631347" elapsed="0.009948">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:20:04.631167" elapsed="0.010182">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:20:04.641399" elapsed="0.000015"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:20:04.603998" elapsed="0.037493">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:20:14.660910" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:20:14.660414" elapsed="0.000704"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:20:14.680871" elapsed="0.000277"/>
</kw>
<msg time="2026-04-12T00:20:14.681215" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:20:14.680173" elapsed="0.001124"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:20:14.679706" elapsed="0.001677"/>
</kw>
<msg time="2026-04-12T00:20:14.681432" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:20:14.670806" elapsed="0.010670"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:20:14.670386" elapsed="0.011163"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:20:14.682275" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:20:14.682320" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:20:14.682001" elapsed="0.000341"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:20:14.685305" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:20:14.684916" elapsed="0.000416"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:20:14.685793" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:20:14.685491" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:20:14.685871" elapsed="0.000037"/>
</return>
<msg time="2026-04-12T00:20:14.686040" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:20:14.684524" elapsed="0.001540"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:20:14.686216" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:20:14.686918" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:20:14.686553" elapsed="0.000391"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:20:14.687336" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:20:14.687100" elapsed="0.000261"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:20:14.687769" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:20:14.687507" elapsed="0.000288"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:14.688195" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:14.688491" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:20:14.688333" elapsed="0.000213"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:14.688728" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:20:14.688574" elapsed="0.000208"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:14.688946" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:20:14.688805" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:20:14.688302" elapsed="0.000715"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:20:14.688026" elapsed="0.001018"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:20:14.687841" elapsed="0.001233"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:20:14.689116" elapsed="0.000026"/>
</return>
<msg time="2026-04-12T00:20:14.689317" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:20:14.689362" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:20:14.683552" elapsed="0.005833"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:20:14.689903" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:20:14.689979" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:20:14.689597" elapsed="0.000406"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:20:14.690611" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:20:14.690286" elapsed="0.000461">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:20:14.690071" elapsed="0.000754">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:20:14.690054" elapsed="0.000802">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:14.691009" elapsed="0.000021"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:14.691180" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:20:14.691244" elapsed="0.000016"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:20:14.682703" elapsed="0.008649">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:14.691520" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:14.691695" elapsed="0.000022"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:14.691857" elapsed="0.000020"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:20:14.681852" elapsed="0.010075">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:20:14.681640" elapsed="0.010348">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:20:14.692038" elapsed="0.000015"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:20:14.654399" elapsed="0.037730">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:20:24.709969" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:20:24.709500" elapsed="0.000511"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:20:24.730362" elapsed="0.000261"/>
</kw>
<msg time="2026-04-12T00:20:24.730702" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:20:24.729677" elapsed="0.001101"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:20:24.729196" elapsed="0.001665"/>
</kw>
<msg time="2026-04-12T00:20:24.730909" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:20:24.719938" elapsed="0.011014"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:20:24.719526" elapsed="0.011498"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:20:24.731723" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:20:24.731768" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:20:24.731454" elapsed="0.000337"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:20:24.734463" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:20:24.734072" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:20:24.734956" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:20:24.734669" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:20:24.735051" elapsed="0.000039"/>
</return>
<msg time="2026-04-12T00:20:24.735227" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:20:24.733698" elapsed="0.001553"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:20:24.735536" elapsed="0.000174"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:20:24.736205" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:20:24.735871" elapsed="0.000360"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:20:24.736637" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:20:24.736388" elapsed="0.000278"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:20:24.737055" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:20:24.736814" elapsed="0.000266"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:24.737482" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:24.737781" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:20:24.737607" elapsed="0.000229"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:24.738004" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:20:24.737865" elapsed="0.000194"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:24.738226" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:20:24.738082" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:20:24.737583" elapsed="0.000715"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:20:24.737311" elapsed="0.001014"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:20:24.737128" elapsed="0.001227"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:20:24.738398" elapsed="0.000027"/>
</return>
<msg time="2026-04-12T00:20:24.738595" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:20:24.738657" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:20:24.732966" elapsed="0.005715"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:20:24.739181" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:20:24.739258" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:20:24.738861" elapsed="0.000420"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:20:24.739869" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:20:24.739563" elapsed="0.000402">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:20:24.739349" elapsed="0.000692">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:20:24.739331" elapsed="0.000742">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:24.740224" elapsed="0.000022"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:24.740394" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:20:24.740458" elapsed="0.000016"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:20:24.732105" elapsed="0.008460">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:24.740752" elapsed="0.000022"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:24.740915" elapsed="0.000019"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:24.741075" elapsed="0.000020"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:20:24.731305" elapsed="0.009846">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:20:24.731107" elapsed="0.010099">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:20:24.741257" elapsed="0.000015"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:20:24.704159" elapsed="0.037191">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:20:34.762152" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:20:34.761711" elapsed="0.000480"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:20:34.782246" elapsed="0.000254"/>
</kw>
<msg time="2026-04-12T00:20:34.782562" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:20:34.781573" elapsed="0.001082"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:20:34.781101" elapsed="0.001652"/>
</kw>
<msg time="2026-04-12T00:20:34.782801" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:20:34.772065" elapsed="0.010782"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:20:34.771648" elapsed="0.011274"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:20:34.783582" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:20:34.783642" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:20:34.783328" elapsed="0.000339"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:20:34.786469" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:20:34.786062" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:20:34.786959" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:20:34.786671" elapsed="0.000313"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:20:34.787035" elapsed="0.000034"/>
</return>
<msg time="2026-04-12T00:20:34.787198" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:20:34.785670" elapsed="0.001552"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:20:34.787374" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:20:34.788035" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:20:34.787703" elapsed="0.000358"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:20:34.788512" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:20:34.788255" elapsed="0.000283"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:20:34.788936" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:20:34.788700" elapsed="0.000262"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:34.789361" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:34.789649" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:20:34.789479" elapsed="0.000229"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:34.789874" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:20:34.789734" elapsed="0.000192"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:34.790089" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:20:34.789949" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:20:34.789457" elapsed="0.000716"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:20:34.789192" elapsed="0.001006"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:20:34.789009" elapsed="0.001216"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:20:34.790265" elapsed="0.000027"/>
</return>
<msg time="2026-04-12T00:20:34.790461" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:20:34.790511" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:20:34.784944" elapsed="0.005590"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:20:34.791260" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:20:34.791338" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:20:34.790798" elapsed="0.000566"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:20:34.791956" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:20:34.791670" elapsed="0.000367">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:20:34.791437" elapsed="0.000670">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:20:34.791419" elapsed="0.000765">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:34.792373" elapsed="0.000026"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:34.792555" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:20:34.792620" elapsed="0.000031"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:20:34.783989" elapsed="0.008758">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:34.792916" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:34.793075" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:34.793234" elapsed="0.000019"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:20:34.783184" elapsed="0.010118">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:20:34.782994" elapsed="0.010363">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:20:34.793405" elapsed="0.000016"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:20:34.755725" elapsed="0.037772">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:20:44.805979" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:20:44.805575" elapsed="0.000439"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:20:44.825529" elapsed="0.000260"/>
</kw>
<msg time="2026-04-12T00:20:44.825844" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:20:44.824868" elapsed="0.001039"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:20:44.824398" elapsed="0.001588"/>
</kw>
<msg time="2026-04-12T00:20:44.826031" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:20:44.815566" elapsed="0.010507"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:20:44.815180" elapsed="0.010967"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:20:44.826774" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:20:44.826819" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:20:44.826515" elapsed="0.000327"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:20:44.829499" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:20:44.829084" elapsed="0.000442"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:20:44.829982" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:20:44.829699" elapsed="0.000308"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:20:44.830154" elapsed="0.000035"/>
</return>
<msg time="2026-04-12T00:20:44.830317" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:20:44.828707" elapsed="0.001634"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:20:44.830495" elapsed="0.000168"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:20:44.831348" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:20:44.830821" elapsed="0.000553"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:20:44.831791" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:20:44.831530" elapsed="0.000287"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:20:44.832196" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:20:44.831962" elapsed="0.000260"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:44.832616" elapsed="0.000039"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:44.832893" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:20:44.832745" elapsed="0.000202"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:44.833109" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:20:44.832971" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:44.833334" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:20:44.833185" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:20:44.832724" elapsed="0.000683"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:20:44.832448" elapsed="0.000983"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:20:44.832268" elapsed="0.001189"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:20:44.833498" elapsed="0.000027"/>
</return>
<msg time="2026-04-12T00:20:44.833707" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:20:44.833754" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:20:44.827984" elapsed="0.005793"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:20:44.834216" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:20:44.834291" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:20:44.833945" elapsed="0.000369"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:20:44.834883" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:20:44.834593" elapsed="0.000366">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:20:44.834381" elapsed="0.000644">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:20:44.834364" elapsed="0.000691">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:44.835205" elapsed="0.000021"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:44.835375" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:20:44.835440" elapsed="0.000015"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:20:44.827139" elapsed="0.008405">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:44.835729" elapsed="0.000028"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:44.835898" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:44.836059" elapsed="0.000019"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:20:44.826377" elapsed="0.009751">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:20:44.826208" elapsed="0.010008">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:20:44.836267" elapsed="0.000016"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:20:44.801305" elapsed="0.035054">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:20:54.855652" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:20:54.855254" elapsed="0.000434"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:20:54.875210" elapsed="0.000238"/>
</kw>
<msg time="2026-04-12T00:20:54.875501" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:20:54.874553" elapsed="0.001011"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:20:54.874086" elapsed="0.001577"/>
</kw>
<msg time="2026-04-12T00:20:54.875710" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:20:54.865241" elapsed="0.010513"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:20:54.864857" elapsed="0.010969"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:20:54.876442" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:20:54.876488" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:20:54.876205" elapsed="0.000305"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:20:54.881033" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:20:54.880623" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:20:54.881510" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:20:54.881224" elapsed="0.000312"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:20:54.881583" elapsed="0.000032"/>
</return>
<msg time="2026-04-12T00:20:54.881758" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:20:54.880204" elapsed="0.001579"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:20:54.881948" elapsed="0.000181"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:20:54.882645" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:20:54.882287" elapsed="0.000386"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:20:54.883068" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:20:54.882830" elapsed="0.000263"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:20:54.883471" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:20:54.883238" elapsed="0.000258"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:54.883901" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:54.884160" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:20:54.884013" elapsed="0.000201"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:54.884376" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:20:54.884238" elapsed="0.000190"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:54.884588" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:20:54.884450" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:20:54.883995" elapsed="0.000680"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:20:54.883736" elapsed="0.001026"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:20:54.883542" elapsed="0.001249"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:20:54.884831" elapsed="0.000027"/>
</return>
<msg time="2026-04-12T00:20:54.885025" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:20:54.885070" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:20:54.877646" elapsed="0.007447"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:20:54.885531" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:20:54.885606" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:20:54.885261" elapsed="0.000384"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:20:54.886198" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:20:54.885929" elapsed="0.000346">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:20:54.885715" elapsed="0.000650">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:20:54.885698" elapsed="0.000700">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:54.886564" elapsed="0.000022"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:54.886751" elapsed="0.000027"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:20:54.886824" elapsed="0.000016"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:20:54.876817" elapsed="0.010109">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:54.887094" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:54.887255" elapsed="0.000019"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:20:54.887415" elapsed="0.000020"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:20:54.876065" elapsed="0.011418">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:20:54.875887" elapsed="0.011649">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:20:54.887586" elapsed="0.000015"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:20:54.849103" elapsed="0.038588">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:21:04.904782" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:21:04.904352" elapsed="0.000469"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:21:04.925066" elapsed="0.000243"/>
</kw>
<msg time="2026-04-12T00:21:04.925364" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:21:04.924320" elapsed="0.001106"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:21:04.923841" elapsed="0.001667"/>
</kw>
<msg time="2026-04-12T00:21:04.925554" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:21:04.914526" elapsed="0.011073"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:21:04.914132" elapsed="0.011558"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:21:04.926337" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:21:04.926382" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:21:04.926084" elapsed="0.000320"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:21:04.929147" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:21:04.928761" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:21:04.929615" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:21:04.929333" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:21:04.929714" elapsed="0.000033"/>
</return>
<msg time="2026-04-12T00:21:04.929875" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:21:04.928375" elapsed="0.001524"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:21:04.930051" elapsed="0.000153"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:21:04.930709" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:21:04.930361" elapsed="0.000374"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:21:04.931127" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:21:04.930892" elapsed="0.000260"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:21:04.931559" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:21:04.931302" elapsed="0.000283"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:04.931993" elapsed="0.000024"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:04.932252" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:21:04.932104" elapsed="0.000203"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:04.932472" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:21:04.932332" elapsed="0.000193"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:04.932704" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:21:04.932548" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:21:04.932084" elapsed="0.000695"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:21:04.931826" elapsed="0.000977"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:21:04.931644" elapsed="0.001185"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:21:04.932869" elapsed="0.000027"/>
</return>
<msg time="2026-04-12T00:21:04.933063" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:21:04.933109" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:21:04.927654" elapsed="0.005478"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:21:04.933573" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:21:04.933665" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:21:04.933301" elapsed="0.000389"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:21:04.934249" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:21:04.933976" elapsed="0.000344">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:21:04.933759" elapsed="0.000626">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:21:04.933742" elapsed="0.000673">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:04.934567" elapsed="0.000021"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:04.934753" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:21:04.934819" elapsed="0.000016"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:21:04.926792" elapsed="0.008129">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:04.935093" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:04.935291" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:04.935529" elapsed="0.000021"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:21:04.925943" elapsed="0.009659">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:21:04.925754" elapsed="0.009919">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:21:04.935725" elapsed="0.000015"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:21:04.899612" elapsed="0.036206">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:21:14.954998" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:21:14.954553" elapsed="0.000484"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:21:14.974730" elapsed="0.000239"/>
</kw>
<msg time="2026-04-12T00:21:14.975023" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:21:14.974069" elapsed="0.001015"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:21:14.973599" elapsed="0.001565"/>
</kw>
<msg time="2026-04-12T00:21:14.975210" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:21:14.964707" elapsed="0.010548"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:21:14.964291" elapsed="0.011037"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:21:14.975960" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:21:14.976005" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:21:14.975717" elapsed="0.000310"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:21:14.978674" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:21:14.978263" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:21:14.979146" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:21:14.978861" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:21:14.979219" elapsed="0.000031"/>
</return>
<msg time="2026-04-12T00:21:14.979376" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:21:14.977899" elapsed="0.001503"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:21:14.979566" elapsed="0.000167"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:21:14.980220" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:21:14.979892" elapsed="0.000354"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:21:14.980661" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:21:14.980401" elapsed="0.000286"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:21:14.981062" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:21:14.980831" elapsed="0.000256"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:14.981490" elapsed="0.000024"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:14.981774" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:21:14.981607" elapsed="0.000223"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:14.982066" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:21:14.981856" elapsed="0.000265"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:14.982287" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:21:14.982145" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:21:14.981586" elapsed="0.000774"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:21:14.981314" elapsed="0.001070"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:21:14.981132" elapsed="0.001278"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:21:14.982450" elapsed="0.000026"/>
</return>
<msg time="2026-04-12T00:21:14.982660" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:21:14.982706" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:21:14.977173" elapsed="0.005556"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:21:14.983172" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:21:14.983248" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:21:14.982899" elapsed="0.000372"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:21:14.984030" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:21:14.983747" elapsed="0.000360">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:21:14.983338" elapsed="0.000836">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:21:14.983321" elapsed="0.000885">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:14.984357" elapsed="0.000022"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:14.984529" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:21:14.984618" elapsed="0.000029"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:21:14.976316" elapsed="0.008422">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:14.984909" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:14.985070" elapsed="0.000019"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:14.985230" elapsed="0.000019"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:21:14.975562" elapsed="0.009736">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:21:14.975391" elapsed="0.009962">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:21:14.985404" elapsed="0.000015"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:21:14.948840" elapsed="0.036655">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:21:25.007758" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:21:25.007340" elapsed="0.000454"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:21:25.027472" elapsed="0.000261"/>
</kw>
<msg time="2026-04-12T00:21:25.027788" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:21:25.026817" elapsed="0.001036"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:21:25.026348" elapsed="0.001585"/>
</kw>
<msg time="2026-04-12T00:21:25.027978" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:21:25.017440" elapsed="0.010581"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:21:25.017054" elapsed="0.011039"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:21:25.031228" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:21:25.031273" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:21:25.030976" elapsed="0.000321"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:21:25.033992" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:21:25.033546" elapsed="0.000472"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:21:25.034468" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:21:25.034183" elapsed="0.000310"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:21:25.034541" elapsed="0.000031"/>
</return>
<msg time="2026-04-12T00:21:25.034715" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:21:25.033171" elapsed="0.001569"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:21:25.034951" elapsed="0.000221"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:21:25.035881" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:21:25.035392" elapsed="0.000526"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:21:25.036463" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:21:25.036136" elapsed="0.000363"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:21:25.037333" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:21:25.036725" elapsed="0.000644"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:25.037958" elapsed="0.000034"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:25.038312" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:21:25.038110" elapsed="0.000277"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:25.038617" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:21:25.038421" elapsed="0.000291"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:25.038943" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:21:25.038744" elapsed="0.000268"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:21:25.038084" elapsed="0.000960"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:21:25.037715" elapsed="0.001362"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:21:25.037434" elapsed="0.001677"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:21:25.039166" elapsed="0.000036"/>
</return>
<msg time="2026-04-12T00:21:25.039435" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:21:25.039498" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:21:25.032444" elapsed="0.007085"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:21:25.040158" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:21:25.040262" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:21:25.039786" elapsed="0.000511"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:21:25.041091" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:21:25.040713" elapsed="0.000474">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:21:25.040393" elapsed="0.000885">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:21:25.040369" elapsed="0.000953">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:25.041533" elapsed="0.000029"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:25.041822" elapsed="0.000030"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:21:25.041917" elapsed="0.000021"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:21:25.031589" elapsed="0.010525">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:25.042363" elapsed="0.000037"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:25.042597" elapsed="0.000027"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:25.042832" elapsed="0.000020"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:21:25.030825" elapsed="0.012077">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:21:25.030643" elapsed="0.012314">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:21:25.043007" elapsed="0.000015"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:21:25.003027" elapsed="0.040072">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:21:35.059661" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:21:35.059254" elapsed="0.000444"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:21:35.079687" elapsed="0.000247"/>
</kw>
<msg time="2026-04-12T00:21:35.079989" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:21:35.079023" elapsed="0.001030"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:21:35.078530" elapsed="0.001602"/>
</kw>
<msg time="2026-04-12T00:21:35.080178" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:21:35.069592" elapsed="0.010629"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:21:35.069201" elapsed="0.011091"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:21:35.080947" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:21:35.080992" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:21:35.080702" elapsed="0.000312"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:21:35.083904" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:21:35.083487" elapsed="0.000444"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:21:35.084377" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:21:35.084092" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:21:35.084450" elapsed="0.000033"/>
</return>
<msg time="2026-04-12T00:21:35.084610" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:21:35.082890" elapsed="0.001760"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:21:35.084805" elapsed="0.000160"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:21:35.085452" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:21:35.085122" elapsed="0.000356"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:21:35.085889" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:21:35.085649" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:21:35.086298" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:21:35.086061" elapsed="0.000262"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:35.086739" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:35.087100" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:21:35.086950" elapsed="0.000205"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:35.087321" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:21:35.087180" elapsed="0.000193"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:35.087537" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:21:35.087396" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:21:35.086928" elapsed="0.000682"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:21:35.086553" elapsed="0.001096"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:21:35.086369" elapsed="0.001312"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:21:35.087735" elapsed="0.000029"/>
</return>
<msg time="2026-04-12T00:21:35.087935" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:21:35.087981" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:21:35.082141" elapsed="0.005862"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:21:35.088443" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:21:35.088518" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:21:35.088172" elapsed="0.000369"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:21:35.089118" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:21:35.088840" elapsed="0.000354">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:21:35.088609" elapsed="0.000651">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:21:35.088592" elapsed="0.000700">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:35.089440" elapsed="0.000021"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:35.089610" elapsed="0.000035"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:21:35.089693" elapsed="0.000016"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:21:35.081305" elapsed="0.008495">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:35.089970" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:35.090130" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:35.090290" elapsed="0.000019"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:21:35.080542" elapsed="0.009816">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:21:35.080356" elapsed="0.010057">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:21:35.090462" elapsed="0.000015"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:21:35.054951" elapsed="0.035601">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:21:45.109225" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:21:45.108848" elapsed="0.000411"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:21:45.129257" elapsed="0.000245"/>
</kw>
<msg time="2026-04-12T00:21:45.129557" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:21:45.128597" elapsed="0.001020"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:21:45.128136" elapsed="0.001581"/>
</kw>
<msg time="2026-04-12T00:21:45.129835" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:21:45.118955" elapsed="0.010927"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:21:45.118551" elapsed="0.011406"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:21:45.130580" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:21:45.130670" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:21:45.130340" elapsed="0.000357"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:21:45.133366" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:21:45.132983" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:21:45.133851" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:21:45.133552" elapsed="0.000325"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:21:45.133924" elapsed="0.000031"/>
</return>
<msg time="2026-04-12T00:21:45.134079" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:21:45.132601" elapsed="0.001502"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:21:45.134253" elapsed="0.000152"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:21:45.134909" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:21:45.134562" elapsed="0.000373"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:21:45.135329" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:21:45.135092" elapsed="0.000262"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:21:45.135750" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:21:45.135501" elapsed="0.000275"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:45.136182" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:45.136449" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:21:45.136295" elapsed="0.000210"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:45.136684" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:21:45.136530" elapsed="0.000209"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:45.136902" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:21:45.136761" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:21:45.136273" elapsed="0.000700"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:21:45.136016" elapsed="0.000981"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:21:45.135822" elapsed="0.001201"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:21:45.137063" elapsed="0.000026"/>
</return>
<msg time="2026-04-12T00:21:45.137255" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:21:45.137301" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:21:45.131829" elapsed="0.005494"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:21:45.137789" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:21:45.137864" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:21:45.137497" elapsed="0.000391"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:21:45.138437" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:21:45.138166" elapsed="0.000342">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:21:45.137954" elapsed="0.000620">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:21:45.137938" elapsed="0.000667">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:45.138771" elapsed="0.000055"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:45.138985" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:21:45.139052" elapsed="0.000016"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:21:45.130988" elapsed="0.008169">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:45.139329" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:45.139491" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:45.139668" elapsed="0.000021"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:21:45.130199" elapsed="0.009542">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:21:45.130026" elapsed="0.009771">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:21:45.139847" elapsed="0.000015"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:21:45.102986" elapsed="0.036983">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:21:55.157797" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:21:55.157382" elapsed="0.000453"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:21:55.177837" elapsed="0.000249"/>
</kw>
<msg time="2026-04-12T00:21:55.178142" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:21:55.177149" elapsed="0.001059"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:21:55.176652" elapsed="0.001635"/>
</kw>
<msg time="2026-04-12T00:21:55.178334" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:21:55.167590" elapsed="0.010787"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:21:55.167199" elapsed="0.011250"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:21:55.179103" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:21:55.179147" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:21:55.178855" elapsed="0.000314"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:21:55.181941" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:21:55.181525" elapsed="0.000443"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:21:55.182416" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:21:55.182130" elapsed="0.000311"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:21:55.182490" elapsed="0.000033"/>
</return>
<msg time="2026-04-12T00:21:55.182666" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:21:55.181113" elapsed="0.001578"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:21:55.182845" elapsed="0.000161"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:21:55.183489" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:21:55.183163" elapsed="0.000352"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:21:55.183920" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:21:55.183685" elapsed="0.000261"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:21:55.184426" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:21:55.184187" elapsed="0.000264"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:55.184868" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:55.185216" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:21:55.185021" elapsed="0.000260"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:55.185448" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:21:55.185307" elapsed="0.000193"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:55.185690" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:21:55.185523" elapsed="0.000219"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:21:55.184966" elapsed="0.000799"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:21:55.184698" elapsed="0.001092"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:21:55.184498" elapsed="0.001319"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:21:55.185858" elapsed="0.000027"/>
</return>
<msg time="2026-04-12T00:21:55.186053" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:21:55.186097" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:21:55.180343" elapsed="0.005777"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:21:55.186762" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:21:55.186841" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:21:55.186288" elapsed="0.000577"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:21:55.187432" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:21:55.187153" elapsed="0.000356">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:21:55.186936" elapsed="0.000640">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:21:55.186917" elapsed="0.000690">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:55.187775" elapsed="0.000021"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:55.187944" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:21:55.188008" elapsed="0.000016"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:21:55.179459" elapsed="0.008659">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:55.188287" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:55.188445" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:21:55.188605" elapsed="0.000034"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:21:55.178711" elapsed="0.009980">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:21:55.178512" elapsed="0.010235">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:21:55.188797" elapsed="0.000015"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:21:55.152748" elapsed="0.036140">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:22:05.207540" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:22:05.207156" elapsed="0.000418"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:22:05.227507" elapsed="0.000259"/>
</kw>
<msg time="2026-04-12T00:22:05.227832" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:22:05.226868" elapsed="0.001120"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:22:05.226396" elapsed="0.001679"/>
</kw>
<msg time="2026-04-12T00:22:05.228121" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:22:05.217563" elapsed="0.010602"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:22:05.217123" elapsed="0.011115"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:22:05.228872" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:22:05.228917" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:22:05.228612" elapsed="0.000328"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:22:05.231570" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:22:05.231173" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:22:05.232056" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:22:05.231772" elapsed="0.000310"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:22:05.232130" elapsed="0.000033"/>
</return>
<msg time="2026-04-12T00:22:05.232290" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:22:05.230807" elapsed="0.001508"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:22:05.232467" elapsed="0.000153"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:22:05.233355" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:22:05.232796" elapsed="0.000586"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:22:05.233801" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:22:05.233540" elapsed="0.000287"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:22:05.234207" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:22:05.233973" elapsed="0.000259"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:05.234626" elapsed="0.000040"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:05.234917" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:22:05.234762" elapsed="0.000210"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:05.235136" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:22:05.234998" elapsed="0.000190"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:05.235351" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:22:05.235211" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:22:05.234741" elapsed="0.000683"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:22:05.234456" elapsed="0.000994"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:22:05.234278" elapsed="0.001198"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:22:05.235515" elapsed="0.000026"/>
</return>
<msg time="2026-04-12T00:22:05.235726" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:22:05.235771" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:22:05.230085" elapsed="0.005709"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:22:05.236236" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:22:05.236311" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:22:05.235964" elapsed="0.000370"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:22:05.237521" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:22:05.236671" elapsed="0.000924">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:22:05.236439" elapsed="0.001237">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:22:05.236421" elapsed="0.001290">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:05.237865" elapsed="0.000022"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:05.238039" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:22:05.238106" elapsed="0.000016"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:22:05.229251" elapsed="0.008959">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:05.238381" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:05.238544" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:05.238723" elapsed="0.000021"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:22:05.228473" elapsed="0.010322">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:22:05.228301" elapsed="0.010549">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:22:05.238900" elapsed="0.000016"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:22:05.202881" elapsed="0.036111">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:22:15.256147" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:22:15.255757" elapsed="0.000426"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:22:15.275834" elapsed="0.000253"/>
</kw>
<msg time="2026-04-12T00:22:15.276142" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:22:15.275168" elapsed="0.001039"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:22:15.274703" elapsed="0.001584"/>
</kw>
<msg time="2026-04-12T00:22:15.276332" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:22:15.265784" elapsed="0.010591"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:22:15.265383" elapsed="0.011064"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:22:15.277091" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:22:15.277136" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:22:15.276850" elapsed="0.000309"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:22:15.289402" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:22:15.288910" elapsed="0.000525"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:22:15.289923" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:22:15.289608" elapsed="0.000340"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:22:15.289996" elapsed="0.000044"/>
</return>
<msg time="2026-04-12T00:22:15.290169" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:22:15.288427" elapsed="0.001767"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:22:15.290347" elapsed="0.000318"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:22:15.291163" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:22:15.290828" elapsed="0.000362"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:22:15.291590" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:22:15.291346" elapsed="0.000270"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:22:15.292018" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:22:15.291782" elapsed="0.000262"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:15.292460" elapsed="0.000024"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:15.292729" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:22:15.292567" elapsed="0.000218"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:15.292949" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:22:15.292810" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:15.293163" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:22:15.293024" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:22:15.292549" elapsed="0.000687"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:22:15.292292" elapsed="0.000967"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:22:15.292096" elapsed="0.001189"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:22:15.293325" elapsed="0.000027"/>
</return>
<msg time="2026-04-12T00:22:15.293521" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:22:15.293566" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:22:15.278304" elapsed="0.015285"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:22:15.294055" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:22:15.294130" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:22:15.293775" elapsed="0.000378"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:22:15.294751" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:22:15.294433" elapsed="0.000391">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:22:15.294220" elapsed="0.000671">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:22:15.294202" elapsed="0.000719">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:15.295072" elapsed="0.000021"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:15.295240" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:22:15.295304" elapsed="0.000027"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:22:15.277455" elapsed="0.017962">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:15.295599" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:15.295777" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:15.295938" elapsed="0.000019"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:22:15.276701" elapsed="0.019305">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:22:15.276509" elapsed="0.019551">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:22:15.296108" elapsed="0.000015"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:22:15.251476" elapsed="0.044722">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:22:25.316773" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:22:25.316380" elapsed="0.000507"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:22:25.336831" elapsed="0.000238"/>
</kw>
<msg time="2026-04-12T00:22:25.337122" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:22:25.336163" elapsed="0.001020"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:22:25.335710" elapsed="0.001551"/>
</kw>
<msg time="2026-04-12T00:22:25.337306" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:22:25.326865" elapsed="0.010483"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:22:25.326459" elapsed="0.010961"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:22:25.338150" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:22:25.338195" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:22:25.337904" elapsed="0.000313"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:22:25.340882" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:22:25.340462" elapsed="0.000447"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:22:25.341350" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:22:25.341068" elapsed="0.000307"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:22:25.341423" elapsed="0.000032"/>
</return>
<msg time="2026-04-12T00:22:25.341582" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:22:25.340059" elapsed="0.001610"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:22:25.341855" elapsed="0.000172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:22:25.342509" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:22:25.342183" elapsed="0.000352"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:22:25.342943" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:22:25.342707" elapsed="0.000261"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:22:25.343345" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:22:25.343113" elapsed="0.000258"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:25.343785" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:25.344046" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:22:25.343897" elapsed="0.000204"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:25.344264" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:22:25.344126" elapsed="0.000190"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:25.344476" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:22:25.344338" elapsed="0.000187"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:22:25.343878" elapsed="0.000670"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:22:25.343601" elapsed="0.000972"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:22:25.343416" elapsed="0.001184"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:22:25.344656" elapsed="0.000028"/>
</return>
<msg time="2026-04-12T00:22:25.344851" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:22:25.344896" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:22:25.339334" elapsed="0.005584"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:22:25.345405" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:22:25.345481" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:22:25.345134" elapsed="0.000370"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:22:25.346089" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:22:25.345814" elapsed="0.000352">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:22:25.345571" elapsed="0.002307">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:22:25.345554" elapsed="0.002362">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:25.348075" elapsed="0.000022"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:25.348250" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:22:25.348317" elapsed="0.000015"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:22:25.338508" elapsed="0.009910">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:25.348590" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:25.348770" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:25.348939" elapsed="0.000020"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:22:25.337756" elapsed="0.011253">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:22:25.337482" elapsed="0.011581">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:22:25.349114" elapsed="0.000014"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:22:25.312088" elapsed="0.037117">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:22:35.367107" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:22:35.366737" elapsed="0.000405"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:22:35.387409" elapsed="0.000259"/>
</kw>
<msg time="2026-04-12T00:22:35.387742" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:22:35.386758" elapsed="0.001059"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:22:35.386279" elapsed="0.001626"/>
</kw>
<msg time="2026-04-12T00:22:35.387955" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:22:35.377022" elapsed="0.010979"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:22:35.376618" elapsed="0.011456"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:22:35.388752" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:22:35.388802" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:22:35.388466" elapsed="0.000359"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:22:35.391495" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:22:35.391063" elapsed="0.000461"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:22:35.392015" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:22:35.391720" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:22:35.392090" elapsed="0.000032"/>
</return>
<msg time="2026-04-12T00:22:35.392249" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:22:35.390675" elapsed="0.001598"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:22:35.392532" elapsed="0.000172"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:22:35.393191" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:22:35.392863" elapsed="0.000354"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:22:35.393605" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:22:35.393371" elapsed="0.000274"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:22:35.394026" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:22:35.393792" elapsed="0.000259"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:35.394657" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:35.394921" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:22:35.394772" elapsed="0.000203"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:35.395142" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:22:35.395001" elapsed="0.000193"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:35.395371" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:22:35.395217" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:22:35.394752" elapsed="0.000693"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:22:35.394287" elapsed="0.001183"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:22:35.394104" elapsed="0.001391"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:22:35.395536" elapsed="0.000026"/>
</return>
<msg time="2026-04-12T00:22:35.395756" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:22:35.395805" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:22:35.389955" elapsed="0.005873"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:22:35.396268" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:22:35.396343" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:22:35.395997" elapsed="0.000369"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:22:35.396937" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:22:35.396662" elapsed="0.000349">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:22:35.396434" elapsed="0.000641">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:22:35.396417" elapsed="0.000688">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:35.397256" elapsed="0.000021"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:35.397428" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:22:35.397492" elapsed="0.000015"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:22:35.389125" elapsed="0.008469">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:35.397786" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:35.397946" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:35.398107" elapsed="0.000019"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:22:35.388320" elapsed="0.009855">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:22:35.388141" elapsed="0.010089">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:22:35.398280" elapsed="0.000015"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:22:35.362460" elapsed="0.035910">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:22:45.415955" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:22:45.415566" elapsed="0.000424"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:22:45.435604" elapsed="0.000255"/>
</kw>
<msg time="2026-04-12T00:22:45.435913" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:22:45.434958" elapsed="0.001018"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:22:45.434482" elapsed="0.001575"/>
</kw>
<msg time="2026-04-12T00:22:45.436104" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:22:45.425614" elapsed="0.010534"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:22:45.425227" elapsed="0.011025"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:22:45.436889" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:22:45.436934" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:22:45.436645" elapsed="0.000312"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:22:45.439565" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:22:45.439182" elapsed="0.000411"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:22:45.440053" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:22:45.439770" elapsed="0.000309"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:22:45.440127" elapsed="0.000032"/>
</return>
<msg time="2026-04-12T00:22:45.440300" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:22:45.438816" elapsed="0.001509"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:22:45.440478" elapsed="0.000379"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:22:45.441352" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:22:45.441018" elapsed="0.000361"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:22:45.441798" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:22:45.441535" elapsed="0.000289"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:22:45.442209" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:22:45.441972" elapsed="0.000262"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:45.442650" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:45.442911" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:22:45.442763" elapsed="0.000202"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:45.443129" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:22:45.442990" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:45.443345" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:22:45.443204" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:22:45.442743" elapsed="0.000675"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:22:45.442466" elapsed="0.000976"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:22:45.442282" elapsed="0.001186"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:22:45.443509" elapsed="0.000027"/>
</return>
<msg time="2026-04-12T00:22:45.443729" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:22:45.443775" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:22:45.438094" elapsed="0.005704"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:22:45.444301" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:22:45.444383" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:22:45.444008" elapsed="0.000399"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:22:45.444986" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:22:45.444707" elapsed="0.000354">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:22:45.444476" elapsed="0.000652">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:22:45.444458" elapsed="0.000700">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:45.445311" elapsed="0.000021"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:45.445483" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:22:45.445549" elapsed="0.000015"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:22:45.437247" elapsed="0.008422">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:45.445846" elapsed="0.000026"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:45.446013" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:45.446175" elapsed="0.000019"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:22:45.436492" elapsed="0.009752">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:22:45.436320" elapsed="0.009979">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:22:45.446350" elapsed="0.000015"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:22:45.410646" elapsed="0.035796">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:22:55.464960" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:22:55.464556" elapsed="0.000442"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:22:55.484621" elapsed="0.000259"/>
</kw>
<msg time="2026-04-12T00:22:55.484934" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:22:55.483980" elapsed="0.001017"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:22:55.483513" elapsed="0.001564"/>
</kw>
<msg time="2026-04-12T00:22:55.485123" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:22:55.474674" elapsed="0.010492"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:22:55.474275" elapsed="0.010963"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:22:55.485891" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:22:55.485935" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:22:55.485647" elapsed="0.000311"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:22:55.488828" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:22:55.488431" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:22:55.489297" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:22:55.489012" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:22:55.489480" elapsed="0.000034"/>
</return>
<msg time="2026-04-12T00:22:55.489660" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:22:55.488045" elapsed="0.001641"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:22:55.489841" elapsed="0.000155"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:22:55.490482" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:22:55.490154" elapsed="0.000355"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:22:55.490917" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:22:55.490680" elapsed="0.000263"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:22:55.491327" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:22:55.491094" elapsed="0.000259"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:55.491761" elapsed="0.000024"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:55.492017" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:22:55.491871" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:55.492236" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:22:55.492096" elapsed="0.000193"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:55.492458" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:22:55.492317" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:22:55.491851" elapsed="0.000679"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:22:55.491579" elapsed="0.000976"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:22:55.491398" elapsed="0.001182"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:22:55.492637" elapsed="0.000028"/>
</return>
<msg time="2026-04-12T00:22:55.492835" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:22:55.492881" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:22:55.487082" elapsed="0.005823"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:22:55.493378" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:22:55.493456" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:22:55.493074" elapsed="0.000407"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:22:55.494061" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:22:55.493786" elapsed="0.000346">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:22:55.493550" elapsed="0.000646">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:22:55.493532" elapsed="0.000695">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:55.494379" elapsed="0.000022"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:55.494550" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:22:55.494616" elapsed="0.000035"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:22:55.486247" elapsed="0.008495">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:55.494912" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:55.495074" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:22:55.495236" elapsed="0.000020"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:22:55.485491" elapsed="0.009816">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:22:55.485304" elapsed="0.010095">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:22:55.495452" elapsed="0.000016"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:22:55.459337" elapsed="0.036211">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:23:05.514302" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:23:05.513809" elapsed="0.000539"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:23:05.535153" elapsed="0.000294"/>
</kw>
<msg time="2026-04-12T00:23:05.535525" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:23:05.534418" elapsed="0.001191"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:23:05.533916" elapsed="0.001798"/>
</kw>
<msg time="2026-04-12T00:23:05.535763" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:23:05.524035" elapsed="0.011773"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:23:05.523641" elapsed="0.012243"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:23:05.536594" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:23:05.536655" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:23:05.536328" elapsed="0.000351"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:23:05.539429" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:23:05.539035" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:23:05.539939" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:23:05.539620" elapsed="0.000345"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:23:05.540016" elapsed="0.000037"/>
</return>
<msg time="2026-04-12T00:23:05.540188" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:23:05.538657" elapsed="0.001556"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:23:05.540370" elapsed="0.000157"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:23:05.541034" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:23:05.540701" elapsed="0.000359"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:23:05.541450" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:23:05.541214" elapsed="0.000261"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:23:05.541878" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:23:05.541618" elapsed="0.000286"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:05.542309" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:05.542604" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:23:05.542443" elapsed="0.000232"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:05.542845" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:23:05.542705" elapsed="0.000193"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:05.543067" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:23:05.542923" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:23:05.542415" elapsed="0.000725"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:23:05.542137" elapsed="0.001136"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:23:05.541950" elapsed="0.001359"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:23:05.543353" elapsed="0.000028"/>
</return>
<msg time="2026-04-12T00:23:05.543552" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:23:05.543597" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:23:05.537923" elapsed="0.005696"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:23:05.544098" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:23:05.544174" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:23:05.543810" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:23:05.544795" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:23:05.544484" elapsed="0.000410">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:23:05.544266" elapsed="0.000705">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:23:05.544249" elapsed="0.000754">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:05.545157" elapsed="0.000022"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:05.545330" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:23:05.545395" elapsed="0.000015"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:23:05.537005" elapsed="0.008501">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:05.545810" elapsed="0.000025"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:05.545983" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:05.546144" elapsed="0.000019"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:23:05.536172" elapsed="0.010042">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:23:05.535965" elapsed="0.010304">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:23:05.546320" elapsed="0.000015"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:23:05.508589" elapsed="0.037824">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:23:15.563470" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:23:15.563028" elapsed="0.000477"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:23:15.583454" elapsed="0.000253"/>
</kw>
<msg time="2026-04-12T00:23:15.583769" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:23:15.582764" elapsed="0.001089"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:23:15.582288" elapsed="0.001673"/>
</kw>
<msg time="2026-04-12T00:23:15.584016" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:23:15.573261" elapsed="0.010807"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:23:15.572858" elapsed="0.011296"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:23:15.584867" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:23:15.584912" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:23:15.584583" elapsed="0.000352"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:23:15.587683" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:23:15.587270" elapsed="0.000440"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:23:15.588164" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:23:15.587874" elapsed="0.000315"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:23:15.588237" elapsed="0.000032"/>
</return>
<msg time="2026-04-12T00:23:15.588394" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:23:15.586867" elapsed="0.001551"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:23:15.588569" elapsed="0.000169"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:23:15.589257" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:23:15.588900" elapsed="0.000385"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:23:15.589719" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:23:15.589443" elapsed="0.000302"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:23:15.590122" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:23:15.589891" elapsed="0.000256"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:15.590554" elapsed="0.000031"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:15.590850" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:23:15.590699" elapsed="0.000207"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:15.591070" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:23:15.590931" elapsed="0.000213"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:15.591305" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:23:15.591167" elapsed="0.000187"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:23:15.590677" elapsed="0.000699"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:23:15.590371" elapsed="0.001029"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:23:15.590192" elapsed="0.001234"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:23:15.591465" elapsed="0.000027"/>
</return>
<msg time="2026-04-12T00:23:15.591675" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:23:15.591721" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:23:15.586127" elapsed="0.005617"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:23:15.592354" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:23:15.592431" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:23:15.591911" elapsed="0.000544"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:23:15.593033" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:23:15.592753" elapsed="0.000356">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:23:15.592523" elapsed="0.000655">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:23:15.592506" elapsed="0.000702">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:15.593358" elapsed="0.000027"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:15.593535" elapsed="0.000023"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:23:15.593617" elapsed="0.000033"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:23:15.585291" elapsed="0.008451">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:15.593913" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:15.594112" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:15.594272" elapsed="0.000019"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:23:15.584416" elapsed="0.009925">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:23:15.584223" elapsed="0.010171">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:23:15.594444" elapsed="0.000015"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:23:15.558549" elapsed="0.035985">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:23:25.612432" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:23:25.612011" elapsed="0.000458"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:23:25.632037" elapsed="0.000264"/>
</kw>
<msg time="2026-04-12T00:23:25.632356" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:23:25.631375" elapsed="0.001044"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:23:25.630908" elapsed="0.001590"/>
</kw>
<msg time="2026-04-12T00:23:25.632544" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:23:25.622051" elapsed="0.010536"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:23:25.621665" elapsed="0.011011"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:23:25.633307" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:23:25.633351" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:23:25.633055" elapsed="0.000318"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:23:25.635997" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:23:25.635602" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:23:25.636476" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:23:25.636182" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:23:25.636549" elapsed="0.000038"/>
</return>
<msg time="2026-04-12T00:23:25.636731" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:23:25.635228" elapsed="0.001527"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:23:25.636908" elapsed="0.000152"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:23:25.637760" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:23:25.637216" elapsed="0.000571"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:23:25.638186" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:23:25.637947" elapsed="0.000264"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:23:25.638592" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:23:25.638358" elapsed="0.000259"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:25.639027" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:25.639312" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:23:25.639146" elapsed="0.000220"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:25.639641" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:23:25.639392" elapsed="0.000307"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:25.639864" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:23:25.639722" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:23:25.639125" elapsed="0.000811"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:23:25.638858" elapsed="0.001103"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:23:25.638678" elapsed="0.001309"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:23:25.640027" elapsed="0.000027"/>
</return>
<msg time="2026-04-12T00:23:25.640221" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:23:25.640267" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:23:25.634503" elapsed="0.005809"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:23:25.640769" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:23:25.640845" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:23:25.640483" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:23:25.641422" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:23:25.641151" elapsed="0.000344">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:23:25.640935" elapsed="0.000626">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:23:25.640918" elapsed="0.000674">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:25.641759" elapsed="0.000021"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:25.641932" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:23:25.641996" elapsed="0.000016"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:23:25.633679" elapsed="0.008420">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:25.642269" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:25.642429" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:25.642589" elapsed="0.000019"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:23:25.632912" elapsed="0.009765">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:23:25.632739" elapsed="0.009993">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:23:25.642782" elapsed="0.000023"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:23:25.607178" elapsed="0.035703">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:23:35.661283" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:23:35.660913" elapsed="0.000405"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:23:35.681128" elapsed="0.000231"/>
</kw>
<msg time="2026-04-12T00:23:35.681411" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:23:35.680466" elapsed="0.001018"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:23:35.680011" elapsed="0.001552"/>
</kw>
<msg time="2026-04-12T00:23:35.681609" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:23:35.671210" elapsed="0.010459"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:23:35.670820" elapsed="0.010923"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:23:35.682440" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:23:35.682485" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:23:35.682201" elapsed="0.000308"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:23:35.685342" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:23:35.684961" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:23:35.685856" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:23:35.685551" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:23:35.685930" elapsed="0.000038"/>
</return>
<msg time="2026-04-12T00:23:35.686095" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:23:35.684574" elapsed="0.001545"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:23:35.686270" elapsed="0.000159"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:23:35.686932" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:23:35.686585" elapsed="0.000373"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:23:35.687351" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:23:35.687114" elapsed="0.000263"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:23:35.687773" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:23:35.687521" elapsed="0.000278"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:35.688188" elapsed="0.000024"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:35.688439" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:23:35.688295" elapsed="0.000199"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:35.688672" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:23:35.688518" elapsed="0.000208"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:35.688894" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:23:35.688749" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:23:35.688277" elapsed="0.000691"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:23:35.688021" elapsed="0.000971"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:23:35.687843" elapsed="0.001174"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:23:35.689057" elapsed="0.000026"/>
</return>
<msg time="2026-04-12T00:23:35.689251" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:23:35.689296" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:23:35.683655" elapsed="0.005663"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:23:35.689781" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:23:35.689857" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:23:35.689498" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:23:35.690445" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:23:35.690168" elapsed="0.000349">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:23:35.689956" elapsed="0.000625">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:23:35.689930" elapsed="0.000682">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:35.690780" elapsed="0.000022"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:35.690950" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:23:35.691015" elapsed="0.000016"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:23:35.682812" elapsed="0.008342">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:35.691327" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:35.691489" elapsed="0.000019"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:35.691666" elapsed="0.000021"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:23:35.682060" elapsed="0.009677">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:23:35.681880" elapsed="0.009911">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:23:35.691840" elapsed="0.000016"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:23:35.656507" elapsed="0.035425">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:23:45.711379" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:23:45.710790" elapsed="0.000635"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:23:45.731473" elapsed="0.000253"/>
</kw>
<msg time="2026-04-12T00:23:45.731780" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:23:45.730824" elapsed="0.001021"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:23:45.730352" elapsed="0.001573"/>
</kw>
<msg time="2026-04-12T00:23:45.731971" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:23:45.721454" elapsed="0.010560"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:23:45.721064" elapsed="0.011022"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:23:45.732709" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:23:45.732754" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:23:45.732455" elapsed="0.000323"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:23:45.735973" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:23:45.735573" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:23:45.736441" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:23:45.736157" elapsed="0.000309"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:23:45.736513" elapsed="0.000031"/>
</return>
<msg time="2026-04-12T00:23:45.736694" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:23:45.734602" elapsed="0.002117"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:23:45.736869" elapsed="0.000153"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:23:45.737503" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:23:45.737178" elapsed="0.000351"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:23:45.737939" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:23:45.737698" elapsed="0.000266"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:23:45.738338" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:23:45.738108" elapsed="0.000255"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:45.738765" elapsed="0.000035"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:45.739106" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:23:45.738958" elapsed="0.000203"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:45.739326" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:23:45.739187" elapsed="0.000191"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:45.739541" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:23:45.739401" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:23:45.738937" elapsed="0.000676"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:23:45.738585" elapsed="0.001069"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:23:45.738408" elapsed="0.001273"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:23:45.739723" elapsed="0.000027"/>
</return>
<msg time="2026-04-12T00:23:45.739917" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:23:45.739962" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:23:45.733899" elapsed="0.006095"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:23:45.740434" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:23:45.740509" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:23:45.740163" elapsed="0.000370"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:23:45.741110" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:23:45.740837" elapsed="0.000345">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:23:45.740601" elapsed="0.000647">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:23:45.740583" elapsed="0.000862">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:45.741600" elapsed="0.000022"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:45.741790" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:23:45.741856" elapsed="0.000016"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:23:45.733061" elapsed="0.008897">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:45.742127" elapsed="0.000021"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:45.742287" elapsed="0.000019"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:45.742447" elapsed="0.000019"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:23:45.732315" elapsed="0.010200">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:23:45.732146" elapsed="0.010423">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:23:45.742618" elapsed="0.000030"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:23:45.704860" elapsed="0.037867">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:23:55.760480" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:23:55.760105" elapsed="0.000410"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:23:55.780311" elapsed="0.000235"/>
</kw>
<msg time="2026-04-12T00:23:55.780600" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:23:55.779655" elapsed="0.001023"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:23:55.779185" elapsed="0.001574"/>
</kw>
<msg time="2026-04-12T00:23:55.780891" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:23:55.770202" elapsed="0.010735"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:23:55.769818" elapsed="0.011193"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:23:55.781624" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:23:55.781686" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:23:55.781386" elapsed="0.000329"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:23:55.784373" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:23:55.783986" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:23:55.784856" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:23:55.784557" elapsed="0.000325"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:23:55.784930" elapsed="0.000032"/>
</return>
<msg time="2026-04-12T00:23:55.785088" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:23:55.783598" elapsed="0.001514"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:23:55.785266" elapsed="0.000150"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:23:55.785915" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:23:55.785572" elapsed="0.000369"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:23:55.786330" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:23:55.786097" elapsed="0.000259"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:23:55.786784" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:23:55.786531" elapsed="0.000278"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:55.787380" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:55.787684" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:23:55.787493" elapsed="0.000255"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:55.787916" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:23:55.787773" elapsed="0.000201"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:55.788136" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:23:55.787996" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:23:55.787472" elapsed="0.000736"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:23:55.787208" elapsed="0.001024"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:23:55.786854" elapsed="0.001404"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:23:55.788298" elapsed="0.000026"/>
</return>
<msg time="2026-04-12T00:23:55.788493" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:23:55.788537" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:23:55.782884" elapsed="0.005676"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:23:55.789023" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:23:55.789097" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:23:55.788743" elapsed="0.000377"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:23:55.789691" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:23:55.789406" elapsed="0.000359">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:23:55.789189" elapsed="0.000647">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:23:55.789170" elapsed="0.000698">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:55.790019" elapsed="0.000059"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:55.790235" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:23:55.790301" elapsed="0.000016"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:23:55.782014" elapsed="0.008391">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:55.790620" elapsed="0.000039"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:55.790803" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:23:55.790965" elapsed="0.000019"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:23:55.781245" elapsed="0.009790">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:23:55.781074" elapsed="0.010021">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:23:55.791145" elapsed="0.000015"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:23:55.754395" elapsed="0.036842">No leader found.</status>
</kw>
<kw name="Shards_Stability_Get_Details" owner="ShardStability">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:24:05.808858" level="INFO">&amp;{shards_details} = { }</msg>
<var>&amp;{shards_details}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:24:05.808474" elapsed="0.000419"/>
</kw>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Remove Values From List" owner="Collections">
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-04-12T00:24:05.828497" elapsed="0.000239"/>
</kw>
<msg time="2026-04-12T00:24:05.828792" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:24:05.827861" elapsed="0.000990"/>
</kw>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is at least ${lower_bound},
run Collections.Remove_Values_From_List [['default:config', 'default:operational', 'topology:config', 'topology:operational', 'inventory:config', 'inventory:operational'], 'entity-ownership:operational'] {} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:24:05.827391" elapsed="0.001536"/>
</kw>
<msg time="2026-04-12T00:24:05.828973" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Least</arg>
<arg>phosphorus</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:24:05.818464" elapsed="0.010551"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${shard_list}</arg>
<arg>entity-ownership:operational</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-04-12T00:24:05.818081" elapsed="0.011006"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Split String" owner="String">
<msg time="2026-04-12T00:24:05.829712" level="INFO">${shard_name} = default</msg>
<msg time="2026-04-12T00:24:05.829757" level="INFO">${shard_type} = config</msg>
<var>${shard_name}</var>
<var>${shard_type}</var>
<arg>${shard_details}</arg>
<arg>separator=:</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-12T00:24:05.829457" elapsed="0.000322"/>
</kw>
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:24:05.834171" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:24:05.832035" elapsed="0.002163"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:24:05.834677" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:24:05.834362" elapsed="0.000342"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:24:05.834752" elapsed="0.000031"/>
</return>
<msg time="2026-04-12T00:24:05.834908" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:24:05.831662" elapsed="0.003271"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:24:05.835086" elapsed="0.000153"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:24:05.835742" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:24:05.835396" elapsed="0.000372"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:24:05.836162" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:24:05.835926" elapsed="0.000262"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:24:05.836669" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:24:05.836418" elapsed="0.000278"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:05.837089" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:05.837341" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:24:05.837196" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:05.837559" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:24:05.837420" elapsed="0.000192"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:05.837791" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:24:05.837649" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:24:05.837177" elapsed="0.000688"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:24:05.836921" elapsed="0.000967"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:24:05.836742" elapsed="0.001170"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:24:05.837957" elapsed="0.000027"/>
</return>
<msg time="2026-04-12T00:24:05.838150" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:24:05.838196" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:24:05.830928" elapsed="0.007292"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:24:05.838680" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:24:05.838756" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:24:05.838386" elapsed="0.000394"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:24:05.839333" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:24:05.839062" elapsed="0.000340">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:24:05.838848" elapsed="0.000618">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:24:05.838831" elapsed="0.000666">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:05.839662" elapsed="0.000022"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:05.839833" elapsed="0.000021"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:24:05.839899" elapsed="0.000015"/>
</return>
<var>${leader}</var>
<var>${followers}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:24:05.830068" elapsed="0.009932">No leader found.</status>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${followers}</arg>
<doc>Sorts the given list in place.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:05.840169" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_leader=${leader}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:05.840330" elapsed="0.000020"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${shards_details}</arg>
<arg>${shard_name}_${shard_type}_followers=${followers}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:05.840492" elapsed="0.000020"/>
</kw>
<var name="${shard_details}">default:config</var>
<status status="FAIL" start="2026-04-12T00:24:05.829311" elapsed="0.011251">No leader found.</status>
</iter>
<var>${shard_details}</var>
<value>@{shard_list}</value>
<status status="FAIL" start="2026-04-12T00:24:05.829145" elapsed="0.011471">No leader found.</status>
</for>
<return>
<value>${shards_details}</value>
<status status="NOT RUN" start="2026-04-12T00:24:05.840682" elapsed="0.000015"/>
</return>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Return shard details stored in dictionary.
${shard_list} should be initialized as @{list} shard_name1:shard_type1 shard_name2:shard..</doc>
<status status="FAIL" start="2026-04-12T00:24:05.802837" elapsed="0.037938">No leader found.</status>
</kw>
<msg time="2026-04-12T00:24:05.840861" level="FAIL">Keyword 'ShardStability.Shards_Stability_Get_Details' failed after retrying for 5 minutes. The last error was: No leader found.</msg>
<arg>300s</arg>
<arg>10s</arg>
<arg>ShardStability.Shards_Stability_Get_Details</arg>
<arg>${DEFAULT_SHARD_LIST}</arg>
<arg>verify_restconf=True</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-04-12T00:19:04.292454" elapsed="301.548515">Keyword 'ShardStability.Shards_Stability_Get_Details' failed after retrying for 5 minutes. The last error was: No leader found.</status>
</kw>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<arg>ps -ef | grep java</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:05.841218" elapsed="0.000024"/>
</kw>
<doc>Start each member and wait for sync.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-12T00:19:04.248643" elapsed="301.592745">Keyword 'ShardStability.Shards_Stability_Get_Details' failed after retrying for 5 minutes. The last error was: No leader found.</status>
</test>
<kw name="Close All Connections" owner="SSHLibrary" type="TEARDOWN">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-12T00:24:05.842734" elapsed="0.000133"/>
</kw>
<doc>Set tell-based protocol usage

Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.

This program and the accompanying materials are made available under the
terms of the Eclipse Public License v1.0 which accompanies this distribution,
and is available at http://www.eclipse.org/legal/epl-v10.html

Suite stops all odl nodes, un-comment usage of tell-based protocol in
config file (means make it true) and starts all nodes again.</doc>
<status status="FAIL" start="2026-04-12T00:19:03.485276" elapsed="302.357633"/>
</suite>
<suite id="s1-s2" name="Explicit Leader Movement Longevity" source="/w/workspace/controller-csit-3node-ddb-expl-lead-movement-longevity-only-vanadium/test/csit/suites/controller/dom_data_broker/explicit_leader_movement_longevity.robot">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils" type="SETUP">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:24:05.973747" level="INFO">${SuiteFastFail} = False</msg>
<arg>${SuiteFastFail}</arg>
<arg>False</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:24:05.969399" elapsed="0.004437"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-04-12T00:24:05.969173" elapsed="0.004736"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-12T00:24:05.979179" level="INFO">${already_done} = False</msg>
<var>${already_done}</var>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>False</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-12T00:24:05.974992" elapsed="0.004214"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-04-12T00:24:05.979397" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:24:05.979290" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-12T00:24:05.979267" elapsed="0.000197"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:24:05.979969" level="INFO">${ClusterManagement__has_setup_run} = True</msg>
<arg>\${ClusterManagement__has_setup_run}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:24:05.979617" elapsed="0.000395"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-04-12T00:24:05.980481" level="INFO">${cluster_size} = 0</msg>
<var>${cluster_size}</var>
<arg>\${NUM_ODL_SYSTEM}</arg>
<arg>1</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-12T00:24:05.980173" elapsed="0.000334"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-04-12T00:24:05.981026" elapsed="0.000278"/>
</kw>
<msg time="2026-04-12T00:24:05.981403" level="INFO">${status} = PASS</msg>
<msg time="2026-04-12T00:24:05.981449" level="INFO">${possibly_int_of_members} = 0</msg>
<var>${status}</var>
<var>${possibly_int_of_members}</var>
<arg>BuiltIn.Convert_To_Integer</arg>
<arg>${cluster_size}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-12T00:24:05.980688" elapsed="0.000784"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:24:05.982017" level="INFO">${int_of_members} = 0</msg>
<var>${int_of_members}</var>
<arg>'${status}' != 'PASS'</arg>
<arg>${1}</arg>
<arg>${possibly_int_of_members}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:24:05.981651" elapsed="0.000392"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:24:05.983014" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:24:05.982755" elapsed="0.000285"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:24:05.983436" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:24:05.983186" elapsed="0.000275"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-04-12T00:24:05.983916" level="INFO">&amp;{index_to_ip_mapping} = { }</msg>
<var>&amp;{index_to_ip_mapping}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-04-12T00:24:05.983615" elapsed="0.000328"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:05.986501" elapsed="0.000035"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:24:05.986317" elapsed="0.000266"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="NOT RUN" start="2026-04-12T00:24:05.983997" elapsed="0.002614"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:24:05.987171" level="INFO">${ClusterManagement__member_index_list} = []</msg>
<arg>\${ClusterManagement__member_index_list}</arg>
<arg>${member_index_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:24:05.986787" elapsed="0.000427"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:24:05.987764" level="INFO">${ClusterManagement__index_to_ip_mapping} = {}</msg>
<arg>\${ClusterManagement__index_to_ip_mapping}</arg>
<arg>${index_to_ip_mapping}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:24:05.987372" elapsed="0.000434"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-04-12T00:24:05.988329" level="INFO">${ClusterManagement__session_list} = []</msg>
<arg>\${ClusterManagement__session_list}</arg>
<arg>${session_list}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-04-12T00:24:05.987965" elapsed="0.000405"/>
</kw>
<arg>int_of_members=${int_of_members}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Construct index list, session list and IP mapping, publish them as suite variables.</doc>
<status status="PASS" start="2026-04-12T00:24:05.982282" elapsed="0.006144"/>
</kw>
<arg>http_timeout=${http_timeout}</arg>
<doc>Detect repeated call, or detect number of members and initialize derived suite variables.
Http sessions are created with parameters to not waste time when ODL is no accepting connections properly.</doc>
<status status="PASS" start="2026-04-12T00:24:05.974654" elapsed="0.013825"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-12T00:24:05.988733" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:24:05.988542" elapsed="0.000240"/>
</branch>
<status status="PASS" start="2026-04-12T00:24:05.988524" elapsed="0.000280"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:24:05.992075" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:24:05.991694" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:24:05.992545" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:24:05.992260" elapsed="0.000316"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:24:05.992649" elapsed="0.000039"/>
</return>
<msg time="2026-04-12T00:24:05.992815" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:24:05.991355" elapsed="0.001485"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:05.993167" elapsed="0.000024"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:24:05.992995" elapsed="0.000230"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:24:05.992889" elapsed="0.000361"/>
</for>
<arg>iptables -I INPUT -p tcp --dport ${KARAF_SHELL_PORT} -j ACCEPT; iptables-save</arg>
<doc>Cycle through indices (or all), run command on each.</doc>
<status status="PASS" start="2026-04-12T00:24:05.989022" elapsed="0.004281"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>First connections to Karaf console may fail, so WUKS is used. TODO: Track as a Bug.</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-04-12T00:24:05.993451" elapsed="0.000222"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<arg>BuiltIn.Wait_Until_Keyword_Succeeds</arg>
<arg>3s</arg>
<arg>1s</arg>
<arg>Open_Controller_Karaf_Console_On_Background</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:05.993972" elapsed="0.000021"/>
</kw>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:24:05.993838" elapsed="0.000197"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:24:05.993722" elapsed="0.000338"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-04-12T00:24:05.974202" elapsed="0.019909"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Test_Suite_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-12T00:24:05.996780" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:24:05.996671" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-04-12T00:24:05.996652" elapsed="0.000194"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-12T00:24:06.001808" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:24:06.001703" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-04-12T00:24:06.001686" elapsed="0.000189"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:24:06.002828" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:24:06.002413" elapsed="0.000442"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:24:06.003294" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:24:06.003012" elapsed="0.000307"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:24:06.003363" elapsed="0.000028"/>
</return>
<msg time="2026-04-12T00:24:06.003514" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:24:06.002093" elapsed="0.001445"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.003887" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.004123" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:24:06.003983" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:24:06.003968" elapsed="0.000229"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:24:06.003748" elapsed="0.000473"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:24:06.003586" elapsed="0.000658"/>
</for>
<arg>Starting suite ${SUITE_SOURCE}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-12T00:24:06.001408" elapsed="0.002888"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-04-12T00:24:05.994694" elapsed="0.009656"/>
</kw>
<arg>KarafKeywords.Log_Test_Suite_Start_To_Controller_Karaf</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-12T00:24:05.994259" elapsed="0.010131"/>
</kw>
<arg>http_timeout=125</arg>
<doc>Prepare both FailFast and Karaf logging, log that the caller suite has started.
This keyword is to be used in suite setup, and without it the other keywords may not work properly.</doc>
<status status="PASS" start="2026-04-12T00:24:05.968826" elapsed="0.035649"/>
</kw>
<test id="s1-s2-t1" name="Explicit_Leader_Movement_Test" line="35">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-04-12T00:24:06.007727" elapsed="0.000207"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-04-12T00:24:06.007455" elapsed="0.000533"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-12T00:24:06.008956" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:24:06.008851" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-04-12T00:24:06.008832" elapsed="0.000191"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-04-12T00:24:06.014049" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:24:06.013945" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-04-12T00:24:06.013927" elapsed="0.000189"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:24:06.015117" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:24:06.014740" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:24:06.015582" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:24:06.015301" elapsed="0.000307"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:24:06.015668" elapsed="0.000029"/>
</return>
<msg time="2026-04-12T00:24:06.015823" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:24:06.014333" elapsed="0.001513"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.016183" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="not ${tolerate_failure} and &quot;${status}&quot; != &quot;PASS&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.016419" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:24:06.016278" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:24:06.016262" elapsed="0.000231"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:24:06.016044" elapsed="0.000473"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:24:06.015896" elapsed="0.000644"/>
</for>
<arg>Starting test ${SUITE_NAME}.${TEST_NAME}</arg>
<arg>${member_index_list}</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="PASS" start="2026-04-12T00:24:06.013579" elapsed="0.003013"/>
</kw>
<arg>member_index_list=${member_index_list}</arg>
<doc>Log test case name to karaf log, useful in test case setup.</doc>
<status status="PASS" start="2026-04-12T00:24:06.008554" elapsed="0.008107"/>
</kw>
<arg>KarafKeywords.Log_Testcase_Start_To_Controller_Karaf</arg>
<arg>member_index_list=${member_index_list}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-12T00:24:06.008134" elapsed="0.008573"/>
</kw>
<doc>Test case setup which explicitly ignores previous failure and logs test case name to Karaf log.
Needed if the recommended default is to be overriden.</doc>
<status status="PASS" start="2026-04-12T00:24:06.005082" elapsed="0.011676"/>
</kw>
<kw name="Verify_Keyword_Does_Not_Fail_Within_Timeout" owner="WaitForFailure">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Invert_Failure" owner="WaitForFailure">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Confirm_Keyword_Fails_Within_Timeout" owner="WaitForFailure">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Invert_Failure" owner="WaitForFailure">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Test_Scenario">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-12T00:24:06.022032" level="INFO">${node_from} = remote</msg>
<msg time="2026-04-12T00:24:06.022165" level="INFO">${node_to} = local</msg>
<var>${node_from}</var>
<var>${node_to}</var>
<arg>random.sample(${MOVEMENT_DIRECTION_LIST}, 2)</arg>
<arg>modules=random</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-12T00:24:06.021049" elapsed="0.001183"/>
</kw>
<kw name="Explicit_Leader_Movement_Test_Templ" owner="DdbCommons">
<kw name="Get_Node_Indexes_For_The_ELM_Test" owner="DdbCommons">
<kw name="Get_Leader_And_Followers_For_Shard" owner="ClusterManagement">
<kw name="Get_State_Info_For_Shard" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:24:06.030646" level="INFO">${return_list_reference} = []</msg>
<var>${return_list_reference}</var>
<arg>"""${given_list}""" != ""</arg>
<arg>${given_list}</arg>
<arg>${ClusterManagement__member_index_list}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:24:06.030237" elapsed="0.000437"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:24:06.031116" level="INFO">${return_list_copy} = []</msg>
<var>${return_list_copy}</var>
<arg>@{return_list_reference}</arg>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:24:06.030833" elapsed="0.000309"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-04-12T00:24:06.031186" elapsed="0.000029"/>
</return>
<msg time="2026-04-12T00:24:06.031338" level="INFO">${index_list} = []</msg>
<var>${index_list}</var>
<arg>given_list=${member_index_list}</arg>
<doc>Utility to allow ${EMPTY} as default argument value, as the internal list is computed at runtime.
This keyword always returns a (shallow) copy of given or default list,
so operations with the returned list should not affect other lists.
Also note that this keyword does not consider empty list to be ${EMPTY}.</doc>
<status status="PASS" start="2026-04-12T00:24:06.029873" elapsed="0.001489"/>
</kw>
<kw name="Sort List" owner="Collections">
<arg>${index_list}</arg>
<doc>Sorts the given list in place.</doc>
<status status="PASS" start="2026-04-12T00:24:06.031559" elapsed="0.000261"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-04-12T00:24:06.032314" level="INFO">${ds_type} = config</msg>
<var>${ds_type}</var>
<arg>'${shard_type}' != 'config'</arg>
<arg>operational</arg>
<arg>config</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-04-12T00:24:06.031983" elapsed="0.000356"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:24:06.032749" level="INFO">${leader_list} = []</msg>
<var>${leader_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:24:06.032497" elapsed="0.000278"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-04-12T00:24:06.033160" level="INFO">${follower_list} = []</msg>
<var>${follower_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-04-12T00:24:06.032923" elapsed="0.000263"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get_Raft_State_Of_Shard_At_Member" owner="ClusterManagement">
<var>${raft_state}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${ds_type}</arg>
<arg>member_index=${index}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Send request to Jolokia on indexed member, return extracted Raft status.
Optionally, check restconf works.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.033579" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="'Follower' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${follower_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.033845" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:24:06.033700" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="'Leader' == '${raft_state}'">
<kw name="Append To List" owner="Collections">
<arg>${leader_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.034066" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:24:06.033925" elapsed="0.000194"/>
</branch>
<branch type="ELSE IF" condition="${validate}">
<kw name="Fail" owner="BuiltIn">
<arg>Unrecognized Raft state: ${raft_state}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.034283" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:24:06.034142" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-04-12T00:24:06.033682" elapsed="0.000675"/>
</if>
<var name="${index}"/>
<status status="NOT RUN" start="2026-04-12T00:24:06.033412" elapsed="0.000969"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="NOT RUN" start="2026-04-12T00:24:06.033232" elapsed="0.001173"/>
</for>
<return>
<value>${leader_list}</value>
<value>${follower_list}</value>
<status status="PASS" start="2026-04-12T00:24:06.034445" elapsed="0.000027"/>
</return>
<msg time="2026-04-12T00:24:06.034681" level="INFO">${leader_list} = []</msg>
<msg time="2026-04-12T00:24:06.034730" level="INFO">${follower_list} = []</msg>
<var>${leader_list}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>validate=True</arg>
<arg>member_index_list=${member_index_list}</arg>
<arg>verify_restconf=${verify_restconf}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Return lists of Leader and Follower member indices from a given member index list
(or from the full list if empty). If ${shard_type} is not 'config', 'operational' is assumed.
If ${validate}, Fail if raft state is not Leader or Follower (for example on Candidate).
The biggest difference from Get_Leader_And_Followers_For_Shard
is that no check on number of Leaders is performed.</doc>
<status status="PASS" start="2026-04-12T00:24:06.029146" elapsed="0.005607"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-04-12T00:24:06.035192" level="INFO">Length is 0.</msg>
<msg time="2026-04-12T00:24:06.035269" level="INFO">${leader_count} = 0</msg>
<var>${leader_count}</var>
<arg>${leader_list}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-04-12T00:24:06.034923" elapsed="0.000370"/>
</kw>
<if>
<branch type="IF" condition="${leader_count} &lt; 1">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:24:06.035877" level="FAIL">No leader found.</msg>
<arg>No leader found.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:24:06.035579" elapsed="0.000370">No leader found.</status>
</kw>
<status status="FAIL" start="2026-04-12T00:24:06.035360" elapsed="0.000796">No leader found.</status>
</branch>
<status status="FAIL" start="2026-04-12T00:24:06.035343" elapsed="0.000846">No leader found.</status>
</if>
<kw name="Length Should Be" owner="BuiltIn">
<arg>${leader_list}</arg>
<arg>${1}</arg>
<arg>Too many Leaders.</arg>
<doc>Verifies that the length of the given item is correct.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.036347" elapsed="0.000022"/>
</kw>
<kw name="Get From List" owner="Collections">
<var>${leader}</var>
<arg>${leader_list}</arg>
<arg>0</arg>
<doc>Returns the value specified with an ``index`` from ``list``.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.036520" elapsed="0.000020"/>
</kw>
<return>
<value>${leader}</value>
<value>${follower_list}</value>
<status status="NOT RUN" start="2026-04-12T00:24:06.036585" elapsed="0.000016"/>
</return>
<var>${leader}</var>
<var>${follower_list}</var>
<arg>shard_name=${shard_name}</arg>
<arg>shard_type=${shard_type}</arg>
<arg>verify_restconf=False</arg>
<doc>Get role lists, validate there is one leader, return the leader and list of followers.
Optionally, issue GET to a simple restconf URL to make sure subsequent operations will not encounter 503.</doc>
<status status="FAIL" start="2026-04-12T00:24:06.024671" elapsed="0.012041">No leader found.</status>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${idx_from}</var>
<arg>${leader}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.036886" elapsed="0.000021"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${idx_to}</var>
<arg>${follower_list}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.037050" elapsed="0.000020"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${idx_trans}</var>
<arg>"${leader_from}" == "remote" and "${leader_to}" == "remote"</arg>
<arg>${follower_list}[1]</arg>
<arg>"${leader_from}" == "local"</arg>
<arg>${leader}</arg>
<arg>"${leader_to}" == "local"</arg>
<arg>${follower_list}[0]</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.037221" elapsed="0.000020"/>
</kw>
<return>
<value>${idx_from}</value>
<value>${idx_to}</value>
<value>${idx_trans}</value>
<status status="NOT RUN" start="2026-04-12T00:24:06.037296" elapsed="0.000015"/>
</return>
<var>${idx_from}</var>
<var>${idx_to}</var>
<var>${idx_trans}</var>
<arg>${leader_from}</arg>
<arg>${leader_to}</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<doc>Return indexes for explicit leader movement test case, indexes of present to next leader node and index where transaction
producer should be deployed.</doc>
<status status="FAIL" start="2026-04-12T00:24:06.023962" elapsed="0.013772">No leader found.</status>
</kw>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<arg>Starting leader movement from node${idx_from} to node${idx_to}, transaction producer at node${idx_trans}.</arg>
<doc>Make sure this resource is initialized. Send a message into the controller's karaf log file on every node listed (or all).
By default, failure while processing a node is silently ignored, unless ${tolerate_failure} is False.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.042619" elapsed="0.000073"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${ip_trans_as_list}</var>
<arg>${ODL_SYSTEM_${idx_trans}_IP}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.042990" elapsed="0.000036"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${idx_trans_as_list}</var>
<arg>${idx_trans}</arg>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.043280" elapsed="0.000033"/>
</kw>
<kw name="Start Write Transactions On Nodes" owner="MdsalLowlevelPy">
<arg>${ip_trans_as_list}</arg>
<arg>${idx_trans_as_list}</arg>
<arg>${ID_PREFIX}</arg>
<arg>${TRANSACTION_PRODUCTION_TIME}</arg>
<arg>${TRANSACTION_RATE_1K}</arg>
<arg>chained_flag=${CHAINED_TX}</arg>
<doc>Invoke write-transactions rpc on given nodes.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.043580" elapsed="0.000043"/>
</kw>
<kw name="Sleep" owner="BuiltIn">
<arg>${SLEEP_AFTER_TRANSACTIONS_INIT}</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.043903" elapsed="0.000033"/>
</kw>
<kw name="Make_Leader_Local" owner="ClusterAdmin">
<arg>${idx_to}</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<doc>Makes the node to be a shard leader by invoking make-leader-local rpc.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.044384" elapsed="0.000037"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<var>${new_leader}</var>
<var>${new_followers}</var>
<arg>60s</arg>
<arg>5s</arg>
<arg>ClusterManagement.Verify_Shard_Leader_Elected</arg>
<arg>${shard_name}</arg>
<arg>${shard_type}</arg>
<arg>${True}</arg>
<arg>${idx_from}</arg>
<arg>verify_restconf=False</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.044727" elapsed="0.000035"/>
</kw>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>${idx_to}</arg>
<arg>${new_leader}</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.045018" elapsed="0.000035"/>
</kw>
<kw name="Wait For Transactions" owner="MdsalLowlevelPy">
<var>${resp_list}</var>
<doc>Blocking call, waitig for responses from all threads.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.045306" elapsed="0.000034"/>
</kw>
<kw name="Check_Status_Of_First_Response" owner="DdbCommons">
<arg>${resp_list}</arg>
<doc>Extract first item from the list, third item of the tuple and call TemplatedRequests to check the http status code.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.045761" elapsed="0.000038"/>
</kw>
<arg>${node_from}</arg>
<arg>${node_to}</arg>
<doc>Implements explicit leader movement test scenario.</doc>
<status status="FAIL" start="2026-04-12T00:24:06.022601" elapsed="0.023310">No leader found.</status>
</kw>
<doc>One leader movement scenario based on randomly chosen direction.</doc>
<status status="FAIL" start="2026-04-12T00:24:06.020784" elapsed="0.025304">No leader found.</status>
</kw>
<msg time="2026-04-12T00:24:06.046189" level="INFO">${status} = FAIL</msg>
<msg time="2026-04-12T00:24:06.046232" level="INFO">${output} = No leader found.</msg>
<var>${status}</var>
<var>${output}</var>
<arg>@{cell_sequence}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-12T00:24:06.020331" elapsed="0.025924"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; != &quot;PASS&quot;">
<return>
<value>${output}</value>
<status status="PASS" start="2026-04-12T00:24:06.046434" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-04-12T00:24:06.046327" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-04-12T00:24:06.046308" elapsed="0.000230"/>
</if>
<kw name="Convert To String" owner="BuiltIn">
<var>${output}</var>
<arg>${output}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.046722" elapsed="0.000023"/>
</kw>
<kw name="Fail" owner="BuiltIn">
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.046891" elapsed="0.000020"/>
</kw>
<arg>@{cell_list}</arg>
<doc>The response of Keyword execution is either a return value or a failure message.
This keyword calls the argument keyword and returns its failure message string,
or fails with its return value converted to string.</doc>
<status status="PASS" start="2026-04-12T00:24:06.019856" elapsed="0.027150"/>
</kw>
<arg>${timeout}</arg>
<arg>${refresh}</arg>
<arg>Invert_Failure</arg>
<arg>@{cell_list}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-04-12T00:24:06.019275" elapsed="0.027780"/>
</kw>
<msg time="2026-04-12T00:24:06.047099" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Wait_Until_Keyword_Succeeds</arg>
<arg>${timeout}</arg>
<arg>${refresh}</arg>
<arg>Invert_Failure</arg>
<arg>@{cell_list}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:24:06.018914" elapsed="0.028232"/>
</kw>
<arg>82800</arg>
<arg>5s</arg>
<arg>Test_Scenario</arg>
<doc>Some Keywords need several tries to finally fail, this keyword passes if and only if the failure ultimately happens.</doc>
<status status="PASS" start="2026-04-12T00:24:06.018572" elapsed="0.028648"/>
</kw>
<msg time="2026-04-12T00:24:06.047314" level="INFO">${status} = PASS</msg>
<msg time="2026-04-12T00:24:06.047356" level="INFO">${output} = No leader found.</msg>
<var>${status}</var>
<var>${output}</var>
<arg>@{cell_sequence}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-04-12T00:24:06.018165" elapsed="0.029213"/>
</kw>
<if>
<branch type="IF" condition="&quot;${status}&quot; != &quot;PASS&quot;">
<return>
<value>${output}</value>
<status status="NOT RUN" start="2026-04-12T00:24:06.047548" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:24:06.047446" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-04-12T00:24:06.047428" elapsed="0.000189"/>
</if>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-04-12T00:24:06.048078" level="INFO">${output} = No leader found.</msg>
<var>${output}</var>
<arg>${output}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-04-12T00:24:06.047774" elapsed="0.000329"/>
</kw>
<kw name="Fail" owner="BuiltIn">
<msg time="2026-04-12T00:24:06.048540" level="FAIL">No leader found.</msg>
<arg>${output}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-04-12T00:24:06.048253" elapsed="0.000346">No leader found.</status>
</kw>
<arg>Confirm_Keyword_Fails_Within_Timeout</arg>
<arg>${timeout}</arg>
<arg>${refresh}</arg>
<arg>@{cell_list}</arg>
<doc>The response of Keyword execution is either a return value or a failure message.
This keyword calls the argument keyword and returns its failure message string,
or fails with its return value converted to string.</doc>
<status status="FAIL" start="2026-04-12T00:24:06.017781" elapsed="0.030928">No leader found.</status>
</kw>
<msg time="2026-04-12T00:24:06.048762" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Invert_Failure</arg>
<arg>Confirm_Keyword_Fails_Within_Timeout</arg>
<arg>${timeout}</arg>
<arg>${refresh}</arg>
<arg>@{cell_list}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="FAIL" start="2026-04-12T00:24:06.017328" elapsed="0.031478"/>
</kw>
<arg>${LONGEVITY_TEST_DURATION_IN_SECS}</arg>
<arg>5s</arg>
<arg>Test_Scenario</arg>
<doc>Some positive checks report false success for a short time. This keyword verifies no failure does happen within timeout period.
This implementation needs more complicated logic than, Verify_Keyword_Never_Passes_Within_Timeout,
so use that keyword in case you have a negative check handy.</doc>
<status status="FAIL" start="2026-04-12T00:24:06.016962" elapsed="0.031935">No leader found.</status>
</kw>
<kw name="Teardown_Test_Show_Bugs_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="SetupUtils__Report_Bugs_Causing_Failure" owner="SetupUtils">
<if>
<branch type="IF" condition="'${SetupUtils__Known_Bug_ID}' != ''">
<kw name="Report Failure Due To Bug" owner="Utils">
<arg>${SetupUtils__Known_Bug_ID}</arg>
<doc>Report that a test failed due to a known Bugzilla bug whose
number is provided as an argument.
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="NOT RUN" start="2026-04-12T00:24:06.050187" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-04-12T00:24:06.049814" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-04-12T00:24:06.049796" elapsed="0.000474"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-04-12T00:24:06.050416" elapsed="0.000695"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-12T00:24:06.056439" level="INFO">${test_skipped} = False</msg>
<var>${test_skipped}</var>
<arg>len(re.findall('SKIPPED', """${TEST_MESSAGE}""")) &gt; 0</arg>
<arg>modules=re</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-12T00:24:06.055961" elapsed="0.000506"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-04-12T00:24:06.056700" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-04-12T00:24:06.056541" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-04-12T00:24:06.056523" elapsed="0.000239"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-12T00:24:06.057198" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-12T00:24:06.056906" elapsed="0.000317"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-04-12T00:24:06.057719" level="INFO">${reference} = controller_ddb_expl_lead_movement_longevity_txt_Explicit_Leader_Movement_Longevity_Explicit_Leader_Movement_Test</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-04-12T00:24:06.057378" elapsed="0.000367"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-04-12T00:24:06.058075" level="INFO">${reference} = controller_ddb_expl_lead_movement_longevity_txt_explicit_leader_movement_longevity_explicit_leader_movement_test</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-04-12T00:24:06.057902" elapsed="0.000198"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-12T00:24:06.058612" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"controller_ddb_expl_lead_movement_longevity_txt_explicit_leader_movement_longevity_explicit_leader_movement_test"
reference ...</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-12T00:24:06.058249" elapsed="0.000406"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-04-12T00:24:06.059112" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=controller_ddb_expl_lead_movement_longevity_txt_explicit_leader_movement_longevity_explicit_leader_movement_test&amp;order=bug...</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-12T00:24:06.058809" elapsed="0.000330"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-04-12T00:24:06.059733" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"controller_ddb_expl_lead_movement_longevity_txt_explicit_leader_movement_longevity_explicit_leader_movement_test"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=controller_ddb_expl_lead_movement_longevity_txt_explicit_leader_movement_longevity_explicit_leader_movement_test&amp;order=bug_status"

No leader found.</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-04-12T00:24:06.059290" elapsed="0.000494"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-04-12T00:24:06.060222" level="INFO">... click for list of related bugs or create a new one if needed (with the
"controller_ddb_expl_lead_movement_longevity_txt_explicit_leader_movement_longevity_explicit_leader_movement_test"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=controller_ddb_expl_lead_movement_longevity_txt_explicit_leader_movement_longevity_explicit_leader_movement_test&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-12T00:24:06.059933" elapsed="0.000337"/>
</kw>
<doc>Report that a test failed and point to linked Bugzilla bug(s).
Linked bugs must contain the ${reference} inside comments (workaround
becasue of currently missing suitable field for external references and
not correctly working the CONTENT MATCHES filter).
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="PASS" start="2026-04-12T00:24:06.055657" elapsed="0.004667"/>
</kw>
<status status="PASS" start="2026-04-12T00:24:06.049593" elapsed="0.010781"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-04-12T00:24:06.049242" elapsed="0.011173"/>
</kw>
<doc>Leader move for 24 hours from one node to another</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-04-12T00:24:06.004538" elapsed="0.055918">... click for list of related bugs or create a new one if needed (with the
"controller_ddb_expl_lead_movement_longevity_txt_explicit_leader_movement_longevity_explicit_leader_movement_test"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=controller_ddb_expl_lead_movement_longevity_txt_explicit_leader_movement_longevity_explicit_leader_movement_test&amp;order=bug_status"

No leader found.</status>
</test>
<kw name="Close All Connections" owner="SSHLibrary" type="TEARDOWN">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-04-12T00:24:06.060939" elapsed="0.000101"/>
</kw>
<doc>DOMDataBroker testing: Explicit Leader Movement

Copyright (c) 2017 Cisco Systems, Inc. and others. All rights reserved.

This program and the accompanying materials are made available under the
terms of the Eclipse Public License v1.0 which accompanies this distribution,
and is available at http://www.eclipse.org/legal/epl-v10.html

The goal is to ensure that applications do not observe disruption when a shard
leader is moved as the result of explicit application request. This is performed
by having a steady-stream producer execute operations against the shard and then
initiate shard leader shutdown, then the producer is shut down cleanly.</doc>
<status status="FAIL" start="2026-04-12T00:24:05.843527" elapsed="0.217545"/>
</suite>
<status status="FAIL" start="2026-04-12T00:19:03.446714" elapsed="302.615060"/>
</suite>
<statistics>
<total>
<stat pass="2" fail="2" skip="0">All Tests</stat>
</total>
<tag>
<stat pass="2" fail="2" skip="0">critical</stat>
</tag>
<suite>
<stat name="controller-ddb-expl-lead-movement-longevity.txt" id="s1" pass="2" fail="2" skip="0">controller-ddb-expl-lead-movement-longevity.txt</stat>
<stat name="Restart Odl With Tell Based True" id="s1-s1" pass="2" fail="1" skip="0">controller-ddb-expl-lead-movement-longevity.txt.Restart Odl With Tell Based True</stat>
<stat name="Explicit Leader Movement Longevity" id="s1-s2" pass="0" fail="1" skip="0">controller-ddb-expl-lead-movement-longevity.txt.Explicit Leader Movement Longevity</stat>
</suite>
</statistics>
<errors>
</errors>
</robot>
