You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ozone.apache.org by "Chi-Hsuan Huang (Jira)" <ji...@apache.org> on 2026/10/22 12:09:00 UTC

[jira] [Resolved] (HDDS-17038) OzoneManagerDoubleBuffer metrics disappear permanently after a follower installs a Ratis snapshot

     [ https://issues.apache.org/jira/browse/HDDS-17038?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Chi-Hsuan Huang resolved HDDS-17038.
------------------------------------
    Fix Version/s: 2.3.0
       Resolution: Fixed

> OzoneManagerDoubleBuffer metrics disappear permanently after a follower installs a Ratis snapshot
> -------------------------------------------------------------------------------------------------
>
>                 Key: HDDS-17038
>                 URL: https://issues.apache.org/jira/browse/HDDS-17038
>             Project: Apache Ozone
>          Issue Type: Bug
>          Components: OM HA
>    Affects Versions: 2.0.0, 2.2.0, 2.2.1
>            Reporter: Aleksei Ieshin
>            Assignee: Andy Huang
>            Priority: Minor
>              Labels: pull-request-available
>             Fix For: 2.3.0
>
>
> After an OM installs a Ratis snapshot (for example, a lagging follower catching up), all {{OzoneManagerDoubleBufferMetrics}} ({{{}ozone_manager_double_buffer_metrics_*{}}} on {{{}/prom{}}}, {{OzoneManagerDoubleBufferMetrics}} on {{{}/jmx{}}}) stop being published. They stay missing until the OM JVM restarts. The double buffer itself keeps flushing; only the metrics source is gone.
> Cause:
>  # {{{}OzoneManagerStateMachine.pause(){}}}, used by snapshot install, calls {{{}ozoneManagerDoubleBuffer.stop(){}}}. {{OzoneManagerDoubleBuffer.stop()}} calls {{{}metrics.unRegister(){}}}, which runs {{{}DefaultMetricsSystem.instance().unregisterSource(SOURCE_NAME){}}}.
>  # {{OzoneManagerStateMachine.unpause()}} then creates a new double buffer via {{{}buildDoubleBufferForRatis(){}}}. Its field initializer calls {{{}OzoneManagerDoubleBufferMetrics.create(){}}}.
>  # {{create()}} is a lazy singleton:
>  
> !http://localhost:63342/markdownPreview/651969378//Users/aieshin/git/ozone! 
> {code:java}
> public static synchronized OzoneManagerDoubleBufferMetrics create() {
>   if (instance != null) {
>     return instance;      // still the old object, whose source was unregistered in step 1
>   } ... {code}
> {{`unRegister()`}} never resets {{{}instance{}}}, so the new double buffer updates an object that no longer belongs to the metrics system, and nothing is exported.
> Observed in production on 2.0.0. The same code is in 2.2.1 and master. On a 3-node OM HA cluster, two followers lost these metrics after snapshot installs (one during a RATIS-2240 snapshot-install deadlock, one during a period of heavy load). Both got them back only after their pods restarted. The leader, which never installs a snapshot, was unaffected. This silently blinds dashboards and alerts built on double-buffer flush time.
> *Proposed fix:* make {{unRegister()}} reset the singleton, so the next {{create()}} registers a fresh source:
>  
> {code:java}
> public static synchronized void unRegister() {   // or keep it an instance method, but clear the static
>   DefaultMetricsSystem.instance().unregisterSource(SOURCE_NAME);
>   instance = null;
> } {code}
> Alternatively, {{create()}} could re-register when {{instance != null}} but the source is missing from the metrics system.
> *Test:* in {{{}TestOzoneManagerStateMachine{}}}, or via {{{}MiniOzoneHAClusterImpl{}}}, call {{pause()}} and then {{{}unpause(){}}}. Assert that {{DefaultMetricsSystem.instance().getSource("OzoneManagerDoubleBufferMetrics")}} is non-null, and that {{getTotalNumOfFlushOperations()}} increases after a further write. Possibly related: HDDS-16908 (intermittent failure in {{TestOzoneManagerDoubleBufferWithDummyResponse}} metrics assertions), since tests share the static singleton.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@ozone.apache.org
For additional commands, e-mail: issues-help@ozone.apache.org