Skip to content

Commit

Permalink
Merge pull request juju#17046 from cderici/log-with-tagsf-in-probably…
Browse files Browse the repository at this point in the history
…UpdateStatus-JUJU-5551

juju#17046

This has the initial changes to ultimately move the status history in state package out of the mongo and into the logs on disk via whatever logging interface is used (e.g., debug-log, loki). It uses the new `InfoWithLabelsf` (added in juju/loggo#48) in the `probablyUpdateStatusHistory`, along with the DB write (we're keeping it for now).

Couple of notes:

- There's a better way to do this, instead of passing individual parameters, we could create an interface like:
```go
type StatusEntity interface {
 Entity
 StatusKind() string
 StatusId() string
}
```

and have the entities implement it and just call these in `probablyUpdateStatusHistory`. But I didn't bother too much, since the entire `state` package, including `probablyUpdateStatusHistory` and everything's going away eventually.
- Kept the `globalKey` argument because the document for the DB write uses it, and again, we don't have a good way of generating it uniformly across entities.

## Checklist

<!-- If an item is not applicable, use `~strikethrough~`. -->

- [x] Code style: imports ordered, good names, simple structure, etc
- [x] Comments saying why design decisions were made
- [x] Go unit tests, with comments saying what you're testing

## QA steps

Bootstrap with this change:
```
juju bootstrap localhost deleteme
```

Add a model and a charm:
```
juju add-model tst && juju deploy ubuntu -n 3
```
Then while it's going up take a look at the debug-logs to see status updates:

```
juju debug-log -m controller --include-module juju.status
```

You should see something like:

```
machine-0: 18:50:01 INFO juju.status domain:status,id:ubuntu/2,kind:unit-workload,value:waiting waiting for machine
machine-0: 18:50:01 INFO juju.status kind:machine,value:started,domain:status,id:0
machine-0: 18:50:02 INFO juju.status kind:unit-workload-version,value:unknown,domain:status,id:ubuntu/2
machine-0: 18:50:02 INFO juju.status domain:status,id:ubuntu/2,kind:unit-agent,value:allocating
machine-0: 18:50:03 INFO juju.status domain:status,id:0,kind:machine,value:pending
machine-0: 18:50:04 INFO juju.status domain:status,id:0,kind:machine-instance,value:pending
machine-0: 18:50:05 INFO juju.status kind:machine,value:pending,domain:status,id:1
machine-0: 18:50:05 INFO juju.status value:pending,domain:status,id:1,kind:machine-instance
machine-0: 18:50:06 INFO juju.status id:2,kind:machine,value:pending,domain:status
machine-0: 18:50:06 INFO juju.status value:pending,domain:status,id:2,kind:machine-instance
machine-0: 18:50:15 INFO juju.status value:allocating,domain:status,id:0,kind:machine-instance starting
machine-0: 18:50:18 INFO juju.status value:allocating,domain:status,id:1,kind:machine-instance starting
machine-0: 18:50:20 INFO juju.status id:0,kind:machine-instance,value:allocating,domain:status acquiring LXD image
machine-0: 18:50:20 INFO juju.status domain:status,id:0,kind:machine-instance,value:allocating Creating container
machine-0: 18:50:22 INFO juju.status kind:machine-instance,value:allocating,domain:status,id:1 acquiring LXD image
machine-0: 18:50:23 INFO juju.status domain:status,id:1,kind:machine-instance,value:allocating Creating container
machine-0: 18:50:25 INFO juju.status id:2,kind:machine-instance,value:allocating,domain:status starting
machine-0: 18:50:30 INFO juju.status domain:status,id:2,kind:machine-instance,value:allocating acquiring LXD image
machine-0: 18:50:30 INFO juju.status kind:machine-instance,value:allocating,domain:status,id:2 Creating container
machine-0: 18:51:02 INFO juju.status kind:machine,value:started,domain:status,id:0
machine-0: 18:51:02 INFO juju.status id:0,kind:machine-instance,value:running,domain:status Container started
machine-0: 18:51:04 INFO juju.status id:0,kind:machine-lxd-profile,value:applied,domain:status
machine-0: 18:51:44 INFO juju.status kind:machine-instance,value:running,domain:status,id:0 Running
machine-0: 18:51:50 INFO juju.status domain:status,id:1,kind:machine-instance,value:running Container started
machine-0: 18:51:50 INFO juju.status domain:status,id:2,kind:machine-instance,value:running Container started
machine-0: 18:51:59 INFO juju.status id:1,kind:machine-lxd-profile,value:applied,domain:status
machine-0: 18:51:59 INFO juju.status domain:status,id:2,kind:machine-lxd-profile,value:applied
machine-0: 18:52:02 INFO juju.status kind:machine,value:started,domain:status,id:0
machine-0: 18:52:50 INFO juju.status id:1,kind:machine-instance,value:running,domain:status Running
machine-0: 18:52:52 INFO juju.status domain:status,id:2,kind:machine-instance,value:running Running
machine-0: 18:53:03 INFO juju.status kind:machine,value:started,domain:status,id:0
machine-0: 18:54:07 INFO juju.status kind:machine,value:started,domain:status,id:0
machine-0: 18:55:09 INFO juju.status domain:status,id:0,kind:machine,value:started
machine-0: 18:56:10 INFO juju.status id:0,kind:machine,value:started,domain:status
machine-0: 18:57:09 INFO juju.status id:ubuntu/0,kind:unit-workload,value:waiting,domain:status installing agent
machine-0: 18:57:10 INFO juju.status domain:status,id:0,kind:machine,value:started
machine-0: 18:57:16 INFO juju.status domain:status,id:0,kind:machine,value:started
machine-0: 18:57:22 INFO juju.status id:ubuntu/0,kind:unit-workload,value:waiting,domain:status agent initialising
machine-0: 18:58:01 INFO juju.status kind:unit-workload,value:waiting,domain:status,id:ubuntu/2 installing agent
machine-0: 18:58:02 INFO juju.status domain:status,id:ubuntu/1,kind:unit-workload,value:waiting installing agent
machine-0: 18:58:11 INFO juju.status value:started,domain:status,id:0,kind:machine
machine-0: 18:58:23 INFO juju.status id:2,kind:machine,value:started,domain:status
machine-0: 18:58:24 INFO juju.status domain:status,id:ubuntu/2,kind:unit-workload,value:waiting agent initialising
machine-0: 18:58:24 INFO juju.status value:started,domain:status,id:1,kind:machine
machine-0: 18:58:25 INFO juju.status value:waiting,domain:status,id:ubuntu/1,kind:unit-workload agent initialising
```

You may also use json format to see the exact json objects being used:

```
juju debug-log -m controller --include-module juju.status --format json --replay
```

## Links

<!-- Link to all relevant specification, documentation, bug, issue or JIRA card. -->

**Launchpad bug:** https://bugs.launchpad.net/juju/+bug/

**Jira card:** JUJU-5551
  • Loading branch information
jujubot authored Mar 19, 2024
2 parents 6b8930d + 69e46a8 commit ed5ee24
Show file tree
Hide file tree
Showing 17 changed files with 250 additions and 92 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ require (
github.com/juju/idmclient/v2 v2.0.0
github.com/juju/jsonschema v1.0.0
github.com/juju/loggo v1.0.0
github.com/juju/loggo/v2 v2.0.0
github.com/juju/loggo/v2 v2.0.1
github.com/juju/lumberjack/v2 v2.0.2
github.com/juju/mgo/v3 v3.0.4
github.com/juju/mutex/v2 v2.0.0
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -531,8 +531,8 @@ github.com/juju/loggo v0.0.0-20200526014432-9ce3a2e09b5e/go.mod h1:vgyd7OREkbtVE
github.com/juju/loggo v0.0.0-20210728185423-eebad3a902c4/go.mod h1:NIXFioti1SmKAlKNuUwbMenNdef59IF52+ZzuOmHYkg=
github.com/juju/loggo v1.0.0 h1:Y6ZMQOGR9Aj3BGkiWx7HBbIx6zNwNkxhVNOHU2i1bl0=
github.com/juju/loggo v1.0.0/go.mod h1:NIXFioti1SmKAlKNuUwbMenNdef59IF52+ZzuOmHYkg=
github.com/juju/loggo/v2 v2.0.0 h1:PzyVIn+NgoZ22QUtPgKF/lh+6SnaCOEXhcP+sE4FhOk=
github.com/juju/loggo/v2 v2.0.0/go.mod h1:647d6WvXBLj5lvka2qBvccr7vMIvF2KFkEH+0ZuFOUM=
github.com/juju/loggo/v2 v2.0.1 h1:l7EDSQuOpW0SghK5M5cTl6/iAaTLRgjLN5n3y4wzn6A=
github.com/juju/loggo/v2 v2.0.1/go.mod h1:647d6WvXBLj5lvka2qBvccr7vMIvF2KFkEH+0ZuFOUM=
github.com/juju/lru v1.0.0 h1:FP8mBNF3jBnKwGO5PtsR+8iIegx8DREfhRhpcGpYcn4=
github.com/juju/lru v1.0.0/go.mod h1:YauKGp6PAhOQyGuTOkiFdXVP1jR3vLkp/FI71GcpYcQ=
github.com/juju/lumberjack/v2 v2.0.2 h1:FlxrR62Vb7FfN7jwpSBqqereyq5bBQUF0LqOhZ2VGeI=
Expand Down
7 changes: 4 additions & 3 deletions state/addmachine.go
Original file line number Diff line number Diff line change
Expand Up @@ -577,13 +577,14 @@ func (st *State) insertNewMachineOps(mdoc *machineDoc, template MachineTemplate)
}
prereqOps = append(prereqOps, storageOps...)

m := newMachine(st, mdoc)
// At the last moment we still have statusDoc in scope, set the initial
// history entry. This is risky, and may lead to extra entries, but that's
// an intrinsic problem with mixing txn and non-txn ops -- we can't sync
// them cleanly.
_, _ = probablyUpdateStatusHistory(st.db(), machineGlobalKey(mdoc.Id), machineStatusDoc)
_, _ = probablyUpdateStatusHistory(st.db(), machineGlobalInstanceKey(mdoc.Id), instanceStatusDoc)
_, _ = probablyUpdateStatusHistory(st.db(), machineGlobalModificationKey(mdoc.Id), modificationStatusDoc)
_, _ = probablyUpdateStatusHistory(st.db(), m.Kind(), mdoc.Id, machineGlobalKey(mdoc.Id), machineStatusDoc)
_, _ = probablyUpdateStatusHistory(st.db(), m.InstanceKind(), mdoc.Id, machineGlobalInstanceKey(mdoc.Id), instanceStatusDoc)
_, _ = probablyUpdateStatusHistory(st.db(), m.ModificationKind(), mdoc.Id, machineGlobalModificationKey(mdoc.Id), modificationStatusDoc)
return prereqOps, machineOp, nil
}

