[openstack-dev] Offset support in REST API pagination

Jay Pipes jaypipes at gmail.com
Tue Mar 18 19:30:06 UTC 2014


On Tue, 2014-03-18 at 13:30 -0500, Steven Kaufer wrote:
> Jay Pipes <jaypipes at gmail.com> wrote on 03/18/2014 12:02:50 PM:
> 
> > From: Jay Pipes <jaypipes at gmail.com>
> > To: openstack-dev at lists.openstack.org, 
> > Date: 03/18/2014 12:15 PM
> > Subject: Re: [openstack-dev] Offset support in REST API pagination
> > 
> > On Tue, 2014-03-18 at 11:31 -0500, Steven Kaufer wrote:
> > > First, here is some background on this topic:
> > >  http://www.gossamer-threads.com/lists/openstack/dev/2777
> > > 
> > > Does anyone have any insight as to why offset is not supported in
> the
> > > REST API calls that support pagination?   I realize that there are
> > > tradeoffs when using a offset (vs. marker) but I believe that
> there is
> > > value in supporting both.  For example, if you want to jump to the
> > > n-th page of data without having to traverse all of the previous
> > > pages.
> > > 
> > > Is there a reason why the APIs do not support either a marker or
> an
> > > offset (obviously not both) on the API request?  It appears that
> > > sqlalchemy has offset support.
> > > 
> > > Also, it seems that cinder at least looks for the offset parameter
> > > (but ignores it).  Does this mean that it was supported at one
> time
> > > but later the support was removed?
> > >  https://github.com/openstack/cinder/blob/master/cinder/api/v2/
> > volumes.py#L214
> > > 
> > > Thanks for the information.
> > 
> > Hail to thee, stranger! Thou hast apparently not passed into the
> cave of
> > marker/offset before!
> > 
> > I humbly direct you to buried mailing list treasures which shall
> > enlighten you!
> > 
> > This lengthy thread shall show you how yours truly was defeated in
> > written combat by the great Justin Santa Barbara, who doth exposed
> the
> > perils of the offset:
> > 
> > http://www.gossamer-threads.com/lists/openstack/dev/2803
> > 
> > A most recent incantation of the marker/offset wars is giveth here:
> > 
> >
> http://lists.openstack.org/pipermail/openstack-dev/2013-November/018861.html
> > 
> > Best of days to you,
> > -jay
> 
> Jay:
> 
> Thanks for the feedback and the history on this topic. 

No probs. Thanks for indulging my Renaissance binge this morning.

> I understand that the limit/marker
> approach is superior when simply traversing all of the pages. However,
> consider the
> following:
> 
> - User knows that there are 1000 items (VMs, volumes, images, really
> doesn't matter)
> - User knows that the item that they want is in roughly the middle of
> the data set (assume
> everything is sorted by display name)
> - User cannot remember the exact name so a filter will not help and
> changing the sort 
> direction will not help (since the item they want it is in the middle
> of the dataset)
> - User supplies an offset of 500 to jump into the middle of the data
> set
> - User then uses the marker approach to traverse the pages from this
> point to find the
> item that they want
> 
> In this case the offset approach is not used to traverse pages so
> there are no issues with
> missing an item or seeing a duplicate.

I guess I wonder how common that use case is, actually. I can't remember
ever running into a user who asked for such a thing, but perhaps that's
just me.

> Why couldn't the APIs support either marker or offset on a given
> request? 

I think for two reasons:

1) Would be potentially quite confusing to the user
2) We're lazy? :)

> Also, to encourage
> the use of marker instead of offset, the next/previous links on any
> request with an offset
> supplied should contain the appropriate marker key values -- this
> should help discourage
> simply increasing the offset when traversing the pages.

Well, yes, this already happens today in the projects that support
pagination, AFAIK.

Best,
-jay

> I realize that if only one solution had to be chosen, then
> limit/marker would always win
> this war. But why can't both be supported?
> 
> Thanks,
> 
> Steven Kaufer
> 
> > 
> > 
> > _______________________________________________
> > OpenStack-dev mailing list
> > OpenStack-dev at lists.openstack.org
> > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
> > 
> 
> 
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev





More information about the OpenStack-dev mailing list