Sounds like unanimous agreement that account should always be part of the URI. I've also added the version as the first path element to match other OpenStack REST APIs. I updated the wiki to include this.
Thanks! -Eric On Tue, Feb 15, 2011 at 09:47:23AM -0800, Adrian Otto wrote: > I think we should include the account string regardless if the auth headers > are present, just like we do in the swift API. > > You can still cache entities without the account string in the url, but it > means that you need to add the account string (or some unique derivative) > from the auth headers into your hash (stores and lookups in your cache must > use the same scheme). That means that you must use a cache that has this > capability. When you are using a simple cache that simply uses a hash of the > URL, then Glen's concern below is absolutely valid. > > It's best not to have multiple different URL's for the same entity, because > when you do have a system architecture that relies on caching, you typically > end up with an inefficient cache because the same entity is cached under > multiple different URL's. If the URL is always the same for an identical > entity, then you can eliminate that waste. > > Furthermore, it's sensible to keep it simple. I'd rather eat the performance > penalty of transmitting and parsing longer HTTP requests in order to reap the > benefit of having less confused developers and system admins/operators. If I > were tasked with debugging a malfunctioning queue system, I would welcome > account strings in the URL's to help simplify my detective work. Simple > access log files are much more useful that way. > > Adrian > > On Feb 15, 2011, at 7:45 AM, Glen Campbell wrote: > > > Having the <account> in the URL makes the resource cacheable (via HTTP, I > > mean; you can always manually cache it, but that's not RESTful); without > > it, you would need to require unique <container>s to uniquely reference a > > cached copy. > > > > On 2/14/11 7:57 PM, "Paul Voccio" <paul.voc...@rackspace.com> wrote: > > > >> Looking at the swift docs, they reference a container like so: > >> > >> METHOD /v1/<account>/<container> HTTP/1.1 > >> > >> http://docs.rackspacecloud.com/files/api/v1/cf-devguide-20110112.pdf > >> > >> For the openstack api, it also includes the account id in the request: > >> > >> POST /v1.1/214412/images HTTP/1.1 > >> Host: servers.api.openstack.org > >> Content-Type: application/json > >> Accept: application/xml > >> X-Auth-Token: eaaafd18-0fed-4b3a-81b4-663c99ec1cb > >> > >> > >> > >> This seems a bit different than what you're suggesting. What am I missing? > >> Shouldn't the account id be in the request with the auth headers to stay > >> in line with the other specs? > >> > >> > >> On 2/14/11 6:56 PM, "Eric Day" <e...@oddments.org> wrote: > >> > >>> On Tue, Feb 15, 2011 at 12:49:01AM +0000, Paul Voccio wrote: > >>>> Dropping the account_id, would this also assume that there can be more > >>>> than one queue per account? > >>> > >>> Yeah. Think of the queue name as an extra namespace layer much like > >>> a swift container, except you don't create or delete them, they just > >>> exist when there is an active message in it. > >>> > >>> -Eric > >>> > >>>> On 2/14/11 5:54 PM, "Eric Day" <e...@oddments.org> wrote: > >>>> > >>>>> Yeah, for anonymous access that would be the case. Those are not > >>>> needed > >>>>> when the request comes in with OpenStack Auth headers (like nova). > >>>>> > >>>>> Do you think we should be repeating the account id in the URI when > >>>>> the auth headers are present? > >>>>> > >>>>> -Eric > >>>>> > >>>>> On Mon, Feb 14, 2011 at 11:44:58PM +0000, Paul Voccio wrote: > >>>>>> Eric, > >>>>>> > >>>>>> Just looking at the http operations. Shouldn't the calls be around > >>>> the > >>>>>> account then the queue? > >>>>>> > >>>>>> GET /$account_id/queue/id to list all the queues > >>>>>> GET /$account_id/queue/id/message/id > >>>>>> > >>>>>> Am I off here? Thoughts? > >>>>>> > >>>>>> pvo > >>>>>> > >>>>>> > >>>>>> On 2/14/11 5:07 PM, "Eric Day" <e...@oddments.org> wrote: > >>>>>> > >>>>>>> I've summarized the original email and added more sections for > >>>> review > >>>>>>> and discussion here: > >>>>>>> > >>>>>>> http://wiki.openstack.org/QueueService > >>>>>>> > >>>>>>> In particular there are details on the various components of the > >>>>>>> queue service, a draft at what the REST operations will look like, > >>>>>>> and a couple brief examples. > >>>>>>> > >>>>>>> Please let me know if any clarification is needed and I'll update > >>>>>>> the wiki. Feedback and discussion on use cases and what you think > >>>>>>> the service should look like is very appreciated. > >>>>>>> > >>>>>>> Thanks, > >>>>>>> -Eric > >>>>>>> > >>>>>>> On Mon, Feb 14, 2011 at 09:51:42AM -0800, Eric Day wrote: > >>>>>>>> Hi everyone, > >>>>>>>> > >>>>>>>> When looking at other services to include as part of OpenStack, > >>>> the > >>>>>>>> first that comes to mind for many is a queue. A queue service can > >>>>>>>> not only provide a useful public cloud service, but can also > >>>> provide > >>>>>>>> one of the building blocks for other services. I've been leading > >>>> an > >>>>>>>> effort to research and gather requirements for a queue service > >>>> and > >>>>>>>> I'd like to share the current state and get community feedback. I > >>>>>>>> expect real development to begin very soon, and would also like > >>>> to > >>>>>>>> identify developers who will have time to dedicate to this > >>>> project. > >>>>>>>> > >>>>>>>> I'd like to note this is not an official OpenStack project yet. > >>>> The > >>>>>>>> intention is once we have the community support and a simple > >>>>>>>> implementation, we will submit the project to the OpenStack > >>>> Project > >>>>>>>> Oversight Committee for approval. > >>>>>>>> > >>>>>>>> The reason we are initiating our own project vs using an existing > >>>> one > >>>>>>>> is due to simplicity, modularity, and scale. Also, very few (if > >>>> any) > >>>>>>>> existing queue systems out there were built with multi-tenant > >>>> cloud > >>>>>>>> use cases in mind. Very few also have a simple and extensible > >>>> REST > >>>>>>>> API. There are possible solutions to build an AMQP based service, > >>>>>>>> but AMQP brings complexity and a protocol not optimized for high > >>>>>>>> latency and intermittent connectivity. > >>>>>>>> > >>>>>>>> The primary goals of the queue service are: > >>>>>>>> > >>>>>>>> * Simple - Think simple REST based queues for most use cases. > >>>> Easy > >>>>>>>> to access and use from any language. It should not require much > >>>>>>>> setup, if any, before you can start pushing messages into it. > >>>>>>>> > >>>>>>>> * Modular API - Initially we'll focus on a simple REST API, > >>>>>>>> but this will not in any way be a first-class API. It should be > >>>>>>>> possible to add other protocols (AMQP, protocol buffers, > >>>> Gearman, > >>>>>>>> etc) for other use cases. Note that the internal service API > >>>> will > >>>>>>>> not always provide a 1-1 mapping with the external API, so some > >>>>>>>> features with advanced protocols may be unavailable. > >>>>>>>> > >>>>>>>> * Fast - Since this will act as a building block for other > >>>> services > >>>>>>>> that my drive heavy throughput, performance will have a focus. > >>>> This > >>>>>>>> mostly comes down to implementation language and how clients > >>>> and > >>>>>>>> workers interact with the broker to reduce network chatter. > >>>>>>>> > >>>>>>>> * Multi-tenant - Support multiple accounts for the service, and > >>>> since > >>>>>>>> this will also be a public service for some deployments, > >>>> protect > >>>>>>>> against potentially malicious users. > >>>>>>>> > >>>>>>>> * Persistent - Allow messages to optionally be persistent. For > >>>>>>>> protocols that can support it, this can be an optional flag > >>>> while > >>>>>>>> the message is submitted. The persistent storage should also be > >>>>>>>> modular so we can test various data stores and accommodate > >>>>>> different > >>>>>>>> deployment options. > >>>>>>>> > >>>>>>>> * Zones and locality awareness - As we've been discussing in > >>>> other > >>>>>>>> threads, locality in cloud services is an important feature. > >>>> When > >>>>>>>> dealing with where messages should be processed, we need to > >>>> have > >>>>>>>> location awareness to process data where it exists to reduce > >>>>>> network > >>>>>>>> overhead and processing time. > >>>>>>>> > >>>>>>>> Before diving down into implementation details, I would like to > >>>> hear > >>>>>>>> what folks have to say about the initial requirements above. Once > >>>>>>>> there is something along the lines of agreement, I'll be sending > >>>> out > >>>>>>>> other topics for discussion dealing with implementation. > >>>>>>>> > >>>>>>>> I'm looking forward to your feedback. Thanks! > >>>>>>>> > >>>>>>>> -Eric > >>>>>>> > >>>>>>> _______________________________________________ > >>>>>>> Mailing list: https://launchpad.net/~openstack > >>>>>>> Post to : openstack@lists.launchpad.net > >>>>>>> Unsubscribe : https://launchpad.net/~openstack > >>>>>>> More help : https://help.launchpad.net/ListHelp > >>>>>> > >>>>>> > >>>>>> > >>>>>> Confidentiality Notice: This e-mail message (including any attached > >>>> or > >>>>>> embedded documents) is intended for the exclusive and confidential > >>>> use > >>>>>> of the > >>>>>> individual or entity to which this message is addressed, and unless > >>>>>> otherwise > >>>>>> expressly indicated, is confidential and privileged information of > >>>>>> Rackspace. > >>>>>> Any dissemination, distribution or copying of the enclosed material > >>>> is > >>>>>> prohibited. > >>>>>> If you receive this transmission in error, please notify us > >>>> immediately > >>>>>> by e-mail > >>>>>> at ab...@rackspace.com, and delete the original message. > >>>>>> Your cooperation is appreciated. > >>>> > >>>> > >>>> > >>>> Confidentiality Notice: This e-mail message (including any attached or > >>>> embedded documents) is intended for the exclusive and confidential use > >>>> of the > >>>> individual or entity to which this message is addressed, and unless > >>>> otherwise > >>>> expressly indicated, is confidential and privileged information of > >>>> Rackspace. > >>>> Any dissemination, distribution or copying of the enclosed material is > >>>> prohibited. > >>>> If you receive this transmission in error, please notify us immediately > >>>> by e-mail > >>>> at ab...@rackspace.com, and delete the original message. > >>>> Your cooperation is appreciated. > >> > >> > >> > >> Confidentiality Notice: This e-mail message (including any attached or > >> embedded documents) is intended for the exclusive and confidential use of > >> the > >> individual or entity to which this message is addressed, and unless > >> otherwise > >> expressly indicated, is confidential and privileged information of > >> Rackspace. > >> Any dissemination, distribution or copying of the enclosed material is > >> prohibited. > >> If you receive this transmission in error, please notify us immediately > >> by e-mail > >> at ab...@rackspace.com, and delete the original message. > >> Your cooperation is appreciated. > >> > >> > >> _______________________________________________ > >> Mailing list: https://launchpad.net/~openstack > >> Post to : openstack@lists.launchpad.net > >> Unsubscribe : https://launchpad.net/~openstack > >> More help : https://help.launchpad.net/ListHelp > > > > > > _______________________________________________ > > Mailing list: https://launchpad.net/~openstack > > Post to : openstack@lists.launchpad.net > > Unsubscribe : https://launchpad.net/~openstack > > More help : https://help.launchpad.net/ListHelp > > > _______________________________________________ > Mailing list: https://launchpad.net/~openstack > Post to : openstack@lists.launchpad.net > Unsubscribe : https://launchpad.net/~openstack > More help : https://help.launchpad.net/ListHelp _______________________________________________ Mailing list: https://launchpad.net/~openstack Post to : openstack@lists.launchpad.net Unsubscribe : https://launchpad.net/~openstack More help : https://help.launchpad.net/ListHelp