diff --git a/scheduler/src/main/java/org/apache/mesos/elasticsearch/scheduler/Configuration.java b/scheduler/src/main/java/org/apache/mesos/elasticsearch/scheduler/Configuration.java index 4b31e23b..967a6514 100644 --- a/scheduler/src/main/java/org/apache/mesos/elasticsearch/scheduler/Configuration.java +++ b/scheduler/src/main/java/org/apache/mesos/elasticsearch/scheduler/Configuration.java @@ -24,6 +24,8 @@ public class Configuration { public static final String ELASTICSEARCH_CPU = "--elasticsearchCpu"; public static final String ELASTICSEARCH_RAM = "--elasticsearchRam"; public static final String ELASTICSEARCH_DISK = "--elasticsearchDisk"; + public static final String ELASTICSEARCH_EXECUTOR_CPU = "--elasticsearchExecutorCpu"; + public static final String ELASTICSEARCH_EXECUTOR_RAM = "--elasticsearchExecutorRam"; // **** WEB UI public static final String WEB_UI_PORT = "--webUiPort"; public static final String FRAMEWORK_NAME = "--frameworkName"; @@ -55,6 +57,10 @@ public class Configuration { private double mem = 256; @Parameter(names = {ELASTICSEARCH_DISK}, description = "The amount of Disk resource to allocate to the elasticsearch instance (MB).", validateValueWith = CLIValidators.PositiveDouble.class) private double disk = 1024; + @Parameter(names = {ELASTICSEARCH_EXECUTOR_CPU}, description = "The amount of CPU resource to allocate to the elasticsearch executor.", validateValueWith = CLIValidators.PositiveDouble.class) + private double executorCpus = 0.1; + @Parameter(names = {ELASTICSEARCH_EXECUTOR_RAM}, description = "The amount of ram resource to allocate to the elasticsearch executor (MB).", validateValueWith = CLIValidators.PositiveDouble.class) + private double executorMem = 32; @Parameter(names = {WEB_UI_PORT}, description = "TCP port for web ui interface.", validateValueWith = CLIValidators.PositiveInteger.class) private int webUiPort = 31100; // Default is more likely to work on a default Mesos installation // **** FRAMEWORK @@ -115,6 +121,14 @@ public double getDisk() { return disk; } + public double getExecutorCpus() { + return executorCpus; + } + + public double getExecutorMem() { + return executorMem; + } + public int getElasticsearchNodes() { return elasticsearchCLI.getElasticsearchNodes(); } diff --git a/scheduler/src/main/java/org/apache/mesos/elasticsearch/scheduler/Resources.java b/scheduler/src/main/java/org/apache/mesos/elasticsearch/scheduler/Resources.java index 7678ec45..e3029a47 100644 --- a/scheduler/src/main/java/org/apache/mesos/elasticsearch/scheduler/Resources.java +++ b/scheduler/src/main/java/org/apache/mesos/elasticsearch/scheduler/Resources.java @@ -76,8 +76,8 @@ public static List selectTwoPortsFromRange(List offere } public static ArrayList buildFrameworkResources(Configuration configuration) { - Protos.Resource cpus = Resources.cpus(configuration.getCpus(), configuration.getFrameworkRole()); - Protos.Resource mem = Resources.mem(configuration.getMem(), configuration.getFrameworkRole()); + Protos.Resource cpus = Resources.cpus(configuration.getCpus() - configuration.getExecutorCpus(), configuration.getFrameworkRole()); + Protos.Resource mem = Resources.mem(configuration.getMem() - configuration.getExecutorMem(), configuration.getFrameworkRole()); Protos.Resource disk = Resources.disk(configuration.getDisk(), configuration.getFrameworkRole()); return new ArrayList<>(Arrays.asList(cpus, mem, disk)); } diff --git a/scheduler/src/main/java/org/apache/mesos/elasticsearch/scheduler/TaskInfoFactory.java b/scheduler/src/main/java/org/apache/mesos/elasticsearch/scheduler/TaskInfoFactory.java index 0542f525..cf79a1b5 100644 --- a/scheduler/src/main/java/org/apache/mesos/elasticsearch/scheduler/TaskInfoFactory.java +++ b/scheduler/src/main/java/org/apache/mesos/elasticsearch/scheduler/TaskInfoFactory.java @@ -114,7 +114,10 @@ private Protos.ExecutorInfo.Builder newExecutorInfo(Configuration configuration, .setDocker(containerBuilder) .addVolumes(Protos.Volume.newBuilder().setHostPath(SETTINGS_PATH_VOLUME).setContainerPath(SETTINGS_PATH_VOLUME).setMode(Protos.Volume.Mode.RO)) // Temporary fix until we get a data container. .addVolumes(Protos.Volume.newBuilder().setContainerPath(SETTINGS_DATA_VOLUME_CONTAINER).setHostPath(configuration.getDataDir()).setMode(Protos.Volume.Mode.RW).build()) - .build()); + .build()) + .addResources(Resources.cpus(configuration.getExecutorCpus(), configuration.getFrameworkRole())) + .addResources(Resources.mem(configuration.getExecutorMem(), configuration.getFrameworkRole())) + ; } return executorInfoBuilder; }