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

[NES-71] rgw 오브젝트 목록 조회 시 인덱스 삭제 제안을 보수적으로 변경 #57

Merged
merged 1 commit into from
May 27, 2024

Conversation

bgy217
Copy link
Collaborator

@bgy217 bgy217 commented May 27, 2024

  • BAAP 프로젝트의 인덱스 누락 이슈 확인 용 긴급 작업
  • 버켓의 오브젝트들을 조회하는 과정에서 데이터를 확인하고, 존재하지 않아야 한다고 판단되는 오브젝트가 발견되는 경우 이 오브젝트의 인덱스를 지우는 루틴이 있다.
  • 이 cls_rgw_encode_suggestion(CEPH_RGW_REMOVE, ...) 루틴을 인덱스 누락 현상 원인으로 의심하고 있다.
  • 따라서 해당 루틴의 호출 조건을 보수적으로 변경한다.
    • 상태 읽기 재시도
    • 루틴 수행을 위한 조건을 추가
    • 의심되는 루틴에 관련 로그 추가
  • 관련 JIRA: http://jira.nexrcorp.com/browse/NES-71

@bgy217
Copy link
Collaborator Author

bgy217 commented May 27, 2024

배경 지식

  • distcp는 임시 오브젝트를 생성하고 이것을 나중에 생성하려는 오브젝트로 복제한 뒤에 임시 오브젝트를 삭제한다.
  • rgw에서 오브젝트 목록을 조회할 때 작업 중이거나 존재하지 않다고 표시된 index의 head 오브젝트가 없으면 해당 오브젝트의 인덱스 삭제를 시도한다.

시사점이 있는 케이스

케이스 상황

  • distcp를 세 개의 rgw에 요청을 나누어 보내면서 수행한다.
  • distcp가 완료된 이후 몇몇 오브젝트가 조회되지 않는다.
  • distcp 도중에 오브젝트 조작 API의 실패는 없었다.
  • 이 케이스에서는 "call/test_f_cnv_mdt_merge/etl_date=20240420/base_date=20240420/base_hh=22/rpt_type=M1/000965_0" 오브젝트가 없어져 있었다.

자원 상황
nes-71_objstore_reqs
nes-71_io_utilization

로그 내용

[obejct creation (rgw2)]
2024-05-21T15:17:11.708+0900 7fa2e2de5700  1 beast: 0x7fa4f8354700: 10.39.4.23 - - [2024-05-21T15:17:11.708935+0900] "PUT /distcp/call/test_f_cnv_mdt_merge/etl_date%3D20240419/base_date%3D20240419/base_hh%3D22/rpt_type%3DM1/000965_0 HTTP/1.1" 200 238 - "Hadoop 3.2.2, aws-sdk-java/1.11.563 Linux/3.10.0-1160.el7.x86_64 OpenJDK_64-Bit_Server_VM/25.345-b01 java/1.8.0_345 vendor/Red_Hat,_Inc. com.amazonaws.services.s3.transfer.TransferManager/1.11.563" -

[source deletion (rgw2)]
2024-05-21T15:17:11.724+0900 7fa37af15700  1 beast: 0x7fa4f84d7700: 10.39.4.23 - - [2024-05-21T15:17:11.724935+0900] "DELETE /distcp/call/test_f_cnv_mdt_merge/etl_date%3D20240419/base_date%3D20240419/base_hh%3D22/rpt_type%3DM1/.distcp.tmp.attempt_1712054122334_475680_m_000098_0.1716272230161 HTTP/1.1" 204 0 - "Hadoop 3.2.2, aws-sdk-java/1.11.563 Linux/3.10.0-1160.el7.x86_64 OpenJDK_64-Bit_Server_VM/25.345-b01 java/1.8.0_345 vendor/Red_Hat,_Inc." -


-- After 15 minutes --

[ object skipping occurs in rgw1 with NOENT ]
2024-05-21T15:32:39.973+0900 7f521c730700 10 librados: getxattrs oid=755936e0-6e23-4e81-ad7f-9f760c886cc0.31304710.1_call/test_f_cnv_mdt_merge/etl_date=20240420/base_date=20240420/base_hh=22/rpt_type=M1/000965_0 nspace=
2024-05-21T15:32:40.213+0900 7f521c730700 10 librados: Objecter returned from getxattrs r=-2 // ENOENT
2024-05-21T15:32:40.213+0900 7f521c730700 10 RGWRados::cls_bucket_list_ordered: skipping call/test_f_cnv_mdt_merge/etl_date=20240420/base_date=20240420/base_hh=22/rpt_type=M1/000965_0[]

