From d4213e067dfff60c45347a90dae85748b20702d8 Mon Sep 17 00:00:00 2001
From: Vladimir Davydov <vdavydov@tarantool.org>
Date: Mon, 7 Aug 2023 14:06:03 +0300
Subject: [PATCH] memtx: assert that space is not NULL in
 index_read_view_create

This should suppress the following coverity issues:

https://scan7.scan.coverity.com/reports.htm#v39198/p13437/fileInstanceId=146712118&defectInstanceId=18978766&mergedDefectId=1563095
https://scan7.scan.coverity.com/reports.htm#v39198/p13437/fileInstanceId=146712113&defectInstanceId=18978750&mergedDefectId=1563094

While we are at it, let's use space_by_id instead of space_cache_find
because read view creation is a rare operation affecting all spaces so
caching the last space by id doesn't make any sense.

NO_DOC=code health
NO_TEST=code health
NO_CHANGELOG=code health

(cherry picked from commit f2886dd0983c20b840a36ffb3be5585de6476e96)
---
 src/box/memtx_hash.cc | 3 ++-
 src/box/memtx_tree.cc | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/box/memtx_hash.cc b/src/box/memtx_hash.cc
index d8313273e4..e22a17ec38 100644
--- a/src/box/memtx_hash.cc
+++ b/src/box/memtx_hash.cc
@@ -645,7 +645,8 @@ memtx_hash_index_create_read_view(struct index *base)
 		free(rv);
 		return NULL;
 	}
-	struct space *space = space_cache_find(base->def->space_id);
+	struct space *space = space_by_id(base->def->space_id);
+	assert(space != NULL);
 	memtx_tx_snapshot_cleaner_create(&rv->cleaner, space);
 	rv->index = index;
 	index_ref(base);
diff --git a/src/box/memtx_tree.cc b/src/box/memtx_tree.cc
index 3ccf95e514..24a054aff4 100644
--- a/src/box/memtx_tree.cc
+++ b/src/box/memtx_tree.cc
@@ -2008,7 +2008,8 @@ memtx_tree_index_create_read_view(struct index *base)
 		free(rv);
 		return NULL;
 	}
-	struct space *space = space_cache_find(base->def->space_id);
+	struct space *space = space_by_id(base->def->space_id);
+	assert(space != NULL);
 	memtx_tx_snapshot_cleaner_create(&rv->cleaner, space);
 	rv->index = index;
 	index_ref(base);
-- 
GitLab