-
Notifications
You must be signed in to change notification settings - Fork 54
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
test(robot): add test case Shutdown Volume Node And Test Auto Reattach To A New Node #2169
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
*** Settings *** | ||
Documentation Global Variables | ||
|
||
*** Variables *** | ||
${LOOP_COUNT} 1 | ||
${RETRY_COUNT} 300 | ||
${RETRY_INTERVAL} 1 | ||
${VOLUME_TYPE} RWO | ||
${CONTROL_PLANE_NODE_NETWORK_LATENCY_IN_MS} 0 | ||
${RWX_VOLUME_FAST_FAILOVER} false | ||
${DATA_ENGINE} v1 | ||
|
||
@{powered_off_nodes}= |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -67,12 +67,32 @@ def delete_sharemanager_pod_and_wait_for_recreation(self, name): | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
assert False, f"sharemanager pod {sharemanager_pod_name} not recreated" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def wait_for_sharemanager_pod_restart(self, name): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sharemanager_pod_name = "share-manager-" + name | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sharemanager_pod = get_pod(sharemanager_pod_name, "longhorn-system") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
last_creation_time = sharemanager_pod.metadata.creation_timestamp | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
retry_count, retry_interval = get_retry_count_and_interval() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
for i in range(retry_count): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
logging(f"Waiting for sharemanager for volume {name} restart ... ({i})") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
time.sleep(retry_interval) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sharemanager_pod = get_pod(sharemanager_pod_name, "longhorn-system") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if sharemanager_pod == None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
continue | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
creation_time = sharemanager_pod.metadata.creation_timestamp | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
logging(f"Getting new sharemanager which is created at {creation_time}, and old one is created at {last_creation_time}") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if creation_time > last_creation_time: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
assert False, f"sharemanager pod {sharemanager_pod_name} isn't restarted" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+70
to
+87
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Good addition, but some improvements needed The new method effectively monitors share manager pod restarts with good logging. However, there are a few improvements to consider:
- if sharemanager_pod == None:
+ if sharemanager_pod is None:
- assert False, f"sharemanager pod {sharemanager_pod_name} isn't restarted"
+ raise AssertionError(f"sharemanager pod {sharemanager_pod_name} isn't restarted")
📝 Committable suggestion
Suggested change
🧰 Tools🪛 Ruff (0.8.0)80-80: Comparison to Replace with (E711) 87-87: Do not Replace (B011) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def wait_for_share_manager_pod_running(self, name): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sharemanager_pod_name = "share-manager-" + name | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
retry_count, retry_interval = get_retry_count_and_interval() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
for i in range(retry_count): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sharemanager_pod = get_pod(sharemanager_pod_name, "longhorn-system") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
logging(f"Waiting for sharemanager for volume {name} running, currently {sharemanager_pod.status.phase} ... ({i})") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if sharemanager_pod.status.phase == "Running": | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
🛠️ Refactor suggestion
List modification is safe, but error handling can be improved
After analyzing the codebase, I found that:
@{powered_off_nodes}
list is properly initialized as an empty list invariables.resource
Power off node
keyword inhost.resource
common.resource
andhost.resource
, indicating it's an established patternHowever, the error handling suggestion from the original review is still valid:
🔗 Analysis chain
Improve error handling and list modification safety
While the loop effectively handles multiple powered-off nodes, there are a few concerns to address:
@{powered_off_nodes}
list's initialization is not visible in this file.Consider this safer implementation:
Let's verify the initialization of the powered_off_nodes variable:
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
Length of output: 38
Script:
Length of output: 144
Script:
Length of output: 2476
Script:
Length of output: 1149
Script:
Length of output: 326
Script:
Length of output: 1735