INTERNAL: Fix a smget handling about trimmed result without bkey#286
INTERNAL: Fix a smget handling about trimmed result without bkey#286ing-eoking wants to merge 1 commit into
Conversation
|
@namsic 리뷰 바랍니다. |
|
최신 commit 기준으로 rebase 한 번 해주면 좋겠습니다.
이렇게 변경해야 하는 이유에 대해 간단히 설명해 주면 좋겠습니다. |
해당 PR이 조금 오래되어 자세히 기억하려면, 조금 시간이 걸릴 것 같습니다. 아래의 링크에서 간단히 설명되어 있습니다.
eflag로 인해 모든 값이 skip되는 경우, element는 없지만 Trimmed key만 존재하게 됩니다. 서버에서 전송하는 Trimmed key와 bkey의 타입이 다를 가능성은 없다고 생각하여, 이를 제외하고 사용자가 지정한 bkey 타입과 서버에 저장된 bkey 타입과 비교할 수 있도록 변경한 것 같습니다. |
namsic
left a comment
There was a problem hiding this comment.
해당 PR이 조금 오래되어 자세히 기억하려면, 조금 시간이 걸릴 것 같습니다.
아래의 링크에서 간단히 설명되어 있습니다.
이슈에 적힌 원인과 PR의 변경만으로는 잘 매칭이 되지 않아서 물었습니다.
문제가 생기는 원인과 그 문제를 어떻게 해결하려고 했던 것인지 조금 더 풀어서 설명해주면 좋겠습니다.
| } else { | ||
| comp_result= (prev_sub_key->bkey == curr_sub_key->bkey) ? 0 | ||
| : (prev_sub_key->bkey < curr_sub_key->bkey) ? -1 : 1; | ||
| if (merged->value_count > 0) { |
There was a problem hiding this comment.
조건문을 아래와 같이 변경할 수 있나요?
value_count가 0이면, trimed_keys를 merge하지 않아야 하나요?
if (merged->value_count == 0) {
should_merge = true;
} else if (merged->value_count < merged->count) {
/*
* compare sub_keys
*/
if (comp_result <= 0) {
should_merge = true;
}
}There was a problem hiding this comment.
value_count가 0이면, trimed_keys를 merge하지 않아야 하나요?
잘 모르겠네요. 좀 더 여러가지 상황을 고려해서 다시 짜야할 것 같습니다.
그러므로 잠시 해당 PR은 보류하겠습니다.
value_count == 0 인 상황에서 should_merge가 되어야 한다는 것은
Trimed key가 탐색한 탐색한 Btree 내 범위 중 최소여야 한다는 것이 보장되어야 합니다.
↓ Search Range ↓
----- |--Not Trimmed--| |--Trimed--|
But, all skipped by eflag!
🔗 Related Issue
⌨️ What I did
PROTOCOL_ERROR를 반환하도록 변경했습니다.PROTOCOL_ERROR를 반환🤔 Others