Re: [Taps] Review of taps-interface

Michael Welzl <michawe@ifi.uio.no> Fri, 07 August 2020 08:21 UTC

Return-Path: <michawe@ifi.uio.no>
X-Original-To: taps@ietfa.amsl.com
Delivered-To: taps@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 374F73A0D37 for <taps@ietfa.amsl.com>; Fri, 7 Aug 2020 01:21:42 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.899
X-Spam-Level:
X-Spam-Status: No, score=-1.899 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
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 rKdK2daYc_4v for <taps@ietfa.amsl.com>; Fri, 7 Aug 2020 01:21:39 -0700 (PDT)
Received: from mail-out01.uio.no (mail-out01.uio.no [IPv6:2001:700:100:10::50]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 526513A0D46 for <taps@ietf.org>; Fri, 7 Aug 2020 01:21:39 -0700 (PDT)
Received: from mail-mx12.uio.no ([129.240.10.84]) by mail-out01.uio.no with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.93.0.4) (envelope-from <michawe@ifi.uio.no>) id 1k3xdA-0002YI-99; Fri, 07 Aug 2020 10:21:36 +0200
Received: from ti0182q160-0624.bb.online.no ([109.189.132.119] helo=[192.168.1.5]) by mail-mx12.uio.no with esmtpsa (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) user michawe (Exim 4.93.0.4) (envelope-from <michawe@ifi.uio.no>) id 1k3xd8-000FZF-Br; Fri, 07 Aug 2020 10:21:36 +0200
From: Michael Welzl <michawe@ifi.uio.no>
Message-Id: <90C068BA-3B20-48A1-94C2-6BF915BD35CB@ifi.uio.no>
Content-Type: multipart/alternative; boundary="Apple-Mail=_98617D70-B006-4FF3-A51B-E791270FBCB4"
Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.14\))
Date: Fri, 07 Aug 2020 10:21:33 +0200
In-Reply-To: <CAM4esxQW704iLNnrOZX6uAMRPAWUqQzreMtyR2DuGPKnLgdKAQ@mail.gmail.com>
Cc: "taps@ietf.org" <taps@ietf.org>
To: Martin Duke <martin.h.duke@gmail.com>
References: <CAM4esxQW704iLNnrOZX6uAMRPAWUqQzreMtyR2DuGPKnLgdKAQ@mail.gmail.com>
X-Mailer: Apple Mail (2.3445.104.14)
X-UiO-SPF-Received: Received-SPF: neutral (mail-mx12.uio.no: 109.189.132.119 is neither permitted nor denied by domain of ifi.uio.no) client-ip=109.189.132.119; envelope-from=michawe@ifi.uio.no; helo=[192.168.1.5];
X-UiO-Spam-info: not spam, SpamAssassin (score=-5.0, required=5.0, autolearn=disabled, AWL=-0.000, HTML_MESSAGE=0.001, UIO_MAIL_IS_INTERNAL=-5, uiobl=NO, uiouri=NO)
X-UiO-Scanned: 207C6F3C4D9B17172F8B792332A39F27F1554DB5
Archived-At: <https://mailarchive.ietf.org/arch/msg/taps/CpV6oapBNLSEfWKnhJFfkKNDIHw>
Subject: Re: [Taps] Review of taps-interface
X-BeenThere: taps@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "IETF Transport Services \(TAPS\) Working Group" <taps.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/taps>, <mailto:taps-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/taps/>
List-Post: <mailto:taps@ietf.org>
List-Help: <mailto:taps-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/taps>, <mailto:taps-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 07 Aug 2020 08:21:42 -0000

Hi Martin,

Thanks much for this detailed review!   - and for the many interesting questions you’re raising; you discovered a few important holes there. E.g., I believe we just haven’t discussed stream limits; I would have thought that that’s an implementation matter, but the fact that you bring it up in a review of the interface draft is a reminder that applications may want to be aware of this behavior.
(as a quick answer to this particular item, in my opinion Clone() should fail if the stream limit is exceeded - getting a mix of Connections and streams, altogether grouped is surely not what anyone would want or expect; e.g. priorities within the group won’t work out anymore). Note that the idea is that an application can query for what it got if it’s interested in that level of detail.

Now, for addressing the comments, I think we should just split them up by topic into issues for the repository, and then address them one by one.

Thanks again!

Cheers,
Michael


