Copy to ClipboardCopied!Toggle word wrapToggle overflow
전송에는 업로드/ 다운로드의 흐름을 관리하는 단계가 있습니다. 이러한 흐름을 구현하는 클라이언트는 전송 단계를 폴링/확인하고 그에 따라 조치를 취해야 합니다. 가능한 모든 단계는 ImageTransferPhase 에서 찾을 수 있습니다.
새 전송을 추가한 후 해당 단계가 초기화 됩니다. 클라이언트는 변경될 때까지 전송 단계에서 폴링해야 합니다. 단계가 전송 되면 세션은 전송을 시작할 준비가됩니다.
예를 들면 다음과 같습니다.
transfer_service = transfers_service.image_transfer_service(transfer.id)
while transfer.phase == types.ImageTransferPhase.INITIALIZING:
time.sleep(3)
transfer = transfer_service.get()
transfer_service = transfers_service.image_transfer_service(transfer.id)
while transfer.phase == types.ImageTransferPhase.INITIALIZING:
time.sleep(3)
transfer = transfer_service.get()
Copy to ClipboardCopied!Toggle word wrapToggle overflow
이 단계에서 전송 단계가 paused_system 인 경우 세션이 성공적으로 설정되지 않았습니다. 한 가지 가능한 이유는 전송을 위해 선택한 호스트에서 ovirt-imageio-daemon이 실행되지 않기 때문입니다. 전송은 이를 관리하는 서비스의 resume 를 호출하여 재개할 수 있습니다.
세션이 성공적으로 설정된 경우 반환된 전송 엔티티에 필요한 데이터를 전송하기 위해 사용해야 하는 proxy_url 및 signed_ticket 속성이 포함됩니다. 클라이언트는 이미지 데이터로 HTTPS 요청을 전송하기 위한 기술과 도구를 선택할 수 있습니다.
proxy_url 은 I/O를 수행하기 위해 이미지에 대한 프록시 서버의 주소입니다.
signed_ticket 은 신뢰할 수 있는 통신을 수행하기 위해 HTTPS 요청의 Authentication 헤더에 추가해야 하는 콘텐츠입니다.
예를 들어 전송을 수행하기 위해 Python의 HTTPSConnection을 사용할 수 있으므로 향후 전송을 위해 transfer_headers dict가 설정됩니다.
Copy to ClipboardCopied!Toggle word wrapToggle overflow
Python의 HTTPSConnection 을 사용하여 새 연결이 설정됩니다.
Extract the URI, port, and path from the transfer's proxy_url.
Create a new instance of the connection.
# Extract the URI, port, and path from the transfer's proxy_url.
url = urlparse.urlparse(transfer.proxy_url)
# Create a new instance of the connection.
proxy_connection = HTTPSConnection(
url.hostname,
url.port,
context=ssl.SSLContext(ssl.PROTOCOL_SSLv23)
)
Copy to ClipboardCopied!Toggle word wrapToggle overflow
업로드하려면 전송되는 특정 콘텐츠 범위를 Content-Range HTTPS 헤더에 기록해 두어야 합니다. 이는 보다 유연한 프로세스에 대한 여러 요청으로 전송을 분할하기 위해 사용할 수 있습니다.
이를 위해 클라이언트는 채널을 열린 상태로 유지하기 위해 전송 세션을 반복적으로 확장해야 합니다. 그렇지 않으면 세션이 종료되고 전송이 paused_system 단계로 전환되고 서버에 대한 HTTPS 요청이 거부됩니다.
예를 들어 클라이언트는 파일 청크에서 반복한 후 세션을 확장하도록 서비스를 요청하는 동안 프록시 서버로 보낼 수 있습니다.