Fix NPE problem when update instance metadata with null value. (#13628)
Code Coverage / ci (17, ubuntu-latest) (push) Has been cancelled Details
PUSH-CI / Build dist tar (push) Has been cancelled Details
PUSH-CI / Docker images (centos, 17) (push) Has been cancelled Details
PUSH-CI / Deploy nacos (push) Has been cancelled Details
PUSH-CI / Java e2e Test (push) Has been cancelled Details
PUSH-CI / GO E2E Test (push) Has been cancelled Details
PUSH-CI / Cpp E2E Test (push) Has been cancelled Details
PUSH-CI / Csharp E2E Test (push) Has been cancelled Details
PUSH-CI / Nodejs E2E Test (push) Has been cancelled Details
PUSH-CI / Python E2E Test (push) Has been cancelled Details
PUSH-CI / Clean (push) Has been cancelled Details

This commit is contained in:
杨翊 SionYang 2025-07-22 19:10:21 +08:00 committed by GitHub
parent 00e579e765
commit c4b7ce881f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 18 additions and 1 deletions

View File

@ -62,6 +62,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* Instance service.
@ -144,10 +145,15 @@ public class InstanceOperatorClientImpl implements InstanceOperator {
InstanceMetadata result = new InstanceMetadata();
result.setEnabled(instance.isEnabled());
result.setWeight(instance.getWeight());
result.getExtendData().putAll(instance.getMetadata());
result.getExtendData().putAll(filterNullValue(instance.getMetadata()));
return result;
}
private Map<String, String> filterNullValue(Map<String, String> metadata) {
return metadata.entrySet().stream().filter(entry -> entry.getValue() != null)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
}
@Override
public void patchInstance(String namespaceId, String groupName, String serviceName, InstancePatchObject patchObject)
throws NacosException {

View File

@ -164,6 +164,17 @@ class InstanceOperatorClientImplTest {
Mockito.verify(metadataOperateService).updateInstanceMetadata(Mockito.any(), Mockito.any(), Mockito.any());
}
@Test
void testUpdateInstanceWithNullValue() throws NacosException {
Instance instance = new Instance();
instance.setServiceName("C");
instance.getMetadata().put("nullValue", null);
instanceOperatorClient.updateInstance("A", Constants.DEFAULT_GROUP, "C", instance);
Mockito.verify(metadataOperateService).updateInstanceMetadata(Mockito.any(), Mockito.any(),
Mockito.argThat(argument -> argument.getExtendData().isEmpty()));
}
@Test
void testPatchInstance() throws NacosException {
Instance instance = new Instance();