bes Updated for version 3.21.1
The Backend Server (BES) is the lower two tiers of the Hyrax data server
dmrpp::CurlHandlePool Class Reference

#include <CurlHandlePool.h>

Collaboration diagram for dmrpp::CurlHandlePool:
Collaboration graph

Public Member Functions

dmrpp_easy_handleget_easy_handle (Chunk *chunk)
 
void initialize ()
 

Static Public Member Functions

static void release_handle (dmrpp_easy_handle *h)
 

Detailed Description

Get a CURL easy handle, assign a URL and other values, use the handler, return it to the pool. This class helps take advantage of libcurl's built-in reuse capabilities (connection keep-alive, DNS pooling, etc.).

Note
It may be that TCP Keep Alive is not supported in libcurl versions prior to 7.25, which means CentOS 6 will not have support for this.

See https://ec.haxx.se/libcurl-connectionreuse.html for more information.

See d_max_easy_handles below for the limit on the total number of easy handles.

Definition at line 78 of file CurlHandlePool.h.

Constructor & Destructor Documentation

◆ ~CurlHandlePool()

CurlHandlePool::~CurlHandlePool ( )

Definition at line 284 of file CurlHandlePool.cc.

Member Function Documentation

◆ get_easy_handle()

dmrpp_easy_handle * CurlHandlePool::get_easy_handle ( Chunk * chunk)

Get a CURL easy handle to transfer data from

  • url into the given
  • chunk.
Note
This method and release_handle() use the same lock to prevent the handle's chunk pointer from being cleared by another thread after a thread running this method has set it. However, there's no protection against calling this when no more handles are available. If that happens a thread calling release_handle() will block until this code returns (and this code will return NULL).
Parameters
chunkUse this Chunk to set a libcurl easy handle so that it will fetch the Chunk's data.
Returns
A CURL easy handle configured to transfer data, or null if there are no more handles in the pool.

Definition at line 304 of file CurlHandlePool.cc.

◆ initialize()

void CurlHandlePool::initialize ( )

Definition at line 257 of file CurlHandlePool.cc.

◆ release_handle()

void CurlHandlePool::release_handle ( dmrpp_easy_handle * handle)
static

Release a DMR++ easy_handle. This returns the handle to the pool of handles that can be used for serial transfers or, with multi curl, for parallel transfers.

Parameters
handle

Definition at line 445 of file CurlHandlePool.cc.


The documentation for this class was generated from the following files: