Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 如何在移动中删除app engine中的所有Blob?_Google App Engine_Go_Blobstore - Fatal编程技术网

Google app engine 如何在移动中删除app engine中的所有Blob?

Google app engine 如何在移动中删除app engine中的所有Blob?,google-app-engine,go,blobstore,Google App Engine,Go,Blobstore,BlobStoreAPI没有列出所有Blob的函数。如何获取此列表,然后删除所有Blob?appengine for go上的blobstore API无法做到这一点。相反,使用数据存储将\uu BlobInfo\uu实体提取为appengine.BlobInfo。尽管该API声称有一个,但没有填充。相反,使用返回键的字符串ID并将其强制转换为appengine.BlobKey,然后可以将其传递到blobstore.Delete 这里有一个位于“/tasks/delete blob”的处理程序,

BlobStoreAPI没有列出所有Blob的函数。如何获取此列表,然后删除所有Blob?

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

这里有一个位于“/tasks/delete blob”的处理程序,在循环中一次删除20k个blob,直到它们全部被删除。还要注意,这里不使用游标。我怀疑
\uu BlobInfo\uu
是特殊的,不支持游标。(当我试图使用它们时,它们什么也没做。)

func DeleteBlobs(w http.ResponseWriter,r*http.Request){
c:=appengine.NewContext(r)
c=appengine.Timeout(c,time.Minute)
q:=datastore.NewQuery(“\uuu BlobInfo\uu”).KeysOnly()
it:=q.Run(ctx)
wg:=sync.WaitGroup{}
某物:=假的
对于_i:=0;_i<20;_i++{
var bk[]appengine.BlobKey
对于i:=0;i<1000;i++{
k、 err:=it.Next(无)
如果err==datastore.Done{
打破
}否则,如果错误!=零{
c、 Errorf(“错误:%v”,错误)
持续
}
bk=append(bk,appengine.BlobKey(k.StringID()))
}
如果len(bk)==0{
打破
}
go func(bk[]appengine.BlobKey){
某物=真的
c、 错误(“删除%v个斑点”,len(bk))
错误:=blobstore.DeleteMulti(ctx,bk)
如果错误!=零{
c、 Errorf(“blobstore删除错误:%v”,错误)
}
wg.Done()
}(bk)
工作组.添加(1)
}
wg.Wait()
如果有什么{
添加(c,taskqueue.NewPOSTTask(“/tasks/delete blobs”,nil),”)
}
}
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), "")
    }
}