001/*
002 * Copyright 2022-2026 Revetware LLC.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017package com.soklet;
018
019import javax.annotation.concurrent.ThreadSafe;
020
021/**
022 * Thread-safe server-local control for reconciling MCP subscription
023 * authorization after application-owned invalidation or recovery.
024 * <p>
025 * Reconciliation includes active and establishing subscriptions, independently
026 * of their notification families or localization support. It fences delivery
027 * based on prior authorization and schedules fresh checks, or safely closes a
028 * stream when scheduling fails. It does not provide a distributed subscription
029 * registry, migrate streams, or recall bytes already handed to a transport.
030 * Distributed applications broadcast policy invalidation to every applicable
031 * server and invoke its reconciler after the current policy is available there.
032 *
033 * @author <a href="https://www.revetkn.com">Mark Allen</a>
034 */
035@ThreadSafe
036public interface McpSubscriptionReconciler {
037        /**
038         * Invalidates local authorization generations and schedules fresh checks for
039         * establishing and active subscriptions, including exact 2025-era GET
040         * streams and resource grants with no connected GET. With no subscriptions
041         * this is a harmless no-op.
042         * <p>
043         * Returning confirms local delivery fencing and scheduling acceptance, not
044         * completion of authorization callbacks, replica catch-up, client delivery,
045         * or recall of bytes already written.
046         */
047        void reconcileSubscriptions();
048}