From bc4d4d3c8d9bfb8fabddd2de23b2267f89a61002 Mon Sep 17 00:00:00 2001 From: nkorange Date: Tue, 22 Jan 2019 14:33:58 +0800 Subject: [PATCH] #502 Partition Protocol develop finished --- .../transport}/FastJsonSerializer.java | 2 +- .../transport}/Serializer.java | 4 +- .../naming/consistency/DataListener.java | 3 +- .../EphemeralConsistencyService.java | 10 ++ .../ephemeral/partition/DataStore.java | 14 +-- .../ephemeral/partition/DataSyncer.java | 8 +- .../PartitionConsistencyServiceImpl.java | 91 ++++++++++++++++--- .../consistency/persistent/raft/RaftCore.java | 5 +- .../controllers/PartitionController.java | 24 ++++- .../nacos/naming/core/ServiceManager.java | 4 +- .../naming/core/VirtualClusterDomain.java | 2 +- .../alibaba/nacos/naming/misc/HttpClient.java | 23 +++++ .../nacos/naming/misc/NamingProxy.java | 70 +++++++++----- .../nacos/naming/misc/SwitchDomain.java | 2 +- 14 files changed, 203 insertions(+), 59 deletions(-) rename naming/src/main/java/com/alibaba/nacos/naming/{consistency/ephemeral/partition => cluster/transport}/FastJsonSerializer.java (96%) rename naming/src/main/java/com/alibaba/nacos/naming/{consistency/ephemeral/partition => cluster/transport}/Serializer.java (92%) diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/partition/FastJsonSerializer.java b/naming/src/main/java/com/alibaba/nacos/naming/cluster/transport/FastJsonSerializer.java similarity index 96% rename from naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/partition/FastJsonSerializer.java rename to naming/src/main/java/com/alibaba/nacos/naming/cluster/transport/FastJsonSerializer.java index 08b2d9dac9c..b0be0457f17 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/partition/FastJsonSerializer.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/cluster/transport/FastJsonSerializer.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.nacos.naming.consistency.ephemeral.partition; +package com.alibaba.nacos.naming.cluster.transport; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/partition/Serializer.java b/naming/src/main/java/com/alibaba/nacos/naming/cluster/transport/Serializer.java similarity index 92% rename from naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/partition/Serializer.java rename to naming/src/main/java/com/alibaba/nacos/naming/cluster/transport/Serializer.java index 5aca8b4c7bd..d2475c2b056 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/partition/Serializer.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/cluster/transport/Serializer.java @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.nacos.naming.consistency.ephemeral.partition; +package com.alibaba.nacos.naming.cluster.transport; import java.util.Map; /** - * Serializer for data + * Serializer specially for large map of data * * @author nkorange * @since 1.0.0 diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/DataListener.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/DataListener.java index 472b01f9f74..30b4b49ceac 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/DataListener.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/DataListener.java @@ -51,8 +51,7 @@ public interface DataListener { * Action to do if data of target key has been removed * * @param key target key - * @param value data of the key * @throws Exception */ - void onDelete(String key, Object value) throws Exception; + void onDelete(String key) throws Exception; } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/EphemeralConsistencyService.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/EphemeralConsistencyService.java index 40ecfee84ab..74c1332a57e 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/EphemeralConsistencyService.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/EphemeralConsistencyService.java @@ -18,6 +18,16 @@ import com.alibaba.nacos.naming.consistency.ConsistencyService; /** + * A type of consistency for ephemeral data. + *

+ * This kind of consistency is not required to store data on disk or database, because the + * ephemeral data always keeps a session with server and as long as the session still lives + * the ephemeral data won't be lost. + *

