You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@rocketmq.apache.org by GitBox <gi...@apache.org> on 2020/11/20 08:18:44 UTC

[GitHub] [rocketmq] coder-zzzz opened a new issue #2441: [Bug Report]Cosnumer can not sent to %Retry%Topic when the perm is SUB

coder-zzzz opened a new issue #2441:
URL: https://github.com/apache/rocketmq/issues/2441


   ```java
   class Permission
    public static void parseResourcePerms(PlainAccessResource plainAccessResource, Boolean isTopic,
           List<String> resources) {
           if (resources == null || resources.isEmpty()) {
               return;
           }
           for (String resource : resources) {
               String[] items = StringUtils.split(resource, "=");
               if (items.length == 2) {
                   plainAccessResource.addResourceAndPerm(isTopic ? items[0].trim() : PlainAccessResource.getRetryTopic(items[0].trim()), parsePermFromString(items[1].trim()));
               } else {
                   throw new AclException(String.format("Parse resource permission failed for %s:%s", isTopic ? "topic" : "group", resource));
               }
           }
       }
   ```
   There is the sence: producer and consumer are different team, communicate each other with topic-a. Consumer only have sub perm of topic-a. When send messge back to borker failed , then client will try to direct send msgs to retry topic with RequestCode.SEND_MESSAGE(see DefaultMQPushConsumerImpl#sendMessageBack). But failed without pub perm.
   
   So I think consumer group should have the pub perm of the retry topic which is belong to itself.
   
   ```
   Permission
   public static void parseResourcePerms(PlainAccessResource plainAccessResource, Boolean isTopic,
           List<String> resources) {
           if (resources == null || resources.isEmpty()) {
               return;
           }
           //todo: I think can add pub|sub perm of retry group topic to consumer group when init 
           for (String resource : resources) {
               String[] items = StringUtils.split(resource, "=");
               if (items.length == 2) {
                  if( isTopic) {
   plainAccessResource.addResourceAndPerm(isTopic ? items[0].trim() : PlainAccessResource.getRetryTopic(items[0].trim()), parsePermFromString(items[1].trim()));
                  } else {
        plainAccessResource.addResourceAndPerm(retryTopic, (byte) (Permission.PUB|Permission.SUB));
   }
                               } else {
                   throw new AclException(String.format("Parse resource permission failed for %s:%s", isTopic ? "topic" : "group", resource));
               }
           }
       }
   ```
   
   


----------------------------------------------------------------
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:
users@infra.apache.org