pinxiong commented on a change in pull request #9138:
URL: https://github.com/apache/dubbo/pull/9138#discussion_r743359356



##########
File path: 
dubbo-test/dubbo-test-check/src/main/resources/META-INF/services/org.junit.platform.launcher.TestExecutionListener
##########
@@ -1 +1,5 @@
+# DubboRegistryCenterStarted should be the first one because of the startup of 
zookeeper
+org.apache.dubbo.test.check.RegistryCenterStarted

Review comment:
       > Pls add JVM arg to disable embedded zk server, allow users to use 
external zk server.
   
   It's done.

##########
File path: 
dubbo-test/dubbo-test-check/src/main/resources/META-INF/services/org.junit.platform.launcher.TestExecutionListener
##########
@@ -1 +1,5 @@
+# DubboRegistryCenterStarted should be the first one because of the startup of 
zookeeper
+org.apache.dubbo.test.check.RegistryCenterStarted

Review comment:
       > When enable thread checking by `-DcheckThreads=true`, 
`DubboTestChecker` will dump threads after finished each test class. The 
embedded zk server will also create some threads, such as creating a new netty 
thread when establishing a connection, which will interfere with the thread 
check of dubbo test. Is it possible to start zk server in a separate process?
   
   Now, it can use a dependent process to start zookeeper server.

