diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2021-10-13 14:58:35 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2021-10-13 15:01:45 +0200 |
commit | 48e70899426d006f3bf9b5208fb9a171cbf94e40 (patch) | |
tree | c4109d826d24b76dc5c7ecd12fbe1921da586aeb /node-admin | |
parent | 5b6cd84f0a8d7645ef0e83cabf2cd8e15ea5d61d (diff) |
Tag files uploaded to S3 with owner
Diffstat (limited to 'node-admin')
4 files changed, 26 insertions, 8 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java index 7d98a76dc6e..340f43b4671 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java @@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.node.admin.maintenance; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; +import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.DockerImage; import com.yahoo.config.provision.NodeType; import com.yahoo.vespa.hosted.node.admin.component.TaskContext; @@ -82,12 +83,13 @@ public class StorageMaintainer { public boolean syncLogs(NodeAgentContext context, boolean throttle) { Optional<URI> archiveUri = context.node().archiveUri(); if (archiveUri.isEmpty()) return false; + ApplicationId owner = context.node().owner().orElseThrow(); List<SyncFileInfo> syncFileInfos = FileFinder.files(pathOnHostUnderContainerVespaHome(context, "logs/vespa")) .maxDepth(2) .stream() .sorted(Comparator.comparing(FileFinder.FileAttributes::lastModifiedTime)) - .flatMap(fa -> SyncFileInfo.forLogFile(archiveUri.get(), fa.path(), throttle).stream()) + .flatMap(fa -> SyncFileInfo.forLogFile(archiveUri.get(), fa.path(), throttle, owner).stream()) .collect(Collectors.toList()); return syncClient.sync(context, syncFileInfos, throttle ? 1 : 100); diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/servicedump/VespaServiceDumperImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/servicedump/VespaServiceDumperImpl.java index b4f2569c86f..058599a3a74 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/servicedump/VespaServiceDumperImpl.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/servicedump/VespaServiceDumperImpl.java @@ -1,6 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.node.admin.maintenance.servicedump; +import com.yahoo.config.provision.ApplicationId; import com.yahoo.text.Lowercase; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeAttributes; import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeRepository; @@ -122,12 +123,13 @@ public class VespaServiceDumperImpl implements VespaServiceDumper { private void uploadArtifacts(NodeAgentContext ctx, URI destination, List<Artifact> producedArtifacts, Instant expiry) { + ApplicationId owner = ctx.node().owner().orElseThrow(); List<SyncFileInfo> filesToUpload = producedArtifacts.stream() .map(a -> { Compression compression = a.compressOnUpload() ? Compression.ZSTD : Compression.NONE; Path fileInNode = a.fileInNode().orElse(null); Path fileOnHost = fileInNode != null ? ctx.pathOnHostFromPathInNode(fileInNode) : a.fileOnHost().orElseThrow(); - return SyncFileInfo.forServiceDump(destination, fileOnHost, expiry, compression); + return SyncFileInfo.forServiceDump(destination, fileOnHost, expiry, compression, owner); }) .collect(Collectors.toList()); ctx.log(log, Level.INFO, diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/sync/SyncFileInfo.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/sync/SyncFileInfo.java index 55fc54c7b6d..f220ec2b2fc 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/sync/SyncFileInfo.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/sync/SyncFileInfo.java @@ -1,10 +1,13 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.node.admin.maintenance.sync; +import com.yahoo.config.provision.ApplicationId; + import java.net.URI; import java.nio.file.Path; import java.time.Instant; import java.time.temporal.ChronoUnit; +import java.util.Map; import java.util.Optional; /** @@ -16,12 +19,15 @@ public class SyncFileInfo { private final URI destination; private final Compression uploadCompression; private final Instant expiry; + private final Map<String, String> tags; - private SyncFileInfo(Path source, URI destination, Compression uploadCompression, Instant expiry) { + private SyncFileInfo(Path source, URI destination, Compression uploadCompression, Instant expiry, + Map<String, String> tags) { this.source = source; this.destination = destination; this.uploadCompression = uploadCompression; this.expiry = expiry; + this.tags = Map.copyOf(tags); } /** Source path of the file to sync */ @@ -42,7 +48,9 @@ public class SyncFileInfo { /** File expiry */ public Optional<Instant> expiry() { return Optional.ofNullable(expiry); } - public static Optional<SyncFileInfo> forLogFile(URI uri, Path logFile, boolean rotatedOnly) { + public Map<String, String> tags() { return tags; } + + public static Optional<SyncFileInfo> forLogFile(URI uri, Path logFile, boolean rotatedOnly, ApplicationId owner) { String filename = logFile.getFileName().toString(); Compression compression; String dir = null; @@ -63,13 +71,18 @@ public class SyncFileInfo { if (dir == null) return Optional.empty(); Instant expiry = Instant.now().plus(30, ChronoUnit.DAYS); return Optional.of(new SyncFileInfo( - logFile, uri.resolve(dir + logFile.getFileName() + compression.extension), compression, expiry)); + logFile, uri.resolve(dir + logFile.getFileName() + compression.extension), compression, expiry, defaultTags(owner))); } - public static SyncFileInfo forServiceDump(URI destinationDir, Path file, Instant expiry, Compression compression) { + public static SyncFileInfo forServiceDump(URI destinationDir, Path file, Instant expiry, Compression compression, + ApplicationId owner) { String filename = file.getFileName().toString(); URI location = destinationDir.resolve(filename + compression.extension); - return new SyncFileInfo(file, location, compression, expiry); + return new SyncFileInfo(file, location, compression, expiry, defaultTags(owner)); + } + + private static Map<String, String> defaultTags(ApplicationId owner) { + return Map.of("corp:Application", owner.toFullString()); } public enum Compression { diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/sync/SyncFileInfoTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/sync/SyncFileInfoTest.java index 4478a26396e..7130ac54430 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/sync/SyncFileInfoTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/sync/SyncFileInfoTest.java @@ -1,6 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.node.admin.maintenance.sync; +import com.yahoo.config.provision.ApplicationId; import com.yahoo.vespa.test.file.TestFileSystem; import org.junit.Test; @@ -64,7 +65,7 @@ public class SyncFileInfoTest { } private static void assertForLogFile(Path srcPath, String destination, SyncFileInfo.Compression compression, boolean rotatedOnly) { - Optional<SyncFileInfo> sfi = SyncFileInfo.forLogFile(nodeArchiveUri, srcPath, rotatedOnly); + Optional<SyncFileInfo> sfi = SyncFileInfo.forLogFile(nodeArchiveUri, srcPath, rotatedOnly, ApplicationId.defaultId()); assertEquals(destination, sfi.map(SyncFileInfo::destination).map(URI::toString).orElse(null)); assertEquals(compression, sfi.map(SyncFileInfo::uploadCompression).orElse(null)); } |