+ * What is required is that writing should always be successful even if network partition + * happens. And when the network recovers, data of each partition is merged into one set, + * so the cluster resumes to a consistent status. + * * @author nkorange * @since 1.0.0 */ diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/partition/DataStore.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/partition/DataStore.java index 355d42fd859..8af63c7fdeb 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/partition/DataStore.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/partition/DataStore.java @@ -15,14 +15,10 @@ */ package com.alibaba.nacos.naming.consistency.ephemeral.partition; -import com.alibaba.nacos.api.naming.pojo.Instance; import com.alibaba.nacos.naming.consistency.Datum; import org.springframework.stereotype.Component; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; /** @@ -40,8 +36,8 @@ public void put(String key, Datum value) { dataMap.put(key, value); } - public void remove(String key) { - dataMap.remove(key); + public Datum remove(String key) { + return dataMap.remove(key); } public Set keys() { @@ -52,6 +48,10 @@ public Datum get(String key) { return dataMap.get(key); } + public boolean contains(String key) { + return dataMap.containsKey(key); + } + public Map batchGet(List keys) { Map map = new HashMap<>(); for (String key : keys) { diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/partition/DataSyncer.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/partition/DataSyncer.java index 49d8491f0aa..b91d2bf0e8d 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/partition/DataSyncer.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/partition/DataSyncer.java @@ -15,10 +15,10 @@ */ package com.alibaba.nacos.naming.consistency.ephemeral.partition; -import com.alibaba.nacos.api.naming.pojo.Instance; import com.alibaba.nacos.naming.cluster.ServerListManager; import com.alibaba.nacos.naming.cluster.members.Member; import com.alibaba.nacos.naming.cluster.members.MemberChangeListener; +import com.alibaba.nacos.naming.cluster.transport.Serializer; import com.alibaba.nacos.naming.consistency.Datum; import com.alibaba.nacos.naming.core.DistroMapper; import com.alibaba.nacos.naming.misc.GlobalExecutor; @@ -132,9 +132,9 @@ public void run() { keyTimestamps.put(key, dataStore.get(key).timestamp.get()); } - // TODO -// for (Member member : ) - + for (Member member : servers) { + NamingProxy.syncTimestamps(keyTimestamps, member.getKey()); + } } } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/partition/PartitionConsistencyServiceImpl.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/partition/PartitionConsistencyServiceImpl.java index 8daaf3d6026..2b37fb30e5f 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/partition/PartitionConsistencyServiceImpl.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/partition/PartitionConsistencyServiceImpl.java @@ -17,12 +17,14 @@ import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.naming.pojo.Instance; +import com.alibaba.nacos.naming.cluster.transport.Serializer; import com.alibaba.nacos.naming.consistency.DataListener; import com.alibaba.nacos.naming.consistency.Datum; import com.alibaba.nacos.naming.consistency.KeyBuilder; import com.alibaba.nacos.naming.consistency.ephemeral.EphemeralConsistencyService; import com.alibaba.nacos.naming.core.DistroMapper; import com.alibaba.nacos.naming.misc.Loggers; +import com.alibaba.nacos.naming.misc.NamingProxy; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -36,8 +38,11 @@ *

* Use a partition algorithm to divide data into many blocks. Each Nacos server node takes * responsibility for exactly one block of data. Each block of data is generated, removed - * and synchronized by its associated server. So every Nacos only handles writings for a - * subset of the total service data, and at mean time stores complete service data. + * and synchronized by its responsible server. So every Nacos server only handles writings + * for a subset of the total service data. + *

