Hi Peter,

> Le 4 juin 2015 à 11:28, peter van der Stok <[email protected]> a écrit :
> 
> Hi Alexander,
> 
> Your suggestion to standardize a handle to a mechanism to do hash aliasing 
> but keep the algorithms out of CoMI seems reasonable to me in a first 
> approach.
> It is then a matter of interest whether the mechanisms of hash aliasing are 
> standardized within CoRE wg or even within CoMI I-D.
> 
> However, I think the idea is interesting and like to investigate it further; 
> and understand what extra standardization is needed.

If the YANG hash compression + reservation of < 256 hash values is accepted to 
CoMI, which I believe can be achieved with minimal modification and at no cost 
in terms of implementation or resource requirements, there are two main 
approaches to implementing the hash aliases:
1) Independent of the YANG schema
  1.a) From a URI, which can be local (e.g /mg/yang.hash-alias or including the 
syntax in the future /mg/yang.hash with special provisioning of having aliased) 
or remote
  1.b) Reserve one of the alias values for the alias mapping resource (e.g. 
/mg/0)

2) Dependent on the YANG schema
  2.a) By using a leaf in the schema (e.g. alternate_hash = 1, or 
comi:alternate_hash = 3)
  2.b) By using an URI specified in the schema (not sure if this would be very 
useful though)

I would say that it should be possible to have the aliasing independent on the 
schema, as a given operator may decide on a different operation modes for the 
same YANG schema. 

==========================
1.a)
If there is a dedicated file (e.g. /mg/yang.hash-alias), it could be updated by 
the client if necessary. It would be nice to have a way to make sure that the 
server and the client are using the same aliases, which can be implemented with 
the help of a hash over the file + a token which is set upon the creation of 
the file (by the client or upon deploying the object). This way, a client can 
query the server if needed (e.g. GET /mg/yang.hash-alias?keys=hash,token ).

So, to sum up, the simplest solution would be to have a new resource 
/mg/yang.hash-alias which is empty. A client may create the resource with a 
POST operation, where the format is (YANG hash : alias).

Afterwards, the client can use the aliases to issue requests (example at the 
end). This is the bare minimum, but when you have a device (client) which 
manages many servers it is sufficient. 

==========================
1.b) 
In CoMI reserve all IDs < 256. In a different document specify, that IF you 
want to use hash aliasing, then if works as following:

The value « 0 » can be used for information on the aliases:
1) GET /mg/0 -> Resource not found -> aliases are unsupported feature, don’t 
even try (*standard behavior* - nothing to change to a normal CoMI object, as 
the resource ID 0 is reserved and is inexistent in the YANG hash table).
2) GET /mg/0 -> {} -> aliases are supported, but no alias configuration in 
place (alternatively, this could return some other info, but the source_uri key 
is empty
3) GET /mg/0 ->
  3.1) {"source_uri" : "/mg/yang.hash-alias", "hash": 0x127804bc}
  3.2) {"source_uri" : "example.com/mg/yang.hash-alias", "hash": 0x127804bc}

This can actually be achieved in the following way:

In CoMI:
  1) add YANG hash compression to section 5.4. (minor change)
  2) add a statement that hash values 0-255 inclusive are reserved
  3) eventually, mention as a guidance that these could be used for hash 
aliasing

Afterwards, either add a new document describing hash aliasing, or add a small 
section, which defines:
1) Data ID = 0 is reserved for the alias file. 
2) IDs 1-255 inclusive are mapped to YANG hashes according to the alias 0

As an alternative, the /mg/0 could directly be the alias file, but I like this 
to a smaller extent, as a GET /mg/0 will fetch the whole mapping, and not just 
the ‘yes, aliases are in place, and we’re talking the same thing’.

==========================


I’d go with 1.b) but have no strong objections to the rest.

Best,
Alexander



REQ: POST /mg/0 <http://example.com/mg/0>    (<- this one actually creates a 
file on the server, e.g. /mg/yang.hash-aliases)
     (Content-Format: application/cbor)

{
   0x387804eb: 1,
   0x15370408: 2
}

RES: 2.01 Created 


REQ: GET example.com/mg/C <http://example.com/mg/C>
       (Content-Format: application/cbor)
 
RES: 2.05 Content (Content-Format: application/cbor)
{
         0x2 : "2014-10-26T12:16:51Z",
}



