Program Listing for File SharedBufferManager.cpp

Return to documentation for file (BackendLibfabric/SharedBufferManager.cpp)

#include "SharedBufferManager.hpp"

#include <utility>

#include <tracy/Tracy.hpp>

#include "Issues.hpp"

netio3::libfabric::SharedBufferManager::SharedBufferManager(const NetworkConfig& config,
                                                            DomainManager& domain_manager,
                                                            BaseEventLoop* event_loop) :
  m_receive_context_manager{create_shared_receive_context(config, domain_manager, event_loop)},
  m_send_buffer_manager{create_send_buffer_manager(config, domain_manager)},
  m_zero_copy_buffer_manager{create_zero_copy_buffer_manager(config, domain_manager)}
{}

std::optional<netio3::libfabric::SharedReceiveContextManager>
netio3::libfabric::SharedBufferManager::create_shared_receive_context(const NetworkConfig& config,
                                                                      DomainManager& domain_manager,
                                                                      BaseEventLoop* event_loop)
{
  ZoneScoped;
  if (not config.conn_params.recv_params.use_shared_receive_buffers) {
    return std::nullopt;
  }
  try {
    return SharedReceiveContextManager{domain_manager,
                                       config.conn_params.recv_params,
                                       domain_manager.get_info(),
                                       event_loop};
  } catch (const LibfabricSharedReceiveContextError& e) {
    throw LibfabricDomainError(ERS_HERE, e.message());
  }
}

std::optional<netio3::libfabric::SendBufferManager>
netio3::libfabric::SharedBufferManager::create_send_buffer_manager(const NetworkConfig& config,
                                                                   DomainManager& domain_manager)
{
  ZoneScoped;
  if (not config.conn_params.send_buffered_params.use_shared_send_buffers) {
    return std::nullopt;
  }
  try {
    return std::optional<netio3::libfabric::SendBufferManager>{
      std::in_place, config.conn_params.send_buffered_params, domain_manager};
  } catch (const LibFabricBufferError& e) {
    throw LibfabricDomainError(ERS_HERE, e.message());
  }
}

std::optional<netio3::libfabric::ZeroCopyBufferManager>
netio3::libfabric::SharedBufferManager::create_zero_copy_buffer_manager(
  const NetworkConfig& config,
  DomainManager& domain_manager)
{
  ZoneScoped;
  if (not config.conn_params.send_zero_copy_params.use_shared_send_buffers) {
    return std::nullopt;
  }
  try {
    return std::optional<netio3::libfabric::ZeroCopyBufferManager>{
      std::in_place, config.conn_params.send_zero_copy_params, domain_manager};
  } catch (const LibFabricBufferError& e) {
    throw LibfabricDomainError(ERS_HERE, e.message());
  }
}