Re: Review of draft-toomim-httpbis-versions-00
Michael Toomim <toomim@gmail.com> Thu, 25 July 2024 10:24 UTC
Received: by ietfa.amsl.com (Postfix) id 7A582C1840C0; Thu, 25 Jul 2024 03:24:40 -0700 (PDT)
Delivered-To: ietfarch-httpbisa-archive-bis2juki@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 7993BC180B68 for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Thu, 25 Jul 2024 03:24:40 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.857
X-Spam-Level:
X-Spam-Status: No, score=-2.857 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, HEADER_FROM_DIFFERENT_DOMAINS=0.25, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_BLOCKED=0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=w3.org header.b="HNQauPCM"; dkim=pass (2048-bit key) header.d=w3.org header.b="NfKVkbzA"; dkim=pass (2048-bit key) header.d=gmail.com header.b="cbJb0AZc"
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id RpwMYqtn4a0p for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Thu, 25 Jul 2024 03:24:36 -0700 (PDT)
Received: from mab.w3.org (mab.w3.org [IPv6:2600:1f18:7d7a:2700:d091:4b25:8566:8113]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id EDD63C169506 for <httpbisa-archive-bis2Juki@ietf.org>; Thu, 25 Jul 2024 03:24:35 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=w3.org; s=s1; h=Subject:In-Reply-To:References:To:From:MIME-Version:Date:Message-ID: Content-Type:Cc:Reply-To; bh=3kwfkTnjFdBghY4w8F0XfJYSeqZFN9pU4hhn9nvR3RQ=; b= HNQauPCMlKgIZXco2CMwTrei0lZGrrbxvRmI8gJK4hVdvUOhg5GefRA01Xj1Gn14MEHcYS42R9Dpv s9TgIjPtJ8T3QZucXUupJg9IXzFM72f//L7yDPJ9uPEmwft4w0c9QDosAfAxpQLJ38dUL2e4iXquL +eJ3aIucWDpJZ6oHtE0/EtnBbbs2IlLeouQiTa2Wzou77IprJbUIlM+1EqCfr07GlkSTP803cTg3A UhN7jpbfuuMEQ/4ydRuKA5+OMa7ifKKuTgDhJdGiGvtFDbpxch8i68pIq4rDv63RrxqHN+6S2DvdV Ci/allYA2SnWug/iDd/Uk6yHMVcqu203Eg==;
Received: from lists by mab.w3.org with local (Exim 4.96) (envelope-from <ietf-http-wg-request@listhub.w3.org>) id 1sWvdm-006hRb-0L for ietf-http-wg-dist@listhub.w3.org; Thu, 25 Jul 2024 10:24:06 +0000
Resent-Date: Thu, 25 Jul 2024 10:24:06 +0000
Resent-Message-Id: <E1sWvdm-006hRb-0L@mab.w3.org>
Received: from ip-10-0-0-224.ec2.internal ([10.0.0.224] helo=puck.w3.org) by mab.w3.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from <toomim@gmail.com>) id 1sWvdk-006hQg-0a for ietf-http-wg@listhub.w3.internal; Thu, 25 Jul 2024 10:24:04 +0000
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=w3.org; s=s1; h=In-Reply-To:References:To:From:Subject:MIME-Version:Date:Message-ID: Content-Type:Cc:Reply-To; bh=3kwfkTnjFdBghY4w8F0XfJYSeqZFN9pU4hhn9nvR3RQ=; t=1721903044; x=1722767044; b=NfKVkbzAXs5As16g9zUC0RuhsIEVpVSdJBSXocg4y1DC7AE ZD5/0KT8PhEx3ZOCKXVidNzKOORK7t+ZDkmp1P9uMXHsr18toiXhOuYy8ROqJZvdeAGdFyDTAOl9D pbmFP5tD1eSOOhdH932dAnTsrHaILXo7xhGSA7ZlvwYN8+5KKLBNH/3czOcjgI150EcyWXlzJvUJA UHVl4cEBugWV/ubVSOboh26Foqv93RsKbac1BnQ6cMg8CB4Bh2/03BNqWLjVdeUZPauCKyNUjeF27 tb7B0PeWMdOibYfut6TJE9It3YLEahP0I78NBWIKaVDc4HXnZsyOr56XGjBQHE4A==;
Received-SPF: pass (puck.w3.org: domain of gmail.com designates 2607:f8b0:4864:20::52f as permitted sender) client-ip=2607:f8b0:4864:20::52f; envelope-from=toomim@gmail.com; helo=mail-pg1-x52f.google.com;
Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]) by puck.w3.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from <toomim@gmail.com>) id 1sWvdj-004O9a-0E for ietf-http-wg@w3.org; Thu, 25 Jul 2024 10:24:04 +0000
Received: by mail-pg1-x52f.google.com with SMTP id 41be03b00d2f7-7a1215dd114so538489a12.1 for <ietf-http-wg@w3.org>; Thu, 25 Jul 2024 03:24:02 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1721903039; x=1722507839; darn=w3.org; h=in-reply-to:content-language:references:to:from:subject:user-agent :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=3kwfkTnjFdBghY4w8F0XfJYSeqZFN9pU4hhn9nvR3RQ=; b=cbJb0AZc88SivrjFWIKgiKJAIzE/pdXkuI9iGAO/FEtxq3+WLQGzpl2Rjzptrht5kX C0e5X29qIfouZPiavwVKsgDIc4aMpLGbA9YyoDgzZmdZkgzJLYvvXE6/KbdiaaTfkfI+ IE5xHrLnEyg0XToXVeHgg9wsLWZPiP8LUOQPED07v85rHRzVQayp24MvaCtoUmhsKJCE O8itw+plRTsd3MyU0Z4NKkOGAgrjtml2PJFmbvdIovzq5dlOzE3hGawsM3xJ00Qq+VTc Ul+bQl6Abpc4p4t5CqgTIf5e0buKOc56ARHQjFjexSc9VmVEiZ0Ilc//G+hoxDD+eSAT UlLA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721903039; x=1722507839; h=in-reply-to:content-language:references:to:from:subject:user-agent :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=3kwfkTnjFdBghY4w8F0XfJYSeqZFN9pU4hhn9nvR3RQ=; b=jd2dXFBGoxG86is8XLcskL8MEFFRjKZ6BTfLpKOEfQ66azprzclRDKDBo8Hhw1kwvF 4BXj5rySoTUNUAU0mXS+YiuHfDaeWb/qbN6fpYlSP/fPyIUQ5QxYSVwAbtXfhTQikdab xiUj1G7KxkR1QOW4RkEnk2OcAVj/S43MAm36ZlyVjPbLLTrRi6xL9iFKBEcLZM4b1ihY ez9FsbuqsQErKMcsbqHkpS0FZiYsLfpXYIyKSBveHi/oLu5aslSDoBN3LoSxDwhjM53k V9VC76aZrdZSAePy1Hi97vulR7LbcWMY9petIq/mxuOWy44+sAqbbsj0FWYxglfnpMq3 t9fA==
X-Gm-Message-State: AOJu0YwCUiMEhxIAZ/3jwlccGWaB+Qaj2rA4hdKtaQV4yqGcvkEUXFFA W53mCaK08xg3sWqN/RyOixMYxkMVFELZSMJHs4s4c2Hkqnq/lwE9LDcu5g1OYrI=
X-Google-Smtp-Source: AGHT+IHJC390OB8pBY15Y9RLeFuidHJRowMYLJUdhPXvlXshl0W81lpwF7HK2BstJ/fihEEr1tFI3w==
X-Received: by 2002:a05:6a21:2d08:b0:1c0:e54b:5649 with SMTP id adf61e73a8af0-1c47b1666fbmr1893426637.4.1721903038316; Thu, 25 Jul 2024 03:23:58 -0700 (PDT)
Received: from [172.31.7.130] ([207.194.231.35]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2cdb74e8962sm3200865a91.43.2024.07.25.03.23.57 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 25 Jul 2024 03:23:57 -0700 (PDT)
Content-Type: multipart/alternative; boundary="------------j3yIs4AXg28IFsRix1l8s0Mi"
Message-ID: <f04e6822-e49a-430f-a605-6547f20b96d6@gmail.com>
Date: Thu, 25 Jul 2024 03:23:56 -0700
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
From: Michael Toomim <toomim@gmail.com>
To: HTTP Working Group <ietf-http-wg@w3.org>, Braid <braid-http@googlegroups.com>, Peter van Hardenberg <pvh@pvh.ca>, Martin Kleppmann <martin@kleppmann.com>
References: <172046173132.445281.15041630415895010148@dt-datatracker-5f88556585-j5r2h> <ff54cd4f-c30e-4447-8744-3297e53b74be@gmail.com> <16912382-c530-4508-b457-4397d06acd46@gmail.com> <0a25c83e-6941-464e-9252-8ca98960226a@gmail.com> <ba9bd07d-b648-4afc-8c78-4ec05d2e1797@gmail.com>
Content-Language: en-US
In-Reply-To: <ba9bd07d-b648-4afc-8c78-4ec05d2e1797@gmail.com>
X-W3C-Hub-DKIM-Status: validation passed: (address=toomim@gmail.com domain=gmail.com), signature is good
X-W3C-Hub-Spam-Status: No, score=-5.1
X-W3C-Hub-Spam-Report: BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, DMARC_PASS=-0.001, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, W3C_AA=-1, W3C_DB=-1, W3C_WL=-1
X-W3C-Scan-Sig: puck.w3.org 1sWvdj-004O9a-0E b933be9c19a01945c7cddf4b5dc8d479
X-Original-To: ietf-http-wg@w3.org
Subject: Re: Review of draft-toomim-httpbis-versions-00
Archived-At: <https://www.w3.org/mid/f04e6822-e49a-430f-a605-6547f20b96d6@gmail.com>
Resent-From: ietf-http-wg@w3.org
X-Mailing-List: <ietf-http-wg@w3.org> archive/latest/52132
X-Loop: ietf-http-wg@w3.org
Resent-Sender: ietf-http-wg-request@w3.org
Precedence: list
List-Id: <ietf-http-wg.w3.org>
List-Help: <https://www.w3.org/email/>
List-Post: <mailto:ietf-http-wg@w3.org>
List-Unsubscribe: <mailto:ietf-http-wg-request@w3.org?subject=unsubscribe>
Peter and Martin, I've hit "publish" on the explanation for how to compress history with Version-Types: https://datatracker.ietf.org/doc/html/draft-toomim-httpbis-versions#section-5.1 You can simply review these sections (5.1 and 5.2) instead of the long list of links below. Does this address your concerns? Thanks, Michael On 7/22/24 4:49 PM, Michael Toomim wrote: > > Peter, I just wrote up an explicit example of how to compress four > PUTs into 7 bytes. Check out the new section 5.1 here: > > https://github.com/braid-org/braid-spec/blob/master/draft-toomim-httpbis-versions-01.txt#L945 > > These four puts compress down to 0.0146% of their original size, at > least in theory. Note that said compression scheme isn't fully > specified in this draft — the focus of this draft is just to gather > interest in working on a versioning system that makes such compression > possible. The actual compression schemes would be future work. > > On 7/22/24 12:41 PM, Michael Toomim wrote: >> >> Peter, thank you for your interest! I'm excited that you are bringing >> up performance for discussion! There's a lot to say on that, and I >> give an overview below: >> >> *== Compression & Performance ==* >> >> First, let me correct a big misinterpretation— this work absolutely >> prioritizes *high-performance*, *realtime* data synchronization. It >> should support thousands of mutations per second. Our implementations >> are higher-performance <https://josephg.com/blog/crdts-go-brrr/> than >> Automerge, for instance. I regularly work today with a doc composed >> of 110,000 edits. It loads instantly, thanks to some great >> Version-Types we've designed. >> >> The Version-Type (in the proposed Version-Type header) is the way you >> get performance increases. The key to performance is managing history >> growth. You manage that by finding a pattern in history, and then >> compressing or ignoring history. You can express those patterns as a >> Version-Type spec. (There's a robust theory behind this called Time >> Machines.) >> >> I apologize that this wasn't clear in the draft -00. I thought this >> would be an advanced feature that people wouldn't comment on for a >> bit — but am pleasantly surprised to hear your interest in it! I will >> be adding more clarity to the spec on Version-Types, and already have >> begun doing so in github: >> >> https://github.com/braid-org/braid-spec/blob/master/draft-toomim-httpbis-versions-01.txt#L885 >> >> I'd also encourage you to check out this sketch of how to bake RLE >> into HTTP Header Compression: >> >> https://braid.org/meeting-69/header-compression >> https://braid.org/video/https://invisiblecollege.s3.us-west-1.amazonaws.com/braid-meeting-69.mp4#4166 >> >> In any case, keep in mind that at this stage, we need to know only >> whether there is /interest/ in this area of work — not whether this >> particular spec meets your needs. If we adopt this work into the HTTP >> WG, we will get a chance to change or rewrite any part of the spec. >> This spec is just a starting point to get discussion going. So think >> of this as a problem statement rather than a solution statement. >> >> *== PUTs ==* >> >> As for PUTs, I suspect you might be thinking about HTTP/1.0 where >> each PUT might require a new TCP connection with its own TLS >> handshake. But keep in mind that with HTTP/2 and 3, all HTTP >> semantics are expressed in binary, and a PUT is usually just a single >> packet! This is just as efficient as any hand-rolled protocol you >> have, and it has the advantage of being interoperable with all of HTTP. >> >> *== History Retention == >> * >> >> This versioning model supports Time Machines >> <https://braid.org/time-machines>— the beauty of which is that peers >> become free to independently choose how much history to store. An >> archival peer can store the full history. A light client can store >> just the latest version (see the amazing Simpleton >> <https://braid.org/simpleton> client, which needs zero history). >> >> So each peer can choose how much history to store. If a peer doesn't >> have enough history to merge an edit, it can simply request that >> history from another peer. In this draft, you do so by requesting a >> GET with both Version and Parents headers specified. >> >> *== Signatures & Validation == >> * >> >> This is out of scope for this proposal on versions. However, (a) >> there are some Version-Types that double as signatures. When this >> happens, it can be specified by authoring a Version-Type spec to >> articulate the new constraint. And (b) this is a generally important >> area of work that I encourage. >> >> Cheers! >> >> Michael >> >> On 7/22/24 11:44 AM, Michael Toomim wrote: >>> >>> We've got divergent discussion threads that I'm merging together. >>> >>> First, Peter Van Hardenberg (of Ink & Switch, Local-First, and >>> Automerge) wrote this initial review of the draft. He's cc'd, and we >>> can respond in this thread. >>> >>> ------------------------ >>> -- Peter Van Hardenberg: -- >>> ------------------------ >>> >>> Hi Michael, >>> >>> I had a quick look at the spec and gave some thought to whether we'd >>> want to adopt it. I think right now it has quite a lot of >>> per-version overhead, and viewing this through a local-first lens, >>> one can imagine having to publish a large number of versions each as >>> separate PUT calls. You might want to consider supporting ranges for >>> PUT in a single message. >>> >>> Overall, our goals appear to differ from what you're proposing here >>> so this feedback may not be particularly important. My sense is that >>> the expected granularity of changes for Braid is relatively >>> large and that the frequency is relatively long -- on par with a >>> changed HTML form submission, perhaps. We spend quite a lot of our >>> time thinking about optimizing updates for potentially thousands of >>> edits and trying to minimize the number of round trips required to >>> synchronize state in both directions. You mention that the design >>> intends to be optimizable but I didn't see much in the text that >>> clarified how. >>> >>> One other observation is that this spec does not appear to >>> prioritize retention of history: >>> > - If the Parents header is absent, the server SHOULD return a >>> > single response, containing the requested version of the resource >>> > in its body, with the Version response header set to the same >>> > version. >>> This design may centralize the system, as clients default to >>> receiving "flattened" versions of resources and thus may not be able >>> to merge changes from other sources. >>> >>> Last, have you considered specifying some kind of signature / >>> validation feature? If clients are applying patches iteratively, it >>> might help for them to be able to validate that they're in the >>> expected state either before or after applying a patch. >>> >>> All the best, >>> -p >>> >>> On 7/15/24 6:26 PM, Michael Toomim wrote: >>>> >>>> Hi everyone in HTTP! >>>> >>>> Last fall we solicited feedback on the Braid State Synchronization >>>> proposal [draft >>>> <https://datatracker.ietf.org/doc/html/draft-toomim-httpbis-braid-http-04>, >>>> slides >>>> <https://datatracker.ietf.org/meeting/118/materials/slides-118-httpbis-braid-http-add-synchronization-to-http-00>], >>>> which I'd summarize as: >>>> >>>> "We're enthusiastic about the general work, but the proposal is >>>> too high-level. Break the spec up into multiple independent >>>> specs, and work bottom-up. Focus on concrete 'bits-on-the-wire'." >>>> >>>> So I'm breaking the spec up, and have drafted up the first chunk >>>> for you. I would very much like your review on: >>>> >>>> *Versioning of HTTP Resources* >>>> draft-toomim-httpbis-versions >>>> https://datatracker.ietf.org/doc/html/draft-toomim-httpbis-versions-00 >>>> >>>> Versioning is necessary for state synchronization—and occurs in a >>>> range of HTTP systems: >>>> >>>> * Caching >>>> * Archiving >>>> * Version Control >>>> * Collaborative Editing >>>> >>>> Today, HTTP has resource versions in the Last-Modified and ETag >>>> headers, and sometimes embeds versions in URLs, like with WebDAV. >>>> Each of these options serves some needs, but also has specific >>>> limitations. An improved general approach is proposed, which >>>> provides new features, that could enable cool new applications, >>>> such as incrementally-updated RSS feeds, and could simplify >>>> existing specifications, such as resumeable uploads, and history >>>> compression in OT/CRDT algorithms. >>>> >>>> I would love to know if people find this work interesting. I think >>>> we could improve performance, interoperability, and be one step >>>> closer to having Google Docs power within HTTP URLs. >>>> >>>> Michael >>>> >>>> -------- Forwarded Message -------- >>>> Subject: New Version Notification for >>>> draft-toomim-httpbis-versions-00.txt >>>> Date: Mon, 08 Jul 2024 11:02:11 -0700 >>>> From: internet-drafts@ietf.org >>>> To: Michael Toomim <toomim@gmail.com> >>>> >>>> >>>> >>>> A new version of Internet-Draft >>>> draft-toomim-httpbis-versions-00.txt has been >>>> successfully submitted by Michael Toomim and posted to the >>>> IETF repository. >>>> >>>> Name: draft-toomim-httpbis-versions >>>> Revision: 00 >>>> Title: HTTP Resource Versioning >>>> Date: 2024-07-08 >>>> Group: Individual Submission >>>> Pages: 19 >>>> URL: >>>> https://www.ietf.org/archive/id/draft-toomim-httpbis-versions-00.txt >>>> Status: https://datatracker.ietf.org/doc/draft-toomim-httpbis-versions/ >>>> HTMLized: >>>> https://datatracker.ietf.org/doc/html/draft-toomim-httpbis-versions >>>> >>>> >>>> Abstract: >>>> >>>> HTTP resources change over time. Each change to a resource creates a >>>> new "version" of its state. HTTP systems often need a way to >>>> identify, read, write, navigate, and/or merge these versions, in >>>> order to implement cache consistency, create history archives, settle >>>> race conditions, request incremental updates to resources, interpret >>>> incremental updates to versions, or implement distributed >>>> collaborative editing algorithms. >>>> >>>> This document analyzes existing methods of versioning in HTTP, >>>> highlights limitations, and sketches a more general versioning >>>> approach that can enable new use-cases for HTTP. >>>> >>>> >>>> >>>> The IETF Secretariat >>>> >>>>
- Fwd: New Version Notification for draft-toomim-ht… Michael Toomim
- Re: New Version Notification for draft-toomim-htt… Rory Hewitt
- Review of draft-toomim-httpbis-versions-00 Michael Toomim
- Re: New Version Notification for draft-toomim-htt… Michael Toomim
- Re: Review of draft-toomim-httpbis-versions-00 Michael Toomim
- Re: Review of draft-toomim-httpbis-versions-00 Michael Toomim
- Re: [braid] Re: New Version Notification for draf… Rory Hewitt
- Review of draft-toomim-httpbis-versions-00 Michael Toomim
- Re: Review of draft-toomim-httpbis-versions-00 Marius Kleidl
- Re: New Version Notification for draft-toomim-htt… Julian Reschke
- Re: New Version Notification for draft-toomim-htt… Michael Toomim
- Re: [braid] Re: New Version Notification for draf… Michael Toomim
- Re: [braid] Re: New Version Notification for draf… Michael Toomim
- Re: Review of draft-toomim-httpbis-versions-00 Michael Toomim
- Re: Review of draft-toomim-httpbis-versions-00 Michael Toomim
- Re: Review of draft-toomim-httpbis-versions-00 Michael Toomim
- Re: Fwd: New Version Notification for draft-toomi… Julian Reschke
- Re: Fwd: New Version Notification for draft-toomi… Josh Cohen
- Re: Fwd: New Version Notification for draft-toomi… Lisa Dusseault
- Re: Fwd: New Version Notification for draft-toomi… Michael Toomim
- Re: Review of draft-toomim-httpbis-versions-00 Michael Toomim
- Re: Fwd: New Version Notification for draft-toomi… Josh Cohen
- Re: Review of draft-toomim-httpbis-versions-00 Ben Schwartz
- Re: Review of draft-toomim-httpbis-versions-00 Michael Toomim