[icnrg] Some comments on the CCNx Selectors draft (https://datatracker.ietf.org/doc/draft-mosko-icnrg-selectors/)

"David R. Oran" <daveoran@orandom.net> Sun, 02 June 2019 13:40 UTC

Return-Path: <daveoran@orandom.net>
X-Original-To: icnrg@ietfa.amsl.com
Delivered-To: icnrg@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 841231200A3 for <icnrg@ietfa.amsl.com>; Sun, 2 Jun 2019 06:40:05 -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_HELO_NONE=0.001, SPF_PASS=-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 n5-sJ_JAMcFF for <icnrg@ietfa.amsl.com>; Sun, 2 Jun 2019 06:40:03 -0700 (PDT)
Received: from spark.crystalorb.net (spark.crystalorb.net [IPv6:2607:fca8:1530::c]) (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 251ED120043 for <icnrg@irtf.org>; Sun, 2 Jun 2019 06:40:03 -0700 (PDT)
Received: from [192.168.171.1] ([IPv6:2601:184:4081:19c1:fd03:a148:47c0:514e]) (authenticated bits=0) by spark.crystalorb.net (8.14.4/8.14.4/Debian-4+deb7u1) with ESMTP id x52DdveP028477 (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256 verify=NO); Sun, 2 Jun 2019 06:39:59 -0700
From: "David R. Oran" <daveoran@orandom.net>
To: "Mosko, Marc" <mmosko@parc.com>, ICNRG <icnrg@irtf.org>
Date: Sun, 02 Jun 2019 09:39:56 -0400
X-Mailer: MailMate (1.12.5r5635)
Message-ID: <89236739-5137-496D-8A6A-699730D1CC82@orandom.net>
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="=_MailMate_49671E41-D582-4D7A-8853-6CBD4520360A_="
Content-Transfer-Encoding: 8bit
Archived-At: <https://mailarchive.ietf.org/arch/msg/icnrg/6IYlUWspO1hmokcpee0r5oR97xM>
Subject: [icnrg] Some comments on the CCNx Selectors draft (https://datatracker.ietf.org/doc/draft-mosko-icnrg-selectors/)
X-BeenThere: icnrg@irtf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Information-Centric Networking research group discussion list <icnrg.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/icnrg>, <mailto:icnrg-request@irtf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/icnrg/>
List-Post: <mailto:icnrg@irtf.org>
List-Help: <mailto:icnrg-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/icnrg>, <mailto:icnrg-request@irtf.org?subject=subscribe>
X-List-Received-Date: Sun, 02 Jun 2019 13:40:06 -0000

All comments with <chair hat off>

Content discovery is important, so I’d like to see something adopted 
by the RG for formal progression to experimental.

I’d like to step back a bit though and ask if evolving the approach in 
CCNx 0.x and NDN is appropriate knowing what we’ve learned in the last 
few years. The current selectors draft 
(https://datatracker.ietf.org/doc/draft-mosko-icnrg-selectors/) 
basically fixes the original design mistake of forcing all forwarders to 
do discovery through prefix match on CS data. It does this by leveraging 
typed name components and using an encapsulation technique so that 
whatever object that matches the selectors can be returned as 
“native” - with its original name and signature.

On the other hand, it still has the following properties:

- returns only one object when multiple might match

- does not have a completely deterministic answer in the presence of 
cache/repo/producer instance desynchronization (not clear this is 
avoidable since we have a distributed system with at best eventual 
consistency semantics)

- requires exclusions, which can make for big interests that in turn 
causes fragmentation to be needed and complicates congestion control as 
a consequence.

- seems to still permit cache exploration (since the selector interests 
are not authenticated), which might be viewed as a privacy problem.

I don’t have a concrete proposal to make though. Here are a few 
thoughts about a possible alternative approach:

- Since we depend a lot more on Manifests now that the original NDN & 
CCNx 0.x designs, why not have the discovery return a Manifest instead 
of a single encapsulated object?

- Since we have fast exact match and nameless objects along with now 
permitting objects to have multiple names and hence multiple ways 
objects can be discovered, perhaps we can exploit that to allow 
different discovery patterns rather than smooshing everything into a 
static/brittle set of selectors

- Some of the properties were driven by trying to make discovery cheap 
and ubiquitous and hence forced into casting discovery as a direct 
single Interest/Data exchange. Since we now know that pawing through a 
large CS or Repo can be computational expensive (and even require a fair 
amount of I/O), maybe this tradeoff isn’t attractive. We now have 
experience with distributed method invocation (e.g. NFN and RICE) so 
maybe we do discovery as an explicit remote method. This may solve a few 
problems:

	- We can do authentication and key exchange, so discovery operations 
and results can be more private and cache exploration is no longer a 
hazard

	- It might make it easier to build extensibility into the supported 
discovery patterns as all of them might not need to be supported by all 
discovery services. (Aside - it seems that a similar direction is being 
taken in the fast-repo work for NDN, where a given application can 
design patterns for the Repo to fetch the right stuff for storage of 
that application’s data).

	- We can more easily manage the resources for expensive discovery 
operations, and following the idea of using Manifests, make those the 
result of the discovery computation.
	- By essentially “binding” to one of the discovery 
services/servers, it may be possible to get a more internally-consistent 
set of results.

Yes, this might make discovery a lot more “expensive” in terms of 
RTTs but in the end it might also make applications easier to write with 
patterns that look more like what the application considers “native” 
and the results as a Manifest easier to paw through and possibly iterate 
on.

Thoughts?

DaveO