[Dubbo-4991] Fix zk client create logic (#5139)

fix #4991
This commit is contained in:
Huang YunKun 2020-02-07 17:40:49 +08:00 committed by GitHub
parent 95bd350cae
commit 882a8c430f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 41 additions and 1 deletions

View File

@ -20,6 +20,7 @@ import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.constants.RemotingConstants;
import org.apache.dubbo.common.logger.Logger;
import org.apache.dubbo.common.logger.LoggerFactory;
import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.remoting.zookeeper.ZookeeperClient;
import org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter;
@ -52,6 +53,7 @@ public abstract class AbstractZookeeperTransporter implements ZookeeperTransport
@Override
public ZookeeperClient connect(URL url) {
ZookeeperClient zookeeperClient;
// address format: {[username:password@]address}
List<String> addressList = getURLBackupAddress(url);
// The field define the zookeeper server , including protocol, host, port, username, password
if ((zookeeperClient = fetchAndUpdateZookeeperClientCache(addressList)) != null && zookeeperClient.isConnected()) {
@ -111,8 +113,29 @@ public abstract class AbstractZookeeperTransporter implements ZookeeperTransport
List<String> getURLBackupAddress(URL url) {
List<String> addressList = new ArrayList<String>();
addressList.add(url.getAddress());
addressList.addAll(url.getParameter(RemotingConstants.BACKUP_KEY, Collections.EMPTY_LIST));
String authPrefix = null;
if (StringUtils.isNotEmpty(url.getUsername())) {
StringBuilder buf = new StringBuilder();
buf.append(url.getUsername());
if (StringUtils.isNotEmpty(url.getPassword())) {
buf.append(":");
buf.append(url.getPassword());
}
buf.append("@");
authPrefix = buf.toString();
}
if (StringUtils.isNotEmpty(authPrefix)) {
List<String> authedAddressList = new ArrayList<>(addressList.size());
for (String addr : addressList) {
authedAddressList.add(authPrefix + addr);
}
return authedAddressList;
}
return addressList;
}

View File

@ -205,4 +205,21 @@ public class AbstractZookeeperTransporterTest {
zkServer2.stop();
zkServer3.stop();
}
@Test
public void testSameHostWithDifferentUser() throws Exception {
int zkPort1 = NetUtils.getAvailablePort();
int zkPort2 = NetUtils.getAvailablePort();
try (TestingServer zkServer1 = new TestingServer(zkPort1, true)) {
try (TestingServer zkServer2 = new TestingServer(zkPort2, true)) {
URL url1 = URL.valueOf("zookeeper://us1:pw1@127.0.0.1:" + zkPort1 + "/path1");
URL url2 = URL.valueOf("zookeeper://us2:pw2@127.0.0.1:" + zkPort1 + "/path2");
ZookeeperClient client1 = abstractZookeeperTransporter.connect(url1);
ZookeeperClient client2 = abstractZookeeperTransporter.connect(url2);
assertThat(client1, not(client2));
}
}
}
}