Re: [alto] Discussion on how to encode element values of a cost map

Jensen Zhang <jingxuan.n.zhang@gmail.com> Mon, 18 July 2016 19:08 UTC

Return-Path: <jingxuan.n.zhang@gmail.com>
X-Original-To: alto@ietfa.amsl.com
Delivered-To: alto@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id BAB4712D133 for <alto@ietfa.amsl.com>; Mon, 18 Jul 2016 12:08:09 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.699
X-Spam-Level:
X-Spam-Status: No, score=-2.699 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.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 67G5tTPYh5yP for <alto@ietfa.amsl.com>; Mon, 18 Jul 2016 12:08:07 -0700 (PDT)
Received: from mail-oi0-x22b.google.com (mail-oi0-x22b.google.com [IPv6:2607:f8b0:4003:c06::22b]) (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 E425212B00D for <alto@ietf.org>; Mon, 18 Jul 2016 12:08:06 -0700 (PDT)
Received: by mail-oi0-x22b.google.com with SMTP id j185so259591006oih.0 for <alto@ietf.org>; Mon, 18 Jul 2016 12:08:06 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=6S886OClcZ3YgXrwptS4nPF7rABrXTbRLMiEjOdGzc4=; b=isMv3qSiWuvjIf+/naUAPbRmezR13epqsoOupwTwg09Qp2ETUzqAETcLeyIuGqwKFm SshgYcZWjX6LoubUbbvlSPz+DX74QyGfw1lY0HdBFuYq56+35l4/LKRyxYpbqtcp4eNY wwnduRe2u/EhqeoIJdFPFbEuD1z0dXZFtuh/LFol/gdATFdv2uMPfUGFxpNxuY6hpMqH egSxk/0TzKrcqg8ucMKsfqbGGW1De2paytuW/prl5YfQtVJjZIWkzMEUtL/R7vhtl9mo ekYS4ulkRrrn7YsE+yGQYEDFrApHyj0ma3orcXgKSRSdRMTYdRjPJ0RWMUZbhaBd4z33 zy+A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=6S886OClcZ3YgXrwptS4nPF7rABrXTbRLMiEjOdGzc4=; b=SGoqLqxhVNhFRB2H1PNX39hQW9pLEqTJcqRDHVRK+m/BzPvNZAD88WfXGXQj6Gq/Tj kyFi5mE2uYhZyqjU1ADXRusUQbOMROzbtgSaDEc3/PYVTqB69YGPNeEBd9ZjG327vlNo Ui76gCGF6y1JUx2DDoQK3fuVPgjCFia3rFUOq2x6Mu8uJVPWqykGsHa6FJdz5JFJ2Zgs 43CurFNMtJzNCH8dQZXzHuCxhXfwkkZfg7VetpltiznuokzW05etFzn0RJc5i6P4Ae+w O1MgGA5WlndFSVBTv2ok/ZY9XW4MnlgioBIry5W3dRGXg/V22YF2+IlHQ+HfS8U8Zy0o HZ4A==
X-Gm-Message-State: ALyK8tLMSjN1FwpUREFWb/ABw6kwigFS5Dzopv599vjSvuQRfBAkIM5y1RLcmdbr8t0/mw2W4HRyi7rdHc59lA==
X-Received: by 10.157.46.97 with SMTP id c30mr21047280otd.14.1468868885179; Mon, 18 Jul 2016 12:08:05 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.157.52.145 with HTTP; Mon, 18 Jul 2016 12:08:04 -0700 (PDT)
In-Reply-To: <CANUuoLrAXmDuLb7-p7Zfv+6WhM_kDazyc5jUvrCmiAA41S5r8w@mail.gmail.com>
References: <CANUuoLrAXmDuLb7-p7Zfv+6WhM_kDazyc5jUvrCmiAA41S5r8w@mail.gmail.com>
From: Jensen Zhang <jingxuan.n.zhang@gmail.com>
Date: Tue, 19 Jul 2016 03:08:04 +0800
Message-ID: <CAAbpuyqCZDbeYtXJmKDJMns=ebOtctuUZaKE-xNGkHxNrBht1w@mail.gmail.com>
To: "Y. Richard Yang" <yry@cs.yale.edu>
Content-Type: multipart/alternative; boundary="001a113990c61f73ad0537edb08e"
Archived-At: <https://mailarchive.ietf.org/arch/msg/alto/bdhjAaK3XNcqury7YQdCqHrrGr8>
Cc: IETF ALTO <alto@ietf.org>, Nico Schwan <nico.schwan@thalesgroup.com>
Subject: Re: [alto] Discussion on how to encode element values of a cost map
X-BeenThere: alto@ietf.org
X-Mailman-Version: 2.1.17
Precedence: list
List-Id: "Application-Layer Traffic Optimization \(alto\) WG mailing list" <alto.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/alto>, <mailto:alto-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/alto/>
List-Post: <mailto:alto@ietf.org>
List-Help: <mailto:alto-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/alto>, <mailto:alto-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 18 Jul 2016 19:08:09 -0000

Personally speaking, I think there are two issues about cost-type
definition:

1) How to make the compound type compatible with RFC7285;
2) How to extend single cost-type easily. (Maybe we want to support generic
types)

