def remove_udf(udf_name, options = nil)
      policy = create_policy(options, Policy, default_info_policy)

      str_cmd = "udf-remove:filename=#{udf_name};"

      # Send command to one node. That node will distribute it to other nodes.
      # Send UDF to one node. That node will distribute the UDF to other nodes.
      response_map = @cluster.request_info(policy, str_cmd)
      _, response = response_map.first

      if response == 'ok'
        UdfRemoveTask.new(@cluster, udf_name)
      else
        raise Aerospike::Exceptions::Aerospike.new(Aerospike::ResultCode::SERVER_ERROR, response)
      end
    end
def remove_udf(udf_name, options = nil)
      policy = create_policy(options, Policy, default_info_policy)

      str_cmd = "udf-remove:filename=#{udf_name};"

      # Send command to one node. That node will distribute it to other nodes.
      # Send UDF to one node. That node will distribute the UDF to other nodes.
      response_map = @cluster.request_info(policy, str_cmd)
      _, response = response_map.first

      if response == 'ok'
        UdfRemoveTask.new(@cluster, udf_name)
      else
        raise Aerospike::Exceptions::Aerospike.new(Aerospike::ResultCode::SERVER_ERROR, response)
      end
    end
RemoveUDF removes a package containing user defined functions in the server.
  This asynchronous server call will return before command is complete.
  The user can optionally wait for command completion by using the returned
  RemoveTask instance.

  This method is only supported by Aerospike 3 servers.