[ https://issues.apache.org/jira/browse/STORM-1336?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15138680#comment-15138680 ]
ASF GitHub Bot commented on STORM-1336: --------------------------------------- Github user abhishekagarwal87 commented on a diff in the pull request: https://github.com/apache/storm/pull/1053#discussion_r52286842 --- Diff: storm-core/src/jvm/org/apache/storm/container/cgroup/CgroupCommon.java --- @@ -0,0 +1,247 @@ +/** + * 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.storm.container.cgroup; + +import org.apache.storm.container.cgroup.core.CgroupCore; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.IOException; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class CgroupCommon implements CgroupCommonOperation { + + public static final String TASKS = "/tasks"; + public static final String NOTIFY_ON_RELEASE = "/notify_on_release"; + public static final String RELEASE_AGENT = "/release_agent"; + public static final String CGROUP_CLONE_CHILDREN = "/cgroup.clone_children"; + public static final String CGROUP_EVENT_CONTROL = "/cgroup.event_control"; + public static final String CGROUP_PROCS = "/cgroup.procs"; + + private final Hierarchy hierarchy; + + private final String name; + + private final String dir; + + private final CgroupCommon parent; + + //private final Map<SubSystemType, CgroupCore> cores; + + private final boolean isRoot; + + //private final Set<CgroupCommon> children = new HashSet<CgroupCommon>(); + + private static final Logger LOG = LoggerFactory.getLogger(CgroupCommon.class); + + public CgroupCommon(String name, Hierarchy hierarchy, CgroupCommon parent) { + this.name = parent.getName() + "/" + name; + this.hierarchy = hierarchy; + this.parent = parent; + this.dir = parent.getDir() + "/" + name; + this.isRoot = false; + } + + /** + * rootCgroup + */ + public CgroupCommon(Hierarchy hierarchy, String dir) { + this.name = ""; + this.hierarchy = hierarchy; + this.parent = null; + this.dir = dir; + this.isRoot = true; + } + + @Override + public void addTask(int taskId) throws IOException { + CgroupUtils.writeFileByLine(CgroupUtils.getDir(this.dir, TASKS), String.valueOf(taskId)); + } + + @Override + public Set<Integer> getTasks() throws IOException { + List<String> stringTasks = CgroupUtils.readFileByLine(CgroupUtils.getDir(this.dir, TASKS)); + Set<Integer> tasks = new HashSet<Integer>(); + for (String task : stringTasks) { + tasks.add(Integer.valueOf(task)); + } + return tasks; + } + + @Override + public void addProcs(int pid) throws IOException { + CgroupUtils.writeFileByLine(CgroupUtils.getDir(this.dir, CGROUP_PROCS), String.valueOf(pid)); + } + + @Override + public Set<Integer> getPids() throws IOException { + List<String> stringPids = CgroupUtils.readFileByLine(CgroupUtils.getDir(this.dir, CGROUP_PROCS)); + Set<Integer> pids = new HashSet<Integer>(); + for (String task : stringPids) { + pids.add(Integer.valueOf(task)); + } + return pids; + } + + @Override + public void setNotifyOnRelease(boolean flag) throws IOException { + + CgroupUtils.writeFileByLine(CgroupUtils.getDir(this.dir, NOTIFY_ON_RELEASE), flag ? "1" : "0"); + } + + @Override + public boolean getNotifyOnRelease() throws IOException { + return CgroupUtils.readFileByLine(CgroupUtils.getDir(this.dir, NOTIFY_ON_RELEASE)).get(0).equals("1") ? true : false; + } + + @Override + public void setReleaseAgent(String command) throws IOException { + if (!this.isRoot) { + return; + } + CgroupUtils.writeFileByLine(CgroupUtils.getDir(this.dir, RELEASE_AGENT), command); --- End diff -- this operation should override the existing file, isn't it? > Evalute/Port JStorm cgroup support > ---------------------------------- > > Key: STORM-1336 > URL: https://issues.apache.org/jira/browse/STORM-1336 > Project: Apache Storm > Issue Type: New Feature > Components: storm-core > Reporter: Robert Joseph Evans > Assignee: Boyang Jerry Peng > Labels: jstorm-merger > > Supports controlling the upper limit of CPU core usage for a worker using > cgroups > Sounds like a good start, will be nice to integrate it with RAS requests too. -- This message was sent by Atlassian JIRA (v6.3.4#6332)