##########
File path: 
dubbo-test/dubbo-test-check/src/main/java/org/apache/dubbo/test/check/registrycenter/processor/KillProcessWindowsProcessor.java
##########
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.test.check.registrycenter.processor;
+
+import org.apache.commons.exec.CommandLine;
+import org.apache.commons.exec.DefaultExecutor;
+import org.apache.commons.exec.Executor;
+import org.apache.commons.exec.PumpStreamHandler;
+import org.apache.dubbo.common.logger.Logger;
+import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.test.check.exception.DubboTestException;
+import 
org.apache.dubbo.test.check.registrycenter.context.ZookeeperWindowsContext;
+
+import java.io.IOException;
+
+/**
+ * Create a {@link org.apache.dubbo.test.check.registrycenter.Processor} to 
kill pid on Windows OS.
+ */
+public class KillProcessWindowsProcessor extends ZookeeperWindowsProcessor {
+
+    private static final Logger logger = 
LoggerFactory.getLogger(KillProcessWindowsProcessor.class);
+
+    @Override
+    protected void doProcess(ZookeeperWindowsContext context) throws 
DubboTestException {
+        for (int clientPort : context.getClientPorts()) {
+            Integer pid = context.getPid(clientPort);

Review comment:
       OK, I've removed the killed pid.

##########
File path: 
dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/exportmetadata/MultipleRegistryCenterExportMetadataIntegrationTest.java
##########
@@ -99,13 +91,9 @@ public void setUp() throws Exception {
         DubboBootstrap.getInstance()
             .application(new ApplicationConfig(PROVIDER_APPLICATION_NAME))
             .protocol(new ProtocolConfig(PROTOCOL_NAME))
-            .service(serviceConfig);
-        for (RegistryCenter.Instance instance : 
registryCenter.getRegistryCenterInstance()) {
-            DubboBootstrap.getInstance().registry(new 
RegistryConfig(String.format("%s://%s:%s",
-                instance.getType(),
-                instance.getHostname(),
-                instance.getPort())));
-        }
+            .service(serviceConfig)
+            .registry(new RegistryConfig("zookeeper://127.0.0.1:2181"))
+            .registry(new RegistryConfig("zookeeper://127.0.0.1:2182"));

Review comment:
       That's a good seggustion! However, all local `zooKeeper connection 
strings` aren't displayed clearly, especially using Spring configuration or 
annotation.
   
   But I've supported this feature.

##########
File path: 
dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/exportmetadata/MultipleRegistryCenterExportMetadataIntegrationTest.java
##########
@@ -99,13 +91,9 @@ public void setUp() throws Exception {
         DubboBootstrap.getInstance()
             .application(new ApplicationConfig(PROVIDER_APPLICATION_NAME))
             .protocol(new ProtocolConfig(PROTOCOL_NAME))
-            .service(serviceConfig);
-        for (RegistryCenter.Instance instance : 
registryCenter.getRegistryCenterInstance()) {
-            DubboBootstrap.getInstance().registry(new 
RegistryConfig(String.format("%s://%s:%s",
-                instance.getType(),
-                instance.getHostname(),
-                instance.getPort())));
-        }
+            .service(serviceConfig)
+            .registry(new RegistryConfig("zookeeper://127.0.0.1:2181"))
+            .registry(new RegistryConfig("zookeeper://127.0.0.1:2182"));

Review comment:
       The best way is to define two client ports (which might not be `2181` 
and `2182`) and quote them when using. However, there are so many hard code in 
unit test. So, it's very diffcult to change anywhere.
   
   such as some zookeeper connection string in properties file
   
   ```java
   dubbo.registry.address=zookeeper://127.0.0.1:2181?registry-type=service
   biz.group=greeting
   biz.group2=group2
   dubbo.call-timeout=2000
   ```

##########
File path: 
dubbo-test/dubbo-test-check/src/main/java/org/apache/dubbo/test/check/registrycenter/MockedRegistryCenter.java
##########
@@ -21,6 +21,16 @@
  */
 public class MockedRegistryCenter {
 
+    /**
+     * The first global zookeeper address
+     */
+    public static final String ZOOKEEPER_ADDRESS1 = 
"zookeeper://127.0.0.1:2181";

Review comment:
       > The global zookeeper address configs should not mixed with embedded zk 
server, extract them into a outer class. Furthermore, I thank it's better to 
append the zk server address and port configs to system props, such as:
   > 
   > ```
   > zookeeper.address=zookeeper://127.0.0.1:2181
   > zookeeper.port=2181
   > zookeeper.address.1=zookeeper://127.0.0.1:2181
   > zookeeper.port.1=2181
   > zookeeper.address.2=zookeeper://127.0.0.1:2182
   > zookeeper.port.2=2182
   > ```
   > 
   > So we can use them in Spring application.properties/yaml:
   > 
   > ```
   > dubbo.registry.address=${zookeeper.address}
   > dubbo.registries.second-registry.address=${zookeeper.address.2}
   > ```
   
   I think we need to support  that make `zookeeper port` as system props, 
don't do that for `zookeeper.address`, because the `zookeeper.address` depend 
on `zookeeper.port` 
   
   For `zookeeper.address`, we can set the system props config after zookeeper 
instance started.

##########
File path: 
dubbo-test/dubbo-test-check/src/main/resources/META-INF/services/org.junit.platform.launcher.TestExecutionListener
##########
@@ -1 +1,5 @@
+# DubboRegistryCenterStarted should be the first one because of the startup of 
zookeeper
+org.apache.dubbo.test.check.RegistryCenterStarted

Review comment:
       > Pls add JVM arg to disable embedded zk server, allow users to use 
external zk server.
   
   It's done.

##########
File path: 
dubbo-test/dubbo-test-check/src/main/resources/META-INF/services/org.junit.platform.launcher.TestExecutionListener
##########
@@ -1 +1,5 @@
+# DubboRegistryCenterStarted should be the first one because of the startup of 
zookeeper
+org.apache.dubbo.test.check.RegistryCenterStarted

Review comment:
       > When enable thread checking by `-DcheckThreads=true`, 
`DubboTestChecker` will dump threads after finished each test class. The 
embedded zk server will also create some threads, such as creating a new netty 
thread when establishing a connection, which will interfere with the thread 
check of dubbo test. Is it possible to start zk server in a separate process?
   
   Now, it can use a dependent process to start zookeeper server.

##########
File path: 
dubbo-test/dubbo-test-check/src/main/java/org/apache/dubbo/test/check/registrycenter/processor/KillProcessWindowsProcessor.java
##########
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.test.check.registrycenter.processor;
+
+import org.apache.commons.exec.CommandLine;
+import org.apache.commons.exec.DefaultExecutor;
+import org.apache.commons.exec.Executor;
+import org.apache.commons.exec.PumpStreamHandler;
+import org.apache.dubbo.common.logger.Logger;
+import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.test.check.exception.DubboTestException;
+import 
org.apache.dubbo.test.check.registrycenter.context.ZookeeperWindowsContext;
+
+import java.io.IOException;
+
+/**
+ * Create a {@link org.apache.dubbo.test.check.registrycenter.Processor} to 
kill pid on Windows OS.
+ */
+public class KillProcessWindowsProcessor extends ZookeeperWindowsProcessor {
+
+    private static final Logger logger = 
LoggerFactory.getLogger(KillProcessWindowsProcessor.class);
+
+    @Override
+    protected void doProcess(ZookeeperWindowsContext context) throws 
DubboTestException {
+        for (int clientPort : context.getClientPorts()) {
+            Integer pid = context.getPid(clientPort);

Review comment:
       OK, I've removed the killed pid.

##########
File path: 
dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/exportmetadata/MultipleRegistryCenterExportMetadataIntegrationTest.java
##########
@@ -99,13 +91,9 @@ public void setUp() throws Exception {
         DubboBootstrap.getInstance()
             .application(new ApplicationConfig(PROVIDER_APPLICATION_NAME))
             .protocol(new ProtocolConfig(PROTOCOL_NAME))
-            .service(serviceConfig);
-        for (RegistryCenter.Instance instance : 
registryCenter.getRegistryCenterInstance()) {
-            DubboBootstrap.getInstance().registry(new 
RegistryConfig(String.format("%s://%s:%s",
-                instance.getType(),
-                instance.getHostname(),
-                instance.getPort())));
-        }
+            .service(serviceConfig)
+            .registry(new RegistryConfig("zookeeper://127.0.0.1:2181"))
+            .registry(new RegistryConfig("zookeeper://127.0.0.1:2182"));

Review comment:
       That's a good seggustion! However, all local `zooKeeper connection 
strings` aren't displayed clearly, especially using Spring configuration or 
annotation.
   
   But I've supported this feature.

##########
File path: 
dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/integration/multiple/exportmetadata/MultipleRegistryCenterExportMetadataIntegrationTest.java
##########
@@ -99,13 +91,9 @@ public void setUp() throws Exception {
         DubboBootstrap.getInstance()
             .application(new ApplicationConfig(PROVIDER_APPLICATION_NAME))
             .protocol(new ProtocolConfig(PROTOCOL_NAME))
-            .service(serviceConfig);
-        for (RegistryCenter.Instance instance : 
registryCenter.getRegistryCenterInstance()) {
-            DubboBootstrap.getInstance().registry(new 
RegistryConfig(String.format("%s://%s:%s",
-                instance.getType(),
-                instance.getHostname(),
-                instance.getPort())));
-        }
+            .service(serviceConfig)
+            .registry(new RegistryConfig("zookeeper://127.0.0.1:2181"))
+            .registry(new RegistryConfig("zookeeper://127.0.0.1:2182"));

Review comment:
       The best way is to define two client ports (which might not be `2181` 
and `2182`) and quote them when using. However, there are so many hard code in 
unit test. So, it's very diffcult to change anywhere.
   
   such as some zookeeper connection string in properties file
   
   ```java
   dubbo.registry.address=zookeeper://127.0.0.1:2181?registry-type=service
   biz.group=greeting
   biz.group2=group2
   dubbo.call-timeout=2000
   ```

##########
File path: 
dubbo-test/dubbo-test-check/src/main/java/org/apache/dubbo/test/check/registrycenter/MockedRegistryCenter.java
##########
@@ -21,6 +21,16 @@
  */
 public class MockedRegistryCenter {
 
+    /**
+     * The first global zookeeper address
+     */
+    public static final String ZOOKEEPER_ADDRESS1 = 
"zookeeper://127.0.0.1:2181";

Review comment:
       > The global zookeeper address configs should not mixed with embedded zk 
server, extract them into a outer class. Furthermore, I thank it's better to 
append the zk server address and port configs to system props, such as:
   > 
   > ```
   > zookeeper.address=zookeeper://127.0.0.1:2181
   > zookeeper.port=2181
   > zookeeper.address.1=zookeeper://127.0.0.1:2181
   > zookeeper.port.1=2181
   > zookeeper.address.2=zookeeper://127.0.0.1:2182
   > zookeeper.port.2=2182
   > ```
   > 
   > So we can use them in Spring application.properties/yaml:
   > 
   > ```
   > dubbo.registry.address=${zookeeper.address}
   > dubbo.registries.second-registry.address=${zookeeper.address.2}
   > ```
   
   I think we need to support  that make `zookeeper port` as system props, 
don't do that for `zookeeper.address`, because the `zookeeper.address` depend 
on `zookeeper.port` 
   
   For `zookeeper.address`, we can set the system props config after zookeeper 
instance started.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to