Skip to content
This repository has been archived by the owner on Mar 16, 2020. It is now read-only.

Commit

Permalink
Blob deleter, used for upcoming favicon change
Browse files Browse the repository at this point in the history
  • Loading branch information
maddyblue committed Jan 26, 2014
1 parent 1fb5a7c commit d71eaa4
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
2 changes: 2 additions & 0 deletions main.go
Expand Up @@ -87,6 +87,8 @@ func init() {
router.Handle("/user/account", mpg.NewHandler(Account)).Name("account")
router.Handle("/user/uncheckout", mpg.NewHandler(Uncheckout)).Name("uncheckout")

//router.Handle("/tasks/delete-blobs", mpg.NewHandler(DeleteBlobs)).Name("delete-blobs")

http.Handle("/", router)

if len(PUBSUBHUBBUB_HOST) > 0 {
Expand Down
38 changes: 38 additions & 0 deletions tasks.go
Expand Up @@ -493,3 +493,41 @@ func UpdateFeedLast(c mpg.Context, w http.ResponseWriter, r *http.Request) {
f.LastViewed = time.Now()
gn.Put(&f)
}

func DeleteBlobs(c mpg.Context, w http.ResponseWriter, r *http.Request) {
ctx := 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), "")
}
}

0 comments on commit d71eaa4

Please sign in to comment.