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}