Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BUG-50579 repsender descriptions #460

Open
wants to merge 5 commits into
base: master
Choose a base branch
from

Conversation

hoooon-kim
Copy link
Collaborator

BUG-50579 V$REPSENDER의 START_FLAG와 STATUS에 관한 상세 설명이 필요합니다.

V$REPSENDER 의 START FLAG 와 STATUS 에 관한 상세 설명을 작성했습니다.

원래 START FLAG에 대한 설명은 현재 리뷰 올린 것과는 다르게 작성을 했었는데,

기존 매뉴얼의 V$REPGAP_PARALLEL 항목에 동일한 내용이 있어서,

어떤 것으로 작성을 할지 고민하다가 한쪽으로 통일하는 방향으로 결정하여

V$REPGAP_PARALLEL의 START_FLAG와 동일하게 작성하였습니다.

리뷰 부탁드리겠습니다.

Copy link
Collaborator

@lswhh lswhh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코멘트 확인 부탁드립니다.


- SYNC_ONLY: 3
이중화를 QUICKSTART 옵션으로 시작하면 이 값이 보여질 수 있는데, 이는 전송 시작 위치가 변경중임을 나타내며, 송신 쓰레드는 예전 로그를 무시하고 가장 최근 로그부터 전송을 시작할 것이다. 시작 위치 변경 후에는, QUICK에서 NORMAL로 바뀔 것이다.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

QUICK에서 NORMAL로 바뀔 것이다. --> QUICK에서 NORMAL로 변경된다.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인했습니다.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"가장 최근 로그"라는 것이 미전송 로그 중 마지막 하나를 의미하는지 궁금합니다.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"가장 최근 로그"라는 것이 미전송 로그 중 마지막 하나를 의미하는지 궁금합니다.
rpxSenderXLSN에서
smiGetLastValidGSN -> updateXSN 을 하게 되는데, smiGetLastValidGSN의 주석을 보면 다음과 같이 나와있습니다.
마지막으로 Log를 기록하기 위해 "사용된/저장된" LSN값을 리턴한다.
-> 마지막으로 기록한 로그 레코드의 LSN으로 해석이 됩니다.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인 감사합니다.


- QUICK: 1
이 값은 액티브 서버쪽의 송신 쓰레드가 트랜잭션 로그를 분석하여 XLog로 변환한 후, 대기 서버로 XLog를 전송하는 것을 의미한다.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

설명에 LAZY 모드라는 의미가 들어가야 할 것으로 보입니다.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인했습니다.


- SYNC_ONLY: 3

지역 서버의 이중화 대상 테이블의 모든 데이터를 원격 서버의 대응하는 테이블의 데이터와 일치시키기 위해 수행하는 작업. 데이터의 동기화만 진행하고 더이상 이중화를 수행하지 않는다.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SYNC ONLY 옵션으로 이중화를 시작할 때 보인다고 하는게 좋을 것 같습니다.
SYNC ONLY 옵션으로 이중화를 시작할 때 보여진다. 데이터의 동기화만 진행하고 더이상 이중화를 수행하지 않는다.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인했습니다.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"보여진다"는 영어는 괜찮은데, 한국어는 사용하기 조금 어색해 보입니다. 아래 내용 한번 참고하세요.

SYNC: 2
SYNC 옵션 사용 시, 지역 서버와 원격 서버간 데이터 동기화를 우선 진행 후 이중화를 시작한다. SYNC 동기화 작업이 진행 중을 표시하는 값이다. 동기화 완료 후 이중화가 시작되면, NORMAL (LAZY 모드) 또는 PARALLEL (EAGER 모드)로 값이 변경된다.

SYNC_ONLY: 3
SYNC ONLY 옵션은 지역 서버와 원격 서버간 데이터 동기화 작업만을 수행하는데, SYNC ONLY 동기화 진행 중을 표시하는 값이다. 동기화 완료 후 이중화는 종료된다.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"보여진다"는 영어는 괜찮은데, 한국어는 사용하기 조금 어색해 보입니다. 아래 내용 한번 참고하세요.

SYNC: 2 SYNC 옵션 사용 시, 지역 서버와 원격 서버간 데이터 동기화를 우선 진행 후 이중화를 시작한다. SYNC 동기화 작업이 진행 중을 표시하는 값이다. 동기화 완료 후 이중화가 시작되면, NORMAL (LAZY 모드) 또는 PARALLEL (EAGER 모드)로 값이 변경된다.

SYNC_ONLY: 3 SYNC ONLY 옵션은 지역 서버와 원격 서버간 데이터 동기화 작업만을 수행하는데, SYNC ONLY 동기화 진행 중을 표시하는 값이다. 동기화 완료 후 이중화는 종료된다.

확인했습니다. 수정하겠습니다.


- OFFLINE: 7

