blob: d6663ec985a5197f927b5895a43fdb397f97062b [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.yarn.service;
import org.apache.hadoop.yarn.service.api.records.Component;
import org.apache.hadoop.yarn.service.api.records.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* Finds all the the target component specs.
*/
public interface UpgradeComponentsFinder {
List<Component> findTargetComponentSpecs(Service currentDef,
Service targetDef);
/**
* Default implementation of {@link UpgradeComponentsFinder} that finds all
* the target component specs.
*/
class DefaultUpgradeComponentsFinder implements UpgradeComponentsFinder {
@Override
public List<Component> findTargetComponentSpecs(Service currentDef,
Service targetDef) {
if (currentDef.getComponents().size() !=
targetDef.getComponents().size()) {
throw new UnsupportedOperationException(
"addition/deletion of components not supported by upgrade");
}
if (!currentDef.getKerberosPrincipal().equals(
targetDef.getKerberosPrincipal())) {
throw new UnsupportedOperationException("changes to kerberos " +
"principal not supported by upgrade");
}
if (!Objects.equals(currentDef.getQueue(), targetDef.getQueue())) {
throw new UnsupportedOperationException("changes to queue " +
"not supported by upgrade");
}
if (!Objects.equals(currentDef.getResource(), targetDef.getResource())) {
throw new UnsupportedOperationException("changes to resource " +
"not supported by upgrade");
}
if (!Objects.equals(currentDef.getDescription(),
targetDef.getDescription())) {
throw new UnsupportedOperationException("changes to description " +
"not supported by upgrade");
}
if (!Objects.equals(currentDef.getQuicklinks(),
targetDef.getQuicklinks())) {
throw new UnsupportedOperationException("changes to quick links " +
"not supported by upgrade");
}
if (!Objects.equals(currentDef.getLaunchTime(),
targetDef.getLaunchTime())) {
throw new UnsupportedOperationException("changes to launch time " +
"not supported by upgrade");
}
if (!Objects.equals(currentDef.getLifetime(),
targetDef.getLifetime())) {
throw new UnsupportedOperationException("changes to lifetime " +
"not supported by upgrade");
}
if (!Objects.equals(currentDef.getConfiguration(),
currentDef.getConfiguration())) {
return targetDef.getComponents();
}
if (!Objects.equals(currentDef.getArtifact(), targetDef.getArtifact())) {
return targetDef.getComponents();
}
List<Component> targetComps = new ArrayList<>();
targetDef.getComponents().forEach(component -> {
Component currentComp = currentDef.getComponent(component.getName());
if (!Objects.equals(currentComp.getName(), component.getName())) {
throw new UnsupportedOperationException(
"changes to component name not supported by upgrade");
}
if (!Objects.equals(currentComp.getDependencies(),
component.getDependencies())) {
throw new UnsupportedOperationException(
"changes to component dependencies not supported by upgrade");
}
if (!Objects.equals(currentComp.getReadinessCheck(),
component.getReadinessCheck())) {
throw new UnsupportedOperationException(
"changes to component readiness check not supported by upgrade");
}
if (!Objects.equals(currentComp.getResource(),
component.getResource())) {
throw new UnsupportedOperationException(
"changes to component resource not supported by upgrade");
}
if (!Objects.equals(currentComp.getRunPrivilegedContainer(),
component.getRunPrivilegedContainer())) {
throw new UnsupportedOperationException(
"changes to run privileged container not supported by upgrade");
}
if (!Objects.equals(currentComp.getPlacementPolicy(),
component.getPlacementPolicy())) {
throw new UnsupportedOperationException(
"changes to component placement policy not supported by upgrade");
}
if (!Objects.equals(currentComp.getQuicklinks(),
component.getQuicklinks())) {
throw new UnsupportedOperationException(
"changes to component quick links not supported by upgrade");
}
if (!Objects.equals(currentComp.getArtifact(),
component.getArtifact()) ||
!Objects.equals(currentComp.getLaunchCommand(),
component.getLaunchCommand()) ||
!Objects.equals(currentComp.getConfiguration(),
component.getConfiguration())) {
targetComps.add(component);
}
});
return targetComps;
}
}
}