> 
> Peter
> 
> Alexander Pelov schreef op 2015-06-04 09:02:
>> Hi Andy,
>>> Le 3 juin 2015 à 23:37, Andy Bierman <[email protected]> a écrit :
>>> On Wed, Jun 3, 2015 at 12:48 PM, Michel Veillette
>>> <[email protected]> wrote:
>>>> About "I would prefer if hash collisions in a single module were not 
>>>> allowed."
>>>> Agreed but how this is implemented.
>>> By checking the YANG hashes before it is published,
>>> similar to checking the YANG syntax with a YANG compiler.
>>>> About "But these numbers do not exist in any modules and so they cannot be 
>>>> relied on in CoMI.
>>>> I understand but I assume that a module can be re-published with the added 
>>>> statement when require. If a CoMI implementer try to implement a module 
>>>> containing a clash, he can look for a version of this module containing 
>>>> the special YANG statement. The likelihood of such clash is extremely low 
>>>> and such fallback solution won’t be required often. However, the RFC will 
>>>> specify how to resolve such situation if this ever happen. This statement 
>>>> can also be used to address the need for data node identifier compactness 
>>>> as mentioned by Alexander in its original email.
>>> I think the ad-hoc id assignments are pointless because they are not
>>> universal.  The only thing that can be counted on is the module name
>>> and the XPath absolute path expression of each object.
>> Having a way of re-mapping (or aliasing) an ID to a
>> locally-understood/negotiated ID is really important in some networks
>> where the radio resources are extremely limited. If you are able to
>> use IDs 1-23 and you have URL hash compression, you save 8 bytes
>> (using standard CBOR, no changes here whatsoever). For IDs 24-63 you
>> save 7 bytes, 63-255 - 6 bytes (without doing any particular
>> treatment).
>> When using a general hash function, the probability of getting a hash
>> value < 255 is 10E-7, and choosing an URI that statically gives you
>> such ID simply sounds wrong (and unrealistic).
>> Two options are then possible here:
>> 1) Leave this out of CoMI
>> 2) Have a minor accommodation, and require no additional resources on
>> the devices
>> Both require defining hash clash handling mechanism, so here the
>> entire discussion on how to handle this is pertinent.
>> For me, 2) can be implemented in two ways:
>> 2.a) Explicit ID re-mapping (or aliasing) through a (external) file.
>> Here, it would be nice to have a way to specify the URI of the file,
>> e.g. on the server or on a remote location. Something like the mod.uri
>> .
>> 2.b) Explicit ID re-mapping (or aliasing) in the YANG module (e.g.
>> through the "id" option mentioned by Michel or maybe with an
>> extension, e.g. comi:id)
>> Note that if this is considered hash aliasing (we forget the
>> re-mapping), then the behavior can be very simple, e.g.:
>> It is up to the implementer to define the hash aliases, if any. In
>> case of clash with a YANG hash value, the alias must be ignored. In
>> case of clash with another alias, both aliases are ignored.
>> =======================
>> CoMI can decide on a small concession for aliasing uses - say that
>> YANG string hash values MUST be >= 64 (256?). The compiler can check
>> that all hashes fulfill this before publishing. This way, there is
>> even NO need to add any statement about alias clashes. It would be up
>> to the implementer to chose the appropriate way of aliasing (if any).
>> Aliases would be local in scope.
>> What do you think about it?
>> =======================
>> Best,
>> Alexander
>>>> About "In NETCONF, modules tend to use augment a lot"
>>>> In my document " draft-vanderstok-core-comi-06 - MV.docx ", I propose a 
>>>> new definition to address this.
>>> What is it?
>>> IMO you should post comments to the mailing list not markup
>>> to a word document.  It is too hard to follow.
>>>> Module Context: A module context is composed of all data nodes, 
>>>> notifications and RPCs defined in a YANG module and included sub-modules 
>>>> or added to them using the augment YANG statement.
>>> Almost -- this is defined in RFC 6020 -- the augmenting nodes are
>>> not part of the augmented module.  They will be returned in
>>> NETCONF and RESTCONF retrieval operations for an ancestor node
>>> but they are not part of the augmented module.  Only objects
>>> defined in the module namespace are part of the module.
>>> Andy
>>>> Section 4.1.3.4 show an example of include, import and augment.
>>>> Michel Veillette
>>>> System Architecture Director
>>>> Trilliant Inc.
>>>> Tel: 450-375-0556 ext. 237
>>>> [email protected]
>>>> www.trilliantinc.com
>>>> -----Original Message-----
>>>> From: Andy Bierman [mailto:[email protected]]
>>>> Sent: 3 juin 2015 14:54
>>>> To: Michel Veillette
>>>> Cc: Alexander Pelov; [email protected]; [email protected]
>>>> Subject: Re: [core] CoMI remote server clash file and YANG hash in URL
>>>> On Wed, Jun 3, 2015 at 11:16 AM, Michel Veillette 
>>>> <[email protected]> wrote:
>>>>> Hi Andy
>>>>> Couple of questions about your proposed solution.
>>>>> === Question #1, New YANG statement
>>>>> Your solution works only if hash clashes within a module are resolved at 
>>>>> design time. If not, the error message will return the following 
>>>>> information which is not sufficient to resolve which data node is which.
>>>>>  { "1234": [
>>>>>         "module-A":"4567",
>>>>>         "module-A":"6523"
>>>>>     ]
>>>>>  }
>>>> The original proposal had a 3-tuple { module-name, path-expr, new-hash } 
>>>> We discussed some optimizations in the 6TISCH call to reduce the size of 
>>>> the path-expr and still not require the client to store all the path 
>>>> strings, such as store a few bytes from the path strings like 6th and 11th 
>>>> bytes (Avoid the common ietf- prefix for many module names).
>>>> This is not deterministic. Only the full path string is fool-proof.
>>>> I would prefer if hash collisions in a single module were not allowed.
>>>> They need to be resolved at design time.  If this is not possible, then a 
>>>> standard rehash algorithm should be used so the collision is resolved in a 
>>>> predictable way.  e.g., try appending "_", then try "__", etc.
>>>> The result would be that hash collisions in a single module do not occur 
>>>> in CoMI.
>>>>> Is it possible/acceptable to request a new YANG statement to manually 
>>>>> assign a ID to a data node?
>>>>> Same question for a module ID?
>>>>> For example (see "id 16" and "id 25" bellow) :
>>>>>  module a {
>>>>>     namespace a-ns;
>>>>>     prefix a;
>>>>>     id 16;
>>>>>     revision 2015-01-01;
>>>>>     leaf leafA1 { type string; id 25 }
>>>>>     container containerA {
>>>>>        leaf leafA2 { type string}
>>>>>     }
>>>>>  }
>>>> You could have an extension statement do anything you want:
>>>>   comi:id  16;
>>>> But these numbers do not exist any any modules and so they cannot be 
>>>> relied on in CoMI.
>>>>> === Question #2, Introduction of an optional query parameter used to
>>>>> target a specific module
>>>>> For nodes / networks which can afford a slitely larger payload (IEEE 
>>>>> 802.15.4g for example) but want to avoid the processing and storage 
>>>>> associated with the porposed error message, are you opposed to the 
>>>>> support of an optional CoAP query parameter use carry the module name or 
>>>>> module ID ?
>>>>> For example:
>>>>> GET example.com/Y8d7s?select= ietf-6tisch-mac
>>>>> === Question #3, Use of the select query parameter instead of the URI
>>>>> Are you oposed to the use of the select query parameter instead of the
>>>>> URI to identify data node(s)
>>>> Not really.
>>>> I don't know how mixed the modules will get in CoMI.
>>>> In NETCONF, modules tend to use augment a lot, so the nodes from 
>>>> 'module-A' may be nested nodes.
>>>> Retrieving just the augmenting nodes and ignoring the augmented nodes 
>>>> would likely be operationally useless.
>>>> e.g., when augmenting a list, the key leafs are needed to identify the 
>>>> instance.
>>>> I would like to keep CoMI extremely simple.
>>>> More bells and whistles means increased
>>>> memory and CPU requirements. I am glad CORE and 6TISCH WGs are so 
>>>> concerned about constrained resources.
>>>> Only the most important bells and whistles will get standardized.
>>>>> For example:
>>>>> GET example.com/mg?select=Y8d7s
>>>>> GET example.com/mg?select=Y8d7s,NKHaA
>>>>> GET example.com/mg?select=ietf-6tisch-mac(Y8d7s,NKHaA)
>>>>> === Question #4, Compressing YANG hash base64 representation
>>>>> Are you oposed to the compression of the base64 representation as propsed 
>>>>> by Alexander.
>>>> No.  Optimizations that reduce the encoding size are important.
>>>> I want to use standard CBOR.  No special hacks just for CoMI.
>>>>> For example:
>>>>> GET example.com/mg?select=7s
>>>>> Instead of
>>>>> GET example.com/mg?select= AAA7s
>>>>> Michel Veillette
>>>>> System Architecture Director
>>>>> Trilliant Inc.
>>>>> Tel: 450-375-0556 ext. 237
>>>>> [email protected]
>>>>> www.trilliantinc.com
>>>> Andy
>>>>> -----Original Message-----
>>>>> From: Andy Bierman [mailto:[email protected]]
>>>>> Sent: 3 juin 2015 13:09
>>>>> To: Michel Veillette
>>>>> Cc: Alexander Pelov; [email protected]; [email protected]
>>>>> Subject: Re: [core] CoMI remote server clash file and YANG hash in URL
>>>>> On Wed, Jun 3, 2015 at 9:05 AM, Michel Veillette 
>>>>> <[email protected]> wrote:
>>>>>> Hi Alexander
>>>>>> At the last 6TiSCH bi-weekly call, 4 solutions have been presented to 
>>>>>> the hash clashes problem. Two based on a rehash table and two based on a 
>>>>>> new CoAP query parameter carrying the module name or registered module 
>>>>>> ID. This query parameter is used to select unambiguously the targeted 
>>>>>> data node(s) assuming that any hash collision within a module have been 
>>>>>> resolved at design time. You can find this presentation in attachment.
>>>>>> Both of your proposals make sense to me but I still hope that the clash 
>>>>>> file can be avoided or be optional.
>>>>> I agree we should not need the client to retrieve the rehash info before 
>>>>> using a server.
>>>>> The CoMI authors have discussed a solution which I will try to write up 
>>>>> today where a special "hash-clash" error is returned by CoMI if a rehash 
>>>>> is needed.
>>>>>  1) client requests module-A object with hash  "1234";
>>>>>       there is no extended-name/local-name,
>>>>>       just the YANG hash, used in any request
>>>>>  2) if '1234' has a collision in this server then a special error code is 
>>>>> returned;
>>>>>      The return payload has the rehash info [old-hash, { module-name, 
>>>>> new-hash }+]
>>>>>          { "1234": [
>>>>>                 "module-A":"4567",
>>>>>                 "module-X":"6523"
>>>>>             ]
>>>>>          }
>>>>>   3) the client gets the error info, and knows which module its "1234" is 
>>>>> from.
>>>>>        It finds the correct module name in the array and replaces its 
>>>>> old-hash
>>>>>        with the new-hash.
>>>>>  4) client re-sends the request, using hash "4567" instead of "1234"
>>>>> The rehash table goes away, and only this error info is used instead.
>>>>>> Michel Veillette
>>>>>> System Architecture Director
>>>>>> Trilliant Inc.
>>>>>> Tel: 450-375-0556 ext. 237
>>>>>> [email protected]
>>>>>> www.trilliantinc.com
>>>>> Andy
>>>>>> -----Original Message-----
>>>>>> From: core [mailto:[email protected]] On Behalf Of Alexander
>>>>>> Pelov
>>>>>> Sent: 3 juin 2015 11:01
>>>>>> To: [email protected]; [email protected]
>>>>>> Subject: [core] CoMI remote server clash file and YANG hash in URL
>>>>>> Hello everyone,
>>>>>> I would like to discuss with you to ideas/proposals in this mail, namely:
>>>>>> 1) Caching the yang clash file on a remote server
>>>>>> 2) Compressing the URL representation of YANG hashes
>>>>>> 1) Caching the yang clash file on a remote server Even though hash 
>>>>>> collisions should happen rarely (if ever), there may be cases when it 
>>>>>> could be inevitable, and as such, it may be interesting to cache the 
>>>>>> clash_file somewhere on a remote server to avoid sending it over the 
>>>>>> constrained wireless interface. It could be used for other cases, where 
>>>>>> some frequently used resources are re-hashed for performance purposes. 
>>>>>> Maybe it would be interesting to allow the server to specify a remote 
>>>>>> location for the clash file? For static collisions or optimizations it 
>>>>>> could be that the YANG definition includes alternative hash values, 
>>>>>> which could be used in addition to the normal ones.
>>>>>> 2) Compressing the URL representation of YANG hashes Another point
>>>>>> (which is unrelated), is to elide the leading "A"s from the base64
>>>>>> representation of the hash in the URL (which corresponds to eliding
>>>>>> the leading zeroes from the hash). As specified in section 5.4. a
>>>>>> hash value of 0x0000007e will be encoded as AAAA_, but if the leading
>>>>>> A’s are elided it will be simply _
>>>>>> This could pose problems only if in the future the size of the hash 
>>>>>> values is increased from 30 bits to some other (higher) value.
>>>>>> This, however, could be very useful when having to frequently access
>>>>>> the same resource. In such case, the server/network operator may
>>>>>> decide to re-hash the URI to a shorter version, e.g. the
>>>>>> /sys:system-state/sys:clock/sys:current-datetime could be remapped
>>>>>> from 0x15370408 and VNwQI to 0x1 and _
>>>>>> Best,
>>>>>> Alex
>>>>>> PS.
>>>>>> A typo (?), which may be already corrected, in the example of mod.uri on 
>>>>>> Page 26: the two responses have different scheme "mod.uri" and "moduri"
>>>>>> _______________________________________________
>>>>>> core mailing list
>>>>>> [email protected]
>>>>>> https://www.ietf.org/mailman/listinfo/core
>>>>>> _______________________________________________
>>>>>> core mailing list
>>>>>> [email protected]
>>>>>> https://www.ietf.org/mailman/listinfo/core
>> _______________________________________________
>> core mailing list
>> [email protected]
>> https://www.ietf.org/mailman/listinfo/core

_______________________________________________
6tisch mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/6tisch

Reply via email to