Search code examples
pythongoogle-app-engineblobstore

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.


Solution

  • 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.