From c82bccefd4513fef54417f6396ab26a94d64b26d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Fri, 11 Jan 2019 17:14:06 +0800 Subject: [PATCH 1/6] Optimize the code: fix url to null, NullPointerException, change private variable to camel mode. --- .../protocol/dubbo/CallbackServiceCodec.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java index aa5c02b4a90..443d335ece7 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java @@ -85,33 +85,33 @@ private static String exportOrunexportCallbackService(Channel channel, URL url, params.put(Constants.IS_SERVER_KEY, Boolean.FALSE.toString()); // mark it's a callback, for troubleshooting params.put(Constants.IS_CALLBACK_SERVICE, Boolean.TRUE.toString()); - String group = url.getParameter(Constants.GROUP_KEY); + String group = (url == null ? null : url.getParameter(Constants.GROUP_KEY)); if (group != null && group.length() > 0) { params.put(Constants.GROUP_KEY, group); } // add method, for verifying against method, automatic fallback (see dubbo protocol) params.put(Constants.METHODS_KEY, StringUtils.join(Wrapper.getWrapper(clazz).getDeclaredMethodNames(), ",")); - Map tmpmap = new HashMap(url.getParameters()); - tmpmap.putAll(params); - tmpmap.remove(Constants.VERSION_KEY);// doesn't need to distinguish version for callback - tmpmap.put(Constants.INTERFACE_KEY, clazz.getName()); - URL exporturl = new URL(DubboProtocol.NAME, channel.getLocalAddress().getAddress().getHostAddress(), channel.getLocalAddress().getPort(), clazz.getName() + "." + instid, tmpmap); + Map tmpMap = new HashMap(url.getParameters()); + tmpMap.putAll(params); + tmpMap.remove(Constants.VERSION_KEY);// doesn't need to distinguish version for callback + tmpMap.put(Constants.INTERFACE_KEY, clazz.getName()); + URL exportUrl = new URL(DubboProtocol.NAME, channel.getLocalAddress().getAddress().getHostAddress(), channel.getLocalAddress().getPort(), clazz.getName() + "." + instid, tmpMap); // no need to generate multiple exporters for different channel in the same JVM, cache key cannot collide. String cacheKey = getClientSideCallbackServiceCacheKey(instid); - String countkey = getClientSideCountKey(clazz.getName()); + String countKey = getClientSideCountKey(clazz.getName()); if (export) { // one channel can have multiple callback instances, no need to re-export for different instance. if (!channel.hasAttribute(cacheKey)) { if (!isInstancesOverLimit(channel, url, clazz.getName(), instid, false)) { - Invoker invoker = proxyFactory.getInvoker(inst, clazz, exporturl); + Invoker invoker = proxyFactory.getInvoker(inst, clazz, exportUrl); // should destroy resource? Exporter exporter = protocol.export(invoker); // this is used for tracing if instid has published service or not. channel.setAttribute(cacheKey, exporter); - logger.info("export a callback service :" + exporturl + ", on " + channel + ", url is: " + url); - increaseInstanceCount(channel, countkey); + logger.info("export a callback service :" + exportUrl + ", on " + channel + ", url is: " + url); + increaseInstanceCount(channel, countKey); } } } else { @@ -119,7 +119,7 @@ private static String exportOrunexportCallbackService(Channel channel, URL url, Exporter exporter = (Exporter) channel.getAttribute(cacheKey); exporter.unexport(); channel.removeAttribute(cacheKey); - decreaseInstanceCount(channel, countkey); + decreaseInstanceCount(channel, countKey); } } return String.valueOf(instid); From cc71d39389f0ea8087752b4ca56483db96402934 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Fri, 11 Jan 2019 17:17:55 +0800 Subject: [PATCH 2/6] Optimize the code: exportOrUnexportCallbackService method camel mode. --- .../dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java index 443d335ece7..1600737bc1a 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java @@ -77,7 +77,7 @@ private static byte isCallBack(URL url, String methodName, int argIndex) { * @throws IOException */ @SuppressWarnings({"unchecked", "rawtypes"}) - private static String exportOrunexportCallbackService(Channel channel, URL url, Class clazz, Object inst, Boolean export) throws IOException { + private static String exportOrUnexportCallbackService(Channel channel, URL url, Class clazz, Object inst, Boolean export) throws IOException { int instid = System.identityHashCode(inst); Map params = new HashMap(3); @@ -252,10 +252,10 @@ public static Object encodeInvocationArgument(Channel channel, RpcInvocation inv case CallbackServiceCodec.CALLBACK_NONE: return args[paraIndex]; case CallbackServiceCodec.CALLBACK_CREATE: - inv.setAttachment(INV_ATT_CALLBACK_KEY + paraIndex, exportOrunexportCallbackService(channel, url, pts[paraIndex], args[paraIndex], true)); + inv.setAttachment(INV_ATT_CALLBACK_KEY + paraIndex, exportOrUnexportCallbackService(channel, url, pts[paraIndex], args[paraIndex], true)); return null; case CallbackServiceCodec.CALLBACK_DESTROY: - inv.setAttachment(INV_ATT_CALLBACK_KEY + paraIndex, exportOrunexportCallbackService(channel, url, pts[paraIndex], args[paraIndex], false)); + inv.setAttachment(INV_ATT_CALLBACK_KEY + paraIndex, exportOrUnexportCallbackService(channel, url, pts[paraIndex], args[paraIndex], false)); return null; default: return args[paraIndex]; From 191082fbfb2826c4c1c201f08c982d5f383e30e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Fri, 11 Jan 2019 17:23:08 +0800 Subject: [PATCH 3/6] Optimize the code: fix method:encodeInvocationArgument private callbackStatus is camel writing. --- .../apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java index 1600737bc1a..30418f75398 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java @@ -245,10 +245,10 @@ private static void decreaseInstanceCount(Channel channel, String countkey) { public static Object encodeInvocationArgument(Channel channel, RpcInvocation inv, int paraIndex) throws IOException { // get URL directly URL url = inv.getInvoker() == null ? null : inv.getInvoker().getUrl(); - byte callbackstatus = isCallBack(url, inv.getMethodName(), paraIndex); + byte callbackStatus = isCallBack(url, inv.getMethodName(), paraIndex); Object[] args = inv.getArguments(); Class[] pts = inv.getParameterTypes(); - switch (callbackstatus) { + switch (callbackStatus) { case CallbackServiceCodec.CALLBACK_NONE: return args[paraIndex]; case CallbackServiceCodec.CALLBACK_CREATE: From 23d0a603e52d982a7b92212cfa76d854b597cddc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Fri, 11 Jan 2019 19:09:26 +0800 Subject: [PATCH 4/6] Optimize the code: fix name issue --- .../apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java index 30418f75398..fc22236e54a 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java @@ -110,7 +110,7 @@ private static String exportOrUnexportCallbackService(Channel channel, URL url, Exporter exporter = protocol.export(invoker); // this is used for tracing if instid has published service or not. channel.setAttribute(cacheKey, exporter); - logger.info("export a callback service :" + exportUrl + ", on " + channel + ", url is: " + url); + logger.info("Exporter a callback service :" + exportUrl + ", on " + channel + ", url is: " + url); increaseInstanceCount(channel, countKey); } } From 03a56b16e705c6350fd2f021b33a42f64c80b676 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Mon, 14 Jan 2019 23:51:48 +0800 Subject: [PATCH 5/6] Exporter is a noun, we should use a verb here, like Export. --- .../apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java index fc22236e54a..3da27a1dc9e 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java @@ -110,7 +110,7 @@ private static String exportOrUnexportCallbackService(Channel channel, URL url, Exporter exporter = protocol.export(invoker); // this is used for tracing if instid has published service or not. channel.setAttribute(cacheKey, exporter); - logger.info("Exporter a callback service :" + exportUrl + ", on " + channel + ", url is: " + url); + logger.info("Export a callback service :" + exportUrl + ", on " + channel + ", url is: " + url); increaseInstanceCount(channel, countKey); } } From 6074bb3cd2a623636282f1f9dc255dd8eb43496d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A6=B9=E5=85=89?= Date: Tue, 15 Jan 2019 00:10:37 +0800 Subject: [PATCH 6/6] The generics that can be inferred automatically are also deleted. --- .../apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java index 3da27a1dc9e..4d2f3c6756b 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/CallbackServiceCodec.java @@ -80,7 +80,7 @@ private static byte isCallBack(URL url, String methodName, int argIndex) { private static String exportOrUnexportCallbackService(Channel channel, URL url, Class clazz, Object inst, Boolean export) throws IOException { int instid = System.identityHashCode(inst); - Map params = new HashMap(3); + Map params = new HashMap<>(3); // no need to new client again params.put(Constants.IS_SERVER_KEY, Boolean.FALSE.toString()); // mark it's a callback, for troubleshooting @@ -92,7 +92,7 @@ private static String exportOrUnexportCallbackService(Channel channel, URL url, // add method, for verifying against method, automatic fallback (see dubbo protocol) params.put(Constants.METHODS_KEY, StringUtils.join(Wrapper.getWrapper(clazz).getDeclaredMethodNames(), ",")); - Map tmpMap = new HashMap(url.getParameters()); + Map tmpMap = new HashMap<>(url.getParameters()); tmpMap.putAll(params); tmpMap.remove(Constants.VERSION_KEY);// doesn't need to distinguish version for callback tmpMap.put(Constants.INTERFACE_KEY, clazz.getName());