summaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2021-10-13 14:58:35 +0200
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2021-10-13 15:01:45 +0200
commit48e70899426d006f3bf9b5208fb9a171cbf94e40 (patch)
treec4109d826d24b76dc5c7ecd12fbe1921da586aeb /node-admin
parent5b6cd84f0a8d7645ef0e83cabf2cd8e15ea5d61d (diff)
Tag files uploaded to S3 with owner
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/StorageMaintainer.java4
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/servicedump/VespaServiceDumperImpl.java4
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/sync/SyncFileInfo.java23
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/maintenance/sync/SyncFileInfoTest.java3
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));
}