[ last disk found in rgw3 ]
2024-05-21T15:32:40.285+0900 7fb7c7746700 10 librados: getxattrs oid=755936e0-6e23-4e81-ad7f-9f760c886cc0.31304710.1_call/test_f_cnv_mdt_merge/etl_date=20240420/base_date=20240420/base_hh=22/rpt_type=M1/000965_0 nspace=

[ last disk found in rgw2 ]
2024-05-21T15:32:40.285+0900 7fa1f4408700 10 librados: getxattrs oid=755936e0-6e23-4e81-ad7f-9f760c886cc0.31304710.1_call/test_f_cnv_mdt_merge/etl_date=20240420/base_date=20240420/base_hh=22/rpt_type=M1/000965_0 nspace=

[ last log found in rgw3 ]
2024-05-21T15:32:40.289+0900 7fb6b7526700 10 RGWRados::cls_bucket_list_ordered: got call/test_f_cnv_mdt_merge/etl_date=20240420/base_date=20240420/base_hh=22/rpt_type=M1/000965_0[]

[ last disk found in rgw1 ]
2024-05-21T15:32:40.297+0900 7f51d0e99700 10 librados: getxattrs oid=755936e0-6e23-4e81-ad7f-9f760c886cc0.31304710.1_call/test_f_cnv_mdt_merge/etl_date=20240420/base_date=20240420/base_hh=22/rpt_type=M1/000965_0 nspace=

[ last log found in rgw1 ]
2024-05-21T15:32:40.305+0900 7f5186604700 10 RGWRados::cls_bucket_list_ordered: got call/test_f_cnv_mdt_merge/etl_date=20240420/base_date=20240420/base_hh=22/rpt_type=M1/000965_0[]

[ last log found in rgw2 ]
2024-05-21T15:32:40.341+0900 7fa2fb616700 10 RGWRados::cls_bucket_list_ordered: got call/test_f_cnv_mdt_merge/etl_date=20240420/base_date=20240420/base_hh=22/rpt_type=M1/000965_0[]

로그 해석

  • 오브젝트를 복제하는 과정과 임시 파일을 지우는 과정에 실패는 발생하지 않았다.
  • 오브젝트가 생성된 시점과 오브젝트가 사라진 시점 사이에 15분이라는 큰 시간 차이가 존재한다.
  • 이는 오브젝트 생성 이후 15분 동안에는 문제 없이 오브젝트를 조회할 수 있었다는 것을 의미하며, 오브젝트 생성에 문제가 없음을 시사한다.
  • 대상 오브젝트의 인덱스와 헤드가 마지막으로 나타난 시각이 2024-05-21T15:32:40 으로 동일하다. 이것은 클러스터 수준의 사건이 발생했으며, 이 사건으로 인해 오브젝트가 사라진 것으로 보인다.
  • 2024-05-21T15:32:39 경에 오브젝트 헤드의 상태 조회가 NOENT 에러로 실패하면서 해당 오브젝트가 목록 조회에서 누락되는 사건이 발생했다.
    오브젝트가 목록 조회에서 빠질 때, 오브젝트 인덱스와 헤더의 상태에 따라 오브젝트 인덱스를 삭제될 수 있다.
    따라서 이 사건으로 인해 오브젝트가 삭제 될 가능성이 있다.
  • 사건 이후에 다른 요청에 의해 발생한 상태 조회들이 성공하는 것을 보면 2024-05-21T15:32:39에 발생한 상태 조회 실패는 일시적인 현상으로 생각할 수 있다.
  • 어떤 이유로 존재하는 오브젝트 헤드가 없는 것으로 보고되는지는 알 수 없다.
    저장 매체의 문제, osd 자원 문제, 버그 등 여러 가지 원인을 상정해 볼 수는 있다.
    문제 발생 시점에 자원이 부족해 보이기는 한다.

조치 사항

  • 위 내용을 종합해 봤을 때, 일시적인 헤더 상태 조회 실패에도 일정 시간 이후에 상태 조회를 한번 더 수행하도록 하거나 오브젝트 목록 조회 중의 인덱스 삭제 시도를 위한 조건을 좁히는 것으로 상황이 개선될 수 있다고 판단하였다.

@bgy217 bgy217 merged commit 377362a into ne-storage-master May 27, 2024
@bgy217 bgy217 self-assigned this May 27, 2024
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