com.yahoo.vespa.hosted.provision.os.OsVersionChange Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of node-repository Show documentation
Show all versions of node-repository Show documentation
Keeps track of node assignment in a multi-application setup.
The newest version!
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.provision.os;
import com.yahoo.component.Version;
import com.yahoo.config.provision.NodeType;
import java.util.Collections;
import java.util.SortedMap;
import java.util.TreeMap;
/**
* The OS version change being deployed in a {@link com.yahoo.vespa.hosted.provision.NodeRepository}.
*
* @author mpolden
*/
public record OsVersionChange(SortedMap targets) {
public static final OsVersionChange NONE = new OsVersionChange(new TreeMap<>());
public OsVersionChange(SortedMap targets) {
this.targets = Collections.unmodifiableSortedMap(new TreeMap<>(targets));
}
/** Returns a copy of this with target for given node type removed */
public OsVersionChange withoutTarget(NodeType nodeType) {
var targets = new TreeMap<>(this.targets);
targets.remove(nodeType);
return new OsVersionChange(targets);
}
/** Returns a copy of this with given target added */
public OsVersionChange withTarget(Version version, NodeType nodeType) {
var copy = new TreeMap<>(this.targets);
copy.compute(nodeType, (key, prevTarget) -> new OsVersionTarget(nodeType, version));
return new OsVersionChange(copy);
}
}