async def METHOD_NAME(
    self,
    address: str,
    role: NodeRole,
    env: Dict = None,
    resource: Dict = None,
    detail: Dict = None,
    status: NodeStatus = None,
):
    need_notify = False
    if address not in self._node_infos:
        need_notify = True
        info = self._node_infos[address] = NodeInfo(role=role, status=status)
    else:
        info = self._node_infos[address]
    info.update_time = time.time()
    if env is not None:
        info.env.update(env)
    if resource is not None:
        info.resource.update(resource)
    if detail is not None:
        info.detail.update(detail)
    if status is not None:
        need_notify = need_notify or (info.status != status)
        info.status = status
    if need_notify:
        self._role_to_nodes[role].add(address)
        await self._notify_roles([role])