Bug 1528278 Comment 17 Edit History

Note: The actual edited comment in the bug view page will always show the original commenter’s name and original timestamp.

Some more notes

The values for update.startup.intervals.check will typically be a small number. When it isn't the client will likely not have automatic updates enabled which would have immediately started the update download. Also, the value is not affected by BITS.
The values for update.startup.intervals.download_* are the time it took to complete the download either using the internal Firefox code or BITS.
The values for update.startup.intervals.stage_* represents the time it took to stage the update and the value isn't affected by BITS. No value represents that staging was not attempted (e.g. disabled by pref, requirements not met, etc.).
The values for update.startup.intervals.apply_* represents the time it took for the client to restart so the value can vary by quite a lot. This value isn't affected by BITS.

When the client exits while downloading the number for update.startup.downloads.*_bytes will be different than the value of update.startup.mar_*_size_bytes values

A couple of examples interpretting the data

If there are values for:
update.startup.downloads.bits_partial_seconds
update.startup.downloads.internal_partial_seconds
Without values for:
update.startup.downloads.bits_complete_seconds
update.startup.downloads.internal_complete_seconds
This means:
the BITS partial download failed
the internal Firefox code partial download succeeded
there should also be a value for update.startup.mar_complete_size_bytes since there should always be a complete update MAR file

If there are values for:
update.startup.downloads.bits_complete_seconds
update.startup.downloads.internal_complete_seconds
Without values for:
update.startup.downloads.bits_partial_seconds
update.startup.downloads.internal_partial_seconds
This means:
the BITS complete download failed
the internal Firefox code complete download succeeded
there was no partial update MAR file advertised which can also be determined by there not being a value for update.startup.mar_partial_size_bytes

If there are values for:
update.startup.downloads.bits_partial_seconds
update.startup.downloads.bits_complete_seconds
update.startup.intervals.stage_partial
update.startup.intervals.stage_complete
update.startup.intervals.apply_complete
Without values for:
update.startup.downloads.internal_partial_seconds
update.startup.downloads.internal_complete_seconds
update.startup.intervals.apply_partial
This means:
download of the partial using BITS succeeded
download of the complete using BITS succeeded
staging of the partial update failed
staging of the complete update succeeded
the complete update made it through to the end of the apply phase and whether it was successful or not can be determined by the value of the UPDATE_STATE_CODE_COMPLETE_STARTUP histogram.

Below are two examples (one with BITS and one using the internal Firefox download code) of the telemetry submitted that I simulated on my system where a partial that had been successfully staged failed during the apply phase.

| Scalar Telemetry probe name                         |  Value   |
+-----------------------------------------------------+----------+
| update.startup.from_app_version                     |   68.0a1 |
| update.startup.mar_partial_size_bytes               |  5597747 |
| update.startup.mar_complete_size_bytes              | 52520731 |
| update.startup.intervals.check                      |      167 |
| update.startup.intervals.download_internal_partial  |        4 |
| update.startup.intervals.download_internal_complete |       32 |
| update.startup.intervals.stage_partial              |        5 |
| update.startup.intervals.stage_complete             |        6 |
| update.startup.intervals.apply_partial              |       91 |
| update.startup.intervals.apply_complete             |        8 |
| update.startup.downloads.internal_partial_bytes     |  5597747 |
| update.startup.downloads.internal_partial_seconds   |        4 |
| update.startup.downloads.internal_complete_bytes    | 52520731 |
| update.startup.downloads.internal_complete_seconds  |       31 |
+-----------------------------------------------------+----------+

| Scalar Telemetry probe name                         |  Value   |
+-----------------------------------------------------+----------+
| update.startup.from_app_version                     |   68.0a1 |
| update.startup.mar_partial_size_bytes               |  5079059 |
| update.startup.mar_complete_size_bytes              | 52537067 |
| update.startup.intervals.check                      |       36 |
| update.startup.intervals.download_bits_partial      |        3 |
| update.startup.intervals.download_bits_complete     |       24 |
| update.startup.intervals.stage_partial              |        5 |
| update.startup.intervals.stage_complete             |        7 |
| update.startup.intervals.apply_partial              |       81 |
| update.startup.intervals.apply_complete             |       19 |
| update.startup.downloads.bits_partial_bytes         |  5079059 |
| update.startup.downloads.bits_partial_seconds       |        1 |
| update.startup.downloads.bits_complete_bytes        | 52537067 |
| update.startup.downloads.bits_complete_seconds      |       24 |
+-----------------------------------------------------+----------+

