2017-10-24 1 views
0

복제본이 주 상태를 잃을 때 안정적인 사전에 메모리 데이터를 덤프하고 싶습니다.주 복제본이 닫히기 전에 신뢰할 수있는 컬렉션에 데이터를 쓰는 방법

취소 토큰을보고 RunAsync 메서드에서 올바른 방법으로 수행 할 수 있습니까? 예를 들면 다음과 같습니다.

protected override async Task RunAsync(CancellationToken cancellationToken) 
    { 
     while (true) 
     { 
      // exit only after data is dumped to reliable dictionary 
      if (cancellationToken.IsCancellationRequested) 
      { 
       await DumpDataToDictionaryAsync(data); 
       cancellationToken.ThrowIfCancellationRequested(); 
      } 
     ... 
+1

주 전환시 알림 메시지가 표시됩니다. https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-advanced-usage#stateful- 서비스 복제본 수명주기. 정보를 다른 곳에 저장할 수 있습니다. – Robert

+0

그건 사실 괜찮은 생각입니다. 나는 리모팅을 통해 데이터를받을 별도의 서비스를 가질 수있다. –

답변

2

정보가 지속되어야하는 경우 변경해야합니다. 서비스가 중단 된 경우 아무 것도 저장할 수 없습니다. 기본 복제본에서 보조 복제본으로 전환하는 경우에도 신뢰할 수있는 모음을 저장할 방법이 없습니다. 다음은 라이프 사이클 상태에 대한 documentation : 초등이 강등되는 서비스 패브릭에

은 일어나는 첫 번째 것들 중 하나는 기본 상태로 그 쓰기 권한이 취소된다.

복제본이 기본 상태를 잃을 때를 알 수 없기 때문에 신뢰할 수있는 컬렉션에 데이터를 저장할 수 없습니다.

+0

여기서 사용 사례는 수집 된 중요하지 않은 통계를 덤프하는 것입니다. 따라서 충돌시 데이터 손실이 발생하거나 예기치 않은 상황이 발생하더라도 문제가되지 않습니다. 그래서 서비스 패브릭은 롤링 업그레이드를 수행 할 때 주 신호를 내리기 전에 신호를 보내지 않습니까? –

+0

취소 토큰이 실행 된 후에 다른 서비스 또는 외부 저장소로 보낼 수 있습니다. 그러나 취소 토큰이 취소되기 전에 신호가 없습니다. –

관련 문제