diff options
author | Valerij Fredriksen <freva@users.noreply.github.com> | 2023-02-28 11:48:46 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-28 11:48:46 +0100 |
commit | 90f5f4df3105f0177434d340a03dc798ff9b3405 (patch) | |
tree | 8ad9da6c3573fc6fa6c1b13c2e56c12fbc370bba /node-repository | |
parent | d6bbaaf9a01b1ae292988b60e90b17a057b3ab6d (diff) | |
parent | d18281c03338be2c53ccaffc0b849a9e86c2f488 (diff) |
Merge pull request #26205 from vespa-engine/freva/exclude-tenant-name
Handle archive URI without tenant name dir
Diffstat (limited to 'node-repository')
3 files changed, 24 insertions, 7 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/archive/ArchiveUriManager.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/archive/ArchiveUriManager.java index 27488e4027c..faa360bbcb1 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/archive/ArchiveUriManager.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/archive/ArchiveUriManager.java @@ -13,7 +13,6 @@ import com.yahoo.vespa.hosted.provision.persistence.CuratorDb; import java.time.Duration; import java.util.Optional; import java.util.function.Function; -import java.util.logging.Logger; /** * Thread safe class to get and set archive URI for given account and tenants. @@ -22,7 +21,6 @@ import java.util.logging.Logger; */ public class ArchiveUriManager { - private static final Logger log = Logger.getLogger(ArchiveUriManager.class.getName()); private static final Duration cacheTtl = Duration.ofMinutes(1); private final CuratorDb db; @@ -48,7 +46,14 @@ public class ArchiveUriManager { archiveUris.get().accountArchiveUris().get(node.cloudAccount()) : archiveUris.get().tenantArchiveUris().get(app.tenant())) .map(uri -> { + // TODO (freva): Remove when all URIs dont have tenant name in them anymore + String tenantSuffix = "/" + app.tenant().value() + "/"; + if (uri.endsWith(tenantSuffix)) return uri.substring(0, uri.length() - tenantSuffix.length() + 1); + return uri; + }) + .map(uri -> { StringBuilder sb = new StringBuilder(100).append(uri) + .append(app.tenant().value()).append('/') .append(app.application().value()).append('/') .append(app.instance().value()).append('/') .append(node.allocation().get().membership().cluster().id().value()).append('/'); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/archive/ArchiveUriManagerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/archive/ArchiveUriManagerTest.java index 8ee72d12f57..44c1c976355 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/archive/ArchiveUriManagerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/archive/ArchiveUriManagerTest.java @@ -54,10 +54,22 @@ public class ArchiveUriManagerTest { assertFalse(archiveUriManager.archiveUriFor(createNode(null, account1)).isPresent()); // URI set for this account, but not allocated assertFalse(archiveUriManager.archiveUriFor(createNode(null, account2)).isPresent()); // Not allocated assertFalse(archiveUriManager.archiveUriFor(createNode(app2, null)).isPresent()); // No URI set for this tenant or account - assertEquals("scheme://tenant-bucket/dir/music/main/default/h432a/", archiveUriManager.archiveUriFor(createNode(app1, null)).get()); - assertEquals("scheme://account-bucket/dir/music/main/default/h432a/", archiveUriManager.archiveUriFor(createNode(app1, account1)).get()); // Account has precedence + assertEquals("scheme://tenant-bucket/dir/vespa/music/main/default/h432a/", archiveUriManager.archiveUriFor(createNode(app1, null)).get()); + assertEquals("scheme://account-bucket/dir/vespa/music/main/default/h432a/", archiveUriManager.archiveUriFor(createNode(app1, account1)).get()); // Account has precedence assertFalse(archiveUriManager.archiveUriFor(createNode(app1, account2)).isPresent()); // URI set for this tenant, but is ignored because enclave account - assertEquals("scheme://tenant-bucket/dir/music/main/default/h432a/", archiveUriManager.archiveUriFor(createNode(app1, accountSystem)).get()); // URI for tenant because non-enclave acocunt + assertEquals("scheme://tenant-bucket/dir/vespa/music/main/default/h432a/", archiveUriManager.archiveUriFor(createNode(app1, accountSystem)).get()); // URI for tenant because non-enclave acocunt + } + + @Test + public void handles_uri_with_tenant_name() { + ApplicationId app1 = ApplicationId.from("vespa", "music", "main"); + ArchiveUriManager archiveUriManager = new ProvisioningTester.Builder().build().nodeRepository().archiveUriManager(); + archiveUriManager.setArchiveUri(app1.tenant(), Optional.of("scheme://tenant-bucket/vespa")); + assertEquals("scheme://tenant-bucket/vespa/music/main/default/h432a/", archiveUriManager.archiveUriFor(createNode(app1, null)).get()); + + // Archive URI ends with the tenant name + archiveUriManager.setArchiveUri(app1.tenant(), Optional.of("scheme://tenant-vespa/")); + assertEquals("scheme://tenant-vespa/vespa/music/main/default/h432a/", archiveUriManager.archiveUriFor(createNode(app1, null)).get()); } private Node createNode(ApplicationId appId, CloudAccount account) { diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/ArchiveApiTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/ArchiveApiTest.java index 80d79b036e2..03581146b9f 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/ArchiveApiTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/ArchiveApiTest.java @@ -45,8 +45,8 @@ public class ArchiveApiTest { "{\"message\":\"Updated archive URI for 777888999000\"}"); - tester.assertPartialResponse(new Request("http://localhost:8080/nodes/v2/node/host4.yahoo.com"), "\"archiveUri\":\"ftp://host/dir/application3/instance3/id3/host4/\"", true); - tester.assertPartialResponse(new Request("http://localhost:8080/nodes/v2/node/dockerhost2.yahoo.com"), "\"archiveUri\":\"s3://acc-bucket/zoneapp/zoneapp/node-admin/dockerhost2/\"", true); + tester.assertPartialResponse(new Request("http://localhost:8080/nodes/v2/node/host4.yahoo.com"), "\"archiveUri\":\"ftp://host/dir/tenant3/application3/instance3/id3/host4/\"", true); + tester.assertPartialResponse(new Request("http://localhost:8080/nodes/v2/node/dockerhost2.yahoo.com"), "\"archiveUri\":\"s3://acc-bucket/zoneapp/zoneapp/zoneapp/node-admin/dockerhost2/\"", true); assertFile(new Request("http://localhost:8080/nodes/v2/archive"), "archives.json"); tester.assertResponse(new Request("http://localhost:8080/nodes/v2/archive/tenant/tenant3", new byte[0], Request.Method.DELETE), "{\"message\":\"Removed archive URI for tenant3\"}"); |