From f637ee6616723c2aa6905cd2daa808de8dec8cf3 Mon Sep 17 00:00:00 2001 From: Vinoth Veeraraghavan Date: Fri, 6 Nov 2020 09:56:25 +0800 Subject: [PATCH] Fix MOT table creation during recovery --- src/gausskernel/storage/mot/core/src/storage/table.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/gausskernel/storage/mot/core/src/storage/table.cpp b/src/gausskernel/storage/mot/core/src/storage/table.cpp index b909325cb..fc26f83c7 100644 --- a/src/gausskernel/storage/mot/core/src/storage/table.cpp +++ b/src/gausskernel/storage/mot/core/src/storage/table.cpp @@ -1081,11 +1081,13 @@ void Table::Serialize(char* dataOut) void Table::Deserialize(const char* in) { + // m_numIndexes will be incremented during each index addition + uint16_t savedNumIndexes = 0; SetDeserialized(false); char* dataIn = (char*)in; dataIn = SerializableSTR::Deserialize(dataIn, m_tableName); dataIn = SerializableSTR::Deserialize(dataIn, m_longTableName); - dataIn = SerializablePOD::Deserialize(dataIn, m_numIndexes); + dataIn = SerializablePOD::Deserialize(dataIn, savedNumIndexes); dataIn = SerializablePOD::Deserialize(dataIn, m_tableId); dataIn = SerializablePOD::Deserialize(dataIn, m_tableExId); dataIn = SerializablePOD::Deserialize(dataIn, m_fixedLengthRows); @@ -1096,7 +1098,7 @@ void Table::Deserialize(const char* in) MOT_LOG_DEBUG("Table::%s: %s num indexes: %d current Id: %u counter: %u", __func__, m_longTableName.c_str(), - m_numIndexes, + savedNumIndexes, m_tableId, tableCounter.load()); if (m_tableId >= tableCounter.load()) { @@ -1104,9 +1106,7 @@ void Table::Deserialize(const char* in) MOT_LOG_DEBUG("Setting tableCounter to %u", tableCounter.load()); } - uint16_t savedNumIndexes = m_numIndexes; uint32_t saveFieldCount = m_fieldCnt; - m_numIndexes = 1; /* primary always exists */ // OA: use interleaved allocation for table columns if (!Init(m_tableName.c_str(), m_longTableName.c_str(), m_fieldCnt, m_tableExId)) { MOT_LOG_ERROR("Table::Deserialize - failed to init table"); @@ -1142,6 +1142,7 @@ void Table::Deserialize(const char* in) return; } } + MOT_ASSERT(m_numIndexes == savedNumIndexes); SetDeserialized(true); }