이 값은 액티브 서버가 오프라인이고 대기 서버에 로그를 적용할 때, 송신 쓰레드가 액티브 서버의 로그를 읽기 위해 실행중임을 나타낸다.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"오프라인이고"라는 표현이 이해가 어려울 것 같아서 아래와 같이 바꿔 봤습니다. 그리고, 항상 대기 서버에만 로그를 적용하는 것이 아니고 이 글 자체가 송신 쓰레드에 대한 설명이므로 해당 설명은 제거했습니다.

이 값은 액티브 서버 장애시, 대기 서버에서 액티브 서버의 로그를 읽어서 전송하는 송신 쓰레드가 실행 중임을 나타낸다.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인했습니다.

Copy link
Contributor

@zennken zennken left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코멘트 몇개 남겼는데 확인 부탁드립니다. 수고하셨습니다.

@@ -9269,23 +9269,39 @@ Sender에게 ACK을 보내는 데 걸린 시간의 누적 값이다.

지역서버의 이중화 구동시에 명시한 구동 옵션이다. 다음 값들을 가질 수 있다.

- : 0
- NORMAL: 0
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

START_FLAG가 BIGINT형인데, 이름: 숫자 형태가 아니라 숫자: 이름 순으로 쓰는 게 보기에 자연스럽지 않을까 합니다. STATUS 컬럼 설명은 숫자: 이름 형태로 되어 있습니다.

그리고 이름이 의미하는 것이 옵션이지 아니면 내부적으로 사용하는 상수인지요? 정의가 안 되어 있는 것 같아 궁금합니다.

V$REPGAP에도 동일한 형태로 작성되어 있습니다.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

REPGAP도 같이 숫자 : 이름 형태로 수정하겠습니다.
내부 상수로 앞에 RP_ 가 붙은 채로 사용되고 있습니다.
rp.h 헤더파일을 확인하시면 enum으로 다음과 같이 정의되어 있습니다.
typedef enum RP_SENDER_TYPE
{
RP_NORMAL = 0,
RP_QUICK,
RP_SYNC,
RP_SYNC_ONLY,
RP_RECOVERY, //PROJ-1608 recovery from replication
RP_OFFLINE, //PROJ-1915 off-line replicator
RP_PARALLEL
} RP_SENDER_TYPE;

typedef enum RP_SENDER_STATUS
{
RP_SENDER_STOP = 0,
RP_SENDER_SYNC,
RP_SENDER_FAILBACK_NORMAL,
RP_SENDER_FAILBACK_MASTER,
RP_SENDER_FAILBACK_SLAVE,
RP_SENDER_RUN,
RP_SENDER_FAILBACK_EAGER, /* 여기부터는 Eager replication이 동작하는 status를 기술*/
RP_SENDER_FLUSH_FAILBACK,
RP_SENDER_IDLE,
RP_SENDER_RETRY
} RP_SENDER_STATUS;


- SYNC_ONLY: 3
이중화를 QUICKSTART 옵션으로 시작하면 이 값이 보여질 수 있는데, 이는 전송 시작 위치가 변경중임을 나타내며, 송신 쓰레드는 예전 로그를 무시하고 가장 최근 로그부터 전송을 시작할 것이다. 시작 위치 변경 후에는, QUICK에서 NORMAL로 바뀔 것이다.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"가장 최근 로그"라는 것이 미전송 로그 중 마지막 하나를 의미하는지 궁금합니다.


- SYNC_ONLY: 3

지역 서버의 이중화 대상 테이블의 모든 데이터를 원격 서버의 대응하는 테이블의 데이터와 일치시키기 위해 수행하는 작업. 데이터의 동기화만 진행하고 더이상 이중화를 수행하지 않는다.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"보여진다"는 영어는 괜찮은데, 한국어는 사용하기 조금 어색해 보입니다. 아래 내용 한번 참고하세요.

SYNC: 2
SYNC 옵션 사용 시, 지역 서버와 원격 서버간 데이터 동기화를 우선 진행 후 이중화를 시작한다. SYNC 동기화 작업이 진행 중을 표시하는 값이다. 동기화 완료 후 이중화가 시작되면, NORMAL (LAZY 모드) 또는 PARALLEL (EAGER 모드)로 값이 변경된다.

SYNC_ONLY: 3
SYNC ONLY 옵션은 지역 서버와 원격 서버간 데이터 동기화 작업만을 수행하는데, SYNC ONLY 동기화 진행 중을 표시하는 값이다. 동기화 완료 후 이중화는 종료된다.


- PARALLEL: 8
이 값은 송신 쓰레드가 다른 서버에서 손상된 데이터를 복원하기 위해 실행중임을 나타낸다.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아래 의미가 맞는지요?
RECOVERY 옵션으로 시작되어 데이터 손상이 발생한 상대편 이중화 서버의 데이터를 복구 중임을 표시하는 값이다.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네 맞습니다

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인 감사합니다.


- PARALLEL: 8

