support glibc_maloc alloc succeed when tenant reach limit

This commit is contained in:
tushicheng 2023-06-30 10:24:28 +00:00 committed by ob-robot
parent 4e0a02cc9a
commit 8e4046c707
3 changed files with 18 additions and 9 deletions

View File

@ -25,6 +25,18 @@ thread_local ObMemAttr ObMallocHookAttrGuard::tl_mem_attr(OB_SERVER_TENANT_ID,
"glibc_malloc",
ObCtxIds::GLIBC);
ObMallocHookAttrGuard::ObMallocHookAttrGuard(const ObMemAttr& attr)
: old_attr_(tl_mem_attr)
{
tl_mem_attr = attr;
tl_mem_attr.ctx_id_ = ObCtxIds::GLIBC;
}
ObMallocHookAttrGuard::~ObMallocHookAttrGuard()
{
tl_mem_attr = old_attr_;
}
bool ObLabel::operator==(const ObLabel &other) const
{
bool bret = false;

View File

@ -593,15 +593,8 @@ private:
class ObMallocHookAttrGuard
{
public:
ObMallocHookAttrGuard(const ObMemAttr& attr)
: old_attr_(tl_mem_attr)
{
tl_mem_attr = attr;
}
~ObMallocHookAttrGuard()
{
tl_mem_attr = old_attr_;
}
ObMallocHookAttrGuard(const ObMemAttr& attr);
~ObMallocHookAttrGuard();
static ObMemAttr get_tl_mem_attr()
{
return tl_mem_attr;

View File

@ -62,6 +62,10 @@ void *ob_malloc_retry(size_t size)
ObMemAttr attr = ObMallocHookAttrGuard::get_tl_mem_attr();
SET_USE_500(attr);
ptr = ob_malloc(size, attr);
if (OB_ISNULL(ptr)) {
attr.tenant_id_ = OB_SERVER_TENANT_ID;
ptr = ob_malloc(size, attr);
}
if (OB_ISNULL(ptr)) {
::usleep(10000); // 10ms
}