When testing FastEC in crimson, segfault have been seen during
initialization of the EC plugin based on ISA-L:
```
Got SIGSEGV on shard 0
Backtrace:
0# 0x00007F8A34E3FC30 in /lib64/libc.so.6
1# ErasureCodeIsaDefault::prepare() in /usr/lib64/ceph/erasure-code/libec_isa.so
2# ErasureCodeIsa::init(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<s
td::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11:
:basic_string<char, std::char_traits<char>, std::allocator<char> > > > >&, std::ostream*) in /usr/lib64/ceph/erasure-code/libec_isa.so
3# ErasureCodePluginIsa::factory(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char
> \>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std
::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >&, std::shared_ptr<ceph::ErasureCodeIn
terface>*, std::ostream*) in /usr/lib64/ceph/erasure-code/libec_isa.so
```
This commit asserts on the invariant that cache tables, after
initialization, must be available.
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
// setup shared encoding table and coefficients
unsigned char** p_enc_table =
tcache.getEncodingTable(matrixtype, k, m);
+ ceph_assert(p_enc_table);
unsigned char** p_enc_coeff =
tcache.getEncodingCoefficient(matrixtype, k, m);
+ ceph_assert(p_enc_coeff);
if (!*p_enc_coeff) {
dout(10) << "[ cache tables ] creating coeff for k=" <<
} else {
encode_coeff = *p_enc_coeff;
}
+ ceph_assert(encode_coeff);
if (!*p_enc_table) {
dout(10) << "[ cache tables ] creating tables for k=" <<
} else {
encode_tbls = *p_enc_table;
}
+ ceph_assert(encode_tbls);
unsigned memory_lru_cache =
k * (m + k) * 32 * tcache.decoding_tables_lru_length;