// Create creates and stores a new juju backup archive and returns // its associated metadata. func (b *backups) Create(dbInfo db.ConnInfo, origin metadata.Origin, notes string) (*metadata.Metadata, error) { // Prep the metadata. meta := metadata.NewMetadata(origin, notes, nil) // Create the archive. filesToBackUp, err := getFilesToBackUp("") if err != nil { return nil, errors.Annotate(err, "while listing files to back up") } dumper := getDBDumper(dbInfo) args := createArgs{filesToBackUp, dumper} result, err := runCreate(&args) if err != nil { return nil, errors.Annotate(err, "while creating backup archive") } defer result.archiveFile.Close() // Store the archive. err = finishMeta(meta, result) if err != nil { return nil, errors.Annotate(err, "while updating metadata") } err = storeArchive(b.storage, meta, result.archiveFile) if err != nil { return nil, errors.Annotate(err, "while storing backup archive") } return meta, nil }
func (s *backupSuite) metadata(c *gc.C) *metadata.Metadata { origin := metadata.NewOrigin( s.State.EnvironTag().Id(), "0", "localhost", ) meta := metadata.NewMetadata(*origin, "", nil) err := meta.Finish(int64(42), "some hash", "", nil) c.Assert(err, gc.IsNil) return meta }
// asMetadata returns a new metadata.Metadata based on the backupMetadataDoc. func (doc *backupMetadataDoc) asMetadata() *metadata.Metadata { // Create a new Metadata. origin := metadata.ExistingOrigin( doc.Environment, doc.Machine, doc.Hostname, doc.Version, ) started := time.Unix(doc.Started, 0).UTC() meta := metadata.NewMetadata( *origin, doc.Notes, &started, ) // The ID is already set. meta.SetID(doc.ID) // Exit early if file-related fields not set. if !doc.fileSet() { return meta } // Set the file-related fields. var finished *time.Time if doc.Finished != 0 { val := time.Unix(doc.Finished, 0).UTC() finished = &val } err := meta.Finish(doc.Size, doc.Checksum, doc.ChecksumFormat, finished) if err != nil { // The doc should have already been validated. An error here // indicates that Metadata changed and backupMetadataDoc did not // accommodate the change. Thus an error here indicates a // developer "error". A caller should not need to worry about // that case so we panic instead of passing the error out. panic(fmt.Sprintf("unexpectedly invalid metadata doc: %v", err)) } if doc.Stored { meta.SetStored() } return meta }
func (s *backupMetadataStorage) New() filestorage.Metadata { origin := NewBackupsOrigin(s.state, "") return metadata.NewMetadata(*origin, "", nil) }
func (s *backupsSuite) newMeta(notes string) *metadata.Metadata { origin := metadata.NewOrigin("<env ID>", "<machine ID>", "<hostname>") return metadata.NewMetadata(*origin, notes, nil) }