/* * 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 gobblin.source.extractor; import java.util.Properties; import gobblin.configuration.ConfigurationKeys; import gobblin.configuration.State; /** * An enumeration of policies on how output data of jobs/tasks should be committed. * * @author Yinan Li */ public enum JobCommitPolicy { /** * Commit output data of a job if and only if all of its tasks successfully complete. */ COMMIT_ON_FULL_SUCCESS("full"), /** * Commit a job even if some of its tasks fail. It's up to the {@link gobblin.publisher.DataPublisher} to * decide whether data of failed tasks of the job should be committed or not. * * @deprecated Use {@link #COMMIT_SUCCESSFUL_TASKS} instead, which provides a less confusing commit semantics, * and should cover most use cases when {@link #COMMIT_ON_FULL_SUCCESS} is not appropriate. */ @Deprecated COMMIT_ON_PARTIAL_SUCCESS("partial"), /** * Commit output data of tasks that successfully complete. * * It is recommended to use this commit policy in conjunction with task-level data publishing (i.e., when * {@link ConfigurationKeys#PUBLISH_DATA_AT_JOB_LEVEL} is set to {@code false}). */ COMMIT_SUCCESSFUL_TASKS("successful"); private final String name; JobCommitPolicy(String name) { this.name = name; } /** * Get a {@link JobCommitPolicy} for the given job commit policy name. * * @param name Job commit policy name * @return a {@link JobCommitPolicy} for the given job commit policy name */ public static JobCommitPolicy forName(String name) { if (COMMIT_ON_FULL_SUCCESS.name.equalsIgnoreCase(name)) { return COMMIT_ON_FULL_SUCCESS; } if (COMMIT_ON_PARTIAL_SUCCESS.name.equalsIgnoreCase(name)) { return COMMIT_ON_PARTIAL_SUCCESS; } if (COMMIT_SUCCESSFUL_TASKS.name.equalsIgnoreCase(name)) { return COMMIT_SUCCESSFUL_TASKS; } throw new IllegalArgumentException(String.format("Job commit policy with name %s is not supported", name)); } /** * Get a {@link JobCommitPolicy} through its name specified in configuration property * {@link ConfigurationKeys#JOB_COMMIT_POLICY_KEY}. * * @param jobProps a {@link Properties} instance carrying job configuration properties * @return a {@link JobCommitPolicy} with the given name specified in {@link ConfigurationKeys#JOB_COMMIT_POLICY_KEY} */ public static JobCommitPolicy getCommitPolicy(Properties jobProps) { return forName(jobProps.getProperty(ConfigurationKeys.JOB_COMMIT_POLICY_KEY, ConfigurationKeys.DEFAULT_JOB_COMMIT_POLICY)); } /** * Get a {@link JobCommitPolicy} through its name specified in configuration property * {@link ConfigurationKeys#JOB_COMMIT_POLICY_KEY}. * * @param state a {@link State} instance carrying job configuration properties * @return a {@link JobCommitPolicy} with the given name specified in {@link ConfigurationKeys#JOB_COMMIT_POLICY_KEY} */ public static JobCommitPolicy getCommitPolicy(State state) { return forName(state.getProp(ConfigurationKeys.JOB_COMMIT_POLICY_KEY, ConfigurationKeys.DEFAULT_JOB_COMMIT_POLICY)); } }