2015-04-24 4 views
3

У моего сервера AppEngine много сиротских капель, не используемых в BlobStore. Я хотел бы написать код, чтобы перебрать все капли и проверить, не используются ли они, а затем удалять. Я не могу найти способ перебирать BlobStore. Это возможно?Уборка AppEngine BlobStore

+0

ли есть зритель blobstore, чтобы вы могли хотя бы увидеть их? –

+0

На панели инструментов AppEngine он показывает вам список вещей. Но он не говорит вам, что используется или нет. Вот почему мне нужно написать фрагмент кода, чтобы перебрать все их и выполнить некоторые запросы хранилища данных, чтобы проверить, используются ли они ... но сначала мне нужно итерации. – tmoore

+0

Где находится список блоб, найденных в панели инструментов? –

ответ

1

Вы можете указать https://cloud.google.com/appengine/docs/go/blobstore/reference#BlobInfo через запрос хранилища данных (хотя такой запрос в конечном итоге будет согласован).

+0

С этой страницы: 'ПРИМЕЧАНИЕ: API файлов был устарел 11 июня 2013 г. (v1.8.1) и вскоре будет закрыт, после чего эти функции больше не будут работать. Вместо этого используйте Google Cloud Storage (https://cloud.google.com/storage/). –

+0

Я думаю, именно поэтому Google затрудняет работу с Blobstore. –

+0

Большое спасибо! Вот какой GQL работает: «SELECT * FROM __BlobInfo__» <- извините, не отображается правильно, но добавьте 3 символа подчеркивания до и после. – tmoore

0

Вот код решение для итерации сгустков в golang:

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 

}

Смежные вопросы