blob: b582e8bdbe0c44e3431c482d29b1a02ab5a0c8e1 [file] [log] [blame]
/*-------------------------------------------------------------------------
*
* ic_modules.c
* Interconnect code shared between UDP, and TCP IPC Layers.
*
* IDENTIFICATION
* contrib/interconnect/ic_modules.c
*
*-------------------------------------------------------------------------
*/
#include "postgres.h"
#include "ic_modules.h"
#include "ic_internal.h"
#include "ic_common.h"
#include "tcp/ic_tcp.h"
#include "udp/ic_udpifc.h"
#ifdef ENABLE_IC_PROXY
#include "proxy/ic_proxy_server.h"
#endif
PG_MODULE_MAGIC;
MotionIPCLayer tcp_ipc_layer = {
.ic_type = INTERCONNECT_TYPE_TCP,
.type_name = "tcp",
.GetMaxTupleChunkSize = GetMaxTupleChunkSizeTCP,
.GetListenPort = GetListenPortTCP,
.InitMotionLayerIPC = InitMotionIPCLayerTCP,
.CleanUpMotionLayerIPC = CleanUpMotionIPCLayerTCP,
.WaitInterconnectQuit = WaitInterconnectQuitTCP,
.SetupInterconnect = SetupInterconnectTCP,
.TeardownInterconnect = TeardownInterconnectTCP,
.SendTupleChunkToAMS = SendTupleChunkToAMS,
.SendChunk = SendChunkTCP,
.SendEOS = SendEOSTCP,
.SendStopMessage = SendStopMessageTCP,
.RecvTupleChunkFromAny = RecvTupleChunkFromAnyTCP,
.RecvTupleChunkFrom = RecvTupleChunkFromTCP,
.RecvTupleChunk = RecvTupleChunkTCP,
.DirectPutRxBuffer = DirectPutRxBufferTCP,
.DeregisterReadInterest = DeregisterReadInterestTCP,
.GetActiveMotionConns = GetActiveMotionConnsTCP,
.GetTransportDirectBuffer = GetTransportDirectBuffer,
.PutTransportDirectBuffer = PutTransportDirectBuffer,
#ifdef ENABLE_IC_PROXY
.IcProxyServiceMain = ic_proxy_server_main,
#else
.IcProxyServiceMain = NULL,
#endif
.GetMotionConnTupleRemapper = GetMotionConnTupleRemapper,
.GetMotionSentRecordTypmod = GetMotionSentRecordTypmod,
};
MotionIPCLayer proxy_ipc_layer = {
.ic_type = INTERCONNECT_TYPE_PROXY,
.type_name = "proxy",
.GetMaxTupleChunkSize = GetMaxTupleChunkSizeTCP,
.GetListenPort = GetListenPortTCP,
.InitMotionLayerIPC = InitMotionIPCLayerTCP,
.CleanUpMotionLayerIPC = CleanUpMotionIPCLayerTCP,
.WaitInterconnectQuit = WaitInterconnectQuitTCP,
.SetupInterconnect = SetupInterconnectTCP,
.TeardownInterconnect = TeardownInterconnectTCP,
.SendTupleChunkToAMS = SendTupleChunkToAMS,
.SendChunk = SendChunkTCP,
.SendEOS = SendEOSTCP,
.SendStopMessage = SendStopMessageTCP,
.RecvTupleChunkFromAny = RecvTupleChunkFromAnyTCP,
.RecvTupleChunkFrom = RecvTupleChunkFromTCP,
.RecvTupleChunk = RecvTupleChunkTCP,
.DirectPutRxBuffer = DirectPutRxBufferTCP,
.DeregisterReadInterest = DeregisterReadInterestTCP,
.GetActiveMotionConns = GetActiveMotionConnsTCP,
.GetTransportDirectBuffer = GetTransportDirectBuffer,
.PutTransportDirectBuffer = PutTransportDirectBuffer,
#ifdef ENABLE_IC_PROXY
.IcProxyServiceMain = ic_proxy_server_main,
#else
.IcProxyServiceMain = NULL,
#endif
.GetMotionConnTupleRemapper = GetMotionConnTupleRemapper,
.GetMotionSentRecordTypmod = GetMotionSentRecordTypmod,
};
MotionIPCLayer udpifc_ipc_layer = {
.ic_type = INTERCONNECT_TYPE_UDPIFC,
.type_name = "udpifc",
.GetMaxTupleChunkSize = GetMaxTupleChunkSizeUDP,
.GetListenPort = GetListenPortUDP,
.InitMotionLayerIPC = InitMotionIPCLayerUDP,
.CleanUpMotionLayerIPC = CleanUpMotionLayerIPCUDP,
.WaitInterconnectQuit = WaitInterconnectQuitUDPIFC,
.SetupInterconnect = SetupInterconnectUDP,
.TeardownInterconnect = TeardownInterconnectUDP,
.SendTupleChunkToAMS = SendTupleChunkToAMS,
.SendChunk = SendChunkUDPIFC,
.SendEOS = SendEOSUDPIFC,
.SendStopMessage = SendStopMessageUDPIFC,
.RecvTupleChunkFromAny = RecvTupleChunkFromAnyUDPIFC,
.RecvTupleChunkFrom = RecvTupleChunkFromUDPIFC,
.RecvTupleChunk = RecvTupleChunkUDPIFC,
.DirectPutRxBuffer = MlPutRxBufferIFC,
.DeregisterReadInterest = DeregisterReadInterestUDP,
.GetActiveMotionConns = GetActiveMotionConnsUDPIFC,
.GetTransportDirectBuffer = GetTransportDirectBuffer,
.PutTransportDirectBuffer = PutTransportDirectBuffer,
#ifdef ENABLE_IC_PROXY
.IcProxyServiceMain = ic_proxy_server_main,
#else
.IcProxyServiceMain = NULL,
#endif
.GetMotionConnTupleRemapper = GetMotionConnTupleRemapper,
.GetMotionSentRecordTypmod = GetMotionSentRecordTypmod,
};
void
_PG_init(void)
{
if (!process_shared_preload_libraries_in_progress) {
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not load interconnect outside process shared preload")));
}
RegisterIPCLayerImpl(&tcp_ipc_layer);
RegisterIPCLayerImpl(&udpifc_ipc_layer);
RegisterIPCLayerImpl(&proxy_ipc_layer);
}