+ * At mean time every Nacos server receives data sync of other Nacos server, so every Nacos + * server will eventually have a complete set of data. * * @author nkorange * @since 1.0.0 @@ -54,25 +59,20 @@ public class PartitionConsistencyServiceImpl implements EphemeralConsistencyServ @Autowired private TaskDispatcher taskDispatcher; + @Autowired + private Serializer serializer; + private volatile Map> listeners = new ConcurrentHashMap<>(); @Override public void put(String key, Object value) throws NacosException { - if (KeyBuilder.matchEphemeralInstanceListKey(key)) { - List instances = (List) value; - Datum> datum = new Datum<>(); - datum.value = instances; - datum.key = key; - datum.timestamp.set(System.currentTimeMillis()); - dataStore.put(key, datum); - } - taskDispatcher.addTask(key); onPut(key, value); + taskDispatcher.addTask(key); } @Override public void remove(String key) throws NacosException { - dataStore.remove(key); + onRemove(key); } @Override @@ -81,6 +81,16 @@ public Object get(String key) throws NacosException { } public void onPut(String key, Object value) { + + if (KeyBuilder.matchEphemeralInstanceListKey(key)) { + List instances = (List) value; + Datum> datum = new Datum<>(); + datum.value = instances; + datum.key = key; + datum.timestamp.set(System.currentTimeMillis()); + dataStore.put(key, datum); + } + if (!listeners.containsKey(key)) { return; } @@ -93,6 +103,63 @@ public void onPut(String key, Object value) { } } + public void onRemove(String key) { + + dataStore.remove(key); + + if (!listeners.containsKey(key)) { + return; + } + for (DataListener listener : listeners.get(key)) { + try { + listener.onDelete(key); + } catch (Exception e) { + Loggers.EPHEMERAL.error("notify " + listener + ", key:" + key + " failed.", e); + } + } + } + + public void onReceiveTimestamps(Map timestamps, String server) { + + List toUpdateKeys = new ArrayList<>(); + List toRemoveKeys = new ArrayList<>(); + for (Map.Entry entry : timestamps.entrySet()) { + if (isResponsible(entry.getKey())) { + // this key should not be sent from remote server: + Loggers.EPHEMERAL.error("receive timestamp of " + entry.getKey() + " from " + server); + continue; + } + if (!dataStore.contains(entry.getKey()) || dataStore.get(entry.getKey()).timestamp.get() < entry.getValue()) { + toUpdateKeys.add(entry.getKey()); + } + } + + for (String key : dataStore.keys()) { + if (!timestamps.containsKey(key)) { + toRemoveKeys.add(key); + } + } + + Loggers.EPHEMERAL.info("to remove keys:" + toRemoveKeys); + + for (String key : toRemoveKeys) { + onRemove(key); + } + + try { + byte[] result = NamingProxy.getData(toUpdateKeys, server); + if (result.length > 0) { + Map datumMap = serializer.deserialize(result, Datum.class); + for (Map.Entry entry : datumMap.entrySet()) { + dataStore.put(entry.getKey(), entry.getValue()); + } + } + } catch (Exception e) { + Loggers.EPHEMERAL.error("get data from " + server + " failed!", e); + } + + } + @Override public void listen(String key, DataListener listener) throws NacosException { if (!listeners.containsKey(key)) { diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftCore.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftCore.java index 9498efa7fd8..b0b4b103140 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftCore.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftCore.java @@ -752,7 +752,6 @@ public Integer onCompleted(Response response) throws Exception { } - return local; } @@ -917,7 +916,7 @@ public void run() { } if (action == ApplyAction.DELETE) { - listener.onDelete(datum.key, datum.value); + listener.onDelete(datum.key); } } catch (Throwable e) { Loggers.RAFT.error("[NACOS-RAFT] error while notifying listener of key: {} {}", datum.key, e); @@ -944,7 +943,7 @@ public void run() { } if (action == ApplyAction.DELETE) { - listener.onDelete(datum.key, datum.value); + listener.onDelete(datum.key); continue; } } catch (Throwable e) { diff --git a/naming/src/main/java/com/alibaba/nacos/naming/controllers/PartitionController.java b/naming/src/main/java/com/alibaba/nacos/naming/controllers/PartitionController.java index b46005963e4..f3de0d8284c 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/controllers/PartitionController.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/controllers/PartitionController.java @@ -2,9 +2,11 @@ import com.alibaba.nacos.api.naming.pojo.Instance; import com.alibaba.nacos.common.util.IoUtils; +import com.alibaba.nacos.core.utils.WebUtils; +import com.alibaba.nacos.naming.consistency.Datum; import com.alibaba.nacos.naming.consistency.KeyBuilder; import com.alibaba.nacos.naming.consistency.ephemeral.partition.PartitionConsistencyServiceImpl; -import com.alibaba.nacos.naming.consistency.ephemeral.partition.Serializer; +import com.alibaba.nacos.naming.cluster.transport.Serializer; import com.alibaba.nacos.naming.misc.UtilsAndCommons; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; @@ -12,6 +14,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -43,4 +46,23 @@ public String onSync(HttpServletRequest request, HttpServletResponse response) t } return "ok"; } + + @RequestMapping("/syncTimestamps") + public String syncTimestamps(HttpServletRequest request, HttpServletResponse response) throws Exception { + String source = WebUtils.required(request, "source"); + byte[] data = IoUtils.tryDecompress(request.getInputStream()); + Map dataMap = serializer.deserialize(data, Long.class); + consistencyService.onReceiveTimestamps(dataMap, source); + return "ok"; + } + + @RequestMapping("/get") + public void get(HttpServletRequest request, HttpServletResponse response) throws Exception { + String keys = WebUtils.required(request, "keys"); + Map datumMap = new HashMap<>(); + for (String key : keys.split(",")) { + datumMap.put(key, (Datum) consistencyService.get(key)); + } + response.getWriter().write(new String(serializer.serialize(datumMap), "UTF-8")); + } } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/ServiceManager.java b/naming/src/main/java/com/alibaba/nacos/naming/core/ServiceManager.java index a2bbbd2d772..66e94334477 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/ServiceManager.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/ServiceManager.java @@ -178,12 +178,12 @@ public void onChange(String key, Object value) throws Exception { } @Override - public void onDelete(String key, Object value) throws Exception { + public void onDelete(String key) throws Exception { String domKey = StringUtils.removeStart(key, UtilsAndCommons.DOMAINS_DATA_ID_PRE); String namespace = domKey.split(UtilsAndCommons.SERVICE_GROUP_CONNECTOR)[0]; String name = domKey.split(UtilsAndCommons.SERVICE_GROUP_CONNECTOR)[1]; VirtualClusterDomain dom = chooseDomMap(namespace).remove(name); - Loggers.RAFT.info("[RAFT-NOTIFIER] datum is deleted, key: {}, value: {}", key, value); + Loggers.RAFT.info("[RAFT-NOTIFIER] datum is deleted, key: {}", key); if (dom != null) { dom.destroy(); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/VirtualClusterDomain.java b/naming/src/main/java/com/alibaba/nacos/naming/core/VirtualClusterDomain.java index 357a8c80e85..7842703dbb4 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/VirtualClusterDomain.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/VirtualClusterDomain.java @@ -197,7 +197,7 @@ public void onChange(String key, Object value) throws Exception { } @Override - public void onDelete(String key, Object value) throws Exception { + public void onDelete(String key) throws Exception { // ignore } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/misc/HttpClient.java b/naming/src/main/java/com/alibaba/nacos/naming/misc/HttpClient.java index ef2575c8fcb..7ba15783118 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/misc/HttpClient.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/misc/HttpClient.java @@ -280,6 +280,29 @@ public static HttpResult httpPost(String url, List headers, Map headers, byte[] content, AsyncCompletionHandler handler) throws Exception { + AsyncHttpClient.BoundRequestBuilder builder = asyncHttpClient.preparePut(url); + + if (!headers.isEmpty()) { + for (String headerKey : headers.keySet()) { + builder.setHeader(headerKey, headers.get(headerKey)); + } + } + + builder.setBody(content); + + builder.setHeader("Content-Type", "application/json; charset=UTF-8"); + builder.setHeader("Accept-Charset", "UTF-8"); + builder.setHeader("Accept-Encoding", "gzip"); + builder.setHeader("Content-Encoding", "gzip"); + + if (handler != null) { + builder.execute(handler); + } else { + builder.execute(); + } + } + public static HttpResult httpPutLarge(String url, Map headers, byte[] content) { try { HttpClientBuilder builder = HttpClients.custom(); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/misc/NamingProxy.java b/naming/src/main/java/com/alibaba/nacos/naming/misc/NamingProxy.java index 38a05a32d52..43c4c8b92df 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/misc/NamingProxy.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/misc/NamingProxy.java @@ -17,25 +17,26 @@ import com.alibaba.fastjson.JSON; import com.alibaba.nacos.naming.boot.RunningConfig; +import com.ning.http.client.AsyncCompletionHandler; +import com.ning.http.client.Response; import org.apache.commons.lang3.StringUtils; import java.io.IOException; import java.net.HttpURLConnection; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @author nacos */ public class NamingProxy { - private static final String DATA_SYNC_URL = UtilsAndCommons.NACOS_NAMING_CONTEXT + "/partition/onSync"; + private static final String DATA_ON_SYNC_URL = UtilsAndCommons.NACOS_NAMING_CONTEXT + "/partition/onSync"; + + private static final String DATA_GET_URL = UtilsAndCommons.NACOS_NAMING_CONTEXT + "/partition/get"; private static final String TIMESTAMP_SYNC_URL = UtilsAndCommons.NACOS_NAMING_CONTEXT + "/partition/syncTimestamps"; - public static boolean syncTimestamps(Map timestamps, String server) { + public static void syncTimestamps(Map timestamps, String server) { try { Map headers = new HashMap<>(128); @@ -43,25 +44,48 @@ public static boolean syncTimestamps(Map timestamps, String server headers.put("Client-Version", UtilsAndCommons.SERVER_VERSION); headers.put("Connection", "Keep-Alive"); - HttpClient.HttpResult result = HttpClient.httpPutLarge("http://" + server + RunningConfig.getContextPath() - + UtilsAndCommons.NACOS_NAMING_CONTEXT + TIMESTAMP_SYNC_URL, headers, JSON.toJSONBytes(timestamps)); + HttpClient.asyncHttpPutLarge("http://" + server + RunningConfig.getContextPath() + + UtilsAndCommons.NACOS_NAMING_CONTEXT + TIMESTAMP_SYNC_URL + "?source=" + NetUtils.localServer(), + headers, JSON.toJSONBytes(timestamps), + new AsyncCompletionHandler() { + @Override + public Object onCompleted(Response response) throws Exception { + if (HttpURLConnection.HTTP_OK != response.getStatusCode()) { + Loggers.EPHEMERAL.error("failed to req API: {}, code: {}, msg: {}", + "http://" + server + RunningConfig.getContextPath() + + UtilsAndCommons.NACOS_NAMING_CONTEXT + TIMESTAMP_SYNC_URL, + response.getStatusCode(), response.getResponseBody()); + } + return null; + } + + @Override + public void onThrowable(Throwable t) { + Loggers.EPHEMERAL.error("failed to req API:" + "http://" + server + + RunningConfig.getContextPath() + + UtilsAndCommons.NACOS_NAMING_CONTEXT + TIMESTAMP_SYNC_URL, t); + } + }); + } catch (Exception e) { + Loggers.EPHEMERAL.warn("NamingProxy", e); + } + } - if (HttpURLConnection.HTTP_OK == result.code) { - return true; - } + public static byte[] getData(List keys, String server) throws Exception { - if (HttpURLConnection.HTTP_NOT_MODIFIED == result.code) { - return true; - } + Map params = new HashMap<>(); + params.put("keys", StringUtils.join(keys, ",")); + HttpClient.HttpResult result = HttpClient.httpGet("http://" + server + RunningConfig.getContextPath() + + UtilsAndCommons.NACOS_NAMING_CONTEXT + DATA_GET_URL, new ArrayList(), params); - throw new IOException("failed to req API:" + "http://" + server - + RunningConfig.getContextPath() - + UtilsAndCommons.NACOS_NAMING_CONTEXT + TIMESTAMP_SYNC_URL + ". code:" - + result.code + " msg: " + result.content); - } catch (Exception e) { - Loggers.SRV_LOG.warn("NamingProxy", e); + if (HttpURLConnection.HTTP_OK == result.code) { + return result.content.getBytes(); } - return false; + + throw new IOException("failed to req API: " + "http://" + server + + RunningConfig.getContextPath() + + UtilsAndCommons.NACOS_NAMING_CONTEXT + DATA_GET_URL + ". code: " + + result.code + " msg: " + result.content); } public static boolean syncData(byte[] data, String curServer) throws Exception { @@ -74,7 +98,7 @@ public static boolean syncData(byte[] data, String curServer) throws Exception { headers.put("Content-Encoding", "gzip"); HttpClient.HttpResult result = HttpClient.httpPutLarge("http://" + curServer + RunningConfig.getContextPath() - + UtilsAndCommons.NACOS_NAMING_CONTEXT + DATA_SYNC_URL, headers, data); + + UtilsAndCommons.NACOS_NAMING_CONTEXT + DATA_ON_SYNC_URL, headers, data); if (HttpURLConnection.HTTP_OK == result.code) { return true; @@ -86,7 +110,7 @@ public static boolean syncData(byte[] data, String curServer) throws Exception { throw new IOException("failed to req API:" + "http://" + curServer + RunningConfig.getContextPath() - + UtilsAndCommons.NACOS_NAMING_CONTEXT + DATA_SYNC_URL + ". code:" + + UtilsAndCommons.NACOS_NAMING_CONTEXT + DATA_ON_SYNC_URL + ". code:" + result.code + " msg: " + result.content); } catch (Exception e) { Loggers.SRV_LOG.warn("NamingProxy", e); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/misc/SwitchDomain.java b/naming/src/main/java/com/alibaba/nacos/naming/misc/SwitchDomain.java index ac3f65b3ef2..95cb07d4c3e 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/misc/SwitchDomain.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/misc/SwitchDomain.java @@ -250,7 +250,7 @@ public void onChange(String key, Object value) throws Exception { } @Override - public void onDelete(String key, Object value) throws Exception { + public void onDelete(String key) throws Exception { }