// Track inserts the provided payload info in state. If the payload // is already in the DB then it is replaced. func (up UnitPayloads) Track(pl payload.Payload) error { // XXX OMFG payload/context/register.go:83 launches bad data // which flies on a majestic unvalidated arc right through the // system until it lands here. This code should be: // // if pl.Unit != up.unit { // return errors.NotValidf("unexpected Unit %q", pl.Unit) // } // // ...but is instead: pl.Unit = up.unit if err := pl.Validate(); err != nil { return errors.Trace(err) } doc := nsPayloads.asDoc(payload.FullPayloadInfo{ Payload: pl, Machine: up.machine, }) change := payloadTrackChange{doc} if err := Apply(up.db, change); err != nil { return errors.Trace(err) } return nil }