Skip to content

Commit 45910ef

Browse files
authored
[SCB-2798]when using multiple registries instance may not get refresh… (#3836)
1 parent 4a7efbf commit 45910ef

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/api/registry/MicroserviceInstances.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,15 @@
1717

1818
package org.apache.servicecomb.registry.api.registry;
1919

20+
import java.nio.charset.StandardCharsets;
21+
22+
import javax.crypto.Mac;
23+
24+
import org.apache.commons.codec.binary.Base64;
25+
import org.apache.commons.codec.digest.HmacAlgorithms;
26+
import org.apache.commons.codec.digest.HmacUtils;
27+
import org.apache.commons.lang3.StringUtils;
28+
2029
public class MicroserviceInstances {
2130
private boolean microserviceNotExist;
2231

@@ -71,8 +80,16 @@ public void mergeMicroserviceInstances(MicroserviceInstances other) {
7180

7281
private void mergeRevision(MicroserviceInstances other) {
7382
if (!other.isMicroserviceNotExist() && other.needRefresh) {
74-
this.revision = other.getRevision();
83+
Mac mac = HmacUtils.getInitializedMac(HmacAlgorithms.HMAC_SHA_1, stringToBytes(this.revision));
84+
this.revision = Base64.encodeBase64String(mac.doFinal(stringToBytes(other.revision)));
85+
}
86+
}
87+
88+
private byte[] stringToBytes(String input) {
89+
if (StringUtils.isEmpty(input)) {
90+
input = "@";
7591
}
92+
return input.getBytes(StandardCharsets.UTF_8);
7693
}
7794

7895
private void mergeMicroserviceNotExist(boolean microserviceNotExist) {

service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/diagnosis/instance/TestInstanceCacheCheckerMock.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,8 @@ MicroserviceInstances findServiceInstances(String appId, String serviceName,
197197
instanceCacheResult.setMicroserviceName(microserviceName);
198198
instanceCacheResult.setStatus(Status.UNKNOWN);
199199
instanceCacheResult.setPulledInstances(new ArrayList<>());
200-
instanceCacheResult.setDetail(
201-
"revision is different, will be synchronized in next pull. local revision=first, remote revision=second");
200+
instanceCacheResult.setDetail("revision is different, will be synchronized in next pull. "
201+
+ "local revision=Fv/f6YTFogBi3MiMIkVuh2DZLvU=, remote revision=second");
202202
expectedSummary.getProducers().add(instanceCacheResult);
203203
expectedSummary.setStatus(Status.UNKNOWN);
204204

0 commit comments

Comments
 (0)