1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-29 08:21:15 +03:00

Fix/mcol 5787 rgdata buffer max size dev (#3325)

* fix(rowgroup): RGData now uses uint64_t counter for the fixed sizes columns data buf.
	The buffer can utilize > 4GB RAM that is necessary for PM side join.
	RGData ctor uses uint32_t allocating data buffer.
 	This fact causes implicit heap overflow.

* feat(bytestream,serdes): BS buffer size type is uint64_t
	This necessary to handle 64bit RGData, that comes as
	a separate patch. The pair of patches would allow to
	have PM joins when SmallSide size > 4GB.

* feat(bytestream,serdes): Distribute BS buf size data type change to avoid implicit data type narrowing

* feat(rowgroup): this returns bits lost during cherry-pick. The bits lost caused the first RGData::serialize to crash a process
This commit is contained in:
drrtuy
2024-11-09 19:44:02 +00:00
committed by GitHub
parent 842a3c8a40
commit 8ae5a3da40
28 changed files with 1130 additions and 231 deletions

View File

@ -29,7 +29,6 @@
#pragma once
#include "threadsafequeue.h"
#include "resourcemanager.h"
#include "we_messages.h"
@ -122,11 +121,11 @@ class WESplClient
{
return fRowTx;
}
uint32_t getBytesRcv() const
messageqcpp::BSSizeType getBytesRcv() const
{
return fBytesRcv;
}
uint32_t getBytesTx()
messageqcpp::BSSizeType getBytesTx()
{
boost::mutex::scoped_lock aLock(fTxMutex);
return fBytesTx;
@ -214,17 +213,17 @@ class WESplClient
{
return fIpAddress;
}
void setBytesRcv(uint32_t BytesRcv)
void setBytesRcv(messageqcpp::BSSizeType BytesRcv)
{
fBytesRcv = BytesRcv;
}
void setBytesTx(uint32_t BytesTx)
void setBytesTx(messageqcpp::BSSizeType BytesTx)
{
boost::mutex::scoped_lock aLock(fTxMutex);
fBytesTx = BytesTx;
aLock.unlock();
}
void updateBytesTx(uint32_t fBytes)
void updateBytesTx(messageqcpp::BSSizeType fBytes)
{
boost::mutex::scoped_lock aLock(fTxMutex);
fBytesTx += fBytes;
@ -358,8 +357,8 @@ class WESplClient
int fDataRqstCnt; // Data request count
long fRdSecTo; // read timeout sec
unsigned int fRowTx; // No. Of Rows Transmitted
uint32_t fBytesTx;
uint32_t fBytesRcv;
messageqcpp::BSSizeType fBytesTx;
messageqcpp::BSSizeType fBytesRcv;
time_t fLastInTime;
time_t fStartTime;
bool fSend;