/* * 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.flink.runtime.highavailability; import org.apache.flink.api.common.JobID; import org.apache.flink.runtime.blob.BlobStore; import org.apache.flink.runtime.blob.VoidBlobStore; import org.apache.flink.runtime.checkpoint.CheckpointRecoveryFactory; import org.apache.flink.runtime.highavailability.nonha.standalone.StandaloneRunningJobsRegistry; import org.apache.flink.runtime.jobmanager.SubmittedJobGraphStore; import org.apache.flink.runtime.leaderelection.LeaderElectionService; import org.apache.flink.runtime.leaderretrieval.LeaderRetrievalService; import java.io.IOException; import java.util.concurrent.ConcurrentHashMap; /** * A variant of the HighAvailabilityServices for testing. Each individual service can be set * to an arbitrary implementation, such as a mock or default service. */ public class TestingHighAvailabilityServices implements HighAvailabilityServices { private volatile LeaderRetrievalService resourceManagerLeaderRetriever; private ConcurrentHashMap<JobID, LeaderRetrievalService> jobMasterLeaderRetrievers = new ConcurrentHashMap<>(); private ConcurrentHashMap<JobID, LeaderElectionService> jobManagerLeaderElectionServices = new ConcurrentHashMap<>(); private volatile LeaderElectionService resourceManagerLeaderElectionService; private volatile CheckpointRecoveryFactory checkpointRecoveryFactory; private volatile SubmittedJobGraphStore submittedJobGraphStore; // ------------------------------------------------------------------------ // Setters for mock / testing implementations // ------------------------------------------------------------------------ public void setResourceManagerLeaderRetriever(LeaderRetrievalService resourceManagerLeaderRetriever) { this.resourceManagerLeaderRetriever = resourceManagerLeaderRetriever; } public void setJobMasterLeaderRetriever(JobID jobID, LeaderRetrievalService jobMasterLeaderRetriever) { this.jobMasterLeaderRetrievers.put(jobID, jobMasterLeaderRetriever); } public void setJobMasterLeaderElectionService(JobID jobID, LeaderElectionService leaderElectionService) { this.jobManagerLeaderElectionServices.put(jobID, leaderElectionService); } public void setResourceManagerLeaderElectionService(LeaderElectionService leaderElectionService) { this.resourceManagerLeaderElectionService = leaderElectionService; } public void setCheckpointRecoveryFactory(CheckpointRecoveryFactory checkpointRecoveryFactory) { this.checkpointRecoveryFactory = checkpointRecoveryFactory; } public void setSubmittedJobGraphStore(SubmittedJobGraphStore submittedJobGraphStore) { this.submittedJobGraphStore = submittedJobGraphStore; } // ------------------------------------------------------------------------ // HA Services Methods // ------------------------------------------------------------------------ @Override public LeaderRetrievalService getResourceManagerLeaderRetriever() { LeaderRetrievalService service = this.resourceManagerLeaderRetriever; if (service != null) { return service; } else { throw new IllegalStateException("ResourceManagerLeaderRetriever has not been set"); } } @Override public LeaderRetrievalService getJobManagerLeaderRetriever(JobID jobID) { LeaderRetrievalService service = this.jobMasterLeaderRetrievers.get(jobID); if (service != null) { return service; } else { throw new IllegalStateException("JobMasterLeaderRetriever has not been set"); } } @Override public LeaderElectionService getResourceManagerLeaderElectionService() { LeaderElectionService service = resourceManagerLeaderElectionService; if (service != null) { return service; } else { throw new IllegalStateException("ResourceManagerLeaderElectionService has not been set"); } } @Override public LeaderElectionService getJobManagerLeaderElectionService(JobID jobID) { LeaderElectionService service = this.jobManagerLeaderElectionServices.get(jobID); if (service != null) { return service; } else { throw new IllegalStateException("JobMasterLeaderElectionService has not been set"); } } @Override public CheckpointRecoveryFactory getCheckpointRecoveryFactory() { CheckpointRecoveryFactory factory = checkpointRecoveryFactory; if (factory != null) { return factory; } else { throw new IllegalStateException("CheckpointRecoveryFactory has not been set"); } } @Override public SubmittedJobGraphStore getSubmittedJobGraphStore() { SubmittedJobGraphStore store = submittedJobGraphStore; if (store != null) { return store; } else { throw new IllegalStateException("SubmittedJobGraphStore has not been set"); } } @Override public RunningJobsRegistry getRunningJobsRegistry() { return new StandaloneRunningJobsRegistry(); } @Override public BlobStore createBlobStore() throws IOException { return new VoidBlobStore(); } // ------------------------------------------------------------------------ // Shutdown // ------------------------------------------------------------------------ @Override public void close() throws Exception { // nothing to do } @Override public void closeAndCleanupAllData() throws Exception { // nothing to do } }