public static String execSql(MySqlNode node, String cmd) { return node.invoke(MySqlNode.EXECUTE_SCRIPT, ImmutableMap.of("commands", cmd)).asTask().getUnchecked(); }
protected void onServerPoolMemberChanged(final Entity member) { LOG.debug("For {}, considering membership of {} which is in locations {}", new Object[]{ this, member, member.getLocations() }); Map<Entity, String> nodes = MutableMap.copyOf(sensors().get(ETCD_CLUSTER_NODES)); Duration timeout = config().get(BrooklynConfigKeys.START_TIMEOUT); Entity firstNode = AbstractGroup.getFirst(this); if (belongsInServerPool(member) && !nodes.containsKey(member)) { EtcdNode node = (EtcdNode) member; String name = Preconditions.checkNotNull(node.getNodeName()); // Ensure etcd has been installed Task<Boolean> installed = DynamicTasks.submit(DependentConfiguration.attributeWhenReady(member, EtcdNode.ETCD_NODE_INSTALLED), this).asTask(); if (installed.blockUntilEnded(timeout) && installed.getUnchecked()) { // Check if we are first node in the cluster. if (node.equals(firstNode)) { addNode(node, name); } else { // Add node asynchronously Callable<Void> joinCluster = new JoinCluster(firstNode, node, name, timeout); DynamicTasks.submit(Tasks.create("Joining etcd cluster", joinCluster), this); } } } }
@Test(groups = "Integration") public void testUnmanageOnStop() throws Exception { final BrooklynNode node = app.addChild(EntitySpec.create(BrooklynNode.class).impl(SlowStopBrooklynNode.class)); assertTrue(Entities.isManaged(node), "Entity " + node + " must be managed."); node.invoke(Startable.STOP, ImmutableMap.<String, Object>of()).asTask().getUnchecked(); //The UnmanageTask will unblock after the STOP effector completes, so we are competing with it here. Asserts.succeedsEventually(new Runnable() { @Override public void run() { assertFalse(Entities.isManaged(node)); } }); }
private void selectMaster(DynamicCluster cluster, String id) { app.getExecutionContext().submit(Effectors.invocation(cluster, BrooklynCluster.SELECT_MASTER, ImmutableMap.of(SelectMasterEffector.NEW_MASTER_ID.getName(), id))).asTask().getUnchecked(); }
@Override public Void call() throws Exception { // Wait for first node to be ready Entities.waitForServiceUp(firstNode); Task<Boolean> joined = DynamicTasks.submit(DependentConfiguration.attributeWhenReady(firstNode, EtcdNode.ETCD_NODE_HAS_JOINED_CLUSTER), EtcdClusterImpl.this).asTask(); if (joined.blockUntilEnded(timeout) && joined.getUnchecked()) { // Try invoking joinCluster effector synchronized (clusterMutex) { boolean success = Repeater.create("Calling joinCluster effector") .every(Duration.ONE_MINUTE) .limitIterationsTo(3) .limitTimeTo(timeout) .until(new InvokeJoinEffector()) .run(); if (!success) { throw new IllegalStateException(String.format("Node %s failed to join cluster %s", member, EtcdClusterImpl.this)); } } } return null; }