blob: 3dabd05c990bf0e5e1ff311271bf867a8b8cf349 [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.samza.config;
import org.apache.samza.clustermanager.DefaultApplicationMain;
import org.apache.samza.runtime.UUIDGenerator;
/**
* Accessors for configs associated with Application scope
*/
public class ApplicationConfig extends MapConfig {
/**
* <p>processor.id is similar to the logical containerId generated in Samza. However, in addition to identifying the JVM
* of the processor, it also contains a segment to identify the instance of the
* {@link org.apache.samza.processor.StreamProcessor} within the JVM. More detail can be found in
* {@link org.apache.samza.runtime.ProcessorIdGenerator}. </p>
* <p>
* This is an important distinction because Samza 0.13.0 in Yarn has a 1:1 mapping between the processor and the Yarn
* container (JVM). However, Samza in an embedded execution can contain more than one processor within the same JVM.
* </p>
* <b>Note:</b>This identifier has to be unique across the instances of StreamProcessors.
* TODO: Deprecated in 0.13. After 0.13+, this id is generated using {@link org.apache.samza.runtime.ProcessorIdGenerator}
*/
@Deprecated
public static final String PROCESSOR_ID = "processor.id";
public enum ApplicationMode {
STREAM,
BATCH
}
/**
* Class implementing the {@link org.apache.samza.runtime.ProcessorIdGenerator} interface
* Used to generate a unique identifier for a {@link org.apache.samza.processor.StreamProcessor} based on the runtime
* environment. Hence, durability of the identifier is same as the guarantees provided by the runtime environment
*/
public static final String APP_PROCESSOR_ID_GENERATOR_CLASS = "app.processor-id-generator.class";
public static final String APP_NAME = "app.name";
public static final String APP_ID = "app.id";
public static final String APP_CLASS = "app.class";
public static final String APP_MODE = "app.mode";
public static final String APP_RUN_ID = "app.run.id";
public static final String APP_MAIN_CLASS = "app.main.class";
public static final String APP_MAIN_ARGS = "app.main.args";
public static final String APP_RUNNER_CLASS = "app.runner.class";
private static final String DEFAULT_APP_RUNNER = "org.apache.samza.runtime.RemoteApplicationRunner";
public ApplicationConfig(Config config) {
super(config);
}
public String getAppProcessorIdGeneratorClass() {
return get(APP_PROCESSOR_ID_GENERATOR_CLASS, UUIDGenerator.class.getName());
}
public String getAppName() {
return get(APP_NAME, get(JobConfig.JOB_NAME));
}
public String getAppId() {
return get(APP_ID, get(JobConfig.JOB_ID, "1"));
}
public String getAppClass() {
return get(APP_CLASS, null);
}
/**
* returns full application id
* @return full app id
*/
public String getGlobalAppId() {
return String.format("app-%s-%s", getAppName(), getAppId());
}
public String getProcessorId() {
return get(PROCESSOR_ID, null);
}
public String getRunId() {
return get(APP_RUN_ID, null);
}
public ApplicationMode getAppMode() {
return ApplicationMode.valueOf(get(APP_MODE, ApplicationMode.STREAM.name()).toUpperCase());
}
public String getAppMainClass() {
return get(APP_MAIN_CLASS, DefaultApplicationMain.class.getName());
}
public String getAppRunnerClass() {
return get(APP_RUNNER_CLASS, DEFAULT_APP_RUNNER);
}
}