Skip to content

Commit 3cc2209

Browse files
committed
fixes
Signed-off-by: Abhishek Kumar <[email protected]>
1 parent 328044e commit 3cc2209

File tree

20 files changed

+185
-105
lines changed

20 files changed

+185
-105
lines changed

client/conf/server.properties.in

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,10 @@ extensions.deployment.mode=@EXTENSIONSDEPLOYMENTMODE@
6262
# Thread pool configuration
6363
#threads.min=10
6464
#threads.max=500
65+
66+
# WebSocket server enable/disable flag used by the management server
67+
websocket.enable=true
68+
69+
# WebSocket server port used by the management server
70+
# If not set, defaults to 8822. It can be set to same value as http.port or https.port if needed.
71+
websocket.port=8822

client/src/main/java/org/apache/cloudstack/websocket/JettyWebSocketServlet.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import java.util.Map;
2222

2323
import javax.servlet.ServletException;
24-
import javax.servlet.UnavailableException;
2524

2625
import org.apache.cloudstack.framework.websocket.server.common.WebSocketHandler;
2726
import org.apache.cloudstack.framework.websocket.server.common.WebSocketRouter;
@@ -63,16 +62,13 @@ public void init() throws ServletException {
6362
LOGGER.info("Initializing JettyWebSocketServlet");
6463
if (!isWebSocketServletEnabled()) {
6564
enabled = false;
66-
String msg = "WebSocket Server is not enabled, embedded WebSocket Server will not be running";
67-
LOGGER.info(msg);
68-
throw new UnavailableException(msg);
65+
LOGGER.info("WebSocket Server is not enabled, embedded WebSocket Server will not be running");
6966
}
7067
Integer port = getWebSocketServletPort();
7168
if (port == null) {
7269
enabled = false;
73-
String msg = "WebSocket Server port is configured, embedded WebSocket Server will not be running";
74-
LOGGER.info(msg);
75-
throw new UnavailableException(msg);
70+
LOGGER.info("WebSocket Server port is configured, embedded WebSocket Server will not be running");
71+
return;
7672
}
7773
enabled = true;
7874
LOGGER.info("Embedded WebSocket Server initialized at {}/* with port: {}",

engine/schema/src/main/resources/META-INF/db/schema-42200to42300.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ CREATE TABLE IF NOT EXISTS `cloud`.`management_server_details` (
3131
KEY `i_management_server_details__name__value` (`name`(128),`value`(128))
3232
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3333

34-
-- Create table for logs web session
34+
-- Create table for Logs Web Session
3535
CREATE TABLE IF NOT EXISTS `cloud`.`logs_web_session` (
3636
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id of the session',
3737
`uuid` varchar(40) NOT NULL COMMENT 'UUID generated for the session',

framework/websocket-server/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
<parent>
2525
<groupId>org.apache.cloudstack</groupId>
2626
<artifactId>cloudstack-framework</artifactId>
27-
<version>4.22.0.0-SNAPSHOT</version>
27+
<version>4.23.0.0-SNAPSHOT</version>
2828
<relativePath>../pom.xml</relativePath>
2929
</parent>
3030
<dependencies>

framework/websocket-server/src/main/java/org/apache/cloudstack/framework/websocket/server/WebSocketServerRoutingHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exc
6262
final URI uri = URI.create(requestUri);
6363
final String rawQuery = uri.getQuery();
6464
String path = uri.getPath();
65-
LOGGER.debug("WebSocket connection for path: {}, query: {}", path, rawQuery);
65+
LOGGER.trace("WebSocket connection for path: {}, query: {}", path, rawQuery);
6666

6767
path = WebSocketRouter.stripWebSocketPathPrefix(uri.getPath());
6868

framework/websocket-server/src/main/java/org/apache/cloudstack/framework/websocket/server/common/WebSocketRouter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ public static String ensureLeadingSlash(String p) {
289289

290290
public static String stripWebSocketPathPrefix(String path) {
291291
if (StringUtils.isNotBlank(path) && path.startsWith(WebSocketRouter.WEBSOCKET_PATH_PREFIX)) {
292-
return path.replaceFirst(WebSocketRouter.WEBSOCKET_PATH_PREFIX, "/");
292+
return path.replaceFirst(WebSocketRouter.WEBSOCKET_PATH_PREFIX, "");
293293
}
294294
return path;
295295
}

framework/websocket-server/src/main/java/org/apache/cloudstack/framework/websocket/server/manager/WebSocketServerManagerImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ protected void initializeServerModeAndPort() {
103103
logger.error(
104104
"WebSocket Server port is not a valid number: {}, WebSocket Server will not be started!",
105105
webSocketServerPort, nfe);
106-
serverMode = ServerMode.EMBEDDED;
106+
serverEnabled = false;
107107
}
108108
}
109109

plugins/logs-web-server/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
<parent>
2525
<groupId>org.apache.cloudstack</groupId>
2626
<artifactId>cloudstack-plugins</artifactId>
27-
<version>4.22.0.0-SNAPSHOT</version>
27+
<version>4.23.0.0-SNAPSHOT</version>
2828
<relativePath>../pom.xml</relativePath>
2929
</parent>
3030
<dependencies>

plugins/logs-web-server/src/main/java/org/apache/cloudstack/logsws/LogsWebSessionApiServiceImpl.java

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import org.apache.cloudstack.logsws.dao.LogsWebSessionDao;
4444
import org.apache.cloudstack.logsws.vo.LogsWebSessionVO;
4545
import org.apache.cloudstack.utils.identity.ManagementServerNode;
46+
import org.apache.commons.collections.CollectionUtils;
4647
import org.apache.commons.collections.MapUtils;
4748
import org.apache.commons.lang3.StringUtils;
4849

@@ -126,7 +127,7 @@ public LogsWebSessionResponse createLogsWebSession(CreateLogsWebSessionCmd cmd)
126127
}
127128
}
128129
if (!logsWSManager.canCreateNewLogsWebSession()) {
129-
throw new CloudRuntimeException("Failed to create logs web session as max session limit reached");
130+
throw new CloudRuntimeException("Failed to create Logs Web Session as max session limit reached");
130131
}
131132
try {
132133
return Transaction.execute((TransactionCallbackWithException<LogsWebSessionResponse, InternalErrorException>) status -> {
@@ -136,7 +137,7 @@ public LogsWebSessionResponse createLogsWebSession(CreateLogsWebSessionCmd cmd)
136137
return createLogsWebSessionResponse(logsWebSessionVO);
137138
});
138139
} catch (InternalErrorException e) {
139-
throw new CloudRuntimeException("Failed to create logs web session as unable to prepare response", e);
140+
throw new CloudRuntimeException("Failed to create Logs Web Session as unable to prepare response", e);
140141
}
141142
}
142143

@@ -171,19 +172,25 @@ protected Set<LogsWebSessionWebSocketResponse> getLogsWebSessionWebSocketRespons
171172
final LogsWebSessionVO logsWebSessionVO) throws InternalErrorException {
172173
Set<LogsWebSessionWebSocketResponse> responses = new HashSet<>();
173174
List<LogsWebSessionWebSocket> webSockets = logsWSManager.getLogsWebSessionWebSockets(logsWebSessionVO);
175+
if (CollectionUtils.isEmpty(webSockets)) {
176+
throw new CloudRuntimeException(String.format("Failed to get websocket endpoints for Logs Web Session %s",
177+
logsWebSessionVO.getUuid()));
178+
}
174179
for (LogsWebSessionWebSocket socket : webSockets) {
175180
LogsWebSessionWebSocketResponse webSocketResponse = new LogsWebSessionWebSocketResponse();
176181
webSocketResponse.setManagementServerId(socket.getManagementServerHost().getUuid());
177182
webSocketResponse.setManagementServerName(socket.getManagementServerHost().getName());
178-
String serviceIp = socket.getManagementServerHost().getServiceIP();
179-
if (ManagementServerNode.getManagementServerId() == socket.getManagementServerHost().getMsid() &&
180-
NetUtils.isLocalAddress(serviceIp)) {
181-
String realIp = getRealIp4Address();
182-
if (realIp != null) {
183-
serviceIp = realIp;
183+
if (LogsWebSessionManager.LogsWebServerDirectConnect.value()) {
184+
String serviceIp = socket.getManagementServerHost().getServiceIP();
185+
if (ManagementServerNode.getManagementServerId() == socket.getManagementServerHost().getMsid() &&
186+
NetUtils.isLocalAddress(serviceIp)) {
187+
String realIp = getRealIp4Address();
188+
if (realIp != null) {
189+
serviceIp = realIp;
190+
}
184191
}
192+
webSocketResponse.setHost(serviceIp);
185193
}
186-
webSocketResponse.setHost(serviceIp);
187194
webSocketResponse.setPort(socket.getPort());
188195
webSocketResponse.setPath(socket.getPath());
189196
webSocketResponse.setSsl(socket.isSsl());

plugins/logs-web-server/src/main/java/org/apache/cloudstack/logsws/LogsWebSessionManager.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ public interface LogsWebSessionManager extends PluggableService, Configurable {
3333
"Indicates whether Logs Web Server plugin is enabled or not",
3434
false);
3535

36+
ConfigKey<Boolean> LogsWebServerDirectConnect = new ConfigKey<>("Advanced", Boolean.class,
37+
"logs.web.server.direct.connect", "true",
38+
"Whether clients directly connect to the management server hosts for Logs Web Server sessions",
39+
true);
40+
3641
ConfigKey<String> LogsWebServerPath = new ConfigKey<>("Advanced", String.class,
3742
"logs.web.server.path", WS_PATH,
3843
"The path prefix to be used for Logs Web Server",

0 commit comments

Comments
 (0)