public void Register(IStateStore store, StateRestoreCallback callback)
        {
            string storeName = store.Name;

            log.LogDebug("{LogPrefix}Registering state store {StoreName} to its state manager", logPrefix, storeName);

            if (registeredStores.ContainsKey(storeName))
            {
                throw new ArgumentException($"{logPrefix} Store {storeName} has already been registered.");
            }

            var metadata = IsChangelogStateStore(storeName) ?
                           new StateStoreMetadata
            {
                Store = store,
                ChangelogTopicPartition = GetStorePartition(storeName),
                RestoreCallback         = callback,
                RecordConverter         = StateManagerTools.ConverterForStore(store),
                Offset = null
            } :
            new StateStoreMetadata
            {
                Store  = store,
                Offset = null
            };

            registeredStores.Add(storeName, metadata);

            if (IsChangelogStateStore(storeName))
            {
                changelogRegister.Register(GetStorePartition(storeName), this);
            }

            log.LogDebug($"{logPrefix}Registered state store {storeName} to its state manager");
        }
        protected void WriteCheckpoint(bool force = false)
        {
            var changelogOffsets = stateMgr.ChangelogOffsets;

            if (StateManagerTools.CheckpointNeed(force, offsetLastSnapshotOffset, changelogOffsets))
            {
                stateMgr.Flush();
                stateMgr.Checkpoint();
                offsetLastSnapshotOffset = new Dictionary <TopicPartition, long>(changelogOffsets);
            }
        }