{"record":{"id":"abbb7910e541e1d1","repo":"apache/druid","slug":"not-supported-abbb79","errorCode":null,"errorMessage":"not supported","messagePattern":"not supported","errorType":"exception","errorClass":"java.lang.UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"processing/src/main/java/org/apache/druid/query/aggregation/mean/DoubleMeanBufferAggregator.java","lineNumber":78,"sourceCode":"      for (Object o : (List) update) {\n        DoubleMeanHolder.update(buf, position, Numbers.tryParseDouble(o, 0));\n      }\n    } else {\n      DoubleMeanHolder.update(buf, position, Numbers.tryParseDouble(update, 0));\n    }\n  }\n\n  @Nullable\n  @Override\n  public Object get(ByteBuffer buf, int position)\n  {\n    return DoubleMeanHolder.get(buf, position);\n  }\n\n  @Override\n  public float getFloat(ByteBuffer buf, int position)\n  {\n    throw new UnsupportedOperationException(\"not supported\");\n  }\n\n  @Override\n  public long getLong(ByteBuffer buf, int position)\n  {\n    throw new UnsupportedOperationException(\"not supported\");\n  }\n\n  @Override\n  public double getDouble(ByteBuffer buf, int position)\n  {\n    throw new UnsupportedOperationException(\"not supported\");\n  }\n\n  @Override\n  public void close()\n  {\n","sourceCodeStart":60,"sourceCodeEnd":96,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/processing/src/main/java/org/apache/druid/query/aggregation/mean/DoubleMeanBufferAggregator.java#L60-L96","documentation":"DoubleMeanBufferAggregator keeps the running mean in a ByteBuffer slot and supports only get() (DoubleMeanHolder.get) and getDouble(byte[],position)-style access where implemented; getFloat() is an unimplemented interface stub that throws UnsupportedOperationException.","triggerScenarios":"Calling getFloat(ByteBuffer, int) on a doubleMean buffer aggregator — float-typed result extraction, group-by/vector engines reading float columns, or generic numeric iteration over aggregators.","commonSituations":"Queries with FLOAT output type over doubleMean metrics; frameworks assuming float support; users narrowing means to float expecting library support.","solutions":["Extract with get(buf, position) (a DoubleMeanHolder) and call mean(), then cast to float if desired.","Set output type to DOUBLE for doubleMean metrics.","Avoid float-typed post-aggregation over mean aggregators."],"exampleFix":"// before\nfloat f = agg.getFloat(buf, pos);\n// after\nfloat f = (float) DoubleMeanHolder.get(buf, pos).mean();","handlingStrategy":"type-guard","validationCode":"if (aggregator instanceof DoubleMeanBufferAggregator) { /* read via DoubleMeanHolder.get(buf, pos), not getFloat */ }","typeGuard":"boolean isDoubleMeanBufferAgg(BufferAggregator a) { return a instanceof DoubleMeanBufferAggregator; }","tryCatchPattern":"try { return agg.getFloat(buf, pos); } catch (UnsupportedOperationException e) { return (float) DoubleMeanHolder.get(buf, pos).mean(); }","preventionTips":["Avoid FLOAT output type with doubleMean aggregators.","Select accessor methods based on factory type, not interface assumptions.","Use get()/DoubleMeanHolder.get for mean extraction.","Cover doubleMean metrics in query-layer unit tests for all output types."],"tags":["druid","aggregation","mean","unsupported-operation"],"backgroundTag":"unsupported-operation","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}