Expand Down
43 changes: 31 additions & 12 deletions state/application.go
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,11 @@ func (a *Application) Tag() names.Tag {
return a.ApplicationTag()
}

// Kind returns a human readable name identifying the application kind.
func (a *Application) Kind() string {
return a.Tag().Kind()
}

// ApplicationTag returns the more specific ApplicationTag rather than the generic
// Tag.
func (a *Application) ApplicationTag() names.ApplicationTag {
Expand All @@ -158,9 +163,12 @@ func (a *Application) ApplicationTag() names.ApplicationTag {
// applicationGlobalKey returns the global database key for the application
// with the given name.
func applicationGlobalKey(appName string) string {
return "a#" + appName
return appGlobalKeyPrefix + appName
}

// appGlobalKeyPrefix is the string we use to denote application kind.
const appGlobalKeyPrefix = "a#"

// globalKey returns the global database key for the application.
func (a *Application) globalKey() string {
return applicationGlobalKey(a.doc.Name)
Expand Down Expand Up @@ -2529,13 +2537,15 @@ func (a *Application) addUnitOpsWithCons(args applicationAddUnitOpsArgs) (string
ops = append(ops, createConstraintsOp(agentGlobalKey, args.cons))
}

u := newUnit(a.st, m.Type(), udoc)
uAgent := newUnitAgent(a.st, unitTag, "")
// At the last moment we still have the statusDocs in scope, set the initial
// history entries. This is risky, and may lead to extra entries, but that's
// an intrinsic problem with mixing txn and non-txn ops -- we can't sync
// them cleanly.
_, _ = probablyUpdateStatusHistory(a.st.db(), globalKey, *unitStatusDoc)
_, _ = probablyUpdateStatusHistory(a.st.db(), globalWorkloadVersionKey(name), *workloadVersionDoc)
_, _ = probablyUpdateStatusHistory(a.st.db(), agentGlobalKey, agentStatusDoc)
_, _ = probablyUpdateStatusHistory(a.st.db(), u.Kind(), name, globalKey, *unitStatusDoc)
_, _ = probablyUpdateStatusHistory(a.st.db(), u.unitWorkloadVersionKind(), name, globalWorkloadVersionKey(name), *workloadVersionDoc)
_, _ = probablyUpdateStatusHistory(a.st.db(), uAgent.Kind(), name, agentGlobalKey, agentStatusDoc)
return name, ops, nil
}

Expand Down Expand Up @@ -3496,6 +3506,8 @@ func (a *Application) SetStatus(statusInfo status.StatusInfo) error {

return setStatus(a.st.db(), setStatusParams{
badge: "application",
statusKind: a.Kind(),
statusId: a.Name(),
globalKey: a.globalKey(),
status: statusInfo.Status,
message: statusInfo.Message,
Expand All @@ -3517,12 +3529,14 @@ func (a *Application) SetOperatorStatus(sInfo status.StatusInfo) error {
}

err = setStatus(a.st.db(), setStatusParams{
badge: "operator",
globalKey: applicationGlobalOperatorKey(a.Name()),
status: sInfo.Status,
message: sInfo.Message,
rawData: sInfo.Data,
updated: timeOrNow(sInfo.Since, a.st.clock()),
badge: "operator",
statusKind: a.Kind(),
statusId: a.Name(),
globalKey: applicationGlobalOperatorKey(a.Name()),
status: sInfo.Status,
message: sInfo.Message,
rawData: sInfo.Data,
updated: timeOrNow(sInfo.Since, a.st.clock()),
})
if err != nil {
return errors.Trace(err)
Expand All @@ -3537,7 +3551,8 @@ func (a *Application) SetOperatorStatus(sInfo status.StatusInfo) error {
}
if historyDoc != nil {
// rewriting application status history
_, err = probablyUpdateStatusHistory(a.st.db(), a.globalKey(), *historyDoc)
_, err = probablyUpdateStatusHistory(a.st.db(),
a.Kind(), a.Name(), a.globalKey(), *historyDoc)
if err != nil {
return errors.Trace(err)
}
Expand Down Expand Up @@ -3870,7 +3885,9 @@ func (op *AddUnitOperation) Done(err error) error {
StatusData: mgoutils.EscapeKeys(op.props.CloudContainerStatus.Data),
Updated: timeOrNow(op.props.CloudContainerStatus.Since, u.st.clock()).UnixNano(),
}
_, err := probablyUpdateStatusHistory(op.application.st.db(), globalCloudContainerKey(op.unitName), doc)
_, err := probablyUpdateStatusHistory(
op.application.st.db(), u.cloudContainerKind(), op.unitName,
globalCloudContainerKey(op.unitName), doc)
if err != nil {
return errors.Trace(err)
}
Expand All @@ -3887,6 +3904,8 @@ func (op *AddUnitOperation) Done(err error) error {
if newHistory != nil {
err = setStatus(op.application.st.db(), setStatusParams{
badge: "unit",
statusKind: u.Kind(),
statusId: op.unitName,
globalKey: unitGlobalKey(op.unitName),
status: unitStatus.Status,
message: unitStatus.Message,
Expand Down
26 changes: 19 additions & 7 deletions state/filesystem.go
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,11 @@ func (f *filesystem) Tag() names.Tag {
return f.FilesystemTag()
}

// Kind returns a human readable name identifying the filesystem kind.
func (f *filesystem) Kind() string {
return f.Tag().Kind()
}

// FilesystemTag is required to implement Filesystem.
func (f *filesystem) FilesystemTag() names.FilesystemTag {
return names.NewFilesystemTag(f.doc.FilesystemId)
Expand Down Expand Up @@ -283,12 +288,14 @@ func (f *filesystem) SetStatus(fsStatus status.StatusInfo) error {
return errors.Errorf("cannot set invalid status %q", fsStatus.Status)
}
return setStatus(f.mb.db(), setStatusParams{
badge: "filesystem",
globalKey: filesystemGlobalKey(f.FilesystemTag().Id()),
status: fsStatus.Status,
message: fsStatus.Message,
rawData: fsStatus.Data,
updated: timeOrNow(fsStatus.Since, f.mb.clock()),
badge: "filesystem",
statusKind: f.Kind(),
statusId: f.FilesystemTag().Id(),
globalKey: filesystemGlobalKey(f.FilesystemTag().Id()),
status: fsStatus.Status,
message: fsStatus.Message,
rawData: fsStatus.Data,
updated: timeOrNow(fsStatus.Since, f.mb.clock()),
})
}

Expand Down Expand Up @@ -1531,6 +1538,11 @@ func filesystemsToInterfaces(sb []*filesystem) []Filesystem {
return result
}

// filesystemGlobalKeyPrefix is the kind string we use to denote filesystem
// kind.
const filesystemGlobalKeyPrefix = "f#"

// filesystemGlobalKey returns the global database key for the filesystem.
func filesystemGlobalKey(name string) string {
return "f#" + name
return filesystemGlobalKeyPrefix + name
}
2 changes: 1 addition & 1 deletion state/initialize.go
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ func Initialize(args InitializeParams, providerConfigSchemaGetter config.ConfigS
if err := st.db().RunTransaction(ops); err != nil {
return nil, errors.Trace(err)
}
_, _ = probablyUpdateStatusHistory(st.db(), modelGlobalKey, modelStatusDoc)
_, _ = probablyUpdateStatusHistory(st.db(), modelTag.Kind(), modelGlobalKey, modelGlobalKey, modelStatusDoc)
return ctlr, nil
}

Expand Down
64 changes: 45 additions & 19 deletions state/machine.go
Original file line number Diff line number Diff line change
Expand Up @@ -220,15 +220,24 @@ func (m *Machine) forceDestroyedOps() []txn.Op {

// machineGlobalKey returns the global database key for the identified machine.
func machineGlobalKey(id string) string {
return "m#" + id
return machineGlobalKeyPrefix + id
}

// machineGlobalKeyPrefix is the kind string we use to denote machine kind.
const machineGlobalKeyPrefix = "m#"

// machineGlobalInstanceKey returns the global database key for the identified
// machine's instance.
func machineGlobalInstanceKey(id string) string {
return machineGlobalKey(id) + "#instance"
}

// InstanceKind returns a human readable name identifying the machine instance
// kind.
func (m *Machine) InstanceKind() string {
return m.Tag().Kind() + "-instance"
}

// globalInstanceKey returns the global database key for the machine's instance.
func (m *Machine) globalInstanceKey() string {
return machineGlobalInstanceKey(m.doc.Id)
Expand All @@ -240,6 +249,12 @@ func machineGlobalModificationKey(id string) string {
return machineGlobalKey(id) + "#modification"
}

// ModificationKind returns the human readable kind string we use for when an
// lxd profile is applied on a machine..
func (m *Machine) ModificationKind() string {
return m.Tag().Kind() + "-lxd-profile"
}

// globalModificationKey returns the global database key for the machine's
// modification changes.
func (m *Machine) globalModificationKey() string {
Expand Down Expand Up @@ -390,6 +405,11 @@ func (m *Machine) Tag() names.Tag {
return m.MachineTag()
}

// Kind returns a human readable name identifying the machine kind.
func (m *Machine) Kind() string {
return m.Tag().Kind()
}

// MachineTag returns the more specific MachineTag type as opposed
// to the more generic Tag type.
func (m *Machine) MachineTag() names.MachineTag {
Expand Down Expand Up @@ -1310,12 +1330,14 @@ func (m *Machine) InstanceStatus() (status.StatusInfo, error) {
// SetInstanceStatus sets the provider specific instance status for a machine.
func (m *Machine) SetInstanceStatus(sInfo status.StatusInfo) (err error) {
return setStatus(m.st.db(), setStatusParams{
badge: "instance",
globalKey: m.globalInstanceKey(),
status: sInfo.Status,
message: sInfo.Message,
rawData: sInfo.Data,
updated: timeOrNow(sInfo.Since, m.st.clock()),
badge: "instance",
statusKind: m.InstanceKind(),
statusId: m.doc.Id,
globalKey: m.globalInstanceKey(),
status: sInfo.Status,
message: sInfo.Message,
rawData: sInfo.Data,
updated: timeOrNow(sInfo.Since, m.st.clock()),
})
}

Expand Down Expand Up @@ -1350,12 +1372,14 @@ func (m *Machine) ModificationStatus() (status.StatusInfo, error) {
// operator.
func (m *Machine) SetModificationStatus(sInfo status.StatusInfo) (err error) {
return setStatus(m.st.db(), setStatusParams{
badge: "modification",
globalKey: m.globalModificationKey(),
status: sInfo.Status,
message: sInfo.Message,
rawData: sInfo.Data,
updated: timeOrNow(sInfo.Since, m.st.clock()),
badge: "modification",
statusKind: m.ModificationKind(),
statusId: m.doc.Id,
globalKey: m.globalModificationKey(),
status: sInfo.Status,
message: sInfo.Message,
rawData: sInfo.Data,
updated: timeOrNow(sInfo.Since, m.st.clock()),
})
}

Expand Down Expand Up @@ -1965,12 +1989,14 @@ func (m *Machine) SetStatus(statusInfo status.StatusInfo) error {
return errors.Errorf("cannot set invalid status %q", statusInfo.Status)
}
return setStatus(m.st.db(), setStatusParams{
badge: "machine",
globalKey: m.globalKey(),
status: statusInfo.Status,
message: statusInfo.Message,
rawData: statusInfo.Data,
updated: timeOrNow(statusInfo.Since, m.st.clock()),
badge: "machine",
statusKind: m.Kind(),
statusId: m.doc.Id,
globalKey: m.globalKey(),
status: statusInfo.Status,
message: statusInfo.Message,
rawData: statusInfo.Data,
updated: timeOrNow(statusInfo.Since, m.st.clock()),
})
}

Expand Down
21 changes: 14 additions & 7 deletions state/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ func (ctlr *Controller) NewModel(configSchemaGetter config.ConfigSchemaSourceGet
return nil, nil, errors.Trace(err)
}
if args.MigrationMode != MigrationModeImporting {
_, _ = probablyUpdateStatusHistory(newSt.db(), modelGlobalKey, modelStatusDoc)
_, _ = probablyUpdateStatusHistory(newSt.db(), newModel.Kind(), modelGlobalKey, modelGlobalKey, modelStatusDoc)
}

_, err = newSt.SetUserAccess(newModel.Owner(), newModel.ModelTag(), permission.AdminAccess)
Expand Down Expand Up @@ -403,6 +403,11 @@ func (m *Model) Tag() names.Tag {
return m.ModelTag()
}

// Kind returns a human readable name identifying the model kind.
func (m *Model) Kind() string {
return m.Tag().Kind()
}

// ModelTag is the concrete model tag for this model.
func (m *Model) ModelTag() names.ModelTag {
return names.NewModelTag(m.doc.UUID)
Expand Down Expand Up @@ -579,12 +584,14 @@ func (m *Model) SetStatus(sInfo status.StatusInfo) error {
return errors.Errorf("cannot set invalid status %q", sInfo.Status)
}
return setStatus(m.st.db(), setStatusParams{
badge: "model",
globalKey: m.globalKey(),
status: sInfo.Status,
message: sInfo.Message,
rawData: sInfo.Data,
updated: timeOrNow(sInfo.Since, m.st.clock()),
badge: "model",
statusKind: m.Kind(),
statusId: modelGlobalKey,
globalKey: m.globalKey(),
status: sInfo.Status,
message: sInfo.Message,
rawData: sInfo.Data,
updated: timeOrNow(sInfo.Since, m.st.clock()),
})
}

Expand Down
4 changes: 2 additions & 2 deletions state/modelcredential.go
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ func (st *State) maybeSetModelStatusHistoryDoc(modelUUID string, doc statusDoc)
return
}

if _, err = probablyUpdateStatusHistory(one.st.db(), one.globalKey(), doc); err != nil {
if _, err = probablyUpdateStatusHistory(one.st.db(), one.Kind(), one.globalKey(), one.globalKey(), doc); err != nil {
logger.Warningf("%v", err)
}
}
Expand All @@ -212,7 +212,7 @@ func (m *Model) maybeRevertModelStatus() error {
Updated: timeOrNow(nil, m.st.clock()).UnixNano(),
}

if _, err = probablyUpdateStatusHistory(m.st.db(), m.globalKey(), doc); err != nil {
if _, err = probablyUpdateStatusHistory(m.st.db(), m.Kind(), m.globalKey(), m.globalKey(), doc); err != nil {
return errors.Trace(err)
}
}
Expand Down
2 changes: 1 addition & 1 deletion state/modelmigration.go
Original file line number Diff line number Diff line change
Expand Up @@ -398,7 +398,7 @@ func migStatusHistoryAndOps(st *State, phase migration.Phase, now int64, msg str
if err != nil {
return nil, errors.Trace(err)
}
_, _ = probablyUpdateStatusHistory(st.db(), globalKey, doc)
_, _ = probablyUpdateStatusHistory(st.db(), model.Kind(), globalKey, globalKey, doc)
return ops, nil
}

Expand Down
Loading

0 comments on commit ed5ee24

Please sign in to comment.