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

2

5

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.

Laura answered 29/5, 2010 at 17:30 Comment(0)
M
13

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.

Mcelhaney answered 1/6, 2010 at 9:24 Comment(0)
W
1

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)
Weaks answered 23/10, 2014 at 23:28 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.