清理AppEngine BlobStore

时间:2015-04-24 16:26:12

标签: google-app-engine go

我的AppEngine服务器有很多未在BlobStore中使用的孤立blob。我想编写代码来迭代所有blob并检查它们是否未被使用然后删除。我找不到迭代BlobStore的方法。这可能吗?

2 个答案:

答案 0 :(得分:1)

您可以通过数据存储区查询列出https://cloud.google.com/appengine/docs/go/blobstore/reference#BlobInfo(尽管此类查询最终是一致的)。

答案 1 :(得分:0)

这是一个在golang中迭代blob的代码解决方案:

c.Infof("Iterating over blobs")
q := datastore.NewQuery("__BlobInfo__")

// Iterate over the results.
total := 0
t := q.Run(c)
for {
        var bi blobstore.BlobInfo
        _, err := t.Next(&bi)
        if err == datastore.Done {
                break
        }
        if err != nil && isErrFieldMismatch(err) == false {
                c.Errorf("Error fetching next Blob: %v", err)
                break
        }
        // Do something with the Blob bi
        c.Infof("Got blob [%v] of size [%v]", bi.ContentType, bi.Size)
        total++
        if total > 100 { break }
}
c.Infof("Iterating Done")

您还需要使用此功能来忽略字段不匹配错误:

func isErrFieldMismatch(err error) bool {
    _, ok := err.(*datastore.ErrFieldMismatch)
    return ok

}