{"record":{"id":"fa61f267cd44710c","repo":"pinpoint-apm/pinpoint","slug":"unknown-version-version-fa61f2","errorCode":null,"errorMessage":"unknown version :${version}","messagePattern":"unknown version :(.+?)","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/grpc/GrpcSpanProcessorProvider.java","lineNumber":43,"sourceCode":"import com.navercorp.pinpoint.profiler.context.compress.SpanProcessor;\n\nimport java.util.Objects;\n\npublic class GrpcSpanProcessorProvider implements Provider<SpanProcessor<PSpan.Builder, PSpanChunk.Builder>> {\n\n    private final TraceDataFormatVersion version;\n\n    @Inject\n    public GrpcSpanProcessorProvider(TraceDataFormatVersion version) {\n        this.version = Objects.requireNonNull(version, \"version\");\n    }\n\n    @Override\n    public SpanProcessor<PSpan.Builder, PSpanChunk.Builder> get() {\n        if (version == TraceDataFormatVersion.V2) {\n            return new GrpcSpanProcessorV2();\n        }\n        throw new UnsupportedOperationException(\"unknown version :\" + version);\n    }\n\n}\n","sourceCodeStart":25,"sourceCodeEnd":47,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/grpc/GrpcSpanProcessorProvider.java#L25-L47","documentation":"GrpcSpanProcessorProvider.get() only supports TraceDataFormatVersion.V2 and throws UnsupportedOperationException('unknown version') for any other version. It selects the SpanProcessor that converts span/span-chunk builders into gRPC protocol buffers; without a matching version there is no safe processor to return. The fail-fast throw prevents silently emitting incorrectly encoded span data to the collector.","triggerScenarios":"get() is called while the injected version field is not TraceDataFormatVersion.V2 — e.g. a different TraceDataFormatVersion enum value (or V1/null) was resolved by the corresponding provider based on profiler configuration.","commonSituations":"Setting an unsupported trace data format version in pinpoint config (profiler.traceformat), running an agent built for V1 data format, or version mismatch after upgrading Pinpoint where a legacy format is still configured.","solutions":["Set the trace data format version to V2 in the profiler configuration (profiler.traceformat=v2)","Upgrade the agent version so V2 is the supported format and remove legacy V1 settings","If a new version is needed, implement a GrpcSpanProcessor for it and add a branch in get()","Check the TraceDataFormatVersion provider wiring to ensure it only resolves supported versions"],"exampleFix":"// before\nif (version == TraceDataFormatVersion.V2) {\n    return new GrpcSpanProcessorV2();\n}\nthrow new UnsupportedOperationException(\"unknown version :\" + version);\n// after\nif (version == TraceDataFormatVersion.V2) {\n    return new GrpcSpanProcessorV2();\n}\nif (version == TraceDataFormatVersion.V1) {\n    logger.info(\"TraceDataFormatVersion V1 is deprecated; falling back to V2 processor\");\n    return new GrpcSpanProcessorV2();\n}\nthrow new UnsupportedOperationException(\"unknown version :\" + version);","handlingStrategy":"validation","validationCode":"if (version != TraceDataFormatVersion.V2) {\n    throw new IllegalArgumentException(\"Only TraceDataFormatVersion.V2 is supported for gRPC span processing, got: \" + version);\n}","typeGuard":"boolean isV2(TraceDataFormatVersion v) { return v == TraceDataFormatVersion.V2; }","tryCatchPattern":"try {\n    SpanProcessor<?, ?> processor = grpcSpanProcessorProvider.get();\n} catch (UnsupportedOperationException e) {\n    logger.error(\"Unsupported trace data format version configured: {}\", e.getMessage());\n    throw e;\n}","preventionTips":["Always configure profiler.traceformat=v2 when using the gRPC transport","Remove legacy V1 trace format settings after upgrading to a gRPC-based agent","Add a startup check that validates the configured version before wiring span processing"],"tags":["grpc","pinpoint-profiler","trace-format"],"backgroundTag":"unsupported-enum-value","analyzedSha":"744c3d3075e595656abb1ae331ad2c0e4c9eb996","analyzedAt":"2026-09-07T18:48:45.289Z","contentChangedAt":"2026-09-07T18:48:45.289Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}