Skip to content

Commit ffb8698

Browse files
author
Pearl Dsilva
committed
skip warning lines when retrieving lock hostname
1 parent 9e31784 commit ffb8698

1 file changed

Lines changed: 30 additions & 6 deletions

File tree

plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtClvmLockTransferCommandWrapper.java

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ private Answer handleQueryLockState(ClvmLockTransferCommand cmd, String lvPath,
112112
script.add("--noheadings");
113113
script.add(lvPath);
114114

115-
OutputInterpreter.OneLineParser parser = new OutputInterpreter.OneLineParser();
115+
OutputInterpreter.AllLinesParser parser = new OutputInterpreter.AllLinesParser();
116116
String result = script.execute(parser);
117117

118118
if (result != null) {
@@ -121,13 +121,37 @@ private Answer handleQueryLockState(ClvmLockTransferCommand cmd, String lvPath,
121121
String.format("lvs command failed: %s", result));
122122
}
123123

124-
// Parse output: " -wi-a-e--- host5.example.com"
125-
String output = parser.getLine();
126-
if (output == null || output.trim().isEmpty()) {
127-
return new ClvmLockTransferAnswer(cmd, false, "No output from lvs command");
124+
// We need to find the line that contains the actual lv_attr (starts with '-' or other attr chars)
125+
String[] lines = parser.getLines().split("\n");
126+
String dataLine = null;
127+
128+
for (String line : lines) {
129+
String trimmed = line.trim();
130+
// Skip empty lines and warning messages
131+
// lv_attr always starts with '-', 'w', 'r', etc. and is at least 10 characters
132+
if (!trimmed.isEmpty() &&
133+
trimmed.length() >= 10 &&
134+
(trimmed.charAt(0) == '-' || trimmed.charAt(0) == 'w' ||
135+
trimmed.charAt(0) == 'r' || trimmed.charAt(0) == 's' ||
136+
trimmed.charAt(0) == 'v' || trimmed.charAt(0) == 'm' ||
137+
trimmed.charAt(0) == 'p' || trimmed.charAt(0) == 'c' ||
138+
trimmed.charAt(0) == 'o')) {
139+
dataLine = trimmed;
140+
break;
141+
}
128142
}
129143

130-
String[] parts = output.trim().split("\\s+");
144+
if (dataLine == null) {
145+
String allOutput = parser.getLines();
146+
logger.warn("Could not find lv_attr data line in lvs output for volume {}: {}",
147+
volumeUuid, allOutput);
148+
return new ClvmLockTransferAnswer(cmd, false,
149+
String.format("Could not parse lvs output. Full output: %s", allOutput));
150+
}
151+
152+
logger.debug("Parsed lv_attr data line for volume {}: {}", volumeUuid, dataLine);
153+
154+
String[] parts = dataLine.split("\\s+");
131155
if (parts.length < 1) {
132156
return new ClvmLockTransferAnswer(cmd, false, "Invalid lvs output format");
133157
}

0 commit comments

Comments
 (0)