Skip to content

[CBRD-26985] Fix OOS copyarea lock fetch crash#7368

Draft
vimkim wants to merge 1 commit into
CUBRID:feat/oosfrom
vimkim:CBRD-26985-infinite-loop
Draft

[CBRD-26985] Fix OOS copyarea lock fetch crash#7368
vimkim wants to merge 1 commit into
CUBRID:feat/oosfrom
vimkim:CBRD-26985-infinite-loop

Conversation

@vimkim

@vimkim vimkim commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

https://jira.cubrid.org/browse/CBRD-26985

Purpose

  • OOS branch 에서 raw record 를 copyarea 로 packing 하는 locator 대량 fetch 경로의 crash 를 고친다.
  • heap fetch 가 OOS expand / REC_BIGONE / MVCC undo 복원 중 recdes.data 를 scan cache 로 rebind 해도, LC_COPYAREA descriptor 는 항상 copyarea 내부 bytes 를 가리키게 한다.

Implementation

  • locator_copyarea_prepare_fetch_recdes 로 다음 object 가 사용할 copyarea slot 과 남은 payload 크기를 계산하고, fetch 직전에 recdes.data / recdes.area_size 를 그 slot 으로 맞춘다.
  • locator_copyarea_pack_fetch_recdes 로 fetch 결과가 현재 slot 에 들어가는지 확인하고, recdes.data 가 scan cache 등 copyarea 밖이면 descriptor publish 전에 copyarea 로 복사한다.
  • 같은 copyarea packing 계약을 쓰는 두 경로를 같은 helper 로 정리했다.
    • xlocator_lock_and_fetch_all: ALTER TABLE ... CHANGE domain upgrade crash 재현 경로
    • xlocator_fetch_all: unloaddb / compactdb 등 bulk fetch sibling 경로
  • record 가 현재 copyarea 에 들어가지 않으면 기존 S_DOESNT_FIT grow/retry 흐름을 유지하고, 이미 읽은 OID 는 retry 전에 되돌린다.

Verification

  • git diff --check
  • locator_sr.c single-file compile: SERVER_MODE
  • locator_sr.c single-file compile: SA_MODE
  • 재현 SQL 은 패치 후 정상 종료했고, 뒤따르던 function_index_skip_bit.sql 도 새 core 없이 통과했다.

Remarks

@vimkim vimkim self-assigned this Jun 30, 2026
@vimkim

vimkim commented Jun 30, 2026

Copy link
Copy Markdown
Contributor Author

/run sql medium

@vimkim vimkim force-pushed the CBRD-26985-infinite-loop branch from 7a30859 to 2fe42bd Compare June 30, 2026 14:06
@vimkim

vimkim commented Jun 30, 2026

Copy link
Copy Markdown
Contributor Author

/run sql medium

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.

1 participant