-
Notifications
You must be signed in to change notification settings - Fork 123
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
[CBRD-25509] Remove big_length handling from the function, heap_stats_find_best_page. #5687
base: develop
Are you sure you want to change the base?
Conversation
src/storage/heap_file.c
Outdated
heap_hdr->estimates.num_pages += CEIL_PTVDIV (newrec_size, DB_PAGESIZE); | ||
} | ||
|
||
assert (!heap_is_big_length (newrec_size)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
assert 검사를 if 구문 밖으로 빼도 문제없을 것 같습니다. 혹시 발견하신 예외 상황이 있을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
total_space 때문에 혼동이 와서 조금 걸렸네요.
newrec_size는 hint를 위해서만 사용되기 때문에 빼도 문제 없을 것 같습니다.
@@ -3564,17 +3564,14 @@ heap_stats_find_best_page (THREAD_ENTRY * thread_p, const HFID * hfid, int neede | |||
|
|||
heap_hdr = (HEAP_HDR_STATS *) hdr_recdes.data; | |||
|
|||
assert (!heap_is_big_length (needed_space) && !heap_is_big_length (newrec_size)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
다음 내용까지 고려해 보면 좋을 것 같습니다.
- caller를 보면, needed_space와 newrec_size는 항상 같은 값을 같습니다. 두 파라미터를 최초 구분한 목적이 있겠지만 현재는 중복된 정보 입니다. 하나로 합치는 방안 검토해 주시고, 합친다면, newrec_size -> rec_size 정도로 변경하는게 문맥상 맞을 것 같습니다.
- heap_hdr->estimates.recs_sumlen += (float) newrec_size; 의 경우 isnew_rec == false인 경우에도 수행되고, 변수명(newrec_size)으로 인해 가독성이 떨어집니다. 살펴보니 이전 레코드 길이를 빼주는 부분은 없어보이네요. 추정치라 정확하지 않아도 무방하나 고려해줄 수 있다면 더 유의미한 정보가 될 수 있을 것 같습니다. 전제 조건은 이 작업을 위해 힙 헤더에 추가 접근을 하면 안되고, 접근한 김에 업데이트 될 수 있으면 좋겠군요.
- heap_get_insert_location_with_lock -> heap_stats_find_best_page 호출 시 (context->recdes_p->type != REC_NEWHOME) 검사 결과를 인자로 넘겨주도록 되어 있는데, 해당 함수에서 assert (context->recdes_p->type != REC_NEWHOME) 조건으로 판단됩니다. 해당 케이스는 heap_find_location_and_insert_rec_newhome 함수에서 처리하고 있구요. 따라서, 명시적으로 true로 넘기고 assert() 처리하는게 명시적이고 가독성이 좋습니다. 다만 해당 케이스를 허용하는 경우가 있는지 꼼꼼히 검토는 필요합니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
1.번과 2.번의 경우에는 처리의 의도를 한 번 확인하면 좋을 것 같아서 히스토리 확인 후 멘션 드리겠습니다.
3.번의 경우, heap_get_insert_location_with_lock ( ... )는 heap_insert_logical ( ... ) 내에서 호출되는 위치나 역할 상 REC_NEWHOME 타입 레코드에 대한 처리를 할 일이 없어 보입니다. 때문에 true를 상시 넘겨주고 assert를 사용하는 게 더 좋아보이네요! 3.은 1.과 2.에 대한 방향성이 정해지면 함께 처리하겠습니다.
http://jira.cubrid.org/browse/CBRD-25509
Purpose
함수 heap_stats_find_best_page는 페이지 내에서 공간을 찾아 반납하기 때문에 페이지보다 큰 처리를 다룰 필요가 없습니다. 따라서 코드의 일관성을 맞춰주기 위해 big_length에 대한 처리를 제거해야 합니다.
Implementation
N/A
Remarks
N/A