[Tarantool-patches] [PATCH 2/2] vinyl: clean-up read views if *_build_history() fails

Nikita Pettik korablev at tarantool.org
Sat Apr 11 00:45:09 MSK 2020


On 10 Apr 15:47, Nikita Pettik wrote:

I've also found that vy_read_view_merge() can fail as well during
processing array of read views. Thus, we should clean-up unprocessed
read views as well. Diff:

diff --git a/src/box/vy_write_iterator.c b/src/box/vy_write_iterator.c
index 7d8c60d73..165b422fd 100644
--- a/src/box/vy_write_iterator.c
+++ b/src/box/vy_write_iterator.c
@@ -986,8 +986,11 @@ vy_write_iterator_build_read_views(struct vy_write_iterator *stream, int *count)
                if (rv->history == NULL)
                        continue;
                if (vy_read_view_merge(stream, hint, rv,
-                                      is_first_insert) != 0)
+                                      is_first_insert) != 0) {
+                       while (rv >= &stream->read_views[0]) {
+                               rv->history = NULL;
+                               rv--;
+                       }
                        goto error;
+               }
                assert(rv->history == NULL);
                if (rv->tuple == NULL)
                        continue;



More information about the Tarantool-patches mailing list