【问题标题】:How do I delete all blobs in app engine on Go?如何在 Go 上删除应用引擎中的所有 blob?
【发布时间】:2014-02-17 01:06:14
【问题描述】:

blobstore API 没有列出所有 blob 的功能。如何获取此列表,然后删除所有 blob?

【问题讨论】:

    标签: google-app-engine go blobstore


    【解决方案1】:

    appengine for go 上的 blobstore API 无法做到这一点。相反,使用数据存储将__BlobInfo__ 实体作为appengine.BlobInfo 获取。尽管 API 声称有一个 BlobKey field,但它并没有被填充。相反,使用返回键的字符串 ID 并将其转换为 appengine.BlobKey,然后您可以将其传递给 blobstore.Delete

    这是“/tasks/delete-blob”处的一个处理程序,用于在循环中一次删除 20k 个 blob,直到它们全部被删除。另请注意,此处不使用游标。我怀疑__BlobInfo__ 很特殊,不支持游标。 (当我尝试使用它们时,它们什么也没做。)

    func DeleteBlobs(w http.ResponseWriter, r *http.Request) {
        c := appengine.NewContext(r)
        c = appengine.Timeout(c, time.Minute)
        q := datastore.NewQuery("__BlobInfo__").KeysOnly()
        it := q.Run(ctx)
        wg := sync.WaitGroup{}
        something := false
        for _i := 0; _i < 20; _i++ {
            var bk []appengine.BlobKey
            for i := 0; i < 1000; i++ {
                k, err := it.Next(nil)
                if err == datastore.Done {
                    break
                } else if err != nil {
                    c.Errorf("err: %v", err)
                    continue
                }
                bk = append(bk, appengine.BlobKey(k.StringID()))
            }
            if len(bk) == 0 {
                break
            }
            go func(bk []appengine.BlobKey) {
                something = true
                c.Errorf("deleteing %v blobs", len(bk))
                err := blobstore.DeleteMulti(ctx, bk)
                if err != nil {
                    c.Errorf("blobstore delete err: %v", err)
                }
                wg.Done()
            }(bk)
            wg.Add(1)
        }
        wg.Wait()
        if something {
            taskqueue.Add(c, taskqueue.NewPOSTTask("/tasks/delete-blobs", nil), "")
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-07-24
      • 2014-08-10
      • 1970-01-01
      • 2015-04-08
      • 2011-10-15
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多