/** * 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.ambari.server.events.listeners.upgrade; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.EagerSingleton; import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.events.StackUpgradeFinishEvent; import org.apache.ambari.server.events.publishers.VersionEventPublisher; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Service; import org.apache.ambari.server.state.ServiceComponent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.eventbus.AllowConcurrentEvents; import com.google.common.eventbus.Subscribe; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; /** * The {@link StackUpgradeFinishListener} class handles updating component info * after stack upgrade or downgrade finish */ @Singleton @EagerSingleton public class StackUpgradeFinishListener { /** * Logger. */ private final static Logger LOG = LoggerFactory.getLogger(StackUpgradeFinishListener.class); @Inject Provider<AmbariMetaInfo> ambariMetaInfo; /** * Constructor. * * @param eventPublisher the publisher */ @Inject public StackUpgradeFinishListener(VersionEventPublisher eventPublisher) { eventPublisher.register(this); } @Subscribe @AllowConcurrentEvents public void onAmbariEvent(StackUpgradeFinishEvent event) { LOG.debug("Received event {}", event); Cluster cluster = event.getCluster(); for (Service service : cluster.getServices().values()) { try { //update service info due to new stack service.updateServiceInfo(); //update component info due to new stack for (ServiceComponent sc : service.getServiceComponents().values()) { sc.updateComponentInfo(); } } catch (AmbariException e) { if (LOG.isErrorEnabled()) { LOG.error("Caught AmbariException when update component info", e); } } } } }