{"record":{"id":"af45cf7fee5d7e1a","repo":"dotnet/orleans","slug":"no-istreamqueuecheckpointer-is-configured-with-per","errorCode":null,"errorMessage":"No IStreamQueueCheckpointer is configured with PersistentStreamProvider {name}. Please configure one.","messagePattern":"No IStreamQueueCheckpointer is configured with PersistentStreamProvider (.+?)\\. Please configure one\\.","errorType":"validation","errorClass":"OrleansConfigurationException","httpStatus":null,"severity":"error","filePath":"src/AWS/Orleans.Streaming.Kinesis/Hosting/SiloKinesisStreamConfigurator.cs","lineNumber":78,"sourceCode":"                DynamoDBStreamQueueCheckpointerFactory.CreateFactory,\n                options => configureOptions?.Invoke(options));\n            this.ConfigureDelegate(services => services.AddTransient<IConfigurationValidator>(\n                sp => new DynamoDBStreamQueueCheckpointerOptionsValidator(\n                    sp.GetOptionsByName<DynamoDBStreamQueueCheckpointerOptions>(Name),\n                    Name)));\n            return this;\n        }\n    }\n\n    internal sealed class KinesisStreamCheckpointerConfigurationValidator(\n        IServiceProvider services,\n        string name) : IConfigurationValidator\n    {\n        public void ValidateConfiguration()\n        {\n            if (services.GetKeyedService<IStreamQueueCheckpointerFactory>(name) is null)\n            {\n                throw new OrleansConfigurationException(\n                    $\"No IStreamQueueCheckpointer is configured with PersistentStreamProvider {name}. Please configure one.\");\n            }\n        }\n    }\n}\n","sourceCodeStart":60,"sourceCodeEnd":84,"githubUrl":"https://github.com/dotnet/orleans/blob/fca799fa70ecb6ad975224271703ca43221f58de/src/AWS/Orleans.Streaming.Kinesis/Hosting/SiloKinesisStreamConfigurator.cs#L60-L84","documentation":"Thrown by KinesisStreamCheckpointerConfigurationValidator.ValidateConfiguration at silo startup when no IStreamQueueCheckpointerFactory is registered for the Kinesis stream provider name. The Kinesis streaming provider needs a checkpointer to track per-shard sequence positions; without one the provider cannot resume correctly, so Orleans fails fast.","triggerScenarios":"Configuring a Kinesis persistent stream provider (AddKinesisStream / UseKinesisStream) without also registering a checkpointer factory for that provider name via GetKeyedService<IStreamQueueCheckpointerFactory>(name).","commonSituations":"Following only the stream-config half of a Kinesis sample and skipping the checkpointer setup; renaming the provider without re-registering the checkpointer under the new name; upgrading Orleans and the checkpointer registration API changed.","solutions":["Register an IStreamQueueCheckpointerFactory for the same provider name when configuring the Kinesis stream (e.g. via the stream configurator's checkpointer hook or AddKinesisStream with a checkpointer configured).","Ensure the keyed service name exactly matches the stream provider name passed to the configurator.","Check the Kinesis sample's hosting code for the checkpointer registration and copy that block."],"exampleFix":"// before: stream configured, no checkpointer\nsilo.AddKinesisStreams(\"kinesis\", b => b.ConfigureStream(providerName)); // validator throws\n\n// after: register a checkpointer factory for the provider name\nservices.AddKeyedSingleton<IStreamQueueCheckpointerFactory>(providerName, ...);","handlingStrategy":"validation","validationCode":"// Ensure a checkpointer factory is registered for the provider name\nif (services.GetKeyedService<IStreamQueueCheckpointerFactory>(name) is null)\n    throw new InvalidOperationException($\"Register an IStreamQueueCheckpointerFactory for '{name}'.\");","typeGuard":"static bool HasCheckpointer(IServiceProvider services, string name)\n    => services.GetKeyedService<IStreamQueueCheckpointerFactory>(name) is not null;","tryCatchPattern":"null","preventionTips":["Register an IStreamQueueCheckpointerFactory keyed by the exact provider name.","Match the keyed-service name to the stream provider name passed to the configurator.","Copy the checkpointer registration block from the Kinesis sample when setting up streaming."],"tags":["kinesis","streaming","configuration","aws","checkpointer"],"backgroundTag":null,"analyzedSha":"fca799fa70ecb6ad975224271703ca43221f58de","analyzedAt":"2026-08-13T19:55:57.938Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}