Below is a typical example using BITS without any failures.

| Scalar Telemetry probe name                         |  Value   |
+-----------------------------------------------------+----------+
| update.startup.from_app_version                     |   68.0a1 |
| update.startup.mar_partial_size_bytes               |  6383239 |
| update.startup.mar_complete_size_bytes              | 52539591 |
| update.startup.intervals.check                      |        1 |
| update.startup.intervals.download_bits_partial      |        3 |
| update.startup.intervals.stage_partial              |        6 |
| update.startup.intervals.apply_partial              |    12486 |
| update.startup.downloads.bits_partial_bytes         |  6383239 |
| update.startup.downloads.bits_partial_seconds       |        2 |
+-----------------------------------------------------+----------+
Some more notes

The values for update.startup.intervals.check will typically be a small number. When it isn't the client will likely not have automatic updates enabled which would have immediately started the update download. Also, the value is not affected by BITS.
The values for update.startup.intervals.download_<> are the time it took to complete the download either using the internal Firefox code or BITS.
The values for update.startup.intervals.stage_<> represents the time it took to stage the update and the value isn't affected by BITS. No value represents that staging was not attempted (e.g. disabled by pref, requirements not met, etc.).
The values for update.startup.intervals.apply_>? represents the time it took for the client to restart so the value can vary by quite a lot. This value isn't affected by BITS.

When the client exits while downloading the number for update.startup.downloads.<>_bytes will be different than the value of update.startup.mar_<>_size_bytes values

A couple of examples interpreting the data

If there are values for:
update.startup.downloads.bits_partial_seconds
update.startup.downloads.internal_partial_seconds
Without values for:
update.startup.downloads.bits_complete_seconds
update.startup.downloads.internal_complete_seconds
This means:
the BITS partial download failed
the internal Firefox code partial download succeeded
there should also be a value for update.startup.mar_complete_size_bytes since there should always be a complete update MAR file

If there are values for:
update.startup.downloads.bits_complete_seconds
update.startup.downloads.internal_complete_seconds
Without values for:
update.startup.downloads.bits_partial_seconds
update.startup.downloads.internal_partial_seconds
This means:
the BITS complete download failed
the internal Firefox code complete download succeeded
there was no partial update MAR file advertised which can also be determined by there not being a value for update.startup.mar_partial_size_bytes

If there are values for:
update.startup.downloads.bits_partial_seconds
update.startup.downloads.bits_complete_seconds
update.startup.intervals.stage_partial
update.startup.intervals.stage_complete
update.startup.intervals.apply_complete
Without values for:
update.startup.downloads.internal_partial_seconds
update.startup.downloads.internal_complete_seconds
update.startup.intervals.apply_partial
This means:
download of the partial using BITS succeeded
download of the complete using BITS succeeded
staging of the partial update failed
staging of the complete update succeeded
the complete update made it through to the end of the apply phase and whether it was successful or not can be determined by the value of the UPDATE_STATE_CODE_COMPLETE_STARTUP histogram.

Below are two examples (one with BITS and one using the internal Firefox download code) of the telemetry submitted that I simulated on my system where a partial that had been successfully staged failed during the apply phase.

| Scalar Telemetry probe name                         |  Value   |
+-----------------------------------------------------+----------+
| update.startup.from_app_version                     |   68.0a1 |
| update.startup.mar_partial_size_bytes               |  5597747 |
| update.startup.mar_complete_size_bytes              | 52520731 |
| update.startup.intervals.check                      |      167 |
| update.startup.intervals.download_internal_partial  |        4 |
| update.startup.intervals.download_internal_complete |       32 |
| update.startup.intervals.stage_partial              |        5 |
| update.startup.intervals.stage_complete             |        6 |
| update.startup.intervals.apply_partial              |       91 |
| update.startup.intervals.apply_complete             |        8 |
| update.startup.downloads.internal_partial_bytes     |  5597747 |
| update.startup.downloads.internal_partial_seconds   |        4 |
| update.startup.downloads.internal_complete_bytes    | 52520731 |
| update.startup.downloads.internal_complete_seconds  |       31 |
+-----------------------------------------------------+----------+

