2017-08-29 3 views
0

私はGAE Datastoreを毎晩Google Storageバケットにバックアップするために標準のcronジョブを実行しています。私はこれを整理し、私は、バックアップの最後の週を必要とバケツに古いバックアップを削除するコードを追加しました:GAE cronのバックアップを自動的に整理する

GcsService gcsService = GcsServiceFactory.createGcsService(); 

    // Today, and 3 days before date 
    Date today = new Date(); 
    Date Lastweek = new Date(); 
    Long LastweekMS = today.getTime() - (7*24*60*60*1000); 
    Lastweek.setTime(LastweekMS); 

    try{ 
     ListResult list = gcsService.list(bucket, new ListOptions.Builder().setRecursive(true).build()); 

     while(list.hasNext()){ 
      ListItem item = list.next(); 
      if(item.getLastModified().after(Lastweek) == false) 
      { 
       gcsService.delete(new GcsFilename(bucket, item.getName())); 
      } 
     } 
    } 

これは非常にうまく動作します。ただし、Datastore Adminのエントリも削除するAPIがあります。彼らは私に何もかかっていませんが、ストレージバケット内のものと一致させたいと思います。 (と私は

:-) GUIを使用したくないデータストアのバックアップのおかげで ティム

答えて

2

状態情報は、データストア自体のエンティティに保存されています。

indexes: 
- kind: _AE_DatastoreAdmin_Operation 
    ancestor: no 
    properties: 
    - name: status 
    - name: last_updated 
    direction: desc 
:クエリを実行するためには、あなたが最初の種類にインデックスを作成する必要がありますことを

SELECT * FROM _AE_DatastoreAdmin_Operation 
WHERE status = "Completed" 
AND last_updated < DATETIME("YYYY-MM-DDThh:mm:ss.SSSSSS+zz:ZZ") 

注:

完了したジョブについては

、クエリに一致するエンティティを削除することができます

AE cronを使用する代わりに、GCSのライフサイクル管理を使用して、N日を過ぎたオブジェクトを自動削除することができます。https://cloud.google.com/storage/docs/lifecycle

関連する問題