aboutsummaryrefslogtreecommitdiffstats
path: root/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumCommand.java
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2021-07-20 14:26:36 +0200
committerMartin Polden <mpolden@mpolden.no>2021-07-20 14:43:35 +0200
commitc5e986ff809b5a037b70095acc6361981e5fcd0e (patch)
tree53a5e753ec09da4aadaa3ee4be0fa99eaedceca1 /node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumCommand.java
parentdb5535c6dc23e82881bbb013861132b5df4affc2 (diff)
Improve exception for package with multiple installed versions
Diffstat (limited to 'node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumCommand.java')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumCommand.java9
1 files changed, 5 insertions, 4 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumCommand.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumCommand.java
index ba9ba80ccb7..1d105057e02 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumCommand.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumCommand.java
@@ -241,10 +241,11 @@ public abstract class YumCommand<T extends YumCommand<T>> {
}
protected boolean isInstalled(TaskContext context, YumPackageName yumPackage) {
- return queryInstalled(terminal, context, yumPackage.getName()).map(yumPackage::isSubsetOf).orElse(false);
+ return queryInstalled(terminal, context, yumPackage).map(yumPackage::isSubsetOf).orElse(false);
}
- static Optional<YumPackageName> queryInstalled(Terminal terminal, TaskContext context, String packageName) {
+ static Optional<YumPackageName> queryInstalled(Terminal terminal, TaskContext context, YumPackageName yumPackage) {
+ String packageName = yumPackage.toName();
CommandResult commandResult = terminal.newCommandLine(context)
.add("rpm", "-q", packageName, "--queryformat", RPM_QUERYFORMAT)
.ignoreExitCode()
@@ -255,8 +256,8 @@ public abstract class YumCommand<T extends YumCommand<T>> {
YumPackageName.Builder builder = new YumPackageName.Builder();
List<Function<String, YumPackageName.Builder>> builders = PACKAGE_NAME_BUILDERS_GENERATOR.apply(builder);
List<Optional<String>> lines = commandResult.mapEachLine(line -> Optional.of(line).filter(s -> !"(none)".equals(s)));
- if (lines.size() != builders.size()) throw new IllegalStateException(String.format(
- "Unexpected response from rpm, expected %d lines, got %s", builders.size(), commandResult.getOutput()));
+ if (lines.size() % builders.size() != 0) throw new IllegalStateException(String.format("Unexpected response from rpm, expected %d lines, got '%s'", builders.size(), commandResult.getOutput()));
+ if (lines.size() > builders.size()) throw new IllegalArgumentException("Found multiple installed packages for '" + packageName + "'. Version is required to match package exactly");
IntStream.range(0, builders.size()).forEach(i -> lines.get(i).ifPresent(builders.get(i)::apply));
return Optional.of(builder.build());