mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-16249 CHECKSUM TABLE for a spider table is not parallel and saves all data in memory in the spider head by default (#1328)
followup for be5c432a42
ha_partition::calculate_checksum() has to invoke calculate_checksum()
for partitions unconditionally, not under (HA_HAS_OLD_CHECKSUM | HA_HAS_NEW_CHECKSUM).
Because the server uses ::info() to ask for a live checksum, while
calculate_checksum() must, precisely, calculate it the slow way,
also for tables that don't have the live checksum at all.
Also, fix the compilation on Windows (ha_checksum/ulonglong type mix).
This commit is contained in:
@ -10645,8 +10645,7 @@ int ha_partition::calculate_checksum()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_pre_calling= FALSE;
|
m_pre_calling= FALSE;
|
||||||
if ((table_flags() & (HA_HAS_OLD_CHECKSUM | HA_HAS_NEW_CHECKSUM)))
|
|
||||||
{
|
|
||||||
handler **file= m_file;
|
handler **file= m_file;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@ -10660,7 +10659,6 @@ int ha_partition::calculate_checksum()
|
|||||||
stats.checksum_null= FALSE;
|
stats.checksum_null= FALSE;
|
||||||
}
|
}
|
||||||
} while (*(++file));
|
} while (*(++file));
|
||||||
}
|
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5054,7 +5054,7 @@ int handler::calculate_checksum()
|
|||||||
return HA_ERR_ABORTED_BY_USER;
|
return HA_ERR_ABORTED_BY_USER;
|
||||||
|
|
||||||
ha_checksum row_crc= 0;
|
ha_checksum row_crc= 0;
|
||||||
error= table->file->ha_rnd_next(table->record[0]);
|
error= ha_rnd_next(table->record[0]);
|
||||||
if (error)
|
if (error)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -5108,7 +5108,7 @@ int handler::calculate_checksum()
|
|||||||
|
|
||||||
stats.checksum+= row_crc;
|
stats.checksum+= row_crc;
|
||||||
}
|
}
|
||||||
table->file->ha_rnd_end();
|
ha_rnd_end();
|
||||||
return error == HA_ERR_END_OF_FILE ? 0 : error;
|
return error == HA_ERR_END_OF_FILE ? 0 : error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -245,7 +245,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
ha_rows table_rows;
|
ha_rows table_rows;
|
||||||
#ifdef HA_HAS_CHECKSUM_EXTENDED
|
#ifdef HA_HAS_CHECKSUM_EXTENDED
|
||||||
ulonglong checksum_val;
|
ha_checksum checksum_val;
|
||||||
bool checksum_null;
|
bool checksum_null;
|
||||||
uint action_flags;
|
uint action_flags;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1142,9 +1142,9 @@ int spider_db_mbase_result::fetch_simple_action(
|
|||||||
if (mysql_row[position])
|
if (mysql_row[position])
|
||||||
{
|
{
|
||||||
spider->checksum_val =
|
spider->checksum_val =
|
||||||
(ulonglong) my_strtoll10(mysql_row[position], (char**) NULL,
|
(ha_checksum) my_strtoll10(mysql_row[position], (char**) NULL,
|
||||||
&error_num);
|
&error_num);
|
||||||
DBUG_PRINT("info", ("spider checksum=%llu", spider->checksum_val));
|
DBUG_PRINT("info", ("spider checksum=%llu", (ulonglong)spider->checksum_val));
|
||||||
spider->checksum_null = FALSE;
|
spider->checksum_null = FALSE;
|
||||||
} else {
|
} else {
|
||||||
spider->checksum_null = TRUE;
|
spider->checksum_null = TRUE;
|
||||||
|
Reference in New Issue
Block a user