Skip to content

Commit 0ee9b9c

Browse files
feat: support TSF unit (#645)
Co-authored-by: shedfreewu <[email protected]>
1 parent 9c863db commit 0ee9b9c

File tree

4 files changed

+115
-3
lines changed

4 files changed

+115
-3
lines changed

polaris-common/polaris-model/src/main/java/com/tencent/polaris/api/utils/StringUtils.java

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -571,4 +571,103 @@ public static boolean contains(String str, String searchStr) {
571571
}
572572
return str.indexOf(searchStr) >= 0;
573573
}
574+
575+
/**
576+
* copy from commons-lang3.
577+
* {@link org.apache.commons.lang3.StringUtils#split(java.lang.String, java.lang.String, int)}
578+
*/
579+
public static String[] split(final String str, final String separatorChars, final int max) {
580+
return splitWorker(str, separatorChars, max, false);
581+
}
582+
583+
/**
584+
* copy from commons-lang3.
585+
* {@link org.apache.commons.lang3.StringUtils#splitWorker(java.lang.String, java.lang.String, int, boolean)}
586+
*/
587+
private static String[] splitWorker(final String str, final String separatorChars, final int max, final boolean preserveAllTokens) {
588+
// Performance tuned for 2.0 (JDK1.4)
589+
// Direct code is quicker than StringTokenizer.
590+
// Also, StringTokenizer uses isSpace() not isWhitespace()
591+
592+
if (str == null) {
593+
return null;
594+
}
595+
final int len = str.length();
596+
if (len == 0) {
597+
return EMPTY_STRING_ARRAY;
598+
}
599+
final List<String> list = new ArrayList<>();
600+
int sizePlus1 = 1;
601+
int i = 0;
602+
int start = 0;
603+
boolean match = false;
604+
boolean lastMatch = false;
605+
if (separatorChars == null) {
606+
// Null separator means use whitespace
607+
while (i < len) {
608+
if (Character.isWhitespace(str.charAt(i))) {
609+
if (match || preserveAllTokens) {
610+
lastMatch = true;
611+
if (sizePlus1++ == max) {
612+
i = len;
613+
lastMatch = false;
614+
}
615+
list.add(str.substring(start, i));
616+
match = false;
617+
}
618+
start = ++i;
619+
continue;
620+
}
621+
lastMatch = false;
622+
match = true;
623+
i++;
624+
}
625+
} else if (separatorChars.length() == 1) {
626+
// Optimise 1 character case
627+
final char sep = separatorChars.charAt(0);
628+
while (i < len) {
629+
if (str.charAt(i) == sep) {
630+
if (match || preserveAllTokens) {
631+
lastMatch = true;
632+
if (sizePlus1++ == max) {
633+
i = len;
634+
lastMatch = false;
635+
}
636+
list.add(str.substring(start, i));
637+
match = false;
638+
}
639+
start = ++i;
640+
continue;
641+
}
642+
lastMatch = false;
643+
match = true;
644+
i++;
645+
}
646+
} else {
647+
// standard case
648+
while (i < len) {
649+
if (separatorChars.indexOf(str.charAt(i)) >= 0) {
650+
if (match || preserveAllTokens) {
651+
lastMatch = true;
652+
if (sizePlus1++ == max) {
653+
i = len;
654+
lastMatch = false;
655+
}
656+
list.add(str.substring(start, i));
657+
match = false;
658+
}
659+
start = ++i;
660+
continue;
661+
}
662+
lastMatch = false;
663+
match = true;
664+
i++;
665+
}
666+
}
667+
if (match || preserveAllTokens && lastMatch) {
668+
list.add(str.substring(start, i));
669+
}
670+
return list.toArray(EMPTY_STRING_ARRAY);
671+
}
672+
574673
}