> On Aug 6, 2020, at 9:30 PM, Martin Duke <martin.h.duke@gmail.com> wrote:
> 
> Here is my promised "no prior knowledge" review of taps-interface. I haven't filed issues for these yet, as I suspect some of these have already been well-litigated there.
> 
> The only other draft I've read is taps-arch.
> 
> High level comments:
> 
> (1) I think this conceptually headed in the right direction.
> 
> (2) I found the relationship between streams and connections to be extremely murky throughout the draft, and left it not really sure how I would control a streamed transport.
> 
> Section 6.4 hints suggests that opening additional streams is an alternative implementation of Clone() for transports that can do so. Does this imply that if the peer stream limit does not allow new streams, the transport should open a connection instead? How does SetNewConnectionLimit() in Sec 6.2 relate to streamed transport -- are there two levels of listener: a stream listener and a connection listener? How would opening "stream listeners" relate to the maximum number of streams the peer could open (i.e. do I have to call listen() 8 times to allow the client to open 8 streams)? Or are there no stream listeners and these "connections" just sort of appear?
> 
> Skimming the -impl draft, I can see there's some text here but it is not fitting together for me. There are at least three streamed transports and it would be helpful to explain how the API conceptualizes this, perhaps in a new section.
> 
> The next two major points are related to streams, so if I've missed something important above they may be complete nonsequiturs.
> 
> (3) I'm not sure the priority framework really fits together.
> 
> Sec 6.4 says we 'should' do something that sounds like WFQ, but 7.1.5 allows the application to decide what happens. Meanwhile message priority suggests a strict priority-based scheduler.
> 
> Meanwhile, in sec 8.1.3.2 "Note that this property is not a per-message override of the  connection Priority - see Section 7.1.3.  Both Priority properties
>    may interact, but can be used independently and be realized by
>    different mechanisms." 
> 
> At the risk of overindexing on a partly-baked draft in httpbis, how would I implement strict priority of HTTP/3 streams over a taps API that implements QUIC? Would I need to request strict priority in *both* connection priority and message priority? Or I guess connection priority would be sufficient?
> 
> (4) I found myself continually asking how I would implement foo-over-http/x using this API, and very much stumbled over ambiguity regarding HTTP 1.1 pipelining. While it's certainly possible to order messages in the proper way using this API, if I was writing this agnostically to HTTP version, it appears it would gravitate to opening a pooled TCP connection for each request/response if we ended up on HTTP/1 [because each request/response would have a clone() call]. Maybe this is OK, but I found this conclusion to be jarring.
> 
> Specific comments:
> 
> sec 4.2.2
> "implementations MUST provide a
>       method for the application to determine the entire set of possible
>       values for each property."
> 
> Is this meant to be a requirement for a machine-readable API for learning the enum, or merely a requirement for documentation? i.e. is it satisfied if the values are in the man page or comments of the C header file?
> 
> sec 5.
> I found it curious that there is no API here for registering callbacks, or mention that this is a precondition to connection. Surely event handlers are a prerequisite?
> 
> sec 5.1
> I found it odd that there didn't appear to be any sort of formal list of attributes of an endpoint, just some examples.
> 
> sec 5.2.7
> I am not sure what this sentence means: "Disabling this property may enable to control checksum coverage later."
> 
> sec 5.2.9
> It would be helpful to say "Applications that neither prohibit nor require congestion should query the result and disable their own congestion control if present in the transport"
> 
> sec 5.2.12
> Using temporary local addresses may break various mechanisms that prove address ownership (e.g QUIC resumption tokens) and therefore impair performance as the client has to re-verify its address.
> 
> sec 6.2 
> "After Stop() is called, the Listener can be disposed of.." I don't understand the difference between calling listener.stop() and simply disposing of the object. Does this imply that there is a listener.start() that allows a configured listener to resume?
> 
> sec 7.1.4
> It would be helpful to clarify the relevance of control vs application data in the idle timeout -- for various reasons, the connection could stay alive regardless of how active the connection is (in fact, perhaps "keepalive" is a generally useful notion that can be exposed in the API?)
> 
> sec 7.1..8
> This section is missing a reference to minSendRate and minRecvRate
> 
> sec 7.1.9.
> We're going to need an event for MTU changes. These can't simply be Send errors because the Sent event might go first, or the transport might be sending a probe with padding that doesn't correspond to a message.
> 
> sec 7.2
> perhaps I'm not thinking of this correctly, but should there be a way to query the peer-offered user timeout?
> 
> sec 8.3.2.1
> Reading the Sent event, I was pretty sure that reliable transports would deliver the event until the ack arrived. But Sec 10 most definitely does not say that. I would think that the ack would be a more useful signal, but maybe I'm in the rough on this -- certainly many transport implementations will not do this well.
> 
> -Martin
> _______________________________________________
> Taps mailing list
> Taps@ietf.org
> https://www.ietf.org/mailman/listinfo/taps