// 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 }