polaris-plugins/polaris-plugins-connector/connector-common/src/main/java/com/tencent/polaris/plugins/connector/common/constant/ConsulConstant.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@
2424
*/
2525
public interface ConsulConstant {
2626

27+
String NAMESPACE_TYPE_KEY = "nsType";
28+
29+
String NAMESPACE_TYPE_DEFAULT = "DEF";
30+
31+
String NAMESPACE_TYPE_DEFAULT_AND_GLOBAL = "DEF_AND_GLOBAL";
32+
2733
interface MetadataMapKey {
2834

2935
String NAMESPACE_KEY = "NAMESPACE_KEY";

polaris-plugins/polaris-plugins-connector/connector-consul/src/main/java/com/tencent/polaris/plugins/connector/consul/ConsulAPIConnector.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import com.tencent.polaris.logging.LoggerFactory;
5050
import com.tencent.polaris.plugins.connector.common.DestroyableServerConnector;
5151
import com.tencent.polaris.plugins.connector.common.ServiceUpdateTask;
52+
import com.tencent.polaris.plugins.connector.common.constant.ConsulConstant;
5253
import com.tencent.polaris.plugins.connector.consul.service.ConsulService;
5354
import com.tencent.polaris.plugins.connector.consul.service.InstanceService;
5455
import com.tencent.polaris.plugins.connector.consul.service.ServiceService;
@@ -218,7 +219,7 @@ private void initActually(InitContext ctx, ServerConnectorConfig connectorConfig
218219
}
219220
// in gateway mode, namespace type is empty string
220221
if (!ClassUtils.isClassPresent("org.springframework.cloud.gateway.filter.GlobalFilter")) {
221-
consulContext.setNamespaceType("DEF_AND_GLOBAL");
222+
consulContext.setNamespaceType(ConsulConstant.NAMESPACE_TYPE_DEFAULT_AND_GLOBAL);
222223
}
223224
if (metadata.containsKey(TAGS_KEY) && StringUtils.isNotBlank(metadata.get(TAGS_KEY))) {
224225
try {

polaris-plugins/polaris-plugins-connector/connector-consul/src/main/java/com/tencent/polaris/plugins/connector/consul/service/InstanceService.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@
4141
import com.tencent.polaris.api.utils.TimeUtils;
4242
import com.tencent.polaris.logging.LoggerFactory;
4343
import com.tencent.polaris.metadata.core.constant.TsfMetadataConstants;
44+
import com.tencent.polaris.metadata.core.manager.CalleeMetadataContainerGroup;
4445
import com.tencent.polaris.plugins.connector.common.ServiceUpdateTask;
46+
import com.tencent.polaris.plugins.connector.common.constant.ConsulConstant;
4547
import com.tencent.polaris.plugins.connector.consul.ConsulContext;
4648
import com.tencent.polaris.specification.api.v1.model.ModelProto;
4749
import com.tencent.polaris.specification.api.v1.service.manage.ResponseProto;
@@ -86,14 +88,18 @@ public void sendRequest(ServiceUpdateTask serviceUpdateTask) {
8688
UrlParameters tokenParam = StringUtils.isNotBlank(token) ? new SingleUrlParameters("token", token) : null;
8789
UrlParameters tagParams = StringUtils.isNotBlank(tag) ? new SingleUrlParameters("tag", tag) : null;
8890
UrlParameters passingParams = onlyPassing ? new SingleUrlParameters("passing") : null;
89-
UrlParameters nsTypeParam = StringUtils.isNotBlank(consulContext.getNamespaceType()) ? new SingleUrlParameters("nsType", consulContext.getNamespaceType()) : null;;
91+
String nsType = CalleeMetadataContainerGroup.getStaticApplicationMetadataContainer().getRawMetadataStringValue(ConsulConstant.NAMESPACE_TYPE_KEY);
92+
if (StringUtils.isBlank(nsType)) {
93+
nsType = consulContext.getNamespaceType();
94+
}
95+
UrlParameters nsTypeParam = StringUtils.isNotBlank(nsType) ? new SingleUrlParameters(ConsulConstant.NAMESPACE_TYPE_KEY, nsType) : null;;
9096
UrlParameters namespaceParameter = StringUtils.isNotBlank(namespace) ? new SingleUrlParameters("nid", namespace) : null;;
9197
Long currentIndex = getServersConsulIndex(serviceId);
9298
// in tsf consul, changes in instance status may not alter the index, requiring updates each time.
9399
int code = ServerCodes.EXECUTE_SUCCESS;
94100
QueryParams queryParams = new QueryParams(consulContext.getWaitTime(), currentIndex);
95101
try {
96-
LOG.debug("Begin get service instances of :{}/{} sync", namespace, serviceId);
102+
LOG.debug("Begin get service instances of :{}/{} sync, nsType:{}", namespace, serviceId, nsType);
97103
HttpResponse rawResponse = consulRawClient.makeGetRequest("/v1/health/service/" + serviceId, tagParams,
98104
passingParams, tokenParam, nsTypeParam, namespaceParameter, queryParams);
99105
if (rawResponse != null) {

0 commit comments

Comments
 (0)