@env.has_capability(env.Capabilities.SG_UPDATE_ASYNC)<EOL>def _perform_async_update_rule(context, id, db_sg_group, rule_id, action):
rpc_reply = None<EOL>sg_rpc = sg_rpc_api.QuarkSGAsyncProcessClient()<EOL>ports = db_api.sg_gather_associated_ports(context, db_sg_group)<EOL>if len(ports) > <NUM_LIT:0>:<EOL><INDENT>rpc_reply = sg_rpc.start_update(context, id, rule_id, action)<EOL>if rpc_reply:<EOL><INDENT>job_id = rpc_reply['<STR_LIT>']<EOL>job_api.add_job_to_context(context, job_id)<EOL><DEDENT>else:<EOL><INDENT>LOG.error("<STR_LIT>")<EOL><DEDENT><DEDENT>
Updates a SG rule async and return the job information.

    Only happens if the security group has associated ports. If the async
    connection fails the update continues (legacy mode).