bsr은 복제 데이타 생성을 식별하기 위해 생성 식별자(GI, Generation Identifiers)를 사용합니다. 이것은 bsr 내부 메카니즘에서 아래와 같은 용도로 사용됩니다.
두 노드가 실제 클러스터의 멤버인지 결정할 때 (같은 클러스터 내의 노드가 아닌 우연한 연결에 대한 식별)
노드 간 백그라운드 재동기화의 방향을 결정할 때
전체 재동기화가 필요한지 혹은 부분 재동기화로 충분한지 결정할 때
스플릿 브레인(이하 SB)을 식별할 때
생성 식별자
bsr은 다음의 경우에서 새로운 데이터 생성(Data Generation)이 시작되었음을 표시합니다.
초기 전체 동기화 시
disconnected 된 리소스가 Primary 역할로 승격할 때
Primary 역할의 리소스가 disconnecting 될 때
따라서, 리소스가 Connected 연결 상태에 있고 양 노드의 디스크 상태가 UpToDate 이면 양 노드의 현재 GI는 동일하다 라고 할 수 있습니다. 반대의 경우도 마찬가지입니다.
모든 새로운 데이터 생성은 8 바이트의 UUID(universally unique identifier) 로 식별합니다. UUID의 최하위 비트는 노드의 역할을 표현하며 Primary는 1, Secondary는 0으로 설정됩니다.
GI 튜플
bsr은 로컬 리소스 메타 데이타 내에 현재와 과거의 데이터 생성(data generation) 정보를 기본적으로 4개(Tuple)로 관리합니다.
Current UUID - 로컬노드의 현재 data generation에 대한 GI(생성 식별자)입니다. 리소스가 Connected 상태이고 동기화가 된 상태라면 이 Current UUID 는 양 노드 동일합니다.
Bitmap UUID - 디스크상의 동기화 비트맵의 변화를 추적하는 UUID입니다. 디스크의 동기화 비트맵 자체를 보면, 이 식별자는 disconnected 모드 상태에서만 관련이 있습니다. 만일 리소스가 Connected 라면 이 UUID는 항상 비어(zero)있게 됩니다.
Two Historical UUIDs - 현재의 Current UUID의 이전의 상태였던 data generation 식별자들이며 2개를 기억하고 있습니다.
이 4가지 모두를 묶어서 "generation identifier tuple" 또는 짧게 "GI 튜플" 이라고 합니다.