I notice that the method 
`org.apache.dubbo.registry.support.AbstractRegistry#getRegistered` just returns 
the internal reference of `registered`, and everyone can modify this `Set` 
outside the `Registry`, is this a good practice?

An example is that in 
`org.apache.dubbo.registry.support.AbstractRegistryTest#testRegister`, there is 
something like:

```java
//test multiple urls
abstractRegistry.getRegistered().clear();
```

we clear the registered urls outside the `Registry`, maybe it's not a big deal 
because we just do some logs and remove the url in `unregister` method:

```java
    @Override
    public void unregister(URL url) {
        if (url == null) {
            throw new IllegalArgumentException("unregister url == null");
        }
        if (logger.isInfoEnabled()) {
            logger.info("Unregister: " + url);
        }
        registered.remove(url);
    }
```

but still, it'll lose some logs and if we add more logics in the `unregister` 
method in the future, it could be dangerous.

I suggest returning a unmodifiable set in the `getRegistered` method and 
unregister all urls one by one or providing a method such as `unregisterAll`.

What do you think?

[ Full content available at: 
https://github.com/apache/incubator-dubbo/issues/3106 ]
This message was relayed via gitbox.apache.org for 
[email protected]

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

Reply via email to