Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to find and delete orphaned blobs in the app engine blobstore?

I'm using the python api and have created a few orphaned blobs during testing.

Because of a bug in the dashboard, I can't currently delete these, and in any case going forward I would like to be able to do this programmatically since it will be unfeasible to do it manually once the number of entities goes up.

like image 465
Gareth Simpson Avatar asked May 29 '10 17:05

Gareth Simpson


2 Answers

If your BlobReferenceProperty field is indexed, then yes, it's quite possible.

The BlobInfo class provides the same set of fields as a regular model, so you can do it something like this:

blobs = BlobInfo.all().fetch(500)
for blob in blobs:
  if not MyModel.all().filter("blob_ref =", blob.key()).count(1):
    blob.delete()

If you have more than a few blobs, you probably want to reimplement this using the recently reduced mapreduce API.

like image 148
Nick Johnson Avatar answered Nov 14 '22 23:11

Nick Johnson


Slight improvement: using run instead of fetch will return an iterable instead of a list, so you don't need to limit the number of entries in the query:

blobs = BlobInfo.all().run()

instead of

blobs = BlobInfo.all().fetch(500)
like image 36
Kester Allen Avatar answered Nov 15 '22 01:11

Kester Allen