| Scalar Telemetry probe name                         |  Value   |
+-----------------------------------------------------+----------+
| update.startup.from_app_version                     |   68.0a1 |
| update.startup.mar_partial_size_bytes               |  5079059 |
| update.startup.mar_complete_size_bytes              | 52537067 |
| update.startup.intervals.check                      |       36 |
| update.startup.intervals.download_bits_partial      |        3 |
| update.startup.intervals.download_bits_complete     |       24 |
| update.startup.intervals.stage_partial              |        5 |
| update.startup.intervals.stage_complete             |        7 |
| update.startup.intervals.apply_partial              |       81 |
| update.startup.intervals.apply_complete             |       19 |
| update.startup.downloads.bits_partial_bytes         |  5079059 |
| update.startup.downloads.bits_partial_seconds       |        1 |
| update.startup.downloads.bits_complete_bytes        | 52537067 |
| update.startup.downloads.bits_complete_seconds      |       24 |
+-----------------------------------------------------+----------+

Below is a typical example using BITS without any failures.

| Scalar Telemetry probe name                         |  Value   |
+-----------------------------------------------------+----------+
| update.startup.from_app_version                     |   68.0a1 |
| update.startup.mar_partial_size_bytes               |  6383239 |
| update.startup.mar_complete_size_bytes              | 52539591 |
| update.startup.intervals.check                      |        1 |
| update.startup.intervals.download_bits_partial      |        3 |
| update.startup.intervals.stage_partial              |        6 |
| update.startup.intervals.apply_partial              |    12486 |
| update.startup.downloads.bits_partial_bytes         |  6383239 |
| update.startup.downloads.bits_partial_seconds       |        2 |
+-----------------------------------------------------+----------+
Some more notes

The values for update.startup.intervals.check will typically be a small number. When it isn't the client will likely not have automatic updates enabled which would have immediately started the update download. Also, the value is not affected by BITS.
The values for update.startup.intervals.download_<> are the time it took to complete the download either using the internal Firefox code or BITS.
The values for update.startup.intervals.stage_<> represents the time it took to stage the update and the value isn't affected by BITS. No value represents that staging was not attempted (e.g. disabled by pref, requirements not met, etc.).
The values for update.startup.intervals.apply_<> represents the time it took for the client to restart so the value can vary by quite a lot. This value isn't affected by BITS.

When the client exits while downloading the number for update.startup.downloads.<>_bytes will be different than the value of update.startup.mar_<>_size_bytes values

A couple of examples interpreting the data

If there are values for:
update.startup.downloads.bits_partial_seconds
update.startup.downloads.internal_partial_seconds
Without values for:
update.startup.downloads.bits_complete_seconds
update.startup.downloads.internal_complete_seconds
This means:
the BITS partial download failed
the internal Firefox code partial download succeeded
there should also be a value for update.startup.mar_complete_size_bytes since there should always be a complete update MAR file

If there are values for:
update.startup.downloads.bits_complete_seconds
update.startup.downloads.internal_complete_seconds
Without values for:
update.startup.downloads.bits_partial_seconds
update.startup.downloads.internal_partial_seconds
This means:
the BITS complete download failed
the internal Firefox code complete download succeeded
there was no partial update MAR file advertised which can also be determined by there not being a value for update.startup.mar_partial_size_bytes

If there are values for:
update.startup.downloads.bits_partial_seconds
update.startup.downloads.bits_complete_seconds
update.startup.intervals.stage_partial
update.startup.intervals.stage_complete
update.startup.intervals.apply_complete
Without values for:
update.startup.downloads.internal_partial_seconds
update.startup.downloads.internal_complete_seconds
update.startup.intervals.apply_partial
This means:
download of the partial using BITS succeeded
download of the complete using BITS succeeded
staging of the partial update failed
staging of the complete update succeeded
the complete update made it through to the end of the apply phase and whether it was successful or not can be determined by the value of the UPDATE_STATE_CODE_COMPLETE_STARTUP histogram.

