Subject: Re: [netconf] restconf collections

From: Qin Wu <[email-masked]>
Date: Fri, 2 Oct 2020 09:37:19 +0000

-----邮件原件-----
发件人: Kent Watsen [mailto:[email-masked]] 
发送时间: 2020年10月1日 20:37
收件人: Qin Wu <[email-masked]>
抄送: Martin Björklund <[email-masked]>; [email-masked]
主题: Re: [netconf] restconf collections

Hi Qin,

> Some opstate must be persisted, e.g., long-lived counters, logs, etc., but it’s a good point about other opstate not being persisted.   Perhaps “node-tags” can be used here, to differentiate which is which…and servers can indicate if/how they support the ephemeral opstate leafs in queries?
> 
> [Qin]:That's a good case for node tag, in earlier discussion, we discussed operation type, which distinguishs cumulative statistics value from current value. The case discussed here is very close to operation type proposal discussed earlier.

Yes.  Thank you for pointing that out.  I meant to make the same observation before.  Indeed, such node-tags could have dual-purpose: to guide a streaming-strategy and a querying-strategy for certain nodes.

[Qin]:In this case, do you think origin metadata annotation in RFC8342 can be reused, e.g., using 'or:origin = or:dynamic' to indicate ephemeral opstate? or you think 'list' specific node tag is still needed to indicate server specific capability? E.g., expose DB related capability or features?
Note that node tag we proposed is not metadata annotation extension.

> Note sure how others feel about “direction: (c), but my primary use-case revolves around time-series data (e.g., logs), where the interest is commonly on the most-recent entries, so "reverse-->offset—>limit” works nicely.  
> 
> Perhaps an alternative would be to lift a concept from Python with negative indexes so, for instance, offset=-N and limit=-N gives the last N entries?
> [Qin]: Yes, that's what I thought as well, with negative indexes, (b) and (c) seems to me, can be combined.

Can others comment on this?

Presumably, we could eliminate “direction” (c) with this approach.  

Without “direction”, I think that UIs can still support the ability to do column-sorts, whereby the user clicks on a column’s header to toggle ascending vs. descending presentation, but they’ll have to do it client-side.

That is, if wanting to see the 2nd page of results sorted by a column, something like:

	sort(column-name) --> offset(-2*pagesize) --> limit(pagesize)

Followed by the client then flipping the results to present the results in the user-selected order, right?
[Qin]: Yes.
That said, given that DB-backends that support sorts commonly also support direction, it's unclear what this buys us.

>>> Sure, but I wonder if, e.g., a netmask filter, is supportable by 
>>> common DB-backends.  I’m hoping we have some DB-experts on the list!
>> 
>> See above.  It can be quite efficient even if the backend doesn't 
>> support it.
> 
> I don’t see that above, but I don’t doubt that it can be so, it’s just a whole lot of implementation complexity.  It seems that we should/must support servers doing it, we just need to find a way (node-tags?) to enable them to express that ability.
> [Qin]: My feeling is this efficiency more depends on the amount of data we need to request. If amount of data we request is huge, maybe, client-> server-> backend may be the better choice.

Is it the amount of data requested or the number of entries in the list?  At least, in my worldview, clients are always requesting a “page” of data, so that part is rather consistently small.
[Qin]: I think it is the latter.
If the intention is to get a complete dump, then maybe the comment from yesterday applies, whereby streaming to an external repository that can be queried offline makes more sense?    - especially considering that the number of on-box logs is likely to be only the most recent (e.g., days), whereas the complete-dump type queries likely wish to extend well-past that.
[Qin]: I think streaming to an external repository is a different use case, we don't need to compare with this polling use case. the assumption we made for paging, is the client doesn't have to deploy external repository for another round query. We are looking for network side solution include filtering, limit, offset parameters support.
K.

---

From: Qin Wu <[email-masked]>
Date: Fri, 2 Oct 2020 10:01:27 +0000

A few thought on negative offset.
发件人: netconf [mailto:[email-masked]] 代表 Andy Bierman
发送时间: 2020年10月2日 0:17
收件人: Martin Björklund <[email-masked]>
抄送: Netconf <[email-masked]>
主题: Re: [netconf] restconf collections

On Thu, Oct 1, 2020 at 7:57 AM Martin Björklund <[email-masked]<mailto:[email-masked]>> wrote:
Kent Watsen <[email-masked]<mailto:[email-masked]>> wrote:
>
>
> > On Oct 1, 2020, at 9:23 AM, Martin Björklund <[email-masked]<mailto:[email-masked]>> wrote:
> >
> > Kent Watsen <[email-masked]<mailto:[email-masked]>> wrote:
> >> Hi Qin,
> >>
> >>> Some opstate must be persisted, e.g., long-lived counters, logs, etc.,
> >>> but it’s a good point about other opstate not being persisted.
> >>> Perhaps “node-tags” can be used here, to differentiate which is
> >>> which…and servers can indicate if/how they support the ephemeral
> >>> opstate leafs in queries?
> >>>
> >>> [Qin]:That's a good case for node tag, in earlier discussion, we
> >>> discussed operation type, which distinguishs cumulative statistics
> >>> value from current value. The case discussed here is very close to
> >>> operation type proposal discussed earlier.
> >>
> >> Yes.  Thank you for pointing that out.  I meant to make the same
> >> observation before.  Indeed, such node-tags could have dual-purpose:
> >> to guide a streaming-strategy and a querying-strategy for certain
> >> nodes.
> >>
> >>
> >>> Note sure how others feel about “direction: (c), but my primary
> >>> use-case revolves around time-series data (e.g., logs), where the
> >>> interest is commonly on the most-recent entries, so
> >>> "reverse-->offset—>limit” works nicely.
> >>>
> >>> Perhaps an alternative would be to lift a concept from Python with
> >>> negative indexes so, for instance, offset=-N and limit=-N gives the
> >>> last N entries?
> > Isn't this just another syntax for the same function?
>
> No, it is not.

How so?  Isn't the idea that you can first ask for offset=-10, then
-20, etc, essentially walking the list backwards?  (I don't understand
what a negative limit means though).

Can somebody explain the use-case for iterating a list backwards?
[Qin]: See discussion with Robert
https://mailarchive.ietf.org/arch/msg/netconf/yRtWgDe7PUUznSvFTvhLYo7PpK4/
I feel if the client can remember the last element he request, he can use the last element as cursor anchor point
And iterate a list backwards by sending the second paginate request with negative offset.
The assumption for the server is the server should provide snapshot for all the paging data stored somewhere.
Relying on DB?
No customer has ever asked for this so I am wondering what we are all missing.
[Qin]: Yes, all our current customer ask for list forwards capability.

I guess it isn't clear that offsets do not work for lists where entries
are added and/or deleted over time,

[Qin]:how about lock configuration before sending paging request?
unless lots of state is kept by the server.
I guess if you are looking for the most expensive heavyweight solution possible
then this is a good start.

/martin

Andy

> > /martin
> >> Without “direction”, I think that UIs can still support the ability to
> >> do column-sorts, whereby the user clicks on a column’s header to
> >> toggle ascending vs. descending presentation, but they’ll have to do
> >> it client-side.
> >>
> >> Followed by the client then flipping the results to present the
> >> results in the user-selected order, right?
> >>
> >> That said, given that DB-backends that support sorts commonly also
> >> support direction, it's unclear what this buys us.
> >>
> >>
> >>> I don’t see that above, but I don’t doubt that it can be so, it’s just
> >>> a whole lot of implementation complexity.  It seems that we
> >>> should/must support servers doing it, we just need to find a way
> >>> (node-tags?) to enable them to express that ability.
> >>> [Qin]: My feeling is this efficiency more depends on the amount of
> >>> data we need to request. If amount of data we request is huge, maybe,
> >>> client-> server-> backend may be the better choice.
> >>
> >> Is it the amount of data requested or the number of entries in the
> >> list?  At least, in my worldview, clients are always requesting a
> >> “page” of data, so that part is rather consistently small.
> >>
> >> If the intention is to get a complete dump, then maybe the comment
> >> from yesterday applies, whereby streaming to an external repository
> >> that can be queried offline makes more sense?  - especially
> >> considering that the number of on-box logs is likely to be only the
> >> most recent (e.g., days), whereas the complete-dump type queries
> >> likely wish to extend well-past that.
> >>
> >> K.
> >>
> >>
>
_______________________________________________
netconf mailing list
[email-masked]<mailto:[email-masked]>
https://www.ietf.org/mailman/listinfo/netconf