Skip to content

Commit

Permalink
issues:调用修改实例接口,未传的参数值会被清空
Browse files Browse the repository at this point in the history
  • Loading branch information
sheiy committed Oct 25, 2019
1 parent 4d68565 commit c8b88e6
Show file tree
Hide file tree
Showing 2 changed files with 107 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,6 @@
*/
package com.alibaba.nacos.naming.controllers;

import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
Expand All @@ -43,14 +34,17 @@
import com.alibaba.nacos.naming.push.DataSource;
import com.alibaba.nacos.naming.push.PushService;
import com.alibaba.nacos.naming.web.CanDistro;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.codehaus.jackson.util.VersionUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.net.InetSocketAddress;
import java.util.*;

/**
* Instance operation controller
*
Expand Down Expand Up @@ -139,6 +133,57 @@ public String update(HttpServletRequest request) throws Exception {
return "ok";
}

@CanDistro
@PatchMapping
public String patch(HttpServletRequest request) throws Exception {
String serviceName = WebUtils.required(request, CommonParams.SERVICE_NAME);
String namespaceId = WebUtils.optional(request, CommonParams.NAMESPACE_ID, Constants.DEFAULT_NAMESPACE_ID);
String ip = WebUtils.required(request, "ip");
String port = WebUtils.required(request, "port");
String cluster = WebUtils.optional(request, CommonParams.CLUSTER_NAME, StringUtils.EMPTY);
if (StringUtils.isBlank(cluster)) {
cluster = WebUtils.optional(request, "cluster", UtilsAndCommons.DEFAULT_CLUSTER_NAME);
}
Instance instance = serviceManager.getInstance(namespaceId, serviceName, cluster, ip, Integer.parseInt(port));

String metadata = WebUtils.optional(request, "metadata", StringUtils.EMPTY);
if (StringUtils.isNotBlank(metadata)) {
instance.setMetadata(UtilsAndCommons.parseMetadata(metadata));
}
String app = WebUtils.optional(request, "app", "DEFAULT");
instance.setApp(app);
instance.setLastBeat(System.currentTimeMillis());
instance.validate();
String weight = WebUtils.optional(request, "weight", StringUtils.EMPTY);
if (StringUtils.isNotBlank(weight)) {
instance.setWeight(Double.parseDouble(weight));
}
String healthy = WebUtils.optional(request, "healthy", StringUtils.EMPTY);
if (StringUtils.isNotBlank(healthy)) {
instance.setHealthy(BooleanUtils.toBoolean(healthy));
}
String enabledString = WebUtils.optional(request, "enabled", StringUtils.EMPTY);
if (StringUtils.isNotBlank(enabledString)) {
instance.setEnabled(BooleanUtils.toBoolean(enabledString));
}
String ephemeral = WebUtils.optional(request, "ephemeral", StringUtils.EMPTY);
if (StringUtils.isNotBlank(ephemeral)) {
instance.setEphemeral(BooleanUtils.toBoolean(ephemeral));
}

String agent = WebUtils.getUserAgent(request);

ClientInfo clientInfo = new ClientInfo(agent);

if (clientInfo.type == ClientInfo.ClientType.JAVA &&
clientInfo.version.compareTo(VersionUtil.parseVersion("1.0.0")) >= 0) {
serviceManager.updateInstance(namespaceId, serviceName, instance);
} else {
serviceManager.registerInstance(namespaceId, serviceName, instance);
}
return "ok";
}

@GetMapping("/list")
public JSONObject list(HttpServletRequest request) throws Exception {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -432,6 +432,58 @@ public void multipleTenant_group_putInstance() throws Exception {
Assert.assertEquals("8.0", json.getJSONArray("hosts").getJSONObject(0).getString("weight"));
}

/**
* @TCDescription : 多租户, 多group下,注册IP,patchInstance接口, 部分更新实例
* @TestStep :
* @ExpectResult :
*/
@Test
public void multipleTenant_group_patchInstance() throws Exception {
String serviceName = randomDomainName();

naming1.registerInstance(serviceName, "11.11.11.11", 80);
naming2.registerInstance(serviceName, TEST_GROUP_2,"22.22.22.22", 80);

TimeUnit.SECONDS.sleep(5L);

ResponseEntity<String> response = request("/nacos/v1/ns/instance",
Params.newParams()
.appendParam("serviceName", serviceName)
.appendParam("groupName", TEST_GROUP_2)
.appendParam("ip", "22.22.22.22")
.appendParam("port", "80")
.appendParam("namespaceId", "namespace-2")
.appendParam("weight", "8.0")
.done(),
String.class,
HttpMethod.PUT);
Assert.assertTrue(response.getStatusCode().is2xxSuccessful());

response = request("/nacos/v1/ns/instance",
Params.newParams()
.appendParam("serviceName", serviceName)
.appendParam("groupName", TEST_GROUP_2)
.appendParam("ip", "22.22.22.22")
.appendParam("port", "80")
.appendParam("namespaceId", "namespace-2")
.done(),
String.class,
HttpMethod.PATCH);
Assert.assertTrue(response.getStatusCode().is2xxSuccessful());

response = request("/nacos/v1/ns/instance/list",
Params.newParams()
.appendParam("serviceName", serviceName) //获取naming中的实例
.appendParam("namespaceId", "namespace-2")
.appendParam("groupName", TEST_GROUP_2)
.done(),
String.class);
Assert.assertTrue(response.getStatusCode().is2xxSuccessful());
JSONObject json = JSON.parseObject(response.getBody());
Assert.assertEquals(1, json.getJSONArray("hosts").size());
Assert.assertEquals("8.0", json.getJSONArray("hosts").getJSONObject(0).getString("weight"));
}

/**
* @TCDescription : 多租户注册IP,update一个没有的实例接口
* @TestStep :
Expand Down

0 comments on commit c8b88e6

Please sign in to comment.