콘텐츠로 이동
무료 평가 시작

pdcomm_gem_configure_spooling

함수

GEM 엔드포인트에 장비 스풀(spool)을 연결합니다.

PdcommStatus pdcomm_gem_configure_spooling(PdcommTcpEndpoint *endpoint, const PdcommGemSpoolOptions *options, const PdcommGemSpoolMessageKey *catalog, size_t count, const char *path, size_t path_length, PdcommGemSpoolWriteInfo *info)

선언 위치: #include <pdcomm_gem_spooling.h>

pdcomm_gem_configure_equipment() 뒤에 엔드포인트가 정지된 동안 한 번 호출합니다. NULL과 0인 path_length를 지정하면 스풀은 RAM에 있습니다. 경로를 지정하면 스풀은 크기가 제한된 스냅샷 파일을 기반으로 하며, 이 파일은 <path>.lock에 대한 배타적 잠금으로 보호됩니다. 상위 디렉터리는 이미 있어야 합니다.

  • 새 저장소(RAM 또는 아직 없는 파일)에는 비어 있지 않은 유효한 catalog가 필요하며, 연결하기 전에 비활성 초기 스냅샷을 설치합니다. 이 스냅샷은 스풀링 비활성, 오버플로 #PDCOMM_GEM_SPOOL_DISCARD_NEW, 전송 제한 없음, 빈 선택입니다. 이때 info는 #PDCOMM_GEM_SPOOL_CONFIGURED를 보고합니다.
  • 기존 파일은 영속화된 카탈로그, 옵션, 선택, 큐, 통계와 함께 불러오며 다시 쓰지 않습니다. 비어 있지 않은 catalog는 영속화된 카탈로그와 순서까지 정확히 일치해야 합니다. NULL과 0인 count를 지정하면 불러온 카탈로그를 받아들입니다. 기존 스냅샷을 몰래 교체하거나 마이그레이션하지 않으며, 손상된 스냅샷은 거부합니다.

초기 스냅샷은 설치했지만 디렉터리 동기화에 실패했으면 스풀은 그대로 연결되고 호출은 #PDCOMM_SPOOL_UNCONFIRMED를 반환합니다. 설치가 롤백된 것처럼 다시 구성하지 않습니다.

매개변수

이름설명
endpointGEM 장비로 구성된 Stopped 상태의 엔드포인트입니다.
options저장 한도입니다. version은 #PDCOMM_GEM_SPOOL_OPTIONS_VERSION, reserved는 0이어야 합니다.
catalog스풀할 수 있는 count개의 메시지 키 배열입니다. count가 0이면 NULL일 수 있습니다.
count카탈로그 엔트리 개수입니다. 최대 options->max_catalog_entries입니다.
pathNUL 종료 문자가 없는 UTF-8 스냅샷 경로이거나, RAM을 쓰려면 NULL입니다. 중간에 NUL 바이트가 있으면 거부됩니다.
path_lengthpath의 길이(바이트)입니다. 0이면 RAM을 선택합니다.
info초기 스냅샷의 결과를 받습니다. NULL이 아니어야 하며 struct_size를 설정해야 합니다.

반환값

성공하면 #PDCOMM_OK를 반환합니다(기존 파일을 불러온 경우 포함). 초기 스냅샷을 설치했지만 디렉터리 동기화가 확인되지 않았으면 #PDCOMM_SPOOL_UNCONFIRMED를 반환합니다. info 또는 options가 NULL이거나 너무 작거나, version 또는 reserved가 잘못되었거나, 길이가 0이 아닌데 배열이 NULL이거나, UTF-8 경로가 유효하지 않거나 중간에 NUL이 있거나, 경로에 파일 이름이 없거나, 경로를 지정했는데 max_serialized_bytes가 144보다 작거나, 새 저장소인데 카탈로그가 비어 있거나, 카탈로그 키가 유효하지 않거나 중복되거나, GEM 항목 한도가 0이면 #PDCOMM_INVALID_ARGUMENT를 반환합니다. 엔드포인트가 정지 상태가 아니거나, GEM 장비가 아니거나, 이미 스풀이 있으면 #PDCOMM_INVALID_STATE를 반환합니다. 준비된 TCP 이벤트(staged event)가 대기 중이거나 다른 소유자가 스냅샷 잠금을 잡고 있으면 #PDCOMM_BACKPRESSURE를 반환합니다. 카탈로그가 한도를 넘거나 스냅샷이 max_serialized_bytes를 넘으면 #PDCOMM_LIMIT_EXCEEDED를 반환합니다. 스냅샷이 손상되었거나 그 카탈로그가 catalog와 일치하지 않으면 #PDCOMM_INVALID_DATA를 반환합니다. 파일 시스템 오류이면 #PDCOMM_IO_ERROR를 반환합니다. 그 밖에 #PDCOMM_ALLOCATION_FAILED, #PDCOMM_POISONED를 반환하며, endpoint가 NULL이면 #PDCOMM_INVALID_ARGUMENT를 반환합니다.

참고

  • 실패하면 아무것도 연결되지 않으며 기존 파일은 바뀌지 않습니다.
  • 스냅샷 잠금은 엔드포인트가 해제될 때까지 유지됩니다.