cloudstack-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From r...@apache.org
Subject [1/4] git commit: updated refs/heads/4.7 to a767407
Date Sat, 16 Jan 2016 19:40:35 GMT
Repository: cloudstack
Updated Branches:
  refs/heads/4.7 4dabd1311 -> a767407fd


Implement CheckHealthCommand for NSX controllers


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/47a23c22
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/47a23c22
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/47a23c22

Branch: refs/heads/4.7
Commit: 47a23c22c1d3bd6a195b0a752cfc9ad5f2b78f22
Parents: 13f1ed7
Author: Miguel Ferreira <miguelferreira@me.com>
Authored: Mon Dec 28 14:27:27 2015 +0100
Committer: Miguel Ferreira <miguelferreira@me.com>
Committed: Mon Dec 28 15:56:25 2015 +0100

----------------------------------------------------------------------
 .../cloud/agent/manager/AgentManagerImpl.java   |  2 +-
 .../NiciraCheckHealthCommandWrapper.java        | 63 +++++++++++++++
 .../NiciraCheckHealthCommandWrapperTest.java    | 80 ++++++++++++++++++++
 3 files changed, 144 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/47a23c22/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java b/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java
index 7e6588b..45a7dca 100644
--- a/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java
+++ b/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java
@@ -843,7 +843,7 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager,
Handl
                 }
 
                 final Status currentStatus = host.getStatus();
-                s_logger.info("The agent " + hostId + " state determined is " + determinedState);
+                s_logger.info("The agent from host " + hostId + " state determined is " +
determinedState);
 
                 if (determinedState == Status.Down) {
                     final String message = "Host is down: " + host.getId() + "-" + host.getName()
+ ". Starting HA on the VMs";

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/47a23c22/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraCheckHealthCommandWrapper.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraCheckHealthCommandWrapper.java
b/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraCheckHealthCommandWrapper.java
new file mode 100644
index 0000000..34e4548
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/main/java/com/cloud/network/resource/wrapper/NiciraCheckHealthCommandWrapper.java
@@ -0,0 +1,63 @@
+//
+// 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 com.cloud.network.resource.wrapper;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.agent.api.Answer;
+import com.cloud.agent.api.CheckHealthAnswer;
+import com.cloud.agent.api.CheckHealthCommand;
+import com.cloud.network.nicira.ControlClusterStatus;
+import com.cloud.network.nicira.NiciraNvpApi;
+import com.cloud.network.nicira.NiciraNvpApiException;
+import com.cloud.network.resource.NiciraNvpResource;
+import com.cloud.resource.CommandWrapper;
+import com.cloud.resource.ResourceWrapper;
+
+@ResourceWrapper(handles = CheckHealthCommand.class)
+public class NiciraCheckHealthCommandWrapper extends CommandWrapper<CheckHealthCommand,
Answer, NiciraNvpResource> {
+
+    private static final String CONTROL_CLUSTER_STATUS_IS_STABLE = "stable";
+    private static final Logger s_logger = Logger.getLogger(NiciraCheckHealthCommandWrapper.class);
+
+    @Override
+    public Answer execute(final CheckHealthCommand command, final NiciraNvpResource serverResource)
{
+        final NiciraNvpApi niciraNvpApi = serverResource.getNiciraNvpApi();
+        boolean healthy = true;
+        try {
+            final ControlClusterStatus clusterStatus = niciraNvpApi.getControlClusterStatus();
+            final String status = clusterStatus.getClusterStatus();
+            if (clusterIsUnstable(status)) {
+                s_logger.warn("Control cluster is not stable. Current status is " + status);
+                healthy = false;
+            }
+        } catch (final NiciraNvpApiException e) {
+            s_logger.error("Exception caught while checking control cluster status during
health check", e);
+            healthy = false;
+        }
+
+        return new CheckHealthAnswer(command, healthy);
+    }
+
+    protected boolean clusterIsUnstable(final String clusterStatus) {
+        return !CONTROL_CLUSTER_STATUS_IS_STABLE.equals(clusterStatus);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/47a23c22/plugins/network-elements/nicira-nvp/src/test/java/com/cloud/network/resource/wrapper/NiciraCheckHealthCommandWrapperTest.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/test/java/com/cloud/network/resource/wrapper/NiciraCheckHealthCommandWrapperTest.java
b/plugins/network-elements/nicira-nvp/src/test/java/com/cloud/network/resource/wrapper/NiciraCheckHealthCommandWrapperTest.java
new file mode 100644
index 0000000..b0a9882
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/test/java/com/cloud/network/resource/wrapper/NiciraCheckHealthCommandWrapperTest.java
@@ -0,0 +1,80 @@
+//
+// 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 com.cloud.network.resource.wrapper;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.cloud.agent.api.Answer;
+import com.cloud.agent.api.CheckHealthCommand;
+import com.cloud.network.nicira.ControlClusterStatus;
+import com.cloud.network.nicira.NiciraNvpApi;
+import com.cloud.network.nicira.NiciraNvpApiException;
+import com.cloud.network.resource.NiciraNvpResource;
+
+public class NiciraCheckHealthCommandWrapperTest {
+
+    private final NiciraNvpResource niciraResource = mock(NiciraNvpResource.class);
+    private final NiciraNvpApi niciraApi = mock(NiciraNvpApi.class);
+
+    @Before
+    public void setup() {
+        when(niciraResource.getNiciraNvpApi()).thenReturn(niciraApi);
+    }
+
+    @Test
+    public void tetsExecuteWhenClusterIsNotStable() throws Exception {
+        when(niciraApi.getControlClusterStatus()).thenReturn(new ControlClusterStatus());
+
+        final NiciraCheckHealthCommandWrapper commandWrapper = new NiciraCheckHealthCommandWrapper();
+        final Answer answer = commandWrapper.execute(new CheckHealthCommand(), niciraResource);
+
+        assertThat(answer.getResult(), equalTo(false));
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void tetsExecuteWhenApiThrowsException() throws Exception {
+        when(niciraApi.getControlClusterStatus()).thenThrow(NiciraNvpApiException.class);
+
+        final NiciraCheckHealthCommandWrapper commandWrapper = new NiciraCheckHealthCommandWrapper();
+        final Answer answer = commandWrapper.execute(new CheckHealthCommand(), niciraResource);
+
+        assertThat(answer.getResult(), equalTo(false));
+    }
+
+    @Test
+    public void tetsExecuteWhenClusterIsStable() throws Exception {
+        final ControlClusterStatus statusValue = mock(ControlClusterStatus.class);
+        when(statusValue.getClusterStatus()).thenReturn("stable");
+        when(niciraApi.getControlClusterStatus()).thenReturn(statusValue);
+
+        final NiciraCheckHealthCommandWrapper commandWrapper = new NiciraCheckHealthCommandWrapper();
+        final Answer answer = commandWrapper.execute(new CheckHealthCommand(), niciraResource);
+
+        assertThat(answer.getResult(), equalTo(true));
+    }
+
+}


Mime
View raw message