massakam opened a new pull request #6275: [broker] Fix bug that tenants whose 
allowed clusters include global cannot be created/updated
URL: https://github.com/apache/pulsar/pull/6275
 
 
   ### Motivation
   
   If the allowed clusters include `global`, tenant creation and update will 
fail with the following error:
   
   ```sh
   $ pulsar-admin tenants create -r xxx.xxx.xxx -c global,dev1,dev2 
sample-tenant
   
   Clusters do not exist
   
   Reason: Clusters do not exist
   ```
   
   However, there is actually the `global` cluster in ZK.
   ```sh
   [zk: localhost:2184(CONNECTED) 14] ls /admin/clusters
   
   [dev1, dev2, global]
   ```
   
   As a result of the investigation, I found that `global` was removed from the 
cluster list in the configuration store cache after getting the list of 
clusters by the REST API. This is due to the following:
   
https://github.com/apache/pulsar/blob/e1357a7d1ae6a51dfa742986a4a2afe33beb0256/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/ClustersBase.java#L87-L91
   `global` is removed from the `clusters` variable, which seems to be not a 
deep copy but a shallow copy.
   
   ### Modifications
   
   When getting the list of clusters from the configuration store and deleting 
`global` from it, create a new `Set` instance using stream API.
   
   ```java
   Set<String> clusters = clustersListCache().get().stream()
           .filter(cluster -> 
!Constants.GLOBAL_CLUSTER.equals(cluster)).collect(Collectors.toSet());
   ```
   
   In addition, allow `global` to be included in allowed clusters when creating 
and updating tenants, even if the `global` cluster does not exist in the list 
of clusters stored in ZK. Even if the `global` cluster is not registered in ZK, 
global topics will work fine.

----------------------------------------------------------------
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.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to