coding sprint am api updates details

40
Sponsored by the National Science Foundation 1 November 4, 2011 Coding Sprint AM API Updates Details Sarah Edwards November 4, 2011 www.geni.net

Upload: orenda

Post on 06-Jan-2016

38 views

Category:

Documents


2 download

DESCRIPTION

Coding Sprint AM API Updates Details. Sarah Edwards November 4, 2011 www.geni.net. AM API Status Review. Wednesday AM API Session discussed AM API changes AM API version 2 seems (mostly) settled Include Change Set A: RSpecs are in XML Include Change Set B Part 1: New options argument - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 1November 4, 2011

Coding SprintAM API Updates Details

Sarah EdwardsNovember 4, 2011

www.geni.net

Page 2: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 2November 4, 2011

AM API Status Review

• Wednesday AM API Session discussed AM API changes

• AM API version 2 seems (mostly) settled– Include Change Set A: RSpecs are in XML– Include Change Set B Part 1: New options argument– Include Change Set B Part 2: Richer return structures

• If we can address the questions that remain today

– Other topics require further discussion

• Do we agree – AM API v2 is those changes?• When can SFA, PG, FOAM, and Orca implement

these changes by?

Page 3: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 3November 4, 2011

Change Set B Issues

1. Error codes – Integers or Strings?

2. How are error codes documented?

3. Supporting multiple AM API versions

4. How are new options or returns documented?

5. Define GENI error codes

Page 4: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 4November 4, 2011

1. Error codes – type?

• Proposal says error codes are integers with the space divided by AM type

• Counter proposal: use namespaces to divide the space, making codes strings– No ‘lost’ code space when an AM can’t use 1000 codes– Larger code range possible– Code indicates explicitly the namespace– https://openflow.stanford.edu/display/FOAM/AM+return

+code+proposal

• Discuss

Page 5: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 5November 4, 2011

2. Documenting Error Codes

• Standard error codes must be documented

• Proposal: a wiki page off of GAPI_AM_API on the geni.net wiki

• 2nd Proposal: An XML document attached to the GAPI_AM_API wiki page

Page 6: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 6November 4, 2011

3. Supporting Multiple API Versions

• API v2 is incompatible with v1• Some AMs may want to be nice and support both. More

generally, AMs may want to support multiple API versions.

• Since method semantics may change without signature changes, AM must know what version the client is talking

• PG uses different URLs for different versions, eg• www.me.com/xmlrpc/gapi/2 vs

www.me.com/xmlrpc/gapi/1• If we do that, how do AMs advertise available API

versions and URLs?

Page 7: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 7November 4, 2011

3. (continued)

• Proposal: This change need not hold up API v2 – handle independently

• Proposal: Use separate URLs, advertised in the GetVersion return of all API versions:

geni_api_versions: {

1: <URL>,

2: <URL>,

...

}

Page 8: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 8November 4, 2011

4. Documenting New Options, etc

• Aggregates should document any new optional ‘options’ or new return values they support– XMLRPC Introspection (methodHelp)?– GetVersion return?– Both?– Do we need to standardize?– Do we need to register option/return names or have

namespaces?

• Proposal: format remains ad-hoc. AMs using GetVersion are encouraged to use a format like the following

Page 9: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 9November 4, 2011

4. (continued): Sample Ad

• A possible option advertisement in GetVersion:

methodOptions: {

GetVersion: { verbose: {

type=boolean, description=“True means supply gory detail on AM internals and versions."

}, myOtherNewOption:..... },

ListResources.... }

Page 10: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 10November 4, 2011

5. GENI Error codes

• Some (most) error codes will be standard across all AMs. We should pick those soon.

• PG has some error codes it uses• Aaron H proposed a different classification on the

geni-dev mailing list• Code format depends on the resolution of issue

#1

Page 11: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 11November 4, 2011

5. (continued): PG error codes

sub GENIRESPONSE_SUCCESS() { 0; } sub GENIRESPONSE_BADARGS() { 1; } sub GENIRESPONSE_ERROR() { 2; } sub GENIRESPONSE_FORBIDDEN() { 3; } sub GENIRESPONSE_BADVERSION() { 4; } sub GENIRESPONSE_SERVERERROR() { 5; } sub GENIRESPONSE_TOOBIG() { 6; } sub GENIRESPONSE_REFUSED() { 7; } sub GENIRESPONSE_TIMEDOUT() { 8; } sub GENIRESPONSE_DBERROR() { 9; } sub GENIRESPONSE_RPCERROR() {10; } sub GENIRESPONSE_UNAVAILABLE() {11; } sub GENIRESPONSE_SEARCHFAILED() {12; } sub GENIRESPONSE_UNSUPPORTED() {13; } sub GENIRESPONSE_BUSY() {14; } sub GENIRESPONSE_EXPIRED() {15; } sub GENIRESPONSE_INPROGRESS() {16; } sub GENIRESPONSE_ALREADYEXISTS() {17; }

my @GENIRESPONSE_STRINGS = ( "Success", "Bad Arguments", "Error", "Operation Forbidden", "Bad Version", "Server Error", "Too Big", "Operation Refused", "Operation Times Out", "Database Error", "RPC Error", "Unavailable", "Search Failed", "Operation Unsupported", "Busy", "Expired", "In Progress", "Already Exists",

);

Page 12: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 12November 4, 2011

5. (continued): Alternative Errors

• Not authenticated – (do any calls not require authentication, such that we could ever

get to the application layer anyhow?) • Not authorized

– (with the following sub-types that could get their own codes for clarity)

– Credential Expired– Credential not trusted– Missing credential– Insufficient Privileges

• No such sliver• Malformed RSpec• Invalid Datetime• Resources unavailable, can't allocate• Unsupported operation

Page 13: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 13November 4, 2011

5. Alternative errors continued

• Server error (PG error 5)• Server busy (PG error 14)• Other malformed request (is this PG error 1?)• Operation timed out (PG error 8)• Resource busy (or locked, which is different then

server busy). (PG error 14 again)• Search Failed (as when a slice or sliver does not

exist) (PG error 12)– or is this the same as 'no such sliver' above?

• Already Exists (inverse of above). (PG error 17)

Page 14: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 14November 4, 2011

Change Set B Part 2 Approved?

• Given this discussion….

• Can we adopt Change Set B Part 2 – methods return a structure – for inclusion in AM API version 2?

Page 15: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 15November 4, 2011

Change Sets A&B Review

Page 16: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 16November 4, 2011

Change Set A: RSpecs

• Aggregate Managers must advertise what RSpec formats they support

• AM API must specify that the RSpec arguments and returns are in GENI standard format (GENI v3)– Was ProtoGENI v2– Same schemas, now on geni.net with a new namepace– SFA, emulab-devel, Flack, and Omni support in place

• Jon Duerig of ProtoGENI proposed AM API revisions to support this and we discussed it on [email protected]

• Published to GENI wiki and [email protected]– http://groups.geni.net/geni/wiki/GAPI_AM_API_DRAFT

• Revisions will be in AM API v2

Page 17: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 17November 4, 2011

Change Set B Part 1: New Options

• Note: This set of 2 distinct changes is currently under discussion and has gotten no official or unofficial agreement.

• Part 1: Additional options argument• Motivation:

– Support innovation– Support aggregate/resource specific configuration options– Examples: Tree or chain mode in stitching; whether user keys in

CreateSliver add or replace existing keys on the slice• Proposal

– Add an XMLRPC struct (name-value pairs) called options– No required options, but argument is required (except in

GetVersion)

Page 18: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 18November 4, 2011

Change Set B Part 1: Semantics

• Aggregates are compliant with this API change by accepting this argument

• Clients are required to supply this argument • In GetVersion, this argument remains optional.

– V1 clients will get errors calling other methods– V2 AMs will include the geni_api argument as a top-level entry in

the return struct, specifying 2 to indicate to clients that this AM speaks version 2 of the AM API. This allows experimenters to understand that they need to upgrade their client, or might instruct a clever client tool to automatically switch to version 2 syntax.

• Aggregates should not require any new options to any method– Use defaults for any options– Clients must always be able to work with any aggregate using the

AM API

Page 19: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 19November 4, 2011

Change Set B Part 1 continued

• Aggregates are encouraged to document any new options – to bootstrap coordination with clients, and – provide documentation for human experimenters. – One way to provide partial documentation, is to

implement XML-RPC introspection. • Through the use of method help, aggregates can provide

human readable text describing options.

– Alternatively or additionally, aggregates may provide a capability descriptor as part of their return from GetVersion.

• We have not specified the format for advertising this capability descriptor and those extra options in GetVersion.

Page 20: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 20November 4, 2011

Change Set B Part 1: Sample Ad

• A possible option advertisement in GetVersion:

methodOptions: {

GetVersion: { verbose: {

type=boolean, description=“True means supply gory detail on AM internals and versions."

}, myOtherNewOption:..... },

ListResources.... }

Page 21: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 21November 4, 2011

Change Set B Part 1: Discussion To Date

• Points from email discussion– Not ioctl; use the server to determine you have a valid method

signature – Don’t add new methods for each new option – that isn’t an API– Could have just allowed arbitrary optional arguments - equivalent– AMs should advertise new options

• XMLRPC introspection, but that gives us only the help string• GetVersion (not standardized)

– Could specify syntax during coding sprint• Nothing specific required

• No significant objections on the mailing list• AMs must not require any new options – provide defaults• General agreement on details• Does anyone have new concerns, comments or objections

that they want to raise now?

Page 22: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 22November 4, 2011

Change Set B Part 2: Return Structures

• Change Set B Part 2: Methods return rich structures• Motivation

– AM API v1 method failures are inconsistent, confusing• XMLRPC faults wrapping messages from the server• Sometimes returns ‘False’ with no feedback

• Proposal– Expand and formalize returns to give better feedback on both

failure and success

• AMs will– Return more information– Support richer client-server communication. – Give clients hints on how to use successful returns, – Innovate within the bounds of the AM API.

Page 23: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 23November 4, 2011

Change Set B Part 2: Proposal

• The proposal changes the return values of all methods

• Return an XMLRPC struct (aka property list) – On any application layer success, failure, and even

on an error or for most exceptions. – Note that a malformed XMLRPC request should still

raise an XMLRPC Fault, and other Faults dictated by the XMLRPC specification should still be raised.

– This struct will contain the return value from the previous revision of the AM API as an entry. This struct will have 3 defined entries, and aggregates are free to include other entries to give more information to clients.

Page 24: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 24November 4, 2011

Change Set B Part 2: Sample Return

• For example, SliverStatus could return on success:

{ code: 0 value: {

geni_urn: <sliver URN> geni_status: ready geni_resources: [ { geni_urn: <resource URN> geni_status: ready geni_error: ''}, { geni_urn: <resource URN> geni_status: ready geni_error: ''} ] }

output: <none> }

Page 25: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 25November 4, 2011

Change Set B Part 2 continued

• On failure, DeleteSliver might return:

• (That code and output are merely examples.)

• An exception: At the top level, GetVersion adds a required entry: 'geni_api'=2. – This allows v1 clients to determine that they are indeed

talking to a GENI AM, but since the version is 2, that is why other function calls will fail.

{ code: 1 value: False output: 'No such slice here'

}

Page 26: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 26November 4, 2011

Change Set B Part 2: Specification

• The three required entries in the return structure are code, value, and output:

• code: An integer, non-zero on error. – 0 = Success – <0 = XMLRPC required error codes – 1-1000 = GENI negotiated return codes (none so far) – 1001-2000 = ProtoGENI specific return codes – 2001-3000 = PlanetLab specific return codes – 3001-4000 = Orca specific return codes – 4001-5000 = OpenFlow specific return codes – others as needed

Page 27: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 27November 4, 2011

Change Set B Part 2 Spec. continued

• value: On success, this is required. Optional on failure or error. Object representing the successful return value. The value is not defined on error, though aggregates are free to use it. – For GetVersion, the value is an XMLRPC struct – For ListResources, the value is an RSpec – For CreateSliver, the value is an RSpec – For RenewSliver, the value is a boolean – For DeleteSliver, the value is a boolean – For SliverStatus, the value is an XMLRPC struct – For Shutdown, the value is a boolean

• output: On failure or error, this is required. Optional on success. This is a String with a human readable message explaining the result. – Specifically, this might include an error string, a stacktrace, or other useful

messages to help the Experimenter resolve or report the failure or error. It is not defined on success, though aggregates are free to use it.

Page 28: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 28November 4, 2011

Change Set B Part 2 continued

• AMs should use code values and output messages that help experimenters distinguish among bad input, temporary server errors, or server bugs.

• AMs may use returns to suggest solutions to failed requests – A failed RenewSliver call might return a new date string in the value field that would

be allowed. – A failed CreateSliver call might return a modified request RSpec in the value field.

• Avoid raising an error (XMLRPC Fault) for application layer errors or any other cases where the XMLRPC specification does not require a Fault

• For comparison, – Orca functions return property lists internally. – The ProtoGENI CMv2 API returns a struct with exactly these 3 values. ProtoGENI

however uses a different range of return codes, and largely does not define the value slot on errors.

Page 29: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 29November 4, 2011

Change Set B Part 2: Agreed?

• No significant objections on the mailing list• Details seem fairly worked out• To do: GENI standard error codes

– Start with ProtoGENI codes as starting point?– Discuss at the coding sprint?

• Compatibility– AMs will likely switch to AM API v2, not support both versions– AMs can support both if they choose

• Note that ListResources arguments have not changed, so the AM may not know which API version is desired without a further hint, like the server URL

– Clients will need to support both v1 and v2 clients if they want to talk to all aggregates during the transition

– Future API changes will have similar transitions

• Does anyone have new concerns, comments or objects that they want to raise now?

Page 30: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 30November 4, 2011

Other API Discussion Topics Follow

Page 31: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 31November 4, 2011

Change Set C: UpdateSliver

• Change Set C: Add UpdateSliver• Motivation

– Coffee girl: ‘make my slice bigger’– In current API, you must delete your slice and recreate it – possibly

losing state and even resources

• Approaches to UpdateSliver in the community– Orca: can modify resources, depending on the resource. Working

on add/remove resources– PG: UpdateSliver in CMv2 API. Takes request RSpec, returns a

ticket• Experimenter separately redeems the ticket and restarts the sliver• Aggregate computes the difference from the existing state

– PL: SFA has UpdateSlice, which is a synonym for CreateSliver in AM API.

Page 32: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 32November 4, 2011

Change Set C: Proposal

• Proposalstruct UpdateSliver(string slice_urn,

string credentials[], string rspec, struct users[], struct options)

Success Return: { code=0 value= <GENI v3 manifest RSpec string> output = <None>

} Note: rspec is in the GENI v3 request schema

Page 33: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 33November 4, 2011

Change Set C: Semantics

• Proposed Semantics:– RSpec argument is a complete request RSpec

• Question: Can we support a request from an edited manifest easily?• Should we instead support 2 modes: complete and diff?

– Atomic operations: all changes succeed or all fail, with an explanation of why it failed and how to modify the request to succeed if possible

– AM automatically starts/restarts resources• Do not wait for tickets or adding Start and Restart calls to the API. But

perhaps support that variation later– AM API requires no guarantees about whether unchanged

resources in the reservation will be moved or restarted• A per aggregate/resource decision• For example, aggregates may load balance VMs• Aggregates should document any guarantees or behavior in this

respect

Page 34: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 34November 4, 2011

Change Set C: Discussion Points

• Differences and options– Take full desired state or a delta? Who calculates the delta? Who

synchronizes requests among multiple experimenters within a slice?

• Ilia and Nick argued we should support BOTH deltas AND full RSpecs• PG argues that new resource requests to link to existing reserved

resources are hard to express, and merging RSpecs is hard

– Should the AM partially fulfill requests? (Give you 3 out of 5 new nodes, while deleting the ones you asked to drop)

• But giving you nodes without a link to connect them is silly

– Does the AM restart nodes immediately? Or does the experimenter pick which nodes to restart and when?

• Leigh and Rob argued the AM should not restart nodes

– RSpec: request? Or a manifest, to allow mods to what you got?• PG specifies a request but accepts manifests.

We must discuss!

Page 35: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 35November 4, 2011

Change Set C: Discuss

• Any new concerns? New comments or suggestions?

• Approaches to address Ilia, Leigh, and Rob’s comments?

• Agree to include in AM API v2?

Page 36: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 36November 4, 2011

Change Set D: Slivers and sliver groups

• Problem: Current API methods take a Slice URN – Create, delete, renew everything in the slice at an Aggregate. – No way to add to a slice at an aggregate, delete part of a slice at

an aggregate, etc.• Definitions

– Sliver: Some of the resources at one aggregate in one slice• NOT ALL the resources at the aggregate in the slice• Typically the smallest set of resources that the AM will independently

reserve or allocate• 1 Slice may have multiple slivers at a single aggregate• 1 Sliver may contain multiple components

• ProtoGENI definitions for comparison:– AggregateSliver: all resources in the slice at an aggregate

• This is what CreateSliver creates– ComponentSliver: things with a sliver_id, roughly 1 resource in

each

Page 37: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 37November 4, 2011

Change Set D: Function implications

• This change would make methods operate on individual slivers or on other groups of slivers – specifically CreateSliver, DeleteSliver, RenewSliver, and new methods not yet in the API

• UpdateSliver gives us the ability to add/remove slivers within an aggregate

• Start, Stop, Restart and similar functions don’t exist in the AM API – yet

• RenewSliver is not addressed (yet)

Page 38: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 38November 4, 2011

Change Set D: Proposing Nothing

• Proposal: Given we add UpdateSliver, do nothing else (for now)– CreateSliver gives a bunch of slivers, DeleteSliver

deletes all slivers at the AM, and we only support Renewing all slivers at an AM

• Anyone have serious concerns with not changing the AM API to address this now?

• We can discuss this on the GENI dev mailing list and include changes in a future API revision

Page 39: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 39November 4, 2011

Change Set E: Tickets

• What are tickets?– A promise to deliver (like a reservation)– Proof of purchase (like a receipt that can be turned in for your

goods)– A way to reference and trade resources without physically moving

boxes– A feature which, in name, appears in Orca, SFA, PlanetLab, and

ProtoGENI• Benefits and features of tickets

– Support brokers to allocate, consolidate resources on behalf of others

– Allow transferring, lending resources– Support scheduled reservations– Negotiated reservations, or coordinated reservations across

aggregates– 2 phase commit

Page 40: Coding Sprint AM API Updates Details

Sponsored by the National Science Foundation 40November 4, 2011

Change Set E: Implementations

• Implementations in the community– Concept defined in SFA as a signed RSpec that promises to

allocate resources.– ProtoGENI CM interface constructs them similarly, using them for

2 phase commit– Orca uses leases and tickets extensively for brokering, lending

resources and for negotiated reservations / 2 phase commit. But they are structured differently.

• Parts of a proposal– Structure– Semantics– Additional ticket related methods or changes to existing methods