Hi Sergei!

It turned out that only vcol blobs are affected. They are allocated
by update_virtual_fields(), so it was enough to just refresh their value by
doing update_virtual_fields() again after record is restored from the
queue. Please review the fix:

https://github.com/MariaDB/server/pull/1234


On Tue, Mar 12, 2019 at 1:42 PM Sergei Golubchik <s...@mariadb.org> wrote:

> Hi, Aleksey!
>
> On Mar 11, Aleksey Midenkov wrote:
> > Hi, Sergei!
> >
> > ha_partition::handle_ordered_index_scan() stores records in
> > m_ordered_rec_buffer. Then TABLE::update_virtual_fields() updates blob
> > buffer and frees the old one. Then ha_partition::return_top_record()
> > returns record from m_ordered_rec_buffer with stale blob pointer. What
> > should we do with this? I propose to duplicate blob buffer when record
> > gets into m_ordered_rec_buffer.
>
> You can make Field_blob to forget that it owns the buffer.
> And when reading back from the queue, Field_blob will need to take
> over the buffer again.
>
> It's String::release() and String::reset() methods.
>
> The tricky part here is that Field_blob doesn't always own the buffer,
> sometimes the storage engine does. So, when reading from the queue and
> restoring the ownership you'll need to take care to do it only for
> values that Field_blob used to own before, not for all blobs.
>
> Regards,
> Sergei
> Chief Architect MariaDB
> and secur...@mariadb.org
>


-- 
All the best,

Aleksey Midenkov
@midenok
_______________________________________________
Mailing list: https://launchpad.net/~maria-developers
Post to     : maria-developers@lists.launchpad.net
Unsubscribe : https://launchpad.net/~maria-developers
More help   : https://help.launchpad.net/ListHelp

Reply via email to