Below are two examples (one with BITS and one using the internal Firefox download code) of the telemetry submitted that I simulated on my system where a partial that had been successfully staged failed during the apply phase.

| Scalar Telemetry probe name                         |  Value   |
+-----------------------------------------------------+----------+
| update.startup.from_app_version                     |   68.0a1 |
| update.startup.mar_partial_size_bytes               |  5597747 |
| update.startup.mar_complete_size_bytes              | 52520731 |
| update.startup.intervals.check                      |      167 |
| update.startup.intervals.download_internal_partial  |        4 |
| update.startup.intervals.download_internal_complete |       32 |
| update.startup.intervals.stage_partial              |        5 |
| update.startup.intervals.stage_complete             |        6 |
| update.startup.intervals.apply_partial              |       91 |
| update.startup.intervals.apply_complete             |        8 |
| update.startup.downloads.internal_partial_bytes     |  5597747 |
| update.startup.downloads.internal_partial_seconds   |        4 |
| update.startup.downloads.internal_complete_bytes    | 52520731 |
| update.startup.downloads.internal_complete_seconds  |       31 |
+-----------------------------------------------------+----------+

| Scalar Telemetry probe name                         |  Value   |
+-----------------------------------------------------+----------+
| update.startup.from_app_version                     |   68.0a1 |
| update.startup.mar_partial_size_bytes               |  5079059 |
| update.startup.mar_complete_size_bytes              | 52537067 |
| update.startup.intervals.check                      |       36 |
| update.startup.intervals.download_bits_partial      |        3 |
| update.startup.intervals.download_bits_complete     |       24 |
| update.startup.intervals.stage_partial              |        5 |
| update.startup.intervals.stage_complete             |        7 |
| update.startup.intervals.apply_partial              |       81 |
| update.startup.intervals.apply_complete             |       19 |
| update.startup.downloads.bits_partial_bytes         |  5079059 |
| update.startup.downloads.bits_partial_seconds       |        1 |
| update.startup.downloads.bits_complete_bytes        | 52537067 |
| update.startup.downloads.bits_complete_seconds      |       24 |
+-----------------------------------------------------+----------+

Below is a typical example using BITS without any failures.

| Scalar Telemetry probe name                         |  Value   |
+-----------------------------------------------------+----------+
| update.startup.from_app_version                     |   68.0a1 |
| update.startup.mar_partial_size_bytes               |  6383239 |
| update.startup.mar_complete_size_bytes              | 52539591 |
| update.startup.intervals.check                      |        1 |
| update.startup.intervals.download_bits_partial      |        3 |
| update.startup.intervals.stage_partial              |        6 |
| update.startup.intervals.apply_partial              |    12486 |
| update.startup.downloads.bits_partial_bytes         |  6383239 |
| update.startup.downloads.bits_partial_seconds       |        2 |
+-----------------------------------------------------+----------+
Some more notes

The values for update.startup.intervals.check will typically be a small number. When it isn't the client will likely not have automatic updates enabled which would have immediately started the update download. Also, the value is not affected by BITS.
The values for update.startup.intervals.download_<> are the time it took to complete the download either using the internal Firefox code or BITS.
The values for update.startup.intervals.stage_<> represents the time it took to stage the update and the value isn't affected by BITS. No value represents that staging was not attempted (e.g. disabled by pref, requirements not met, etc.).
The values for update.startup.intervals.apply_<> represents the time it took for the client to restart so the value can vary by quite a lot. This value isn't affected by BITS.

When the client exits while downloading the number for update.startup.downloads.<>_bytes will be different than the value of update.startup.mar_<>_size_bytes values

A couple of examples interpreting the data

If there are values for:
update.startup.downloads.bits_partial_seconds
update.startup.downloads.internal_partial_seconds
Without values for:
update.startup.downloads.bits_complete_seconds
update.startup.downloads.internal_complete_seconds
This means:
the BITS partial download failed
the internal Firefox code partial download succeeded
there should also be a value for update.startup.mar_complete_size_bytes since there should always be a complete update MAR file

