Re: [Wish] WHIP enhancements

Adam Roach <adam@nostrum.com> Wed, 24 February 2021 23:25 UTC

Return-Path: <adam@nostrum.com>
X-Original-To: wish@ietfa.amsl.com
Delivered-To: wish@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id DE6383A1D4F for <wish@ietfa.amsl.com>; Wed, 24 Feb 2021 15:25:42 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.08
X-Spam-Level:
X-Spam-Status: No, score=-2.08 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, NICE_REPLY_A=-0.001, T_SPF_HELO_PERMERROR=0.01, T_SPF_PERMERROR=0.01, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=nostrum.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id c6wy3TennJV9 for <wish@ietfa.amsl.com>; Wed, 24 Feb 2021 15:25:41 -0800 (PST)
Received: from nostrum.com (raven-v6.nostrum.com [IPv6:2001:470:d:1130::1]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id EF5483A1D4E for <wish@ietf.org>; Wed, 24 Feb 2021 15:25:40 -0800 (PST)
Received: from Zephyrus.local (cpe-70-122-148-25.tx.res.rr.com [70.122.148.25]) (authenticated bits=0) by nostrum.com (8.16.1/8.16.1) with ESMTPSA id 11ONPVSL050895 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO); Wed, 24 Feb 2021 17:25:37 -0600 (CST) (envelope-from adam@nostrum.com)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=nostrum.com; s=default; t=1614209138; bh=PiflsCo2RSyxNG2p4irxEXa7f7QXAnX/R05dDfV3ViI=; h=Subject:To:Cc:References:From:Date:In-Reply-To; b=uh1H8w7Z+Vtr9g3TtHNetYWTGiuj/yKKefMbvXqzy0sa2vBrpuFXS0WVB7NJ2ofg5 L3itoVPx4GtuqcdcZeSBgvpSRMYtYu4x1Jhoz8epxGdNL1rxdCR4cqs9VJ3X+AgnUA RK2wc21smrYp2+C1bYc4qWZO/X87T16R5qzHyqUE=
X-Authentication-Warning: raven.nostrum.com: Host cpe-70-122-148-25.tx.res.rr.com [70.122.148.25] claimed to be Zephyrus.local
To: Sergio Garcia Murillo <sergio.garcia.murillo@gmail.com>
Cc: "wish@ietf.org" <wish@ietf.org>
References: <92fd1a3f-06a3-3197-dde0-18270b62410c@nostrum.com> <CA+ag07Y0pZJ5YHtin1Y6X0bOGkYqGOanCaNiM42VFYwXYB6iSQ@mail.gmail.com>
From: Adam Roach <adam@nostrum.com>
Message-ID: <a6184cd1-361d-f9aa-acd4-7586c6ed9006@nostrum.com>
Date: Wed, 24 Feb 2021 17:25:15 -0600
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:68.0) Gecko/20100101 Thunderbird/68.11.0
MIME-Version: 1.0
In-Reply-To: <CA+ag07Y0pZJ5YHtin1Y6X0bOGkYqGOanCaNiM42VFYwXYB6iSQ@mail.gmail.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Content-Language: en-US
Archived-At: <https://mailarchive.ietf.org/arch/msg/wish/ARNSSUp1hmhvb6BsG61Zk-N8j0E>
Subject: Re: [Wish] WHIP enhancements
X-BeenThere: wish@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: WebRTC Ingest Signaling over HTTPS <wish.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/wish>, <mailto:wish-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/wish/>
List-Post: <mailto:wish@ietf.org>
List-Help: <mailto:wish-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/wish>, <mailto:wish-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 24 Feb 2021 23:25:43 -0000

Thanks for the quick review of my proposal! Comments inline below.


On 2/24/21 02:14, Sergio Garcia Murillo wrote:
> The need for a way to explicitly terminate the session was already by 
> several people, so I think we should definitely include it.
>
> https://github.com/murillo128/webrtc-http-ingest-protocol/issues/2
>
> However, I would be against optionalities, as it makes the testing and 
> interoperability much more difficult.


The scheme I'm looking for here is one of a very small set of core 
functions, plus optional fields that are ignored if an implementation 
doesn't understand them. To test interop, all that would be necessary is 
to check the proper functioning of the core functions (along with, I 
suppose, cursory checks that unknown fields are correctly ignored).


> In that regard, I am against including the trickle option as the 
> server should be accessible to the publisher, and the only case where 
> it could make sense is if the WHIP server is on a public server but 
> the media servers are behind NATed network without port forwarding.
>
> Also, I am not sure what would be the benefits of the ice restart 
> (especially if it is optional) compared to just restarting the whole 
> publishing session again, which is something that the service has to 
> implementa anyway.


I'm definitely okay leaving both trickle ice and ice restart functions 
off for now, as long as we have some kind of extensibility mechanism. 
What I'm trying to avoid is some kind of future situation where RT-CDNs 
are hosted behind application load balancers, and the processing nodes 
themselves lack v4 unique addresses (and are therefore natted). I don't 
see it being an issue right now, but depending on how quickly we can 
rely on 100% IPv6 deployment to end users, it may become an issue in the 
future. I don't want to be painted into a corner when/if this happens.


> On a last note, I would prefer to make the process less json-like and 
> more http-like, reusing HTTP headers and methods as much as possible.


I'm certainly not caught up on JSON as a syntax here, although it does 
make things considerably easier in most modern development environments. 
I'm open to other options.

Regarding our use of HTTP, I'd very much like to make sure we stay 
strictly within the bounds of BCP 56 (and, after discussions with the 
Area Directors, I'm fairly certain that publication of the 
post-last-call 
https://tools.ietf.org/html/draft-ietf-httpbis-bcp56bis-09 will be 
happening in fairly short order, so that's the reference we should be 
using). So re-using existing HTTP header fields to mean exactly what 
they're defined to mean is perfectly fine; but for any new information, 
I think we need to stay with the recommendations of BCP 56bis §4.7.


>
> My initial thoughts about how to implement it were that the POST 
> request to start the publication returned a 201 created response with 
> a Location header indicating the URI to the entity representing the 
> publication.


I don't have any objection in principle to using HTTP header fields for 
pointing to a created resource, as long as we can make this work for all 
of our use cases.


> And then allow the following methods on the request
>
> - GET for retrieving information about the state of the publication (TBD).
> - OPTIONS for keep alive
> - UPDATE for updating the session (we would need to specify what would 
> we actually allow to be updated)
> - DELETE for terminating the session


Here's where things get a bit dicey. The observation in BCP 56bis §5.4.2 
that OPTIONS is not widely supported is highly relevant: as CDN ingest 
nodes are frequently behind application load balancers, requiring the 
support of OPTIONS can lead to significant operational headaches if the 
load balancers don't support OPTIONS natively. There's also a bit of a 
philosophical mismatch in that "OPTIONS" doesn't *really* mean "PING," 
and if the notion is that we're using HTTP methods as our semantic 
operation point, we really want things that are good semantic matches.

UPDATE is even more problematic, as HTTP doesn't have an UPDATE method, 
and the process of adding new methods to HTTP is politically difficult 
in the best circumstances (e.g., creating a method that has broad 
applicability to all resource types -- see the difficulty and insanely 
long timeline getting PATCH defined for an example).

So while I'm not married to any of the aspects of my proposal, I think 
we need a more explicit way of indicating what operations we need than 
HTTP methods; and, at the same time, I'm seriously concerned about the 
future and the viability of a protocol that has no extension points. Can 
we work to find common ground on those two points?

/a