提交 a9e18319 编写于 作者: O obdev 提交者: wangzelin.wzl

fix schema core problem

上级 84a38901
......@@ -29,7 +29,7 @@ public:
: ObIArray<T>(base_address, index), capacity_(capacity)
{}
ObArrayHelper() : capacity_(0)
ObArrayHelper() : ObIArray<T>(), capacity_(0)
{}
void init(int64_t capacity, T* base_address, int64_t index = 0)
......
......@@ -248,7 +248,6 @@ struct SchemaZoneReplicaAttrSet {
{}
virtual ~SchemaZoneReplicaAttrSet()
{}
int64_t get_convert_size() const;
int64_t get_full_replica_num() const
{
......
......@@ -1600,17 +1600,15 @@ int ObTenantSchema::set_zone_replica_attr_array(const common::ObIArray<SchemaZon
ret = OB_ALLOCATE_MEMORY_FAILED;
LOG_ERROR("alloc failed", K(ret), K(alloc_size));
} else {
zone_replica_attr_array_.init(src.count(), static_cast<SchemaZoneReplicaAttrSet*>(buf), src.count());
zone_replica_attr_array_.init(src.count(), static_cast<SchemaZoneReplicaAttrSet *>(buf), src.count());
// call construct func in advance to avoid core status
ARRAY_NEW_CONSTRUCT(SchemaZoneReplicaAttrSet, zone_replica_attr_array_);
for (int64_t i = 0; i < src.count() && OB_SUCC(ret); ++i) {
const SchemaZoneReplicaAttrSet& src_replica_attr_set = src.at(i);
SchemaZoneReplicaAttrSet* this_schema_set = &zone_replica_attr_array_.at(i);
if (nullptr == (this_schema_set = new (this_schema_set) SchemaZoneReplicaAttrSet())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("placement new return nullptr", K(ret));
} else if (OB_FAIL(set_specific_replica_attr_array(
static_cast<SchemaReplicaAttrArray&>(
this_schema_set->replica_attr_set_.get_full_replica_attr_array()),
src_replica_attr_set.replica_attr_set_.get_full_replica_attr_array()))) {
const SchemaZoneReplicaAttrSet &src_replica_attr_set = src.at(i);
SchemaZoneReplicaAttrSet *this_schema_set = &zone_replica_attr_array_.at(i);
if (OB_FAIL(set_specific_replica_attr_array(
static_cast<SchemaReplicaAttrArray &>(this_schema_set->replica_attr_set_.get_full_replica_attr_array()),
src_replica_attr_set.replica_attr_set_.get_full_replica_attr_array()))) {
LOG_WARN("fail to set specific replica attr array", K(ret));
} else if (OB_FAIL(set_specific_replica_attr_array(
static_cast<SchemaReplicaAttrArray&>(
......@@ -1645,13 +1643,12 @@ int ObTenantSchema::set_zone_replica_attr_array(const common::ObIArray<share::Ob
LOG_ERROR("alloc failed", K(ret), K(alloc_size));
} else {
zone_replica_attr_array_.init(src.count(), static_cast<SchemaZoneReplicaAttrSet*>(buf), src.count());
// call construct func in advance to avoid core status
ARRAY_NEW_CONSTRUCT(SchemaZoneReplicaAttrSet, zone_replica_attr_array_);
for (int64_t i = 0; i < src.count() && OB_SUCC(ret); ++i) {
const share::ObZoneReplicaAttrSet& src_replica_attr_set = src.at(i);
SchemaZoneReplicaAttrSet* this_schema_set = &zone_replica_attr_array_.at(i);
if (nullptr == (this_schema_set = new (this_schema_set) SchemaZoneReplicaAttrSet())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("placement new return nullptr", K(ret));
} else if (OB_FAIL(set_specific_replica_attr_array(
if (OB_FAIL(set_specific_replica_attr_array(
static_cast<SchemaReplicaAttrArray&>(
this_schema_set->replica_attr_set_.get_full_replica_attr_array()),
src_replica_attr_set.replica_attr_set_.get_full_replica_attr_array()))) {
......@@ -2814,17 +2811,15 @@ int ObLocality::set_zone_replica_attr_array(const common::ObIArray<SchemaZoneRep
ret = OB_ALLOCATE_MEMORY_FAILED;
LOG_ERROR("alloc failed", K(ret), K(alloc_size));
} else {
zone_replica_attr_array_.init(src.count(), static_cast<SchemaZoneReplicaAttrSet*>(buf), src.count());
zone_replica_attr_array_.init(src.count(), static_cast<SchemaZoneReplicaAttrSet *>(buf), src.count());
// call construct func in advance to avoid core status
ARRAY_NEW_CONSTRUCT(SchemaZoneReplicaAttrSet, zone_replica_attr_array_);
for (int64_t i = 0; i < src.count() && OB_SUCC(ret); ++i) {
const SchemaZoneReplicaAttrSet& src_replica_attr_set = src.at(i);
SchemaZoneReplicaAttrSet* this_schema_set = &zone_replica_attr_array_.at(i);
if (nullptr == (this_schema_set = new (this_schema_set) SchemaZoneReplicaAttrSet())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("placement new return nullptr", K(ret));
} else if (OB_FAIL(set_specific_replica_attr_array(
static_cast<SchemaReplicaAttrArray&>(
this_schema_set->replica_attr_set_.get_full_replica_attr_array()),
src_replica_attr_set.replica_attr_set_.get_full_replica_attr_array()))) {
const SchemaZoneReplicaAttrSet &src_replica_attr_set = src.at(i);
SchemaZoneReplicaAttrSet *this_schema_set = &zone_replica_attr_array_.at(i);
if (OB_FAIL(set_specific_replica_attr_array(
static_cast<SchemaReplicaAttrArray &>(this_schema_set->replica_attr_set_.get_full_replica_attr_array()),
src_replica_attr_set.replica_attr_set_.get_full_replica_attr_array()))) {
LOG_WARN("fail to set specific replica attr array", K(ret));
} else if (OB_FAIL(set_specific_replica_attr_array(
static_cast<SchemaReplicaAttrArray&>(
......@@ -2864,18 +2859,15 @@ int ObLocality::set_zone_replica_attr_array(const common::ObIArray<share::ObZone
ret = OB_ALLOCATE_MEMORY_FAILED;
LOG_ERROR("alloc failed", K(ret), K(alloc_size));
} else {
zone_replica_attr_array_.init(src.count(), static_cast<SchemaZoneReplicaAttrSet*>(buf), src.count());
zone_replica_attr_array_.init(src.count(), static_cast<SchemaZoneReplicaAttrSet *>(buf), src.count());
// call construct func in advance to avoid core status
ARRAY_NEW_CONSTRUCT(SchemaZoneReplicaAttrSet, zone_replica_attr_array_);
for (int64_t i = 0; i < src.count() && OB_SUCC(ret); ++i) {
const share::ObZoneReplicaAttrSet& src_replica_attr_set = src.at(i);
SchemaZoneReplicaAttrSet* this_schema_set = &zone_replica_attr_array_.at(i);
if (nullptr == (this_schema_set = new (this_schema_set) SchemaZoneReplicaAttrSet())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("placement new return nullptr", K(ret));
} else if (OB_FAIL(set_specific_replica_attr_array(
static_cast<SchemaReplicaAttrArray&>(
this_schema_set->replica_attr_set_.get_full_replica_attr_array()),
src_replica_attr_set.replica_attr_set_.get_full_replica_attr_array()))) {
LOG_WARN("fail to set specific replica attr array", K(ret));
const share::ObZoneReplicaAttrSet &src_replica_attr_set = src.at(i);
SchemaZoneReplicaAttrSet *this_schema_set = &zone_replica_attr_array_.at(i);
if (OB_FAIL(set_specific_replica_attr_array(
static_cast<SchemaReplicaAttrArray &>(this_schema_set->replica_attr_set_.get_full_replica_attr_array()),
src_replica_attr_set.replica_attr_set_.get_full_replica_attr_array()))) {
} else if (OB_FAIL(set_specific_replica_attr_array(
static_cast<SchemaReplicaAttrArray&>(
this_schema_set->replica_attr_set_.get_logonly_replica_attr_array()),
......
......@@ -55,6 +55,14 @@ namespace share {
namespace schema {
typedef common::Ob2DArray<common::ObObjParam, common::OB_MALLOC_BIG_BLOCK_SIZE, common::ObWrapperAllocator, false>
ParamStore;
#define ARRAY_NEW_CONSTRUCT(TYPE, ARRAY) \
for (int64_t i = 0; i < ARRAY.count() && OB_SUCC(ret); ++i) { \
TYPE *this_set = &ARRAY.at(i); \
if (nullptr == (this_set = new (this_set) TYPE())) { \
ret = OB_ERR_UNEXPECTED; \
LOG_WARN("placement new return nullptr", K(ret)); \
} \
}
class ObSchemaGetterGuard;
class ObSimpleTableSchemaV2;
class ObTableSchema;
......
......@@ -1034,18 +1034,15 @@ int ObSimpleTableSchemaV2::set_zone_replica_attr_array(const common::ObIArray<Sc
ret = OB_ALLOCATE_MEMORY_FAILED;
LOG_ERROR("alloc failed", K(ret), K(alloc_size));
} else {
zone_replica_attr_array_.init(src.count(), static_cast<SchemaZoneReplicaAttrSet*>(buf), src.count());
zone_replica_attr_array_.init(src.count(), static_cast<SchemaZoneReplicaAttrSet *>(buf), src.count());
// call construct func in advance to avoid core status
ARRAY_NEW_CONSTRUCT(SchemaZoneReplicaAttrSet, zone_replica_attr_array_);
for (int64_t i = 0; i < src.count() && OB_SUCC(ret); ++i) {
const SchemaZoneReplicaAttrSet& src_replica_attr_set = src.at(i);
SchemaZoneReplicaAttrSet* this_schema_set = &zone_replica_attr_array_.at(i);
if (nullptr == (this_schema_set = new (this_schema_set) SchemaZoneReplicaAttrSet())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("placement new return nullptr", K(ret));
} else if (OB_FAIL(set_specific_replica_attr_array(
static_cast<SchemaReplicaAttrArray&>(
this_schema_set->replica_attr_set_.get_full_replica_attr_array()),
src_replica_attr_set.replica_attr_set_.get_full_replica_attr_array()))) {
LOG_WARN("fail to set specific replica attr array", K(ret));
const SchemaZoneReplicaAttrSet &src_replica_attr_set = src.at(i);
SchemaZoneReplicaAttrSet *this_schema_set = &zone_replica_attr_array_.at(i);
if (OB_FAIL(set_specific_replica_attr_array(
static_cast<SchemaReplicaAttrArray &>(this_schema_set->replica_attr_set_.get_full_replica_attr_array()),
src_replica_attr_set.replica_attr_set_.get_full_replica_attr_array()))) {
} else if (OB_FAIL(set_specific_replica_attr_array(
static_cast<SchemaReplicaAttrArray&>(
this_schema_set->replica_attr_set_.get_logonly_replica_attr_array()),
......@@ -1078,17 +1075,15 @@ int ObSimpleTableSchemaV2::set_zone_replica_attr_array(const common::ObIArray<sh
ret = OB_ALLOCATE_MEMORY_FAILED;
LOG_ERROR("alloc failed", K(ret), K(alloc_size));
} else {
zone_replica_attr_array_.init(src.count(), static_cast<SchemaZoneReplicaAttrSet*>(buf), src.count());
zone_replica_attr_array_.init(src.count(), static_cast<SchemaZoneReplicaAttrSet *>(buf), src.count());
// call construct func in advance to avoid core status
ARRAY_NEW_CONSTRUCT(SchemaZoneReplicaAttrSet, zone_replica_attr_array_);
for (int64_t i = 0; i < src.count() && OB_SUCC(ret); ++i) {
const share::ObZoneReplicaAttrSet& src_replica_attr_set = src.at(i);
SchemaZoneReplicaAttrSet* this_schema_set = &zone_replica_attr_array_.at(i);
if (nullptr == (this_schema_set = new (this_schema_set) SchemaZoneReplicaAttrSet())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("placement new return nullptr", K(ret));
} else if (OB_FAIL(set_specific_replica_attr_array(
static_cast<SchemaReplicaAttrArray&>(
this_schema_set->replica_attr_set_.get_full_replica_attr_array()),
src_replica_attr_set.replica_attr_set_.get_full_replica_attr_array()))) {
const share::ObZoneReplicaAttrSet &src_replica_attr_set = src.at(i);
SchemaZoneReplicaAttrSet *this_schema_set = &zone_replica_attr_array_.at(i);
if (OB_FAIL(set_specific_replica_attr_array(
static_cast<SchemaReplicaAttrArray &>(this_schema_set->replica_attr_set_.get_full_replica_attr_array()),
src_replica_attr_set.replica_attr_set_.get_full_replica_attr_array()))) {
LOG_WARN("fail to set specific replica attr array", K(ret));
} else if (OB_FAIL(set_specific_replica_attr_array(
static_cast<SchemaReplicaAttrArray&>(
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册