maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #13299
Re: MDEV-28152: Features for sequence
-
To:
Oleksandr Byelkin <sanja@xxxxxxxxxxx>
-
From:
Yuchen Pei <yuchen.pei@xxxxxxxxxxx>
-
Date:
Wed, 15 Mar 2023 18:19:16 +1100
-
Cc:
maria-developers <maria-developers@xxxxxxxxxxxxxxxxxxx>
-
In-reply-to:
<CADYFmDShx0i1=7EodpR8rFEfGxrJBxJsiCwp9SOe7SNCdRMd3Q@mail.gmail.com> (Oleksandr Byelkin's message of "Fri, 10 Mar 2023 11:59:03 +0100")
-
User-agent:
Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux)
Hi Oleksandr,
Thanks for your comments. I am working through addressing them. I have
done one pass and working through a list of about a dozen tasks as a
result.
While most of the tasks seem to be straightforward, there's one thing I
would like to discuss, about a behaviour of sequences that exists before
my work on MDEV-28152. I came across this while addressing one of your
comments requesting adding tests.
Below are tested at commit ce4a289f1c3.
If you create a sequence, then select its next value, then alter it in
anyway, then select the next value again, it will skip everything before
the next_not_cached_value:
--8<---------------cut here---------------start------------->8---
create sequence s;
select next value for s; # 1
alter sequence s maxvalue cycle;
select next value for s; # 1001, because cache size is 1000 and reserved_until is 1001
drop sequence s;
--8<---------------cut here---------------end--------------->8---
This is a peculiar behaviour or a bug depending on how you see it,
whether you consider the alter action as sort of a "reset" similar to
server restart, and whether a "reset" like server restart should cause
the sequence to skip all values before the next not cached
value.
But it becomes worse when we throw in as <type> , because now it may
report error when the cache size is bigger than the type:
--8<---------------cut here---------------start------------->8---
create sequence s as tinyint;
select next value for s;
alter sequence s maxvalue 63;
select next value for s; # error: ER_SEQUENCE_RUN_OUT
drop sequence s;
--8<---------------cut here---------------end--------------->8---
A quick workaround would be having the default cache size depending on
the type, but I'm not sure if it is a good idea.
I think we need a consensus whether the reset-skip behaviour is (still)
ok. If we want to continue with this behaviour, then I suppose this
workaround may be ok. It will fix the error in the previous testcase but
still report error in the following case but we can say it is intended
given the cache size is too big after the alter which "resets" the
sequence.
--8<---------------cut here---------------start------------->8---
create sequence s;
select next value for s;
alter sequence s maxvalue 500;
select next value for s; # error: ER_SEQUENCE_RUN_OUT
drop sequence s;
--8<---------------cut here---------------end--------------->8---
If we want to make the sequence increment continuously without skipping,
then bigger changes are needed.
What do you think?
P.S. While testing with the above, I found something buggy in the
existing sequence implementation which I may also need to fix:
--8<---------------cut here---------------start------------->8---
create sequence s maxvalue 500;
select next value for s; # 1
alter sequence s cycle;
select next value for s; # still 1 (?!)
drop sequence s;
--8<---------------cut here---------------end--------------->8---
Best,
Yuchen
Follow ups
References