이 값은 이중화 대상 테이블과 관련된 XLog를 여러 송신 쓰레드가 병렬로 송신중임을 나타낸다. 이 값은 PARALLEL 옵션과 함께 EAGER 모드로 이중화를 시작할 때 보여질 수 있다. SYNC 또는 SYNC ONLY 옵션과 함께 이중화를 시작할 때 지정할 수 있는 PARALLEL 옵션과는 다르다.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Eager 모드에서만 parallel이 가능하죠?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코드 확인 시 EAGER 모드에서만 PARALLEL이 가능한 것으로 나옵니다.
REPLICATION MANUAL 에서도 병렬 이중화에 대한 정의로 "EAGER 모드에서 이중화 수행시 여러개의 송신 쓰레드와 수신 쓰레드를 사용하는 것을 일컫는다." 라고 나와 EAGER 모드에서만 가능하다는 것을 알 수 있습니다.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인 감사합니다.


- 7: FAILBACK EAGER
증분 동기화를 완료 하거나 건너뛴 후, Eager 모드 이중화가 정상적으로 시작되기 전에, 장애 시간 동안 서버 B에서 서버 A로 전송하지 못했던 트랜잭션 로그에 대한 데이터를 동기화한다. 장애로 인해 전송하지 못했던 로그를 전송할 때에는, 이중화가 Lazy 모드로 전환하여 동작하며, 로그를 모두 전송하여 이중화 갭이 없어지면, 다시 Eager 모드로 전환하여 이중화가 시작된다.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

위에서 3가지 상태를 설명하셨는데, 전체를 다 포함하는지요? 아니면 그 중 어느 특정 상태인지요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인 결과 STOP과 RETRY는 전체 다 포함하는 것으로 보이고, RUN의 경우는 조금 더 조사를 해보고 다시 코멘트 달겠습니다. 현재는 PARALLEL 이 아닌 경우 SENDER RUN 이 붙는 것으로 확인은 되는데 정확한 설명을 위해 조금 더 조사하겠습니다.


- 9: IDLE

송신 쓰레드가 FAILBACK을 마치고 SLEEP하는 단계.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FAILBACK FLUSH -> IDLE만 상태 전환이 가능한지요? 아니면, 다른 상태에서 IDLE로 상태 전환도 가능한지 궁금합니다.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

replicateLogFiles 함수에서 Sender Thread에서 직접 보낼 로그들이 존재하지 않을 경우에도 IDLE로 상태가 변경됩니다.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

기록해주신 부연 설명에 따르면 "FAILBACK을 마치고"는 SLEEP으로 전환되는 여러 케이스 중 한 가지일 것 같습니다. "송신 쓰레드가 처리할 로그가 없는 상태"라고 하는 게 더 정확하지 않을까 합니다.


- PARALLEL: 8

이 값은 이중화 대상 테이블과 관련된 XLog를 여러 송신 쓰레드가 병렬로 송신중임을 나타낸다. 이 값은 PARALLEL 옵션과 함께 EAGER 모드로 이중화를 시작할 때 보여질 수 있다. SYNC 또는 SYNC ONLY 옵션과 함께 이중화를 시작할 때 지정할 수 있는 PARALLEL 옵션과는 다르다.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인 감사합니다.


- 9: IDLE

송신 쓰레드가 FAILBACK을 마치고 SLEEP하는 단계.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

기록해주신 부연 설명에 따르면 "FAILBACK을 마치고"는 SLEEP으로 전환되는 여러 케이스 중 한 가지일 것 같습니다. "송신 쓰레드가 처리할 로그가 없는 상태"라고 하는 게 더 정확하지 않을까 합니다.


- 7: FAILBACK EAGER

FAILBACK 과정 중 생긴 이중화 갭을 없애기 위해 EAGER 모드로 이중화를 수행하는 단계.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

STATUS 컬럼이니 단계 보다는 상태라는 단어가 더 적합해 보입니다.

Suggested change
FAILBACK 과정 중 생긴 이중화 갭을 없애기 위해 EAGER 모드로 이중화를 수행하는 단계.
FAILBACK 과정 중 생긴 이중화 갭을 없애기 위해 EAGER 모드로 이중화를 수행하는 상태.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

현재 버그를 김진아님께서 가져가셨습니다. 추가 사항은 김진아님께서 담당해주실 예정입니다. 리뷰해주셔서 정말 감사드립니다.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

현재 버그를 김진아님께서 가져가셨습니다. 추가 사항은 김진아님께서 담당해주실 예정입니다. 리뷰해주셔서 정말 감사드립니다.

넵~수고 많으셨습니다.

Copy link
Contributor

@zennken zennken left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고많으셨습니다.

@hoooon-kim
Copy link
Collaborator Author

수고많으셨습니다.

감사합니다~!

Copy link
Collaborator

@dodoisneverdie dodoisneverdie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants