[Pulp-list] BaseApi changes

Jeff Ortel jortel at redhat.com
Thu Jun 10 13:38:19 UTC 2010


All,

By default (safe=False), MongoDB's adheres to Eventual Consistency behaviour.  This means 
that (insert|update|delete) operations return before they are committed in the DB.  As a 
result, an inserted object may not be returned by a fetch that immediately follows.  In a 
live system such as pulp, this latency exhibits itself as non-deterministic behaviour in 
the API which can have very undesirable effects.  For example, A web page (using the API) 
that creates and object and then refreshes a table which may, or may not, include the 
created object.  Or, an external system creates & synchronizes a repo.   But, even though 
the packages have been inserted (or so it seems), they don't show up in the next API call 
to list the packages.

This latency was showing up and breaking the web services unit tests.  Not sure why 
running the API unit tests though the WS layer was exacerbating this, but it was.

Anyway, I added a BaseApi.insert() and retrofitted the API classes.  This call, like the 
existing update() and delete() passes the (safe=True) flag to ensure immediate consistency.

If you add/update API classes, please use:
     self.insert()
     self.update()
     self.delete()
instead of:
     self.objectdb.insert()
     self.objectdb.save()
     self.objectdb.remove()

Also, the BaseApi.delete(id) was expecting the primary key for all model objects to be 
(id).  This works for many cases but not for all.  For example: Package has 'packageid' 
instead of 'id'.  And, PackageVersion has 'packageid, epoch, version, release, arch' 
instead of 'id'.  So, I updated delete to be BaseApi.delete(**kwargs) to support any 
natural (including compound) keys.  And, retrofitted calls to delete to pass keyword args 
such as:

   >
   > rapi.delete(id)
   >

to:

   >
   > rapi.delete(id=id)
   >

and

   >
   > papi.delete(id)
   >

which is broken to:

   >
   > papi.delete(packageid=id).
   >



-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5126 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://listman.redhat.com/archives/pulp-list/attachments/20100610/f80563b1/attachment.p7s>


More information about the Pulp-list mailing list