[Tarantool-patches] [PATCH] Add options for upgrade testing

Sergey Bronnikov sergeyb at tarantool.org
Fri Nov 20 22:27:23 MSK 2020


Hi, Alexander!

On 20.11.2020 01:58, Alexander Turenko wrote:
> Not a review.
>
> On Wed, Nov 18, 2020 at 12:30:49PM +0300, sergeyb at tarantool.org wrote:
>> From: Sergey Bronnikov <sergeyb at tarantool.org>
>>
>> Option '--snapshot' specifies a path to snapshot that will be loaded in
>> Tarantool before testing.
>>
>> Option '--disable-schema-upgrade' allows to skip execution
>> of Tarantool upgrade script using error injection mechanism.
>>
>> Closes https://github.com/tarantool/tarantool/issues/4801
> This change cannot close the issue in tarantool. We need to look at all
> variants of bootstrap snapshot we had over the history of supported
> release branches (and maybe a bit deeper, down to some 1.9) and manifest
> compatibility matrix between given data layouts and runtimes ([1]). Once
> the support matrix will be defined, we should catch all test fails,
> analyze and categorize them. File issue for real problems, exclude
> irrelevant fails. Setup CI. It is not a small task.

You are right. Earlier we discussed that with you and new ticket has 
been submitted [1].

1. https://github.com/tarantool/tarantool/issues/5527

>
> [1]: https://github.com/tarantool/doc/issues/836
>
> I think we should file an issue to test-run, solve it within our
> planning iteration and estimate #4801 for the next iteration.
>
> While I thinking around the task, the idea how to solve the problem with
> replication tests comes to me. I know, know. I should have to say it
> before you start the task, but I don't know everything in advance,
> learning together with you and do my best.

Discussed it verbally and submitted two tickets:

- https://github.com/tarantool/tarantool/issues/5540

- https://github.com/tarantool/test-run/issues/239

>
> Back to the idea. We can implement an option or errinj to pass a path to
> bootstrap snapshot to tarantool and feed it instead the built-in
> bootstrap.snap. This way we'll go to the right branch here:
>
>   [src/box/box.cc; box_cfg_xc()]
>
>   | if (checkpoint != NULL) {
>   |         /* Recover the instance from the local directory */
>   |         local_recovery(&instance_uuid, &replicaset_uuid,
>   |                        &checkpoint->vclock);
>   | } else {
>   |         /* Bootstrap a new instance */
>   |         bootstrap(&instance_uuid, &replicaset_uuid,
>   |                   &is_bootstrap_leader);
>   | }
>
> And so will land here:
>
>   [src/box/memtx_engine.c; memtx_engine_bootstrap()]
>
>   | /* Recover from bootstrap.snap */
>   | say_info("initializing an empty data directory");
>   | struct xlog_cursor cursor;
>   | if (xlog_cursor_openmem(&cursor, (const char *)bootstrap_bin,
>   |                         sizeof(bootstrap_bin), "bootstrap") < 0)
>   |         return -1;
>
> It is the place, where we should give our custom snapshot instead of
> `bootstrap_bin` (which contains src/box/bootstrap.snap content).
>
> I would call the test-run option that feeds a snapshot to tarantool this
> way --bootstrap instead of --snapshot to don't confuse the local
> recovery process with bootstrapping from an empty directory.

Updated in a branch:

--- a/lib/options.py
+++ b/lib/options.py
@@ -210,17 +210,17 @@ class Options:
                  Default: false.""")

          parser.add_argument(
-                "--snapshot",
+                "--bootstrap",
                  dest='snapshot_path',
-                help="""Path to a Tarantool snapshot that will be
-                loaded before testing.""")
+                help="""Path to snapshot that will be used to boostrap
+                Tarantool before testing.""")

          parser.add_argument(
                  "--disable-schema-upgrade",
                  dest='disable_schema_upgrade',
                  action="store_true",
                  default=False,
-                help="""Disable schema upgrade on testing with 
snapshots.""")
+                help="""Disable schema upgrade on testing with 
bootstrap snapshots.""")

          # XXX: We can use parser.parse_intermixed_args() on
          # Python 3.7 to understand commands like
@@ -242,7 +242,7 @@ class Options:

          snapshot_path = getattr(self.args, 'snapshot_path', '')
          if self.args.disable_schema_upgrade and not snapshot_path:
-            color_stdout("\nOption --disable-schema-upgrade requires 
--snapshot\n",
+            color_stdout("\nOption --disable-schema-upgrade requires 
--boostrap\n",
                           schema='error')
              check_error = True

>
> Let's discuss tasks, planning, worthiness of eating a pie step-by-step
> voicely.


More information about the Tarantool-patches mailing list