Re: [core] draft-bierman-core-yid-00.txt questions

David Reid <reid@snmp.com> Thu, 25 August 2016 03:24 UTC

Return-Path: <reid@snmp.com>
X-Original-To: core@ietfa.amsl.com
Delivered-To: core@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id B942812D127 for <core@ietfa.amsl.com>; Wed, 24 Aug 2016 20:24:34 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.45
X-Spam-Level:
X-Spam-Status: No, score=-2.45 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RP_MATCHES_RCVD=-0.548, SPF_HELO_PASS=-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 y77R2ckxueQx for <core@ietfa.amsl.com>; Wed, 24 Aug 2016 20:24:33 -0700 (PDT)
Received: from mailbox.snmp.com (mailbox.snmp.com [192.147.142.80]) by ietfa.amsl.com (Postfix) with ESMTP id B5AB812D0EB for <core@ietf.org>; Wed, 24 Aug 2016 20:24:32 -0700 (PDT)
Received: from mainfs.snmp.com (mainfs.snmp.com [192.147.142.124]) by mailbox.snmp.com (8.9.3p2-20030922/m.0080228) with ESMTP id XAA25788 for <core@ietf.org>; Wed, 24 Aug 2016 23:24:30 -0400 (EDT)
Received: from mainfs.snmp.com (localhost [127.0.0.1]) by mainfs.snmp.com (8.14.5/8.14.5) with ESMTP id u7P3OTAI005926 for <core@ietf.org>; Wed, 24 Aug 2016 23:24:30 -0400 (EDT) (envelope-from reid@mainfs.snmp.com)
Message-Id: <201608250324.u7P3OTAI005926@mainfs.snmp.com>
To: core@ietf.org
From: David Reid <reid@snmp.com>
In-reply-to: Your message of Wed, 24 Aug 2016 23:22:43 -0000. <BN6PR06MB2308A46F6A84378832DBC849FEEA0@BN6PR06MB2308.namprd06.prod.outlook.com>
Date: Wed, 24 Aug 2016 23:24:29 -0400
Sender: reid@snmp.com
Archived-At: <https://mailarchive.ietf.org/arch/msg/core/15iP6cXtxKwghL9tn8UOh8B42UQ>
Subject: Re: [core] draft-bierman-core-yid-00.txt questions
X-BeenThere: core@ietf.org
X-Mailman-Version: 2.1.17
Precedence: list
Reply-To: David Reid <reid@snmp.com>
List-Id: "Constrained RESTful Environments \(CoRE\) Working Group list" <core.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/core>, <mailto:core-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/core/>
List-Post: <mailto:core@ietf.org>
List-Help: <mailto:core-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/core>, <mailto:core-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 25 Aug 2016 03:24:35 -0000

>>> What is the benefit of assigning values using hashing over sequentially
>>> assigning values?

>> There is overhead ir reading and processing a giant list of mappings.

The assignment only happens one-time, so I don't see a problem with a
little overhead (which I think would be minimal anyway).

>> Automatic assignment is risky because both sides need to agree on
>> the object to number mapping.  Detecting these issues is very
>> difficult.
>> The YANG Hash algorithm is designed to use the path string,
>> which is permanent and cannot change no matter how the
>> YANG is refactored.  The murmur hash is a stable algorithm.
>> There is not a lot that can go wrong for the 2 peers to disagree
>> on the hashes (except for collisions)

I would think we could write an algorithm that would guarantee the same
number every time. Although I have not thought through all the issues that 
come up with revisions, maybe this is harder than I think.

>>> When there is a hash collision, would it be possible to rehash the value
>>> to get a unique number so that we never have to manually assign numbers and
>>> thus never need to register the numbers in the registry?

>> yes, this has been suggested.
>> The problem with auto-rehashing before was inter-module clashes.
>> Now those are not possible so automatic rehashing is feasible.

> [MV] I disagree, see my previous email which explain why all YIDs/SIDs
> need to be registered even if generated using a hash.

As long as I have either all revisions of a module or the YIDs from
the previous revision, I can generate the numbers for the module. I don't
think I need it to be in a central registry.

>>> Would it make sense to put the module-id inside the yang module with a yid
>>> extension so that I would not have to go lookup that information
>>> from a registry?

>> I suppose -- but how to prevent duplicates and cut-and-paste errors?

We would still need a registry to prevent duplicates. But only the
module writer would need to access the registry. The module users would
have the information in the yang module and would not have to look at the
registry.

> [MV] Just adding the module ID in the yang file is not sufficient to
> use a .yang file, all YIDs/SIDs need to be added.

If YIDs are generated by hashing with auto rehashing on collisions, the
YIDs would not have to be explicitly listed in the module. They could be
auto-generated and stored in a different file.

> [MV] Having YIDs/SIDs in yang files will make their maintenance more
> complex.

Yes, it makes it more complex for the module writers. But it is easier on
the users of the module.

> [MV] BTW, a pyang plugin already exist to automatically generate and
> update a .sid file from a .yang file
> [MV] See [2]https://github.com/core-wg/yang-cbor/blob/master/sid.py

>>> Would it be possible to assign the module-id based on information in the
>>> module, for example a hash of the namespace and maybe the revision date.
>>> That way, a module-id would not have to be assigned and maintained in a
>>> registry.

>> I think private module-id would be better, using a range reserved for
>> temporary assignments.

I think you are right. I was just hoping we could avoid requiring module
writers to register a module-id by finding a way to auto assign it.

>> How do you resolve hash collisions for module-id?

I don't have a good solution. I was hoping the probability of collision
would be low enough to be acceptable, or we could add the first revision
in the number to further reduce collisions. But I don't have a way
to resolve collisions.

>>> Who will assign the local-id numbers? Is that done by the working
>>> group that defines the YANG module?

>> I would expect IETF modules to use hashes by default but for
>> some modules that seem useful to constrained devices, then
>> manual numbering could be done instead by the WG.

> [MV] To obtain a smaller encoding, I personally believe that the
> sequential numbering will be used.

> [MV] With sequential numbering, all current YANG modules defined in
> RFCs can be assigned within the first 6500 SIDs which will be encoded
> as 3 bytes for the first reference and typically as 1 bytes for the
> following ones using delta encoding.

> [MV] With hashes, only one YANG module can be assigned within that
> range.

Is the sequential numbering auto-assigned or manually assigned?

-David Reid