blob: ea1e4f7b7c6a5923ca94921299197a0037a40b4f [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.
*/
#ifndef __SLAVE_FLAGS_HPP__
#define __SLAVE_FLAGS_HPP__
#include <string>
#include <stout/duration.hpp>
#include <stout/flags.hpp>
#include <stout/option.hpp>
#include "logging/flags.hpp"
#include "slave/constants.hpp"
namespace mesos {
namespace internal {
namespace slave {
class Flags : public logging::Flags
{
public:
Flags()
{
// TODO(benh): Is there a way to specify units for the resources?
add(&Flags::resources,
"resources",
"Total consumable resources per slave, in\n"
"the form 'name(role):value;name(role):value...'.");
add(&Flags::default_role,
"default_role",
"Any resources in the --resources flag that\n"
"omit a role, as well as any resources that\n"
"are not present in --resources but that are\n"
"automatically detected, will be assigned to\n"
"this role.",
"*");
add(&Flags::attributes,
"attributes",
"Attributes of machine");
add(&Flags::work_dir,
"work_dir",
"Where to place framework work directories\n",
"/tmp/mesos");
add(&Flags::launcher_dir, // TODO(benh): This needs a better name.
"launcher_dir",
"Location of Mesos binaries",
PKGLIBEXECDIR);
add(&Flags::hadoop_home,
"hadoop_home",
"Where to find Hadoop installed (for\n"
"fetching framework executors from HDFS)\n"
"(no default, look for HADOOP_HOME in\n"
"environment or find hadoop on PATH)",
"");
add(&Flags::switch_user,
"switch_user",
"Whether to run tasks as the user who\n"
"submitted them rather than the user running\n"
"the slave (requires setuid permission)",
true);
add(&Flags::frameworks_home,
"frameworks_home",
"Directory prepended to relative executor URIs",
"");
add(&Flags::executor_registration_timeout,
"executor_registration_timeout",
"Amount of time to wait for an executor\n"
"to register with the slave before considering it hung and\n"
"shutting it down (e.g., 60secs, 3mins, etc)",
EXECUTOR_REGISTRATION_TIMEOUT);
add(&Flags::executor_shutdown_grace_period,
"executor_shutdown_grace_period",
"Amount of time to wait for an executor\n"
"to shut down (e.g., 60secs, 3mins, etc)",
EXECUTOR_SHUTDOWN_GRACE_PERIOD);
add(&Flags::gc_delay,
"gc_delay",
"Maximum amount of time to wait before cleaning up\n"
"executor directories (e.g., 3days, 2weeks, etc).\n"
"Note that this delay may be shorter depending on\n"
"the available disk usage.",
GC_DELAY);
add(&Flags::disk_watch_interval,
"disk_watch_interval",
"Periodic time interval (e.g., 10secs, 2mins, etc)\n"
"to check the disk usage",
DISK_WATCH_INTERVAL);
add(&Flags::resource_monitoring_interval,
"resource_monitoring_interval",
"Periodic time interval for monitoring executor\n"
"resource usage (e.g., 10secs, 1min, etc)",
RESOURCE_MONITORING_INTERVAL);
// TODO(vinod): Consider killing this flag and always checkpoint.
add(&Flags::checkpoint,
"checkpoint",
"Whether to checkpoint slave and frameworks information\n"
"to disk. This enables a restarted slave to recover\n"
"status updates and reconnect with (--recover=reconnect) or\n"
"kill (--recover=kill) old executors",
false);
add(&Flags::recover,
"recover",
"Whether to recover status updates and reconnect with old executors.\n"
"Valid values for 'recover' are\n"
"reconnect: Reconnect with any old live executors.\n"
"cleanup : Kill any old live executors and exit.\n"
" Use this option when doing an incompatible slave\n"
" or executor upgrade!).\n"
"NOTE: If checkpointed slave doesn't exist, no recovery is performed\n"
" and the slave registers with the master as a new slave.",
"reconnect");
add(&Flags::recovery_timeout,
"recovery_timeout",
"Amount of time alloted for the slave to recover. If the slave takes\n"
"longer than recovery_timeout to recover, any executors that are\n"
"waiting to reconnect to the slave will self-terminate.\n"
"NOTE: This flag is only applicable when checkpoint is enabled.\n",
RECOVERY_TIMEOUT);
add(&Flags::strict,
"strict",
"If strict=true, any and all recovery errors are considered fatal.\n"
"If strict=false, any expected errors (e.g., slave cannot recover\n"
"information about an executor, because the slave died right before\n"
"the executor registered.) during recovery are ignored and as much\n"
"state as possible is recovered.\n",
true);
#ifdef __linux__
add(&Flags::cgroups_hierarchy,
"cgroups_hierarchy",
"The path to the cgroups hierarchy root\n",
"/cgroup");
add(&Flags::cgroups_root,
"cgroups_root",
"Name of the root cgroup\n",
"mesos");
add(&Flags::cgroups_subsystems,
"cgroups_subsystems",
"List of subsystems to enable (e.g., 'cpu,freezer')\n",
"cpu,memory,freezer");
add(&Flags::cgroups_enable_cfs,
"cgroups_enable_cfs",
"Cgroups feature flag to enable hard limits on CPU resources\n"
"via the CFS bandwidth limiting subfeature.\n",
false);
#endif
}
Option<std::string> resources;
std::string default_role;
Option<std::string> attributes;
std::string work_dir;
std::string launcher_dir;
std::string hadoop_home; // TODO(benh): Make an Option.
bool switch_user;
std::string frameworks_home; // TODO(benh): Make an Option.
Duration executor_registration_timeout;
Duration executor_shutdown_grace_period;
Duration gc_delay;
Duration disk_watch_interval;
Duration resource_monitoring_interval;
bool checkpoint;
std::string recover;
Duration recovery_timeout;
bool strict;
#ifdef __linux__
std::string cgroups_hierarchy;
std::string cgroups_root;
std::string cgroups_subsystems;
bool cgroups_enable_cfs;
#endif
};
} // namespace mesos {
} // namespace internal {
} // namespace slave {
#endif // __SLAVE_FLAGS_HPP__