Zusammenfassung

  • Nach Verarbeitung von terminate und Versand der Antwort erzeugte RFC 3343 keine neuen Updates, warnte aber vor früher versandten Presence- oder Watcher-Nachrichten im Transit.
  • Code 250 belegte den Stopp im Dienst, nicht leere Relais; Korrelation, Abonnementgeneration, Aktualität und Verbraucherentscheidung blieben getrennt.

Der APEX-Presence-Dienst war im Verwaltungsbereich über apex=presence erreichbar. Anwendungen konnten Einträge veröffentlichen, Presence abonnieren und beobachten, wer einen Publisher abonniert hatte. Diese Operationen waren langlebig und mussten zusammen mit den Einträgen persistent gespeichert werden.

Subscribe lieferte sofort den aktuellen Eintrag und bei positiver Dauer weitere Änderungen. Dauer null bedeutete eine einmalige Abfrage. Watch antwortete zunächst 250, meldete bestehende Abonnenten und danach neue oder beendete Abonnements.

Die Quittung beendete die Quelle

Ein unbekannter Transaktionsbezug in terminate ergab 550. Ein gültiger Bezug beendete die laufende Operation und ergab 250. Dennoch konnte der Urheber danach weitere Updates erhalten. Der Dienst sendete nach Verarbeitung und Antwort nichts Neues, frühere Updates konnten aber im Transit sein.

250 beschrieb somit den Dienstzustand und künftige Emission. Die Antwort bestätigte keine leeren Puffer, Verbindungen, Scheduler oder Eingangsqueues. Eine Drainagebarriere müsste jede ältere Nachricht als zugestellt, verworfen oder verbucht nachweisen. RFC 3343 versprach das nicht.

Herkunft war nicht Gegenwartsrecht

Vom Dienst gesendete publish- und notify-Nachrichten behielten die Transaktionskennung ihrer verursachenden Operation. Eine späte Nachricht blieb dem alten Abonnement korrekt zugeordnet. Daraus folgte nicht, dass ihr Inhalt noch angewendet werden durfte.

Der Verbraucher brauchte eine Generation oder einen Tombstone. Je nach Zweck konnte er verwerfen, archivieren, quarantänisieren oder mit einem neuen Snapshot vergleichen. Die Kennung bewies Herkunft, nicht Aktualität.

Ein neues Abonnement desselben Ursprungs für dasselbe Subjekt beendete das vorherige still. Die logische Beziehung blieb sichtbar gleich, die Generation wechselte. Ohne Generation konnte ein altes Update wie der Beginn des neuen Stroms aussehen.

Eintrag bedeutete nicht Verbindung

Der Bereich hielt für jeden Endpunkt einen Eintrag, unabhängig von dessen aktueller Anbindung. lastUpdate, Informations-URI, Ziel, availableUntil und Fähigkeiten beschrieben gespeicherte Presence, nicht beobachtete Erreichbarkeit.

Publish hatte eine eigene Atomizitätsgrenze: Das gelieferte lastUpdate musste semantisch dem gespeicherten entsprechen, sonst folgte 555. Code 250 bestätigte die Änderung im Dienst, nicht den Empfang durch alle Abonnenten. Eine späte Nachricht konnte echt und dennoch veraltet sein.

Historische und private Grenzen

RFC 3343 erschien im April 2003 als Experimental und ist heute Historic. Der IETF-Verlauf vom 29. Juli 2012 hält fest, dass nach Kenntnis der IETF keine Implementierungen der RFCs 3340–3343 eingesetzt waren und die Funktionalität durch weit verbreitetes XMPP nach RFC 6120 und RFC 6121 bereitgestellt wurde.

Das macht die Beendigungsrace nicht zur Ursache und belegt keinen Vorfall. Der RFC warnte zusätzlich, Zeitzonen könnten Standortinformationen offenlegen, und erlaubte nach Umrechnung -00:00.

Die bleibende Regel trennt Erzeugung, Transportübergabe, Beendigung, Emissionsstopp, Drainage, Empfang und Handlung. Fehlt die Drainagequittung, darf sie nicht erfunden werden. Ein abgeschlossenes Abonnement kann noch Vergangenheit im Netz haben.

Quellen