https://github.com/ansible/ansible/blob/adcdee9bb0031577698246fcfc51f8af63a56a17/lib/ansible/playbook/task.py#L124

##### SUMMARY
Handlers can not be referenced with the `FQCN : handler name` notation if the handler name contains the role name.

Not sure what the reasoning is behind this, but a `httpd` role can't have a `restart httpd` handler name if you want to notify it with `notify: 'httpd : restart httpd'`

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
task handler fqcn

##### ANSIBLE VERSION
```
ansible 2.9.10
  config file = /home/twouters/.ansible.cfg
  configured module search path = ['/home/twouters/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.8/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.8.3 (default, May 17 2020, 18:15:42) [GCC 10.1.0]
```

##### CONFIGURATION
Default configuration

##### OS / ENVIRONMENT
All (N/A)

##### STEPS TO REPRODUCE
```
➜  issues-70582 $ find ./
./
./roles
./roles/test
./roles/test/handlers
./roles/test/handlers/main.yml
./roles/test/tasks
./roles/test/tasks/main.yml
./pb.yml
```

`pb.yml`
```yaml
---

- hosts: localhost
  roles:
    - test
```

`roles/test/tasks/main.yml`
```yaml
---

- name: always trigger handler
  command: /bin/true
  changed_when: True
  notify:
    - 'test : handler 1'

- name: always trigger handler 2
  command: /bin/true
  changed_when: True
  notify:
    - 'test : handler 2 test'
```

`roles/test/handlers/main.yml`
```yaml
---

- name: handler 1
  debug:
    msg: this is handler 1

- name: handler 2 test
  debug:
    msg: this handler is not found
```

##### EXPECTED RESULTS
Two handlers are detected.

##### ACTUAL RESULTS
Only the handler that doesn't contain the role name in its name gets detected

```
➜  issues-70582 $ ansible-playbook pb.yml           
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not
match 'all'

PLAY [localhost] ***********************************************************************************************

TASK [Gathering Facts] *****************************************************************************************
ok: [localhost]

TASK [test : always trigger handler] ***************************************************************************
changed: [localhost]

TASK [test : always trigger handler 2] *************************************************************************
ERROR! The requested handler 'test : handler 2 test' was not found in either the main handlers list nor in the listening handlers list
```
play_context.update_vars(all_vars)
            if target_host in self._active_connections:
                connection = Connection(self._active_connections[target_host])
                del self._active_connections[target_host]
            else:
                connection = plugin_loader.connection_loader.get(play_context.connection, play_context, os.devnull)
                play_context.set_attributes_from_plugin(connection)
            if connection:
                try:
                    connection.reset()
                    msg = 'reset connection'
                except ConnectionError as e:
                    
                    display.debug("got an error while closing persistent connection: %s" % e)
            else:
                msg = 'no connection, nothing to reset'
        else:
            raise AnsibleError("invalid meta action requested: %s" % meta_action, obj=task._ds)
        result = {'msg': msg}
        if skipped:
            result['skipped'] = True
            result['skip_reason'] = skip_reason
        else:
            result['changed'] = False
        display.vv("META: %s" % msg)
        res = TaskResult(target_host, task, result)
        if skipped:
            self._tqm.send_callback('v2_runner_on_skipped', res)
        return [res]
    def get_hosts_left(self, iterator):