{"record":{"id":"ad3f7b09b1cb402a","repo":"apache/beam","slug":"beamaccumulatorprovider-doesn-t-support-gethistogram-string","errorCode":null,"errorMessage":"BeamAccumulatorProvider doesn't support getHistogram(String name). Please specify namespace and name.","messagePattern":"BeamAccumulatorProvider doesn't support getHistogram\\(String name\\)\\. Please specify namespace and name\\.","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"sdks/java/extensions/euphoria/src/main/java/org/apache/beam/sdk/extensions/euphoria/core/translate/BeamAccumulatorProvider.java","lineNumber":69,"sourceCode":"    return Factory.get();\n  }\n\n  @Override\n  public Counter getCounter(String name) {\n    throw new UnsupportedOperationException(\n        \"BeamAccumulatorProvider doesn't support\"\n            + \" getCounter(String name). Please specify namespace and name.\");\n  }\n\n  @Override\n  public Counter getCounter(final String namespace, final String name) {\n    return counterMap.computeIfAbsent(\n        getMetricsKey(namespace, name), key -> new BeamMetricsCounter(namespace, name));\n  }\n\n  @Override\n  public Histogram getHistogram(String name) {\n    throw new UnsupportedOperationException(\n        \"BeamAccumulatorProvider doesn't support\"\n            + \" getHistogram(String name). Please specify namespace and name.\");\n  }\n\n  @Override\n  public Histogram getHistogram(final String namespace, final String name) {\n    return histogramMap.computeIfAbsent(\n        getMetricsKey(namespace, name), key -> new BeamMetricsHistogram(namespace, name));\n  }\n\n  @Override\n  public Timer getTimer(String name) {\n    throw new UnsupportedOperationException(\n        \"BeamAccumulatorProvider doesn't support\"\n            + \" getTimer(String name). Please specify namespace and name.\");\n  }\n\n  /**","sourceCodeStart":51,"sourceCodeEnd":87,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/extensions/euphoria/src/main/java/org/apache/beam/sdk/extensions/euphoria/core/translate/BeamAccumulatorProvider.java#L51-L87","documentation":"BeamAccumulatorProvider requires histograms to be addressed by namespace and name because Beam's Metrics API has no single-name lookup. The getHistogram(String) overload deliberately throws UnsupportedOperationException, telling callers to use getHistogram(namespace, name).","triggerScenarios":"Calling accumulatorProvider.getHistogram(\"myHistogram\") — the name-only overload — while running with the Beam accumulator provider.","commonSituations":"Reuse of metrics code written for backends with name-only histogram registries; library abstractions that default to the single-argument lookup when no namespace is configured.","solutions":["Use getHistogram(namespace, name), passing a meaningful namespace.","Update calling code to thread a namespace through to the provider.","Wrap the provider to supply a default namespace for name-only calls if the API shape must be preserved."],"exampleFix":"// before\nHistogram h = accumulatorProvider.getHistogram(\"latencies\");\n// after\nHistogram h = accumulatorProvider.getHistogram(\"myOperator\", \"latencies\");","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  histogram = provider.getHistogram(name);\n} catch (UnsupportedOperationException e) {\n  histogram = provider.getHistogram(defaultNamespace, name);\n}","preventionTips":["Prefer getHistogram(namespace, name) everywhere for portability.","Route all histogram lookups through a single utility that enforces a namespace.","Add tests that run metric code under the Beam provider."],"tags":["java","unsupported-operation","metrics","euphoria"],"backgroundTag":"unsupported-operation","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}