diff --git a/CHANGELOG.md b/CHANGELOG.md index b3a0564e4..ae8726b84 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,3 +11,4 @@ - [feat:support instance detect.](https://github.com/Tencent/spring-cloud-tencent/pull/1617) - [fix: fix loadbalancer metadata type.](https://github.com/Tencent/spring-cloud-tencent/pull/1625) - [feat:support polaris server nearby backup LB.](https://github.com/Tencent/spring-cloud-tencent/pull/1627) +- fix:fix ipv6 instance not found bug. diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/spi/impl/DefaultInstanceMetadataProvider.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/spi/impl/DefaultInstanceMetadataProvider.java index 268359ccd..2ae78b835 100644 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/spi/impl/DefaultInstanceMetadataProvider.java +++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/spi/impl/DefaultInstanceMetadataProvider.java @@ -25,6 +25,9 @@ import java.util.Set; import com.tencent.cloud.common.spi.InstanceMetadataProvider; import com.tencent.cloud.common.util.ApplicationContextAwareUtils; +import com.tencent.cloud.common.util.inet.PolarisInetUtils; +import com.tencent.polaris.api.utils.StringUtils; +import com.tencent.polaris.metadata.core.constant.MetadataConstants; import static com.tencent.cloud.common.constant.MetadataConstant.DefaultMetadata.DEFAULT_METADATA_SOURCE_SERVICE_NAME; import static com.tencent.cloud.common.constant.MetadataConstant.DefaultMetadata.DEFAULT_METADATA_SOURCE_SERVICE_NAMESPACE; @@ -48,10 +51,18 @@ public class DefaultInstanceMetadataProvider implements InstanceMetadataProvider @Override public Map getMetadata() { - return new HashMap() {{ - put(DEFAULT_METADATA_SOURCE_SERVICE_NAMESPACE, LOCAL_NAMESPACE); - put(DEFAULT_METADATA_SOURCE_SERVICE_NAME, LOCAL_SERVICE); - }}; + Map metadata = new HashMap<>(); + metadata.put(DEFAULT_METADATA_SOURCE_SERVICE_NAMESPACE, LOCAL_NAMESPACE); + metadata.put(DEFAULT_METADATA_SOURCE_SERVICE_NAME, LOCAL_SERVICE); + String ipv4Address = PolarisInetUtils.getIpString(false); + if (StringUtils.isNotBlank(ipv4Address)) { + metadata.put(MetadataConstants.ADDRESS_IPV4, ipv4Address); + } + String ipv6Address = PolarisInetUtils.getIpString(true); + if (StringUtils.isNotBlank(ipv6Address)) { + metadata.put(MetadataConstants.ADDRESS_IPV6, ipv6Address); + } + return metadata; } @Override diff --git a/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/metadata/StaticMetadataManagerTest.java b/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/metadata/StaticMetadataManagerTest.java index 28a3bef15..6719038b6 100644 --- a/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/metadata/StaticMetadataManagerTest.java +++ b/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/metadata/StaticMetadataManagerTest.java @@ -57,6 +57,7 @@ import static org.mockito.Mockito.when; @ExtendWith({MockitoExtension.class, SystemStubsExtension.class}) public class StaticMetadataManagerTest { + private static MockedStatic mockedApplicationContextAwareUtils; /** * EnvironmentVariablesRule. */ @@ -65,8 +66,6 @@ public class StaticMetadataManagerTest { @Mock private MetadataLocalProperties metadataLocalProperties; - private static MockedStatic mockedApplicationContextAwareUtils; - @BeforeAll static void beforeAll() { mockedApplicationContextAwareUtils = Mockito.mockStatic(ApplicationContextAwareUtils.class); @@ -137,7 +136,7 @@ public class StaticMetadataManagerTest { Arrays.asList(new MockedMetadataProvider(), new DefaultInstanceMetadataProvider(null))); Map metadata = metadataManager.getAllCustomMetadata(); - assertThat(metadata.size()).isEqualTo(5); + assertThat(metadata.size()).isGreaterThanOrEqualTo(5); assertThat(metadata.get("k1")).isEqualTo("v1"); assertThat(metadata.get("k2")).isEqualTo("v22"); assertThat(metadata.get("k3")).isEqualTo("v33"); @@ -182,7 +181,7 @@ public class StaticMetadataManagerTest { Arrays.asList(new MockedMetadataProvider(), new DefaultInstanceMetadataProvider(null))); Map metadata = metadataManager.getMergedStaticMetadata(); - assertThat(metadata.size()).isEqualTo(8); + assertThat(metadata.size()).isGreaterThanOrEqualTo(8); assertThat(metadata.get("k1")).isEqualTo("v1"); assertThat(metadata.get("k2")).isEqualTo("v22"); assertThat(metadata.get("k3")).isEqualTo("v33");