Skip to content

Commit c3c02dd

Browse files
authored
Merge pull request #801 from jschoiRR/diplo-2026
[Mold VR] 가상라우터의 client, connect, server 타임아웃을 글로벌설정 세팅값으로 반영되도록 기능 개발
2 parents b2ce293 + dceaa4c commit c3c02dd

8 files changed

Lines changed: 48 additions & 5 deletions

File tree

core/src/main/java/com/cloud/agent/api/routing/LoadBalancerConfigCommand.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ public class LoadBalancerConfigCommand extends NetworkElementCommand {
3636
public String lbStatsAuth = "admin1:AdMiN123";
3737
public String lbStatsUri = "/admin?stats";
3838
public String maxconn = "";
39+
public String lbConnectTimeout = "5000";
40+
public String lbClientTimeout = "50000";
41+
public String lbServerTimeout = "50000";
3942
public String lbProtocol;
4043
public boolean keepAliveEnabled = false;
4144
NicTO nic;

core/src/main/java/com/cloud/network/HAProxyConfigurator.java

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ public class HAProxyConfigurator implements LoadBalancerConfigurator {
4444

4545
protected Logger logger = LogManager.getLogger(getClass());
4646
private static final String blankLine = "\t ";
47+
private static final String defaultConnectTimeout = "5000";
48+
private static final String defaultClientTimeout = "50000";
49+
private static final String defaultServerTimeout = "50000";
4750
private static String[] globalSection = {"global", "\tlog 127.0.0.1:3914 local0 warning", "\tmaxconn 4096", "\tmaxpipes 1024", "\tchroot /var/lib/haproxy",
4851
"\tuser haproxy", "\tgroup haproxy", "\tstats socket /run/haproxy/admin.sock", "\tdaemon"};
4952

@@ -74,7 +77,7 @@ public String[] generateConfiguration(final List<PortForwardingRuleTO> fwRules)
7477

7578
result.addAll(Arrays.asList(globalSection));
7679
result.add(blankLine);
77-
result.addAll(Arrays.asList(defaultsSection));
80+
result.addAll(getDefaultsSection(defaultConnectTimeout, defaultClientTimeout, defaultServerTimeout, false));
7881
result.add(blankLine);
7982

8083
if (pools.isEmpty()) {
@@ -602,10 +605,7 @@ public String[] generateConfiguration(final LoadBalancerConfigCommand lbCmd) {
602605
// result.add("\tnopoll");
603606

604607
result.add(blankLine);
605-
final List<String> dSection = Arrays.asList(defaultsSection);
606-
if (lbCmd.keepAliveEnabled) {
607-
dSection.set(7, "\tno option httpclose");
608-
}
608+
final List<String> dSection = getDefaultsSection(lbCmd.lbConnectTimeout, lbCmd.lbClientTimeout, lbCmd.lbServerTimeout, lbCmd.keepAliveEnabled);
609609

610610
if (logger.isDebugEnabled()) {
611611
for (final String s : dSection) {
@@ -696,4 +696,18 @@ public String[][] generateFwRules(final LoadBalancerConfigCommand lbCmd) {
696696

697697
return result;
698698
}
699+
700+
private List<String> getDefaultsSection(final String connectTimeout, final String clientTimeout, final String serverTimeout, final boolean keepAliveEnabled) {
701+
final List<String> dSection = new ArrayList<>(Arrays.asList(defaultsSection));
702+
final String effectiveConnectTimeout = StringUtils.isBlank(connectTimeout) ? defaultConnectTimeout : connectTimeout;
703+
final String effectiveClientTimeout = StringUtils.isBlank(clientTimeout) ? defaultClientTimeout : clientTimeout;
704+
final String effectiveServerTimeout = StringUtils.isBlank(serverTimeout) ? defaultServerTimeout : serverTimeout;
705+
dSection.set(8, "\ttimeout connect " + effectiveConnectTimeout);
706+
dSection.set(9, "\ttimeout client " + effectiveClientTimeout);
707+
dSection.set(10, "\ttimeout server " + effectiveServerTimeout);
708+
if (keepAliveEnabled) {
709+
dSection.set(7, "\tno option httpclose");
710+
}
711+
return dSection;
712+
}
699713
}

plugins/network-elements/elastic-loadbalancer/src/main/java/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
import com.cloud.network.lb.LoadBalancingRule.LbSslCert;
7474
import com.cloud.network.lb.LoadBalancingRule.LbStickinessPolicy;
7575
import com.cloud.network.lb.dao.ElasticLbVmMapDao;
76+
import com.cloud.network.router.VirtualNetworkApplianceManager;
7677
import com.cloud.network.router.VirtualRouter;
7778
import com.cloud.network.rules.FirewallRule;
7879
import com.cloud.network.rules.LoadBalancer;
@@ -215,6 +216,9 @@ private void createApplyLoadBalancingRulesCommands(List<LoadBalancingRule> rules
215216
cmd.lbStatsUri = _configDao.getValue(Config.NetworkLBHaproxyStatsUri.key());
216217
cmd.lbStatsAuth = _configDao.getValue(Config.NetworkLBHaproxyStatsAuth.key());
217218
cmd.lbStatsPort = _configDao.getValue(Config.NetworkLBHaproxyStatsPort.key());
219+
cmd.lbConnectTimeout = VirtualNetworkApplianceManager.NetworkLBHaproxyConnectTimeout.value().toString();
220+
cmd.lbClientTimeout = VirtualNetworkApplianceManager.NetworkLBHaproxyClientTimeout.value().toString();
221+
cmd.lbServerTimeout = VirtualNetworkApplianceManager.NetworkLBHaproxyServerTimeout.value().toString();
218222

219223
cmds.addCommand(cmd);
220224

plugins/network-elements/internal-loadbalancer/src/main/java/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,9 @@ private void createApplyLoadBalancingRulesCommands(final List<LoadBalancingRule>
497497
cmd.lbStatsUri = _configDao.getValue(Config.NetworkLBHaproxyStatsUri.key());
498498
cmd.lbStatsAuth = _configDao.getValue(Config.NetworkLBHaproxyStatsAuth.key());
499499
cmd.lbStatsPort = _configDao.getValue(Config.NetworkLBHaproxyStatsPort.key());
500+
cmd.lbConnectTimeout = VirtualNetworkApplianceManager.NetworkLBHaproxyConnectTimeout.value().toString();
501+
cmd.lbClientTimeout = VirtualNetworkApplianceManager.NetworkLBHaproxyClientTimeout.value().toString();
502+
cmd.lbServerTimeout = VirtualNetworkApplianceManager.NetworkLBHaproxyServerTimeout.value().toString();
500503

501504
cmd.setAccessDetail(NetworkElementCommand.ROUTER_IP, getInternalLbControlIp(internalLbVm.getId()));
502505
cmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, guestNic.getIPv4Address());

server/src/main/java/com/cloud/network/router/CommandSetupHelper.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,9 @@ public void createApplyLoadBalancingRulesCommands(final List<LoadBalancingRule>
398398
cmd.lbStatsUri = _configDao.getValue(Config.NetworkLBHaproxyStatsUri.key());
399399
cmd.lbStatsAuth = _configDao.getValue(Config.NetworkLBHaproxyStatsAuth.key());
400400
cmd.lbStatsPort = _configDao.getValue(Config.NetworkLBHaproxyStatsPort.key());
401+
cmd.lbConnectTimeout = VirtualNetworkApplianceManager.NetworkLBHaproxyConnectTimeout.value().toString();
402+
cmd.lbClientTimeout = VirtualNetworkApplianceManager.NetworkLBHaproxyClientTimeout.value().toString();
403+
cmd.lbServerTimeout = VirtualNetworkApplianceManager.NetworkLBHaproxyServerTimeout.value().toString();
401404

402405
cmd.setAccessDetail(NetworkElementCommand.ROUTER_IP, _routerControlHelper.getRouterControlIp(router.getId()));
403406
cmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, _routerControlHelper.getRouterIpInNetwork(guestNetworkId, router.getId()));

server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManager.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ public interface VirtualNetworkApplianceManager extends Manager, VirtualNetworkA
4545
String SetServiceMonitorCK = "network.router.EnableServiceMonitoring";
4646
String RouterAlertsCheckIntervalCK = "router.alerts.check.interval";
4747
String VirtualRouterServiceOfferingCK = "router.service.offering";
48+
String NetworkLBHaproxyConnectTimeoutCK = "network.loadbalancer.haproxy.connect.timeout";
49+
String NetworkLBHaproxyClientTimeoutCK = "network.loadbalancer.haproxy.client.timeout";
50+
String NetworkLBHaproxyServerTimeoutCK = "network.loadbalancer.haproxy.server.timeout";
4851

4952
String RouterHealthChecksConfigRefreshIntervalCK = "router.health.checks.config.refresh.interval";
5053
String RouterHealthChecksResultFetchIntervalCK = "router.health.checks.results.fetch.interval";
@@ -78,6 +81,12 @@ public interface VirtualNetworkApplianceManager extends Manager, VirtualNetworkA
7881

7982
ConfigKey<String> VirtualRouterServiceOffering = new ConfigKey<>(String.class, VirtualRouterServiceOfferingCK, "Advanced", "",
8083
"Uuid of the service offering used by virtual routers; if NULL - system offering will be used", true, ConfigKey.Scope.Account, null);
84+
ConfigKey<Integer> NetworkLBHaproxyConnectTimeout = new ConfigKey<>(Integer.class, NetworkLBHaproxyConnectTimeoutCK, "Network", "5000",
85+
"Load Balancer(haproxy) connect timeout in milliseconds.", true, ConfigKey.Scope.Global, null);
86+
ConfigKey<Integer> NetworkLBHaproxyClientTimeout = new ConfigKey<>(Integer.class, NetworkLBHaproxyClientTimeoutCK, "Network", "50000",
87+
"Load Balancer(haproxy) client timeout in milliseconds.", true, ConfigKey.Scope.Global, null);
88+
ConfigKey<Integer> NetworkLBHaproxyServerTimeout = new ConfigKey<>(Integer.class, NetworkLBHaproxyServerTimeoutCK, "Network", "50000",
89+
"Load Balancer(haproxy) server timeout in milliseconds.", true, ConfigKey.Scope.Global, null);
8190

8291
// Health checks
8392
ConfigKey<Boolean> RouterHealthChecksEnabled = new ConfigKey<>(Boolean.class, "router.health.checks.enabled", "Advanced", "true",

server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3380,6 +3380,9 @@ public ConfigKey<?>[] getConfigKeys() {
33803380
RouterVersionCheckEnabled,
33813381
SetServiceMonitor,
33823382
VirtualRouterServiceOffering,
3383+
NetworkLBHaproxyConnectTimeout,
3384+
NetworkLBHaproxyClientTimeout,
3385+
NetworkLBHaproxyServerTimeout,
33833386
RouterAlertsCheckInterval,
33843387
RouterHealthChecksEnabled,
33853388
RouterHealthChecksBasicInterval,

server/src/main/java/com/cloud/server/ManagementServerImpl.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,11 +139,13 @@
139139
import org.apache.cloudstack.api.command.admin.management.ListMgmtsCmd;
140140
import org.apache.cloudstack.api.command.admin.network.AddNetworkDeviceCmd;
141141
import org.apache.cloudstack.api.command.admin.network.AddNetworkServiceProviderCmd;
142+
import org.apache.cloudstack.api.command.admin.network.CreateManagementNetworkIpRangeCmd;
142143
import org.apache.cloudstack.api.command.admin.network.CreateNetworkCmdByAdmin;
143144
import org.apache.cloudstack.api.command.admin.network.CreateNetworkOfferingCmd;
144145
import org.apache.cloudstack.api.command.admin.network.CreatePhysicalNetworkCmd;
145146
import org.apache.cloudstack.api.command.admin.network.CreateStorageNetworkIpRangeCmd;
146147
import org.apache.cloudstack.api.command.admin.network.DedicateGuestVlanRangeCmd;
148+
import org.apache.cloudstack.api.command.admin.network.DeleteManagementNetworkIpRangeCmd;
147149
import org.apache.cloudstack.api.command.admin.network.DeleteNetworkDeviceCmd;
148150
import org.apache.cloudstack.api.command.admin.network.DeleteNetworkOfferingCmd;
149151
import org.apache.cloudstack.api.command.admin.network.DeleteNetworkServiceProviderCmd;
@@ -6289,9 +6291,11 @@ public List<Class<?>> getCommands() {
62896291
cmdList.add(UpdateHostPasswordCmd.class);
62906292
cmdList.add(AddNetworkDeviceCmd.class);
62916293
cmdList.add(AddNetworkServiceProviderCmd.class);
6294+
cmdList.add(CreateManagementNetworkIpRangeCmd.class);
62926295
cmdList.add(CreateNetworkOfferingCmd.class);
62936296
cmdList.add(CreatePhysicalNetworkCmd.class);
62946297
cmdList.add(CreateStorageNetworkIpRangeCmd.class);
6298+
cmdList.add(DeleteManagementNetworkIpRangeCmd.class);
62956299
cmdList.add(DeleteNetworkDeviceCmd.class);
62966300
cmdList.add(DeleteNetworkOfferingCmd.class);
62976301
cmdList.add(DeleteNetworkServiceProviderCmd.class);

0 commit comments

Comments
 (0)