{"record":{"id":"4b9865915fe14cf6","repo":"pinpoint-apm/pinpoint","slug":"unknown-spansendertype-spansendertype","errorCode":null,"errorMessage":"Unknown SpanSenderType: ${spanSenderType}","messagePattern":"Unknown SpanSenderType: (.+?)","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/module/GrpcModule.java","lineNumber":225,"sourceCode":"        TypeLiteral<SpanProcessor<PSpan.Builder, PSpanChunk.Builder>> spanPostProcessorType = new TypeLiteral<SpanProcessor<PSpan.Builder, PSpanChunk.Builder>>() {\n        };\n        bind(spanPostProcessorType).toProvider(GrpcSpanProcessorProvider.class).in(Scopes.SINGLETON);\n\n        TypeLiteral<DataSender<SpanType>> spanDataSenderType = new TypeLiteral<DataSender<SpanType>>() {\n        };\n        Key<DataSender<SpanType>> spanDataSender = Key.get(spanDataSenderType, SpanDataSender.class);\n\n        SpanSenderType spanSenderType = grpcTransportConfig.getSpanSenderType();\n        logger.info(\"SpanSenderType: {}\", spanSenderType);\n        switch (spanSenderType) {\n            case BATCH:\n                bind(spanDataSender).toProvider(SpanBatchGrpcDataSenderProvider.class).in(Scopes.SINGLETON);\n                break;\n            case STREAM:\n                bind(spanDataSender).toProvider(SpanGrpcDataSenderProvider.class).in(Scopes.SINGLETON);\n                break;\n            default:\n                throw new IllegalStateException(\"Unknown SpanSenderType: \" + spanSenderType);\n        }\n        expose(spanDataSender);\n    }\n\n\n    private GrpcTransportConfig loadGrpcTransportConfig() {\n        GrpcTransportConfig grpcTransportConfig = new GrpcTransportConfig();\n        grpcTransportConfig.read(profilerConfig.getProperties()::getProperty);\n        logger.info(\"{}\", grpcTransportConfig);\n        return grpcTransportConfig;\n    }\n\n}\n","sourceCodeStart":207,"sourceCodeEnd":239,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/module/GrpcModule.java#L207-L239","documentation":"GrpcModule.bindSpanDataSender switches on the configured SpanSenderType to bind either a batched or streaming gRPC span sender. An unrecognized type hits the default branch and throws IllegalStateException('Unknown SpanSenderType: ...'). The enum is internal, so this usually means a bad config mapping or a version mismatch.","triggerScenarios":"The profiler's span sender type value resolves to something other than GRPC/STREAM (the supported cases) when configuring the gRPC module — e.g. an unknown string mapped into SpanSenderType or an enum extended in one jar but not another.","commonSituations":"Typos or unsupported values in profiler.span.sender type / transport config, hand-edited pinpoints config files, or mixed agent jar versions where a new SpanSenderType constant is read by older code.","solutions":["Set the span sender type to a supported value (e.g. GRPC for batched or STREAM for streaming transport)","Check profiler config keys around span sender/transport for typos or copied-in invalid values","Use agent jars all from the same release so the enum has the expected constants","Inspect how the value is parsed (valueOf) and make sure the config string matches a valid enum constant"],"exampleFix":"// before\nprofiler.span.grpc.senderType=UDP  // not a gRPC sender type\n// after\nprofiler.span.grpc.senderType=GRPC","handlingStrategy":"validation","validationCode":"String t = config.readString(\"profiler.span.sender.type\", \"GRPC\");\nif (!t.equalsIgnoreCase(\"GRPC\") && !t.equalsIgnoreCase(\"STREAM\")) {\n    throw new IllegalArgumentException(\"profiler.span.sender.type must be GRPC or STREAM, got: \" + t);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only use documented sender type values in pinpoint.config","Validate config values after upgrading agent versions","Keep all agent jars in version lockstep to avoid enum drift"],"tags":["grpc","enum","config","guice"],"backgroundTag":"invalid-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"}