Return-Path: <noreply@github.com>
X-Original-To: quic-issues@ietfa.amsl.com
Delivered-To: quic-issues@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1])
 by ietfa.amsl.com (Postfix) with ESMTP id 95079130E25
 for <quic-issues@ietfa.amsl.com>; Wed, 28 Nov 2018 16:43:37 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -9.46
X-Spam-Level: 
X-Spam-Status: No, score=-9.46 tagged_above=-999 required=5
 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.46, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001,
 MAILING_LIST_MULTI=-1, RCVD_IN_DNSWL_HI=-5, SPF_PASS=-0.001]
 autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key)
 header.d=github.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 9qZEks2zN4IV for <quic-issues@ietfa.amsl.com>;
 Wed, 28 Nov 2018 16:43:35 -0800 (PST)
Received: from out-7.smtp.github.com (out-7.smtp.github.com [192.30.252.198])
 (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
 (No client certificate requested)
 by ietfa.amsl.com (Postfix) with ESMTPS id 96442130DD7
 for <quic-issues@ietf.org>; Wed, 28 Nov 2018 16:43:35 -0800 (PST)
Date: Wed, 28 Nov 2018 16:43:34 -0800
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com;
 s=pf2014; t=1543452214;
 bh=RRafCNyWoJ+4HXd64iHFmvCGpcVBr5tqKlqflBJuBmw=;
 h=Date:From:Reply-To:To:Cc:Subject:List-ID:List-Archive:List-Post:
 List-Unsubscribe:From;
 b=FgSsxyXrmnwYmjm8gnZbczGUKohJTvNO/5+Xpjm+Q8aeqxB8Zfx8kXMb8rbc3Btfp
 P+zrqvEOUmK8wkadpmNXxsNJH448mLYM90lK0JCrJ/j4rAp0fY4KUxzG+Sztdet05O
 V565Ssj7aFfCFOE2QfbHb7alL70wjUGhMrn+vhWo=
From: Martin Thomson <notifications@github.com>
Reply-To: quicwg/base-drafts
 <reply+0166e4aba875545860db80c60428aa957e11f70158b4442d92cf000000011816f83692a169ce16fa8bda@reply.github.com>
To: quicwg/base-drafts <base-drafts@noreply.github.com>
Cc: Subscribed <subscribed@noreply.github.com>
Message-ID: <quicwg/base-drafts/pull/2066@github.com>
Subject: [quicwg/base-drafts] Refactor DetectLostPackets (#2066)
Mime-Version: 1.0
Content-Type: multipart/alternative;
 boundary="--==_mimepart_5bff3636815fe_66f53fb08b0d45b42261e2";
 charset=UTF-8
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: martinthomson
X-GitHub-Recipient: quic-issues
X-GitHub-Reason: subscribed
X-Auto-Response-Suppress: All
X-GitHub-Recipient-Address: quic-issues@ietf.org
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic-issues/FgQXwjNNeMqoBFhC2qZXRLv5uOw>
X-BeenThere: quic-issues@ietf.org
X-Mailman-Version: 2.1.29
List-Id: Notification list for GitHub issues related to the QUIC WG
 <quic-issues.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic-issues>,
 <mailto:quic-issues-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic-issues/>
List-Post: <mailto:quic-issues@ietf.org>
List-Help: <mailto:quic-issues-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic-issues>,
 <mailto:quic-issues-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 29 Nov 2018 00:43:37 -0000


----==_mimepart_5bff3636815fe_66f53fb08b0d45b42261e2
Content-Type: text/plain;
 charset=UTF-8
Content-Transfer-Encoding: 7bit

This had a couple of problems that I think this addresses, and some that
it doesn't.

The first is that it isn't clear what is being iterated over and in what
order.  I think that the point here is to iterate over sent_packets,
starting with the oldest.  Correct me if that is wrong.  In any case,
this change doesn't assume an iteration order.  The only reason the
iteration order is important is in setting loss_time, which needs to be
the earliest time (assuming that I'm right).

This simplifies the function, by setting thresholds at the top and doing
a simple comparison.

I've added a note about loss_time potentially being in the past.

The problem that remains is that this appeared to iterate only over
packets that have a packet number less than the largest acknowledged.
I've added that condition to the loop, but I don't think that it's
right.  I think that it's just redundant - and while an implementation
might stop its iteration at the largest acknowledged to save cycles,
this function will operate the same without the extra check.

It's also not clear whether the greater than comparisons here were
correct.  If you assume that firing of the timer cannot take zero time,
this is never an issue, but with discrete intervals on time values,
that's not always going to happen.  As setup, this code could be called
at exactly loss_time for a packet, in which case that packet will not be
declared lost.  I think that this wants >= in the time comparison for
that reason.

Finally, should the early retransmit timer be configurable?  Should it
be set based on kTimeReorderingThreshold?
You can view, comment on, or merge this pull request online at:

  https://github.com/quicwg/base-drafts/pull/2066

-- Commit Summary --

  * Refactor DetectLostPackets

-- File Changes --

    M draft-ietf-quic-recovery.md (35)

-- Patch Links --

https://github.com/quicwg/base-drafts/pull/2066.patch
https://github.com/quicwg/base-drafts/pull/2066.diff

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/2066

----==_mimepart_5bff3636815fe_66f53fb08b0d45b42261e2
Content-Type: text/html;
 charset=UTF-8
Content-Transfer-Encoding: 7bit

<p>This had a couple of problems that I think this addresses, and some that<br>
it doesn't.</p>
<p>The first is that it isn't clear what is being iterated over and in what<br>
order.  I think that the point here is to iterate over sent_packets,<br>
starting with the oldest.  Correct me if that is wrong.  In any case,<br>
this change doesn't assume an iteration order.  The only reason the<br>
iteration order is important is in setting loss_time, which needs to be<br>
the earliest time (assuming that I'm right).</p>
<p>This simplifies the function, by setting thresholds at the top and doing<br>
a simple comparison.</p>
<p>I've added a note about loss_time potentially being in the past.</p>
<p>The problem that remains is that this appeared to iterate only over<br>
packets that have a packet number less than the largest acknowledged.<br>
I've added that condition to the loop, but I don't think that it's<br>
right.  I think that it's just redundant - and while an implementation<br>
might stop its iteration at the largest acknowledged to save cycles,<br>
this function will operate the same without the extra check.</p>
<p>It's also not clear whether the greater than comparisons here were<br>
correct.  If you assume that firing of the timer cannot take zero time,<br>
this is never an issue, but with discrete intervals on time values,<br>
that's not always going to happen.  As setup, this code could be called<br>
at exactly loss_time for a packet, in which case that packet will not be<br>
declared lost.  I think that this wants &gt;= in the time comparison for<br>
that reason.</p>
<p>Finally, should the early retransmit timer be configurable?  Should it<br>
be set based on kTimeReorderingThreshold?</p>

<hr>

<h4>You can view, comment on, or merge this pull request online at:</h4>
<p>&nbsp;&nbsp;<a href='https://github.com/quicwg/base-drafts/pull/2066'>https://github.com/quicwg/base-drafts/pull/2066</a></p>

<h4>Commit Summary</h4>
<ul>
  <li>Refactor DetectLostPackets</li>
</ul>

<h4>File Changes</h4>
<ul>
  <li>
    <strong>M</strong>
    <a href="https://github.com/quicwg/base-drafts/pull/2066/files#diff-0">draft-ietf-quic-recovery.md</a>
    (35)
  </li>
</ul>

<h4>Patch Links:</h4>
<ul>
  <li><a href='https://github.com/quicwg/base-drafts/pull/2066.patch'>https://github.com/quicwg/base-drafts/pull/2066.patch</a></li>
  <li><a href='https://github.com/quicwg/base-drafts/pull/2066.diff'>https://github.com/quicwg/base-drafts/pull/2066.diff</a></li>
</ul>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">&mdash;<br />You are receiving this because you are subscribed to this thread.<br />Reply to this email directly, <a href="https://github.com/quicwg/base-drafts/pull/2066">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/AWbkq8XzlsoOi0ErNZRM3T-2xn9VskvFks5uzy22gaJpZM4Y4tgj">mute the thread</a>.<img src="https://github.com/notifications/beacon/AWbkqwv-kGpJvMuWEfmMRkt7itiKs5swks5uzy22gaJpZM4Y4tgj.gif" height="1" width="1" alt="" /></p>
<script type="application/json" data-scope="inboxmarkup">{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/quicwg/base-drafts","title":"quicwg/base-drafts","subtitle":"GitHub repository","main_image_url":"https://assets-cdn.github.com/images/email/message_cards/header.png","avatar_image_url":"https://assets-cdn.github.com/images/email/message_cards/avatar.png","action":{"name":"Open in GitHub","url":"https://github.com/quicwg/base-drafts"}},"updates":{"snippets":[{"icon":"DESCRIPTION","message":"Refactor DetectLostPackets (#2066)"}],"action":{"name":"View Pull Request","url":"https://github.com/quicwg/base-drafts/pull/2066"}}}</script>
<script type="application/ld+json">[
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ViewAction",
"target": "https://github.com/quicwg/base-drafts/pull/2066",
"url": "https://github.com/quicwg/base-drafts/pull/2066",
"name": "View Pull Request"
},
"description": "View this Pull Request on GitHub",
"publisher": {
"@type": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
},
{
"@type": "MessageCard",
"@context": "http://schema.org/extensions",
"hideOriginalBody": "false",
"originator": "AF6C5A86-E920-430C-9C59-A73278B5EFEB",
"title": "Refactor DetectLostPackets (#2066)",
"sections": [
{
"text": "",
"activityTitle": "**Martin Thomson**",
"activityImage": "https://assets-cdn.github.com/images/email/message_cards/avatar.png",
"activitySubtitle": "@martinthomson",
"facts": [

]
},
{
"title": "Commit Summary",
"facts": [
{
"name": "1102009",
"value": "Refactor DetectLostPackets"
}
]
},
{
"title": "File Changes",
"facts": [
{
"name": "Modified",
"value": "[draft-ietf-quic-recovery.md](https://github.com/quicwg/base-drafts/pull/2066/files#diff-0) (35 changes)"
}
]
}
],
"potentialAction": [
{
"name": "Add a comment",
"@type": "ActionCard",
"inputs": [
{
"isMultiLine": true,
"@type": "TextInput",
"id": "IssueComment",
"isRequired": false
}
],
"actions": [
{
"name": "Comment",
"@type": "HttpPOST",
"target": "https://api.github.com",
"body": "{\n\"commandName\": \"IssueComment\",\n\"repositoryFullName\": \"quicwg/base-drafts\",\n\"issueId\": 2066,\n\"IssueComment\": \"{{IssueComment.value}}\"\n}"
}
]
},
{
"name": "Close pull request",
"@type": "HttpPOST",
"target": "https://api.github.com",
"body": "{\n\"commandName\": \"PullRequestClose\",\n\"repositoryFullName\": \"quicwg/base-drafts\",\n\"pullRequestId\": 2066\n}"
},
{
"targets": [
{
"os": "default",
"uri": "https://github.com/quicwg/base-drafts/pull/2066"
}
],
"@type": "OpenUri",
"name": "View on GitHub"
},
{
"targets": [
{
"os": "default",
"uri": "https://github.com/quicwg/base-drafts/pull/2066.patch"
}
],
"@type": "OpenUri",
"name": "View patch"
},
{
"targets": [
{
"os": "default",
"uri": "https://github.com/quicwg/base-drafts/pull/2066.diff"
}
],
"@type": "OpenUri",
"name": "View diff"
},
{
"name": "Unsubscribe",
"@type": "HttpPOST",
"target": "https://api.github.com",
"body": "{\n\"commandName\": \"MuteNotification\",\n\"threadId\": 417519651\n}"
}
],
"themeColor": "26292E"
}
]</script>

----==_mimepart_5bff3636815fe_66f53fb08b0d45b42261e2--