A simple design I think is to introduce a special cost-mode called
"compound". When cost-mode value is "compound", "multi-cost-types" field
will be required. If the cost-mode value is not equal to "compound", we
need to suppose the cost-type is always a single type.

I don't think about the benefit from supporting generic types very clearly.
We can introduce another some basic cost-mode like identity, vector and map.

The recommended usage can look like:

if meta.cost-type.cost-mode == "compound"
  ElemType is array && "multi-cost-types" field is required
else if meta.cost-type.cost-mode == "numerical"
  ElemType is number
else if meta.cost-type.mode == "ordinal"
  ElemType is non-negative int
else if meta.cost-type.mode == "identity"
  ElemType is string
else if meta.cost-type.mode == "vector"
  ElemType is array
else if meta.cost-type.mode == "map"
  ElemType is object

I think it is general enough to express arbitrary JSONValue. But I am not
sure making the cost-mode cover generic types is helpful. Actually,
"vector" and "map" are not single types. They are compound types indeed. If
we want to express the cost-type accurately, one solution I think is to
introduce a new field called "cost-schema" in cost-type:

object {
         CostMetric cost-metric;
         CostMode   cost-mode;

         [CostSchema cost-schema;]
         [JSONString description;]
       } CostType;


The cost-schema field for cost-type is just like DTD for xml. And we can
design complex compound types by using cost-schema.

But I don't plan to deprecate "multi-cost-types" field. Because I think
multi-cost is not a compound type but a class of compound types. For
example, cost-maps with multi-cost [bw, hopcount] and with [hopcount,
delay] can have the same capability [bw, hopcount, delay].

The above is my current thought.

Best,
Jensen

On Mon, Jul 18, 2016 at 8:11 AM, Y. Richard Yang <yry@cs.yale.edu> wrote:

> Hi all,
>
> Several of us are reviewing the documents in the WG. Here is one common
> issue: We see that quite a few documents depend on encoding the types of
> the elements in a cost map. This is a complexity that the based protocol
> RFC7285 identifies and hence decided to make the type the generic type
> JSONValue. But in the spirit of being strong typed, a specific cost map
> needs an indication of the type. For those who need some review, please see:
>
> - Cost Map response: https://tools.ietf.org/html/rfc7285#section-11.2.3.6
>   Requirements:
>
>     media-type: application/alto-costmap+json
>
>     meta: MUST include cost-type and dependent-tag of the network map
>
>     data: "An implementation of the protocol in this document
>     SHOULD assume that the cost is a JSONNumber and fail to parse if it
>     is not, unless the implementation is using an extension to this
>     document that indicates when and how costs of other data types are
>     signaled."
>
> - Filtered Cost Map response:
> https://tools.ietf.org/html/rfc7285#section-11.3.2
>
>   Defined as the same as Cost Map.
>
> - Endpoint Cost Service:
> https://tools.ietf.org/html/rfc7285#section-11.5.1
>
>     media-type: application/alto-endpointcost+json
>     meta: "The "meta" field of an endpoint cost response MUST include the
> "cost-
>    type" field, to indicate the cost type used."
>
> The current definition of cost-type has two components: cost-mode and
> cost-metric,
> and cost-mode has two values defined: numerical and ordinal, both indicate
> a single
> number. At the same time, multiple active drafts (
> https://datatracker.ietf.org/wg/alto/documents/)
> need compound types for the elements of a cost map:
>
> - [multi-cost]
> This draft is probably the one which we need to resolve the issue the most
> urgent. Assume that
> it uses the current alto-costmap+json media type, then it cannot satisfy
> the requirement of "meta"
> including cost-type.
>
> - [cost-calendar]
> Cost calendar requires a compound data type as well.
>
> - [fcs]
> fcs depends on multi-cost and hence can have an issue as well.
>
> - [path-vector]
> The current definition of path-vector needs a vector of network elements.
>
> - [te-metrics]
> It appears that this document is fine, but may need to watch on related
> consistency issues.
>
> The preceding is not a minor syntax/encoding issue. How to handle types is
> a basic problem.
> Conceptually, a cost map, as in the base protocol is param'ed type:
> Map< String, Map< String, ElemType > >
>
> (Note: Some may argue that String above should be typed identifier.)
>
> So far, we have defined ElemType to be JSONValue, and used the cost-type
> to indicate more specifics:
> if meta.cost-type.cost-mode == "numerical"
>   ElemType is float
> else if meta.cost-type.mode == "ordinal"
>   ElemType is non-negative int
>
> My personal feeling is that we may need to start to introduce new
> cost-mode values to allow generic types. For those who are PL experts, it
> is a good chance to chime in. It is an important issue that the WG may want
> to work together to achieve a consistent, extensible design.
>
> Cheers,
> Richard
>
> References:
> - [multi-cost]
> https://datatracker.ietf.org/doc/draft-ietf-alto-multi-cost/
> - [cost-calendar]
> https://datatracker.ietf.org/doc/draft-randriamasy-alto-cost-calendar/
> - [fcs] https://datatracker.ietf.org/doc/draft-gao-alto-fcs/
> - [path-vector]
> https://datatracker.ietf.org/doc/draft-yang-alto-path-vector/
> - [te-metrics] https://datatracker.ietf.org/doc/draft-wu-alto-te-metrics/
>
> _______________________________________________
> alto mailing list
> alto@ietf.org
> https://www.ietf.org/mailman/listinfo/alto
>
>