Skip to content

[Telemetry Table] In place updates retain old data #8377

Description

@RadotJar

Summary

The logic used in TableRowCollection.updateRowInPlace() causes old row data to take priority over new row data. When data exists in a column (not undefined/null), and a row update comes through, the old data remains instead of the new data being shown.

This is a separate issue to [#7938] , but was likely caused by the change that fixed that reactivity issue: [#7940].

Expected vs Current Behavior

When new row data comes in, the new data should override old data.

Steps to Reproduce

  1. Set up a telemetry provider that supports telemetry subscription. The telemetry must be of a type where updates to existing rows occurs (I am guessing this is why the issue has not been caught yet, as most telemetry sends new rows only). My personal example is commands, in which their state changes as they are queued/sent/received.
  2. Set up associated object provider, and navigate to the telemetry table.
  3. Make some data come through, see the table update.
  4. Make some more data come through that includes an update of on or more existing rows.
  5. See that the updated data does not override the existing data.

Environment

  • Open MCT Version: Version: 4.1.0, Revision: 76d123bfccd97a6ae02a07b8006fe51d48439ef4
  • Deployment Type: npm dev
  • OS: Linux 5.15 Ubuntu 22.04.5 LTS 22.04.5 LTS (Jammy Jellyfish)
  • Browser: Firefox 152.0.5 (64-bit)

Impact Check List

  • Data loss or misrepresented data?
  • Regression? Did this used to work or has it always been broken?
  • Is there a workaround available?
  • Does this impact a critical component?
  • Is this just a visual bug with no functional impact?
  • Does this block the execution of e2e tests?
  • Does this have an impact on Performance?

Additional Information

I believe the issue was introduced in [#7940] , when reactivity of telemetry table rows was fixed by updating incomingRow with the data of existingRow instead of the other way around. This was done as incomingRow is a new object reference, which Vue reactivity will pick up as an update. When updating existingRow with the data of incomingRow, Vue would not react as the object reference was unchanged (still existing row).

I believe that this change accidentally inverted the order of the spread operation used to update the data in place. The data from existingRow is now spread over the data from incomingRow, which means the existingRow data takes precedence.

The issue can be located in TableRowCollection.js line 144.

Below is a screenshot with a workaround. It uses the new reference of incomingRow, but spreads data in the opposite direction to updateWithDatum.

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions