コード例 #1
0
ファイル: util.go プロジェクト: marsmensch/blobstash
// RestoreArchive wait for job completion and restore the archive to the given path.
func RestoreArchive(con *glacier.Connection, vault, jobId, path string, wg *sync.WaitGroup) error {
	if wg != nil {
		defer wg.Done()
	}
	var job *glacier.Job
	var err error
	for {
		job, err = con.DescribeJob(vault, jobId)
		if err != nil {
			return err
		}
		if job.Completed {
			log.Printf("Archive %v: job %v completed", job.ArchiveId, jobId)
			break
		}
		time.Sleep(checkDelay)
	}
	r, _, err := con.GetRetrievalJob(vault, jobId, 0, job.ArchiveSizeInBytes-1)
	if err != nil {
		return err
	}
	defer r.Close()
	if path == "" {
		path = job.ArchiveId
	}
	f, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE, 0666)
	if err != nil {
		panic(err)
	}
	defer f.Close()
	io.Copy(f, r)
	log.Printf("Archive %v: restored to %v", job.ArchiveId, path)
	return nil
}