From d2ec3e59d98f2651f7f09c6c4472c649a3d90743 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Wed, 18 Sep 2024 23:09:46 +0200 Subject: [PATCH 1/3] Log more about files in application package when services.xml is missing/empty --- .../provider/FilesApplicationPackage.java | 14 ++++++++++++-- .../provider/FilesApplicationPackageTest.java | 5 ++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java index 73ddd85201ce..f072cfc9c702 100644 --- a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java +++ b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java @@ -70,6 +70,7 @@ import java.util.logging.Logger; import static com.yahoo.text.Lowercase.toLowerCase; +import static com.yahoo.yolean.Exceptions.uncheck; /** @@ -643,10 +644,19 @@ private void preprocess(File appDir, File dir, Zone zone) throws IOException { private void validateServicesFile() throws IOException { File servicesFile = getServicesFile(); + String absolutePath = servicesFile.getAbsolutePath(); if ( ! servicesFile.exists()) - throw new IllegalArgumentException(SERVICES + " does not exist in application package"); + throw new IllegalArgumentException(SERVICES + " does not exist in application package (" + absolutePath + + "). Files in application package: " + filesInApplicationPackage()); if (IOUtils.readFile(servicesFile).isEmpty()) - throw new IllegalArgumentException(SERVICES + " in application package is empty"); + throw new IllegalArgumentException(SERVICES + " in application package is empty (" + absolutePath + + "). Files in application package: " + filesInApplicationPackage()); + } + + private String filesInApplicationPackage() { + return uncheck(() -> Files.list(appDir.toPath()) + .map(java.nio.file.Path::toString) + .reduce("", (a, b) -> a + "," + b)); } private void copyUserDefsIntoApplication() { diff --git a/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationPackageTest.java b/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationPackageTest.java index c93e1a167262..84db8f64e929 100644 --- a/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationPackageTest.java +++ b/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationPackageTest.java @@ -129,7 +129,10 @@ public void failOnMissingServicesXml() throws IOException { FilesApplicationPackage app = FilesApplicationPackage.fromFile(appDir); var exception = assertThrows(IllegalArgumentException.class, () -> app.preprocess(new Zone(Environment.dev, RegionName.defaultName()), new BaseDeployLogger())); - assertEquals("services.xml does not exist in application package", exception.getMessage()); + String message = exception.getMessage(); + assertTrue(message.startsWith("services.xml does not exist in application package")); + assertTrue(message.contains("Files in application package:")); + assertTrue(message.contains("hosts.xml")); } @Test From 5f80426fec78c8a6b612233ea39712a1d3076361 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Wed, 18 Sep 2024 23:39:07 +0200 Subject: [PATCH 2/3] Log only number of files in directory --- .../provider/FilesApplicationPackage.java | 15 ++++++--------- .../provider/FilesApplicationPackageTest.java | 4 ++-- .../server/http/v2/ApplicationApiHandlerTest.java | 2 +- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java index f072cfc9c702..01fd0b7fe3ab 100644 --- a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java +++ b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java @@ -644,19 +644,16 @@ private void preprocess(File appDir, File dir, Zone zone) throws IOException { private void validateServicesFile() throws IOException { File servicesFile = getServicesFile(); - String absolutePath = servicesFile.getAbsolutePath(); if ( ! servicesFile.exists()) - throw new IllegalArgumentException(SERVICES + " does not exist in application package (" + absolutePath + - "). Files in application package: " + filesInApplicationPackage()); + throw new IllegalArgumentException(SERVICES + " does not exist in application package. " + + "There are " + filesInApplicationPackage() + " files in the directory"); if (IOUtils.readFile(servicesFile).isEmpty()) - throw new IllegalArgumentException(SERVICES + " in application package is empty (" + absolutePath + - "). Files in application package: " + filesInApplicationPackage()); + throw new IllegalArgumentException(SERVICES + " in application package is empty. " + + "There are " + filesInApplicationPackage() + " files in the directory"); } - private String filesInApplicationPackage() { - return uncheck(() -> Files.list(appDir.toPath()) - .map(java.nio.file.Path::toString) - .reduce("", (a, b) -> a + "," + b)); + private long filesInApplicationPackage() { + return uncheck(() -> Files.list(appDir.toPath()).count()); } private void copyUserDefsIntoApplication() { diff --git a/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationPackageTest.java b/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationPackageTest.java index 84db8f64e929..6f378013cbad 100644 --- a/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationPackageTest.java +++ b/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationPackageTest.java @@ -130,9 +130,9 @@ public void failOnMissingServicesXml() throws IOException { var exception = assertThrows(IllegalArgumentException.class, () -> app.preprocess(new Zone(Environment.dev, RegionName.defaultName()), new BaseDeployLogger())); String message = exception.getMessage(); + System.out.println(message); assertTrue(message.startsWith("services.xml does not exist in application package")); - assertTrue(message.contains("Files in application package:")); - assertTrue(message.contains("hosts.xml")); + assertTrue(message.contains("There are 4 files in the directory")); } @Test diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationApiHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationApiHandlerTest.java index 25e4e004a61e..c77bd34def24 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationApiHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationApiHandlerTest.java @@ -180,7 +180,7 @@ void testBadZipDeployment() throws Exception { """ { "error-code": "BAD_REQUEST", - "message": "Error preprocessing application package for test.default, session 2: services.xml does not exist in application package" + "message": "Error preprocessing application package for test.default, session 2: services.xml does not exist in application package. There are 1 files in the directory" } """); } From 391ff1386caad3d8517d32d2ece2178837a80f1e Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Thu, 19 Sep 2024 07:15:26 +0200 Subject: [PATCH 3/3] Remove debug output --- .../model/application/provider/FilesApplicationPackageTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationPackageTest.java b/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationPackageTest.java index 6f378013cbad..316b222059f2 100644 --- a/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationPackageTest.java +++ b/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationPackageTest.java @@ -130,7 +130,6 @@ public void failOnMissingServicesXml() throws IOException { var exception = assertThrows(IllegalArgumentException.class, () -> app.preprocess(new Zone(Environment.dev, RegionName.defaultName()), new BaseDeployLogger())); String message = exception.getMessage(); - System.out.println(message); assertTrue(message.startsWith("services.xml does not exist in application package")); assertTrue(message.contains("There are 4 files in the directory")); }