...
... This resource holds private state (in suite variables),
... which is generated once at Setup.
-... The state includes list with indexes (numbers enumerating cluster members),
-... IP addresses and Http (RequestsLibrary) sessions.
+... The state includes IP addresses and Http (RequestsLibrary) sessions.
... Most functionality deals with stopping/starting controllers
... and finding leaders/followers for a Shard.
...
... odl-jolokia is assumed to be installed.
...
-... Keywords which run commands on ODL systems do not preserve active SSH session.
-... TODO: Should they?
-...
... Keywords are ordered from friendly ones to fiddly ones.
... TODO: Figure out more deterministic but still user-friendly ordering.
...
: FOR ${index} IN @{index_list}
\ Verify_Karaf_Is_Not_Running_On_Member member_index=${index}
+ClusterManagement__Build_List
+ [Arguments] ${member}
+ ${member_int}= BuiltIn.Convert_To_Integer ${member}
+ ${index_list}= BuiltIn.Create_List ${member_int}
+ [Return] ${index_list}
+
+Kill_Single_Member
+ [Arguments] ${member} ${confirm}=True
+ [Documentation] Convenience keyword that kills the specified member of the cluster.
+ ${index_list}= ClusterManagement__Build_List ${member}
+ Kill_Members_From_List_Or_All ${index_list} ${confirm}
+
Clean_Journals_And_Snapshots_On_List_Or_All
[Arguments] ${member_index_list}=${EMPTY}
[Documentation] Delete journal and snapshots directories on every node listed (or all).
BuiltIn.Wait_Until_Keyword_Succeeds ${timeout} 1s Check_Cluster_Is_In_Sync member_index_list=${member_index_list}
# TODO: Do we also want to check Shard Leaders here?
+Start_Single_Member
+ [Arguments] ${member} ${wait_for_sync}=True ${timeout}=300s
+ [Documentation] Convenience keyword that starts the specified member of the cluster.
+ ${index_list}= ClusterManagement__Build_List ${member}
+ Start_Members_From_List_Or_All ${index_list} ${wait_for_sync} ${timeout}
+
Verify_Leader_Exists_For_Each_Shard
[Arguments] ${shard_name_list} ${shard_type}=operational ${member_index_list}=${EMPTY} ${verify_restconf}=True
[Documentation] For each shard name, call Get_Leader_And_Followers_For_Shard.
[Arguments] ${shard_name}=default ${shard_type}=operational ${validate}=True ${member_index_list}=${EMPTY} ${verify_restconf}=True
[Documentation] 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.
- ${leader_list} ${follower_list} = Get_State_Info_For_Shard shard_name=${shard_name} shard_type=${shard_type} validate=True member_index_list=${member_index_list} verify_restconf=${verify_restconf}
+ ${leader_list} ${follower_list} = Get_State_Info_For_Shard shard_name=${shard_name} shard_type=${shard_type} validate=True member_index_list=${member_index_list}
+ ... verify_restconf=${verify_restconf}
${leader_count} = BuiltIn.Get_Length ${leader_list}
BuiltIn.Run_Keyword_If ${leader_count} < 1 BuiltIn.Fail No leader found.
BuiltIn.Length_Should_Be ${leader_list} ${1} Too many Leaders.
Collections.Set_To_Dictionary ${index_to_ip_mapping} ${index} ${member_ip}
# Http session, with ${AUTH}, without headers.
${session_alias} = Resolve_Http_Session_For_Member member_index=${index}
- RequestsLibrary.Create_Session ${session_alias} http://${member_ip}:${RESTCONFPORT} auth=${AUTH}
+ RequestsLibrary.Create_Session ${session_alias} http://${member_ip}:${RESTCONFPORT} auth=${AUTH} max_retries=0
Collections.Append_To_List ${session_list} ${session_alias}