StateProvider Schnittstelle
public interface StateProvider
Definiert das Verhalten, das ein Dienst implementieren muss, um mit FabricReplicatorzu interagieren.
Methodenzusammenfassung
Modifizierer und Typ | Methode und Beschreibung |
---|---|
Operation |
getCopyContext()
Ruft den Kontext für ein sekundäres Replikat ab, nachdem es erstellt und geöffnet wurde, um Kontext an das primäre Replikat zu senden.
Bemerkungen:Das primäre Replikat analysiert den Kontext und sendet den Zustand über getCopyState(SequenceNumber upToSequenceNumber, OperationDataStream copyContext) zurück. getCopyContext() wird für neu erstellte, im Leerlauf befindliche sekundäre Replikate aufgerufen und bietet einen Mechanismus zum asynchronen Einrichten einer bidirektionalen Konversation mit dem primären Replikat. Das sekundäre Replikat sendet OperationData Objekte, mit denen das primäre Replikat den Fortschritt der Erfassung des Kontexts für das sekundäre Replikat bestimmen kann. Das primäre Replikat antwortet, indem es den erforderlichen Zustand zurück sendet. Weitere Informationen finden Sie getCopyState(SequenceNumber upToSequenceNumber, OperationDataStream copyContext) unter Primäres Replikat für die andere Hälfte des Austauschs. Für In-Memory-Dienste wird die getCopyContext() -Methode nicht aufgerufen, da der Status der sekundären Replikate bekannt ist (sie sind leer und erfordern den gesamten Zustand). |
Operation |
getCopyState(SequenceNumber upToSequenceNumber, OperationDataStream copyContext)
Ruft den Zustand eines primären Replikats ab, das zum Erstellen eines sekundären Replikats erforderlich ist.
Bemerkungen:Ebenso wie getCopyContext() das sekundäre Replikat ermöglicht, Kontext über ein OperationDataStreaman das primäre Replikat zu senden, getCopyState(SequenceNumber upToSequenceNumber, OperationDataStream copyContext) kann das primäre Replikat mit einer OperationDataStreamreagieren. Der Stream enthält Objekte, die über die -Methode der -Klasse an das getCopyStream()FabricReplicator sekundäre Replikat übermittelt werden. Die -Objekte implementieren Operation und enthalten die angegebenen Daten. Wenn das primäre Replikat diesen Aufruf empfängt, sollte es ein weiteres OperationDataStream erstellen und zurückgeben, das enthält OperationData. OperationData stellt die Daten/den Zustand des sekundären Replikats dar. |
long |
getLastCommittedSequenceNumber()
Ruft die letzte Sequenznummer ab, die vom Dienst committet wurde. |
CompletableFuture<Boolean> |
onDataLossAsync(CancellationToken cancellationToken)
Gibt an, dass ein Schreibquorum von Replikaten in diesem Replikatsatz verloren gegangen ist und dass daher datenverluste aufgetreten sein können. Die Replikatmenge besteht aus einer Mehrheit von Replikaten, einschließlich des primären Replikats.
Bemerkungen:Wenn die Service Fabric-Runtime den Fehler eines Quorums von Replikaten beobachtet, das das primäre Replikat enthält, wählt sie ein neues primäres Replikat aus und ruft diese Methode sofort für das neue primäre Replikat auf. Ein primäres Replikat, das über einen möglichen Datenverlust informiert ist, kann seinen Zustand aus einer externen Datenquelle wiederherstellen oder mit dem aktuellen Zustand weiter ausgeführt werden. Wenn der Dienst weiterhin mit seinem aktuellen Zustand ausgeführt wird, sollte er false von dieser Methode zurückgeben, was angibt, dass keine Zustandsänderung vorgenommen wurde. Wenn der Zustand wiederhergestellt oder geändert wurde, z. B. ein Rollback unvollständiger Arbeit, sollte true zurückgegeben werden. Wenn true zurückgegeben wird, muss davon ausgegangen werden, dass der Zustand in anderen Replikaten falsch ist. Daher entfernt die Service Fabric-Runtime die anderen Replikate aus dem Replikatsatz und erstellt sie neu. |
CompletableFuture<?> |
updateEpochAsync(Epoch epoch, SequenceNumber previousEpochLastSequenceNumber, CancellationToken cancellationToken)
Gibt für ein Replikat an, dass die Konfiguration einer Replikatmenge aufgrund einer Änderung oder versuchten Änderung am primären Replikat geändert wurde. Die Änderung tritt aufgrund eines Fehlers oder Lastenausgleichs des vorherigen primären Replikats auf. Epochenänderungen dienen als Barriere, indem Vorgänge in die genauen Konfigurationsperioden unterteilt werden, in denen sie von einem bestimmten primären Replikat gesendet wurden.
Bemerkungen:Die Informationen in der updateEpochAsync(Epoch epoch, SequenceNumber previousEpochLastSequenceNumber, CancellationToken cancellationToken) -Methode ermöglichen es dem Dienst, einen Fortschrittsvektor beizubehalten, bei dem es sich um eine Liste der vom Replikat empfangenen Epochen und der maximalen LSN handelt, die darin enthalten sind. Die Statusvektordaten zusammen mit der aktuell angewendeten maximalen LSN sind für ein sekundäres Replikat nützlich, das während des Kopiervorgangs gesendet wird, um den Status des Replikats zu beschreiben. Durch den Vergleich von Statusvektoren, die während des Kopiervorgangs von sekundären Replikaten empfangen werden, können primäre Replikate bestimmen, ob das sekundäre Replikat aktuell ist, welcher Zustand an das sekundäre Replikat gesendet werden muss und ob das sekundäre Replikat falsche Fortschritte gemacht hat. Falscher Fortschritt bedeutet, dass ein sekundäres Replikat meldet, dass ein LSN in einer früheren Epoche größer war als die LSN, die das primäre Replikat im Fortschrittsvektor aufweist. |
Details zur Methode
getCopyContext
public OperationDataStream getCopyContext()
Ruft den Kontext für ein sekundäres Replikat ab, nachdem es erstellt und geöffnet wurde, um Kontext an das primäre Replikat zu senden.
Bemerkungen:Das primäre Replikat analysiert den Kontext und sendet den Zustand über getCopyState(SequenceNumber upToSequenceNumber, OperationDataStream copyContext) zurück. getCopyContext() wird für neu erstellte, im Leerlauf befindliche sekundäre Replikate aufgerufen und bietet einen Mechanismus zum asynchronen Einrichten einer bidirektionalen Konversation mit dem primären Replikat. Das sekundäre Replikat sendet OperationData Objekte, mit denen das primäre Replikat den Fortschritt der Erfassung des Kontexts für das sekundäre Replikat bestimmen kann. Das primäre Replikat antwortet, indem es den erforderlichen Zustand zurück sendet. Weitere Informationen finden Sie getCopyState(SequenceNumber upToSequenceNumber, OperationDataStream copyContext) unter Primäres Replikat für die andere Hälfte des Austauschs. Für In-Memory-Dienste wird die getCopyContext() -Methode nicht aufgerufen, da der Status der sekundären Replikate bekannt ist (sie sind leer und erfordern den gesamten Zustand).
Gibt zurück:
getCopyState
public OperationDataStream getCopyState(SequenceNumber upToSequenceNumber, OperationDataStream copyContext)
Ruft den Zustand eines primären Replikats ab, das zum Erstellen eines sekundären Replikats erforderlich ist.
Bemerkungen:Ebenso wie getCopyContext() das sekundäre Replikat ermöglicht, Kontext über ein OperationDataStreaman das primäre Replikat zu senden, getCopyState(SequenceNumber upToSequenceNumber, OperationDataStream copyContext) kann das primäre Replikat mit einer OperationDataStreamreagieren. Der Stream enthält Objekte, die über die -Methode der -Klasse an das getCopyStream()FabricReplicator sekundäre Replikat übermittelt werden. Die -Objekte implementieren Operation und enthalten die angegebenen Daten. Wenn das primäre Replikat diesen Aufruf empfängt, sollte es ein weiteres OperationDataStream erstellen und zurückgeben, das enthält OperationData. OperationData stellt die Daten/den Zustand des sekundären Replikats dar.
Parameter:
Gibt zurück:
getLastCommittedSequenceNumber
public long getLastCommittedSequenceNumber()
Ruft die letzte Sequenznummer ab, die vom Dienst committet wurde.
Gibt zurück:
onDataLossAsync
public CompletableFuture
Gibt an, dass ein Schreibquorum von Replikaten in diesem Replikatsatz verloren gegangen ist und dass daher datenverluste aufgetreten sein können. Die Replikatmenge besteht aus einer Mehrheit von Replikaten, einschließlich des primären Replikats.
Bemerkungen:Wenn die Service Fabric-Runtime den Fehler eines Quorums von Replikaten beobachtet, das das primäre Replikat enthält, wählt sie ein neues primäres Replikat aus und ruft diese Methode sofort für das neue primäre Replikat auf. Ein primäres Replikat, das über einen möglichen Datenverlust informiert ist, kann seinen Zustand aus einer externen Datenquelle wiederherstellen oder mit dem aktuellen Zustand weiter ausgeführt werden. Wenn der Dienst weiterhin mit seinem aktuellen Zustand ausgeführt wird, sollte er false von dieser Methode zurückgeben, was angibt, dass keine Zustandsänderung vorgenommen wurde. Wenn der Zustand wiederhergestellt oder geändert wurde, z. B. ein Rollback unvollständiger Arbeit, sollte true zurückgegeben werden. Wenn true zurückgegeben wird, muss davon ausgegangen werden, dass der Zustand in anderen Replikaten falsch ist. Daher entfernt die Service Fabric-Runtime die anderen Replikate aus dem Replikatsatz und erstellt sie neu.
Parameter:
CancellationToken-Objekt, um den Abbruch status des Vorgangs anzugeben.
Gibt zurück:
updateEpochAsync
public CompletableFuture updateEpochAsync(Epoch epoch, SequenceNumber previousEpochLastSequenceNumber, CancellationToken cancellationToken)
Gibt für ein Replikat an, dass die Konfiguration einer Replikatmenge aufgrund einer Änderung oder versuchten Änderung am primären Replikat geändert wurde. Die Änderung tritt aufgrund eines Fehlers oder Lastenausgleichs des vorherigen primären Replikats auf. Epochenänderungen dienen als Barriere, indem Vorgänge in die genauen Konfigurationsperioden unterteilt werden, in denen sie von einem bestimmten primären Replikat gesendet wurden.
Bemerkungen:Die Informationen in der updateEpochAsync(Epoch epoch, SequenceNumber previousEpochLastSequenceNumber, CancellationToken cancellationToken) -Methode ermöglichen es dem Dienst, einen Fortschrittsvektor beizubehalten, bei dem es sich um eine Liste der vom Replikat empfangenen Epochen und der maximalen LSN handelt, die darin enthalten sind. Die Statusvektordaten zusammen mit der aktuell angewendeten maximalen LSN sind für ein sekundäres Replikat nützlich, das während des Kopiervorgangs gesendet wird, um den Status des Replikats zu beschreiben. Durch den Vergleich von Statusvektoren, die während des Kopiervorgangs von sekundären Replikaten empfangen werden, können primäre Replikate bestimmen, ob das sekundäre Replikat aktuell ist, welcher Zustand an das sekundäre Replikat gesendet werden muss und ob das sekundäre Replikat falsche Fortschritte gemacht hat. Falscher Fortschritt bedeutet, dass ein sekundäres Replikat meldet, dass ein LSN in einer früheren Epoche größer war als die LSN, die das primäre Replikat im Fortschrittsvektor aufweist.
Parameter:
CancellationToken-Objekt, um den Abbruch status des Vorgangs anzugeben.
Gibt zurück:
Gilt für:
Azure SDK for Java