diff options
author | Martin Polden <mpolden@mpolden.no> | 2021-07-20 14:26:36 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2021-07-20 14:43:35 +0200 |
commit | c5e986ff809b5a037b70095acc6361981e5fcd0e (patch) | |
tree | 53a5e753ec09da4aadaa3ee4be0fa99eaedceca1 /node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumCommand.java | |
parent | db5535c6dc23e82881bbb013861132b5df4affc2 (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.java | 9 |
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()); |