maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #12270
Re: MDEV-21831: Assertion `length == pack_length()' failed in Field_inet6::sort_string upon INSERT into RocksDB table
Hi Varun,
> MDEV-21831: Assertion `length == pack_length()' failed in Field_inet6::sort_string upon INSERT into RocksDB table
>
> For INET6 columns the values are stored as BINARY columns and returned to the client in TEXT format.
> For rocksdb the indexes store mem-comparable images for columns, so use the pack_length() to store
> the mem-comparable form for INET6 columns. This would also remain consistent with CHAR columns.
>
> diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc
> index 21a9b57b555e..6e73535d1de7 100644
> --- a/storage/rocksdb/rdb_datadic.cc
> +++ b/storage/rocksdb/rdb_datadic.cc
> @@ -3317,7 +3317,9 @@ bool Rdb_field_packing::setup(const Rdb_key_def *const key_descr,
> field->field_length = field->char_length() * cs->mbmaxlen.
> */
> const CHARSET_INFO *cs = field->charset();
> - m_max_image_len = cs->strnxfrmlen(field->field_length);
> + m_max_image_len = cs->strnxfrmlen(type == MYSQL_TYPE_STRING ?
> + field->pack_length() :
> + field->field_length);
Field::pack_length is defined as:
/*
pack_length() returns size (in bytes) used to store field data in memory
(i.e. it returns the maximum size of the field in a row of the table,
which is located in RAM).
*/
virtual uint32 pack_length() const { return (uint32) field_length; }
so, it is size in bytes, while strnxfrmlen() accepts length *in characters*.
That is, strnxfrmlen(field->pack_length()) is certainly not correct.
Rdb_field_packing::m_max_image_len is defined as:
/* Length of mem-comparable image of the field, in bytes */
int m_max_image_len;
while pack_length() seems to describe table->record[0] format (or is it
KeyTupleFormat) ?
Field::sort_length() doesn't have a definition but it seems to be a closer
match as it describes the length of the mem-comparable form?
BR
Sergei
--
Sergei Petrunia, Software Developer
MariaDB Corporation | Skype: sergefp | Blog: http://s.petrunia.net/blog