Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 41FDD200BC3 for ; Fri, 18 Nov 2016 18:25:07 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 3FC10160B1E; Fri, 18 Nov 2016 17:25:07 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 8E53C160B16 for ; Fri, 18 Nov 2016 18:25:06 +0100 (CET) Received: (qmail 95389 invoked by uid 500); 18 Nov 2016 17:25:05 -0000 Mailing-List: contact dev-help@brooklyn.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@brooklyn.apache.org Delivered-To: mailing list dev@brooklyn.apache.org Received: (qmail 95207 invoked by uid 99); 18 Nov 2016 17:25:04 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 18 Nov 2016 17:25:04 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 5EFC6E0FC4; Fri, 18 Nov 2016 17:25:04 +0000 (UTC) From: geomacy To: dev@brooklyn.apache.org Reply-To: dev@brooklyn.apache.org References: In-Reply-To: Subject: [GitHub] brooklyn-server pull request #443: Adds maxConcurrentChildCommands paramter ... Content-Type: text/plain Message-Id: <20161118172504.5EFC6E0FC4@git1-us-west.apache.org> Date: Fri, 18 Nov 2016 17:25:04 +0000 (UTC) archived-at: Fri, 18 Nov 2016 17:25:07 -0000 Github user geomacy commented on a diff in the pull request: https://github.com/apache/brooklyn-server/pull/443#discussion_r88699540 --- Diff: core/src/main/java/org/apache/brooklyn/entity/group/DynamicClusterImpl.java --- @@ -1040,14 +1077,80 @@ protected void discardNode(Entity entity) { protected void stopAndRemoveNode(Entity member) { removeMember(member); - try { if (member instanceof Startable) { - Task task = member.invoke(Startable.STOP, Collections.emptyMap()); + Task task = newThrottledEffectorTask(member, Startable.STOP, Collections.emptyMap()); task.getUnchecked(); } } finally { Entities.unmanage(member); } } + + protected Task newThrottledEffectorTask(Entity target, Effector effector, Map arguments) { + return newThrottledEffectorTask(target, effector, arguments, false); + } + + protected Task newThrottledEffectorTask(Entity target, Effector effector, Map arguments, boolean isPrivileged) { + final Semaphore permit = childTaskSemaphore; + final Task toSubmit; + final Task effectorTask = Effectors.invocation(target, effector, arguments).asTask(); + if (permit != null) { + // Acquire the permit now for the privileged task and just queue the effector invocation. + // If it's unprivileged then queue a task to obtain a permit first. + final String description = "Waiting for permit to run " + effector.getName() + " on " + target; + final Runnable obtain = new ObtainPermit(permit, description); + if (isPrivileged) { + obtain.run(); + toSubmit = effectorTask; + } else { + // acquire semaphore here if privileged? + Task obtainMutex = Tasks.builder() --- End diff -- Is it worth moving this and `ObtainPermit` into `Tasks.java`, so that this call would become something like ``` Task obtainMutex = Tasks.builder() .description(description) .throttleOn(permit) .build(); ``` --- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastructure@apache.org or file a JIRA ticket with INFRA. ---