[apps-discuss] Appsdir review for draft-ietf-cdni-control-triggers-06

Carsten Bormann <cabo@tzi.org> Mon, 06 April 2015 23:18 UTC

Return-Path: <cabo@tzi.org>
X-Original-To: apps-discuss@ietfa.amsl.com
Delivered-To: apps-discuss@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 9CCF71ACE39 for <apps-discuss@ietfa.amsl.com>; Mon, 6 Apr 2015 16:18:39 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: 1.15
X-Spam-Level: *
X-Spam-Status: No, score=1.15 tagged_above=-999 required=5 tests=[BAYES_50=0.8, HELO_EQ_DE=0.35] autolearn=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 rGiFo1ESuLej for <apps-discuss@ietfa.amsl.com>; Mon, 6 Apr 2015 16:18:37 -0700 (PDT)
Received: from mailhost.informatik.uni-bremen.de (mailhost.informatik.uni-bremen.de [IPv6:2001:638:708:30c9::12]) (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 4CA411ACE38 for <apps-discuss@ietf.org>; Mon, 6 Apr 2015 16:18:37 -0700 (PDT)
X-Virus-Scanned: amavisd-new at informatik.uni-bremen.de
Received: from submithost.informatik.uni-bremen.de (submithost.informatik.uni-bremen.de [IPv6:2001:638:708:30c9::b]) by mailhost.informatik.uni-bremen.de (8.14.5/8.14.5) with ESMTP id t36NIOSi003127; Tue, 7 Apr 2015 01:18:24 +0200 (CEST)
Received: from alma.local (p5DC7F099.dip0.t-ipconnect.de [93.199.240.153]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by submithost.informatik.uni-bremen.de (Postfix) with ESMTPSA id 3lLSTq5kcPzCsXB; Tue, 7 Apr 2015 01:18:23 +0200 (CEST)
Message-ID: <5523143E.3070503@tzi.org>
Date: Tue, 07 Apr 2015 01:18:22 +0200
From: Carsten Bormann <cabo@tzi.org>
User-Agent: Postbox 3.0.11 (Macintosh/20140602)
MIME-Version: 1.0
To: "Francois Le Faucheur (flefauch)" <flefauch@cisco.com>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Archived-At: <http://mailarchive.ietf.org/arch/msg/apps-discuss/pyemmMVIzX0G8hsotyH4CrQdeMQ>
Cc: draft-ietf-cdni-control-triggers.all@tools.ietf.org, apps-discuss@ietf.org
Subject: [apps-discuss] Appsdir review for draft-ietf-cdni-control-triggers-06
X-BeenThere: apps-discuss@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: General discussion of application-layer protocols <apps-discuss.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/apps-discuss>, <mailto:apps-discuss-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/apps-discuss/>
List-Post: <mailto:apps-discuss@ietf.org>
List-Help: <mailto:apps-discuss-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/apps-discuss>, <mailto:apps-discuss-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 06 Apr 2015 23:18:39 -0000

I have been selected as an Applications Area Directorate reviewer for
this draft (for background on appsdir, please see
http://trac.tools.ietf.org/area/app/trac/wiki/ApplicationsAreaDirectorate
), with a specific view on the JSON usage in this specification.

Please resolve these comments along with any other comments you may
receive. Please wait for direction from your document shepherd or AD
before posting a new version of the draft.  (Feel free to forward
these comments to the WG list if that helps in resolving the comments.)

Document:  draft-ietf-cdni-control-triggers-06
Title: CDNI Control Interface / Triggers
Reviewer: Carsten Bormann
Review Date: 2015-04-06

* Summary: This draft is ready for publication as a standards track RFC,
after a few misphrasings and minor details in the usage of HTTP have
been corrected.

* Major issues: None.

* Minor issues:

The protocol is REST-based in that it creates dCDN activities using a
POST-based interface, which then can be examined using GET on the
location returned (making good use of HTTP, e.g., for caching) and be
DELETEd for canceling them.  It is not making use of the fact that the
subject of these activities are REST resources themselves.  This
paragraph just takes note of this fact, without necessarily suggesting
a need (or even usefulness) for a change.

Is "authenticate" the right word in the 2nd para of 4.1?
(How do you authenticate a CI/T command?  There is no authentication
information provided.)

For the benefit of the implementer, the last paragraph of section 4.1
could say what is "an appropriate HTTP status code" here -- 405 Method
not allowed?

4.2.1 could give a little additional guidance on how to use the ETag
for the collection (possibly pointing to the examples).

4.3 uses 403 forbidden to indicate that a feature is not implemented?

4.6 the phrasing "into the cdn-path key" used here is misleading: The
intent is to have one array element appended to the end of the array
under the entry named "cdn-path".

4.7 uses 401 for no permission, while section 8.1 correctly proposes
403 Forbidden (or 404 Not Found) for this case.

5.1.2 uses the phrasing "list of" Error Descriptions, apparently with
the intention that this be an array of Error Descriptions.  Prefer
making this explicit.  Are empty lists allowed?  (The whole entry is
non-mandatory.)

(More generally, the spec could be explicit where empty arrays are
allowed and where not.)

5.1.3: Is staleresourcetime allowed to be negative?  zero?
(Note also that Absolute Time is a general JSON number, which includes
floating point, while this is an integer?)

5.2.6 fails to say that Error Descriptions are JSON objects.

Why is the third request in 6.2.4 not using an ETag, contrary to
its own recommendation?

* Gratuitous formalization of the JSON data:

(I have validated the examples against this formalization, using the
CDDL tool.)


CIT-object = CIT-command / Trigger-Status-Resource / Trigger-Collection

CIT-command ; use media type application/cdni.ci.TriggerCommand+json
 = {
  ? trigger: Triggerspec
  ? cancel: [* URI]
  cdn-path: [* Cdn-PID]
}

Trigger-Status-Resource ; application/cdni.ci.TriggerStatus+json.
 = {
  trigger: Triggerspec
  ctime: Absolute-Time
  mtime: Absolute-Time
  ? etime: Absolute-Time
  status: Trigger-Status
  ? errors: [* Error-Description]
}

Trigger-Collection ; application/cdni.ci.TriggerCollection+json
 = {
  triggers: [* URI]
  ? staleresourcetime: int ; time in seconds
  ? coll-all: URI
  ? coll-pending: URI
  ? coll-active: URI
  ? coll-complete: URI
  ? coll-failed: URI
  ? cdn-id: Cdn-PID
}

Triggerspec = { ; 5.2.1
  type: Trigger-Type
  ? metadata.urls: [* URI]
  ? content.urls: [* URI]
  ? content.ccid: [* Ccid]
  ? metadata.patterns: [* Pattern-Match]
  ? content.patterns: [* Pattern-Match]
}

Trigger-Type = "preposition" / "invalidate" / "purge" ; 5.2.2

Trigger-Status = "pending" / "active" / "complete" / "processed"
   / "failed" / "cancelling" / "cancelled" ; 5.2.3

Pattern-Match = { ; 5.2.4
  pattern: tstr
  ? case-sensitive: bool
  ? match-query-string: bool
}

Absolute-Time = number ; seconds since UNIX epoch, 5.2.5

Error-Description = { ; 5.2.6
  error: Error-Code
  ? metadata.urls: [* URI]
  ? content.urls: [* URI]
  ? metadata.patterns: [* Pattern-Match]
  ? content.patterns: [* Pattern-Match]
  ? description: tstr
}

Error-Code = "emeta" / "econtent" / "eperm" / "ereject"
   / "ecdn" / "ecancelled"  ; 5.2.7

Ccid = tstr ; see I-D.ietf-cdni-metadata

Cdn-PID = tstr .regexp "AS[0-9]+:[0-9]+"

URI = tstr