If there are values for:
update.startup.downloads.bits_complete_seconds
update.startup.downloads.internal_complete_seconds
Without values for:
update.startup.downloads.bits_partial_seconds
update.startup.downloads.internal_partial_seconds
This means:
the BITS complete download failed
the internal Firefox code complete download succeeded
there was no partial update MAR file advertised which can also be determined by there not being a value for update.startup.mar_partial_size_bytes

If there are values for:
update.startup.downloads.bits_partial_seconds
update.startup.downloads.bits_complete_seconds
update.startup.intervals.stage_partial
update.startup.intervals.stage_complete
update.startup.intervals.apply_complete
Without values for:
update.startup.downloads.internal_partial_seconds
update.startup.downloads.internal_complete_seconds
update.startup.intervals.apply_partial
This means:
download of the partial using BITS succeeded
download of the complete using BITS succeeded
staging of the partial update failed
staging of the complete update succeeded
the complete update made it through to the end of the apply phase and whether it was successful or not can be determined by the value of the UPDATE_STATE_CODE_COMPLETE_STARTUP histogram.

Below are two examples (one with BITS and one using the internal Firefox download code) of the telemetry submitted that I simulated on my system where a partial that had been successfully staged failed during the apply phase.
```
| Scalar Telemetry probe name                         |  Value   |
+-----------------------------------------------------+----------+
| update.startup.from_app_version                     |   68.0a1 |
| update.startup.mar_partial_size_bytes               |  5597747 |
| update.startup.mar_complete_size_bytes              | 52520731 |
| update.startup.intervals.check                      |      167 |
| update.startup.intervals.download_internal_partial  |        4 |
| update.startup.intervals.download_internal_complete |       32 |
| update.startup.intervals.stage_partial              |        5 |
| update.startup.intervals.stage_complete             |        6 |
| update.startup.intervals.apply_partial              |       91 |
| update.startup.intervals.apply_complete             |        8 |
| update.startup.downloads.internal_partial_bytes     |  5597747 |
| update.startup.downloads.internal_partial_seconds   |        4 |
| update.startup.downloads.internal_complete_bytes    | 52520731 |
| update.startup.downloads.internal_complete_seconds  |       31 |
+-----------------------------------------------------+----------+
```
```
| Scalar Telemetry probe name                         |  Value   |
+-----------------------------------------------------+----------+
| update.startup.from_app_version                     |   68.0a1 |
| update.startup.mar_partial_size_bytes               |  5079059 |
| update.startup.mar_complete_size_bytes              | 52537067 |
| update.startup.intervals.check                      |       36 |
| update.startup.intervals.download_bits_partial      |        3 |
| update.startup.intervals.download_bits_complete     |       24 |
| update.startup.intervals.stage_partial              |        5 |
| update.startup.intervals.stage_complete             |        7 |
| update.startup.intervals.apply_partial              |       81 |
| update.startup.intervals.apply_complete             |       19 |
| update.startup.downloads.bits_partial_bytes         |  5079059 |
| update.startup.downloads.bits_partial_seconds       |        1 |
| update.startup.downloads.bits_complete_bytes        | 52537067 |
| update.startup.downloads.bits_complete_seconds      |       24 |
+-----------------------------------------------------+----------+
```
Below is a typical example using BITS without any failures.
```
| Scalar Telemetry probe name                         |  Value   |
+-----------------------------------------------------+----------+
| update.startup.from_app_version                     |   68.0a1 |
| update.startup.mar_partial_size_bytes               |  6383239 |
| update.startup.mar_complete_size_bytes              | 52539591 |
| update.startup.intervals.check                      |        1 |
| update.startup.intervals.download_bits_partial      |        3 |
| update.startup.intervals.stage_partial              |        6 |
| update.startup.intervals.apply_partial              |    12486 |
| update.startup.downloads.bits_partial_bytes         |  6383239 |
| update.startup.downloads.bits_partial_seconds       |        2 |
+-----------------------------------------------------+----------+
```

Back to Bug 1528278 Comment 17