From c1d2036976f9add960a739f2f8bdfcffcca39f66 Mon Sep 17 00:00:00 2001
From: Aleksey Demakov <ademakov@gmail.com>
Date: Thu, 9 Feb 2012 15:01:36 +0400
Subject: [PATCH] Fix reload configuration problem for setups with gaps in
 arrays.

---
 cfg/tarantool_box_cfg.c       | 3 +++
 test/box/configuration.result | 4 ++++
 test/box/configuration.test   | 3 +--
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/cfg/tarantool_box_cfg.c b/cfg/tarantool_box_cfg.c
index b0d6e2747e..1044259140 100644
--- a/cfg/tarantool_box_cfg.c
+++ b/cfg/tarantool_box_cfg.c
@@ -2005,6 +2005,7 @@ dup_tarantool_cfg(tarantool_cfg* dst, tarantool_cfg* src) {
 		while (src->space[i->idx_name__space] != NULL) {
 			ARRAYALLOC(dst->space, i->idx_name__space + 1, _name__space, 0, 0);
 
+			dst->space[i->idx_name__space]->__confetti_flags = src->space[i->idx_name__space]->__confetti_flags;
 			dst->space[i->idx_name__space]->enabled = src->space[i->idx_name__space]->enabled;
 			dst->space[i->idx_name__space]->cardinality = src->space[i->idx_name__space]->cardinality;
 			dst->space[i->idx_name__space]->estimated_rows = src->space[i->idx_name__space]->estimated_rows;
@@ -2017,6 +2018,7 @@ dup_tarantool_cfg(tarantool_cfg* dst, tarantool_cfg* src) {
 				while (src->space[i->idx_name__space]->index[i->idx_name__space__index] != NULL) {
 					ARRAYALLOC(dst->space[i->idx_name__space]->index, i->idx_name__space__index + 1, _name__space__index, 0, 0);
 
+					dst->space[i->idx_name__space]->index[i->idx_name__space__index]->__confetti_flags = src->space[i->idx_name__space]->index[i->idx_name__space__index]->__confetti_flags;
 					if (dst->space[i->idx_name__space]->index[i->idx_name__space__index]->type) free(dst->space[i->idx_name__space]->index[i->idx_name__space__index]->type);dst->space[i->idx_name__space]->index[i->idx_name__space__index]->type = src->space[i->idx_name__space]->index[i->idx_name__space__index]->type == NULL ? NULL : strdup(src->space[i->idx_name__space]->index[i->idx_name__space__index]->type);
 					if (src->space[i->idx_name__space]->index[i->idx_name__space__index]->type != NULL && dst->space[i->idx_name__space]->index[i->idx_name__space__index]->type == NULL)
 						return CNF_NOMEMORY;
@@ -2030,6 +2032,7 @@ dup_tarantool_cfg(tarantool_cfg* dst, tarantool_cfg* src) {
 						while (src->space[i->idx_name__space]->index[i->idx_name__space__index]->key_field[i->idx_name__space__index__key_field] != NULL) {
 							ARRAYALLOC(dst->space[i->idx_name__space]->index[i->idx_name__space__index]->key_field, i->idx_name__space__index__key_field + 1, _name__space__index__key_field, 0, 0);
 
+							dst->space[i->idx_name__space]->index[i->idx_name__space__index]->key_field[i->idx_name__space__index__key_field]->__confetti_flags = src->space[i->idx_name__space]->index[i->idx_name__space__index]->key_field[i->idx_name__space__index__key_field]->__confetti_flags;
 							dst->space[i->idx_name__space]->index[i->idx_name__space__index]->key_field[i->idx_name__space__index__key_field]->fieldno = src->space[i->idx_name__space]->index[i->idx_name__space__index]->key_field[i->idx_name__space__index__key_field]->fieldno;
 							if (dst->space[i->idx_name__space]->index[i->idx_name__space__index]->key_field[i->idx_name__space__index__key_field]->type) free(dst->space[i->idx_name__space]->index[i->idx_name__space__index]->key_field[i->idx_name__space__index__key_field]->type);dst->space[i->idx_name__space]->index[i->idx_name__space__index]->key_field[i->idx_name__space__index__key_field]->type = src->space[i->idx_name__space]->index[i->idx_name__space__index]->key_field[i->idx_name__space__index__key_field]->type == NULL ? NULL : strdup(src->space[i->idx_name__space]->index[i->idx_name__space__index]->key_field[i->idx_name__space__index__key_field]->type);
 							if (src->space[i->idx_name__space]->index[i->idx_name__space__index]->key_field[i->idx_name__space__index__key_field]->type != NULL && dst->space[i->idx_name__space]->index[i->idx_name__space__index]->key_field[i->idx_name__space__index__key_field]->type == NULL)
diff --git a/test/box/configuration.result b/test/box/configuration.result
index d9cde07982..e84f963d5b 100644
--- a/test/box/configuration.result
+++ b/test/box/configuration.result
@@ -197,6 +197,10 @@ lua box.space[0].enabled
 ---
  - true
 ...
+reload configuration
+---
+ok
+...
 
 #  Test field type conflict in keys
 
diff --git a/test/box/configuration.test b/test/box/configuration.test
index 97356e8737..b1a9ba605e 100644
--- a/test/box/configuration.test
+++ b/test/box/configuration.test
@@ -36,7 +36,6 @@ print """
 """
 # stop current server
 server.stop()
-# start server from config with different boolean represenation
 server.deploy("box/tarantool_bug876541.cfg")
 # check values
 exec admin "lua box.cfg.wal_fsync_delay"
@@ -47,11 +46,11 @@ print """
 """
 # stop current server
 server.stop()
-# start server from config with different boolean represenation
 server.deploy("box/tarantool_bug928413.cfg")
 # check values
 exec admin "lua box.cfg.wal_fsync_delay"
 exec admin "lua box.space[0].enabled"
+exec admin "reload configuration"
 
 print """
 #  Test field type conflict in keys
-- 
GitLab