Fix #756
This commit is contained in:
parent
eac25d6160
commit
f497f6ced0
@ -35,11 +35,6 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||||||
public class Cluster extends com.alibaba.nacos.api.naming.pojo.Cluster implements Cloneable {
|
public class Cluster extends com.alibaba.nacos.api.naming.pojo.Cluster implements Cloneable {
|
||||||
|
|
||||||
private static final String CLUSTER_NAME_SYNTAX = "[0-9a-zA-Z-]+";
|
private static final String CLUSTER_NAME_SYNTAX = "[0-9a-zA-Z-]+";
|
||||||
|
|
||||||
/**
|
|
||||||
* in fact this is CIDR(Classless Inter-Domain Routing). for naming it 'submask' it has historical reasons
|
|
||||||
*/
|
|
||||||
private String submask = "0.0.0.0/0";
|
|
||||||
/**
|
/**
|
||||||
* a addition for same site routing, can group multiple sites into a region, like Hangzhou, Shanghai, etc.
|
* a addition for same site routing, can group multiple sites into a region, like Hangzhou, Shanghai, etc.
|
||||||
*/
|
*/
|
||||||
@ -348,12 +343,6 @@ public class Cluster extends com.alibaba.nacos.api.naming.pojo.Cluster implement
|
|||||||
defIPPort = cluster.getDefIPPort();
|
defIPPort = cluster.getDefIPPort();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!StringUtils.equals(submask, cluster.getSubmask())) {
|
|
||||||
Loggers.SRV_LOG.info("[CLUSTER-UPDATE] {}:{}, submask: {} -> {}",
|
|
||||||
cluster.getDom().getName(), cluster.getName(), submask, cluster.getSubmask());
|
|
||||||
submask = cluster.getSubmask();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!StringUtils.equals(sitegroup, cluster.getSitegroup())) {
|
if (!StringUtils.equals(sitegroup, cluster.getSitegroup())) {
|
||||||
Loggers.SRV_LOG.info("[CLUSTER-UPDATE] {}:{}, sitegroup: {} -> {}",
|
Loggers.SRV_LOG.info("[CLUSTER-UPDATE] {}:{}, sitegroup: {} -> {}",
|
||||||
cluster.getDom().getName(), cluster.getName(), sitegroup, cluster.getSitegroup());
|
cluster.getDom().getName(), cluster.getName(), sitegroup, cluster.getSitegroup());
|
||||||
@ -369,18 +358,6 @@ public class Cluster extends com.alibaba.nacos.api.naming.pojo.Cluster implement
|
|||||||
metadata = cluster.getMetadata();
|
metadata = cluster.getMetadata();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getSyncKey() {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSubmask() {
|
|
||||||
return submask;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSubmask(String submask) {
|
|
||||||
this.submask = submask;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSitegroup() {
|
public String getSitegroup() {
|
||||||
return sitegroup;
|
return sitegroup;
|
||||||
}
|
}
|
||||||
@ -400,16 +377,5 @@ public class Cluster extends com.alibaba.nacos.api.naming.pojo.Cluster implement
|
|||||||
if (!getName().matches(CLUSTER_NAME_SYNTAX)) {
|
if (!getName().matches(CLUSTER_NAME_SYNTAX)) {
|
||||||
throw new IllegalArgumentException("cluster name can only have these characters: 0-9a-zA-Z-, current: " + getName());
|
throw new IllegalArgumentException("cluster name can only have these characters: 0-9a-zA-Z-, current: " + getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
String[] cidrGroups = submask.split("\\|");
|
|
||||||
for (String cidrGroup : cidrGroups) {
|
|
||||||
String[] cidrs = cidrGroup.split(",");
|
|
||||||
|
|
||||||
for (String cidr : cidrs) {
|
|
||||||
if (!cidr.matches(UtilsAndCommons.CIDR_REGEX)) {
|
|
||||||
throw new IllegalArgumentException("malformed submask: " + submask + " for cluster: " + getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,7 @@ public class IpAddress extends Instance implements Comparable {
|
|||||||
private String app;
|
private String app;
|
||||||
|
|
||||||
public static final Pattern IP_PATTERN
|
public static final Pattern IP_PATTERN
|
||||||
= Pattern.compile("(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}):?(\\d{1,5})?");
|
= Pattern.compile("(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}):?(\\d{1,5})?");
|
||||||
|
|
||||||
public static final String SPLITER = "_";
|
public static final String SPLITER = "_";
|
||||||
|
|
||||||
@ -134,13 +134,13 @@ public class IpAddress extends Instance implements Comparable {
|
|||||||
if (ipAddressAttributes.length > minimumLength) {
|
if (ipAddressAttributes.length > minimumLength) {
|
||||||
// determine 'valid':
|
// determine 'valid':
|
||||||
if (Boolean.TRUE.toString().equals(ipAddressAttributes[minimumLength]) ||
|
if (Boolean.TRUE.toString().equals(ipAddressAttributes[minimumLength]) ||
|
||||||
Boolean.FALSE.toString().equals(ipAddressAttributes[minimumLength])) {
|
Boolean.FALSE.toString().equals(ipAddressAttributes[minimumLength])) {
|
||||||
ipAddress.setValid(Boolean.parseBoolean(ipAddressAttributes[minimumLength]));
|
ipAddress.setValid(Boolean.parseBoolean(ipAddressAttributes[minimumLength]));
|
||||||
}
|
}
|
||||||
|
|
||||||
// determine 'cluster':
|
// determine 'cluster':
|
||||||
if (!Boolean.TRUE.toString().equals(ipAddressAttributes[ipAddressAttributes.length - 1]) &&
|
if (!Boolean.TRUE.toString().equals(ipAddressAttributes[ipAddressAttributes.length - 1]) &&
|
||||||
!Boolean.FALSE.toString().equals(ipAddressAttributes[ipAddressAttributes.length - 1])) {
|
!Boolean.FALSE.toString().equals(ipAddressAttributes[ipAddressAttributes.length - 1])) {
|
||||||
ipAddress.setClusterName(ipAddressAttributes[ipAddressAttributes.length - 1]);
|
ipAddress.setClusterName(ipAddressAttributes[ipAddressAttributes.length - 1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -150,7 +150,7 @@ public class IpAddress extends Instance implements Comparable {
|
|||||||
if (ipAddressAttributes.length > minimumLength) {
|
if (ipAddressAttributes.length > minimumLength) {
|
||||||
// determine 'marked':
|
// determine 'marked':
|
||||||
if (Boolean.TRUE.toString().equals(ipAddressAttributes[minimumLength]) ||
|
if (Boolean.TRUE.toString().equals(ipAddressAttributes[minimumLength]) ||
|
||||||
Boolean.FALSE.toString().equals(ipAddressAttributes[minimumLength])) {
|
Boolean.FALSE.toString().equals(ipAddressAttributes[minimumLength])) {
|
||||||
ipAddress.setMarked(Boolean.parseBoolean(ipAddressAttributes[minimumLength]));
|
ipAddress.setMarked(Boolean.parseBoolean(ipAddressAttributes[minimumLength]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -194,6 +194,11 @@ public class IpAddress extends Instance implements Comparable {
|
|||||||
} else if (ip.getWeight() < MIN_WEIGHT_VALUE) {
|
} else if (ip.getWeight() < MIN_WEIGHT_VALUE) {
|
||||||
ip.setWeight(0.0D);
|
ip.setWeight(0.0D);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!ip.validate()) {
|
||||||
|
throw new IllegalArgumentException("malfomed ip config: " + json);
|
||||||
|
}
|
||||||
|
|
||||||
return ip;
|
return ip;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -298,6 +303,20 @@ public class IpAddress extends Instance implements Comparable {
|
|||||||
return getIp() + "#" + getPort() + "#" + getClusterName() + "#" + getServiceName();
|
return getIp() + "#" + getPort() + "#" + getClusterName() + "#" + getServiceName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean validate() {
|
||||||
|
|
||||||
|
Matcher matcher = IP_PATTERN.matcher(getIp() + ":" + getPort());
|
||||||
|
if (!matcher.matches()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getWeight() > MAX_WEIGHT_VALUE || getWeight() < MIN_WEIGHT_VALUE) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int compareTo(Object o) {
|
public int compareTo(Object o) {
|
||||||
if (!(o instanceof IpAddress)) {
|
if (!(o instanceof IpAddress)) {
|
||||||
|
@ -394,7 +394,6 @@ public class VirtualClusterDomain implements Domain, RaftListener {
|
|||||||
clusters.put("defCkport", cluster.getDefCkport());
|
clusters.put("defCkport", cluster.getDefCkport());
|
||||||
clusters.put("defIPPort", cluster.getDefIPPort());
|
clusters.put("defIPPort", cluster.getDefIPPort());
|
||||||
clusters.put("useIPPort4Check", cluster.isUseIPPort4Check());
|
clusters.put("useIPPort4Check", cluster.isUseIPPort4Check());
|
||||||
clusters.put("submask", cluster.getSubmask());
|
|
||||||
clusters.put("sitegroup", cluster.getSitegroup());
|
clusters.put("sitegroup", cluster.getSitegroup());
|
||||||
|
|
||||||
clustersList.add(clusters);
|
clustersList.add(clusters);
|
||||||
@ -605,29 +604,8 @@ public class VirtualClusterDomain implements Domain, RaftListener {
|
|||||||
if (!name.matches(DOMAIN_NAME_SYNTAX)) {
|
if (!name.matches(DOMAIN_NAME_SYNTAX)) {
|
||||||
throw new IllegalArgumentException("dom name can only have these characters: 0-9a-zA-Z-._:, current: " + name);
|
throw new IllegalArgumentException("dom name can only have these characters: 0-9a-zA-Z-._:, current: " + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, List<String>> map = new HashMap<>(clusterMap.size());
|
|
||||||
for (Cluster cluster : clusterMap.values()) {
|
for (Cluster cluster : clusterMap.values()) {
|
||||||
if (StringUtils.isEmpty(cluster.getSyncKey())) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
List<String> list = map.get(cluster.getSyncKey());
|
|
||||||
if (list == null) {
|
|
||||||
list = new ArrayList<>();
|
|
||||||
map.put(cluster.getSyncKey(), list);
|
|
||||||
}
|
|
||||||
|
|
||||||
list.add(cluster.getName());
|
|
||||||
cluster.valid();
|
cluster.valid();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
|
|
||||||
List<String> list = entry.getValue();
|
|
||||||
if (list.size() > 1) {
|
|
||||||
String msg = "clusters' config can not be the same: " + list;
|
|
||||||
Loggers.SRV_LOG.warn(msg);
|
|
||||||
throw new IllegalArgumentException(msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -534,6 +534,10 @@ public class ApiCommands {
|
|||||||
ipAddress.setClusterName(cluster);
|
ipAddress.setClusterName(cluster);
|
||||||
ipAddress.setEnabled(enabled);
|
ipAddress.setEnabled(enabled);
|
||||||
|
|
||||||
|
if (!ipAddress.validate()) {
|
||||||
|
throw new IllegalArgumentException("malfomed ip config: " + ipAddress);
|
||||||
|
}
|
||||||
|
|
||||||
return ipAddress;
|
return ipAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -718,17 +722,6 @@ public class ApiCommands {
|
|||||||
cluster.setDefIPPort(Integer.parseInt(defIPPort));
|
cluster.setDefIPPort(Integer.parseInt(defIPPort));
|
||||||
}
|
}
|
||||||
|
|
||||||
String submask = WebUtils.optional(request, "submask", StringUtils.EMPTY);
|
|
||||||
if (!StringUtils.isEmpty(submask)) {
|
|
||||||
Cluster cluster
|
|
||||||
= dom.getClusterMap().get(WebUtils.optional(request, "cluster", UtilsAndCommons.DEFAULT_CLUSTER_NAME));
|
|
||||||
if (cluster == null) {
|
|
||||||
throw new IllegalStateException("cluster not found");
|
|
||||||
}
|
|
||||||
|
|
||||||
cluster.setSubmask(submask);
|
|
||||||
}
|
|
||||||
|
|
||||||
String ipPort4Check = WebUtils.optional(request, "ipPort4Check", StringUtils.EMPTY);
|
String ipPort4Check = WebUtils.optional(request, "ipPort4Check", StringUtils.EMPTY);
|
||||||
if (!StringUtils.isEmpty(ipPort4Check)) {
|
if (!StringUtils.isEmpty(ipPort4Check)) {
|
||||||
Cluster cluster
|
Cluster cluster
|
||||||
@ -2081,10 +2074,6 @@ public class ApiCommands {
|
|||||||
cluster.setHealthChecker(config);
|
cluster.setHealthChecker(config);
|
||||||
}
|
}
|
||||||
cluster.setSitegroup(siteGroup);
|
cluster.setSitegroup(siteGroup);
|
||||||
|
|
||||||
if (!StringUtils.isEmpty(submask)) {
|
|
||||||
cluster.setSubmask(submask);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
cluster.setDom(domObj);
|
cluster.setDom(domObj);
|
||||||
cluster.init();
|
cluster.init();
|
||||||
@ -2417,7 +2406,6 @@ public class ApiCommands {
|
|||||||
clusterPac.put("defCkport", cluster.getDefCkport());
|
clusterPac.put("defCkport", cluster.getDefCkport());
|
||||||
clusterPac.put("defIPPort", cluster.getDefIPPort());
|
clusterPac.put("defIPPort", cluster.getDefIPPort());
|
||||||
clusterPac.put("useIPPort4Check", cluster.isUseIPPort4Check());
|
clusterPac.put("useIPPort4Check", cluster.isUseIPPort4Check());
|
||||||
clusterPac.put("submask", cluster.getSubmask());
|
|
||||||
clusterPac.put("sitegroup", cluster.getSitegroup());
|
clusterPac.put("sitegroup", cluster.getSitegroup());
|
||||||
clusterPac.put("metadatas", cluster.getMetadata());
|
clusterPac.put("metadatas", cluster.getMetadata());
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user