diff --git a/python/sglang/srt/disaggregation/common/conn.py b/python/sglang/srt/disaggregation/common/conn.py index 824cce206..39666b558 100644 --- a/python/sglang/srt/disaggregation/common/conn.py +++ b/python/sglang/srt/disaggregation/common/conn.py @@ -331,14 +331,21 @@ class CommonKVManager(BaseKVManager): and local_source_fingerprint is not None and info.runtime_source_fingerprint != local_source_fingerprint ): - raise RuntimeError( - "Runtime source fingerprint mismatch between prefill and decode. " - "This can corrupt disaggregated KV transfer contracts. " - f"prefill_fingerprint={info.runtime_source_fingerprint}, " - f"decode_fingerprint={local_source_fingerprint}, " - f"prefill_source_root={info.runtime_source_root}, " - f"decode_source_root={get_runtime_source_root()}. " - "Restart both prefill and decode from the same source tree." + # Advisory only: the fingerprint hashes the whole source tree, so + # ANY code difference trips it — including changes that do not + # touch the KV transfer contract (a prefill-only restart with a + # one-line fix used to CRASH the decode scheduler here). The + # contract-relevant mismatches (page size, kv dtype) are checked + # above and still fail hard. + logger.warning( + "Runtime source fingerprint differs between prefill and decode " + "(prefill_fingerprint=%s, decode_fingerprint=%s, " + "prefill_source_root=%s, decode_source_root=%s). Make sure the " + "KV transfer layout contract is unchanged between the trees.", + info.runtime_source_fingerprint, + local_source_fingerprint, + info.runtime_source_root, + get_runtime_source_root(), ) self._resolve_rank_mapping(info)