Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
KUDU-3248 improve replica selection initialization
Since the original implementation stored the random choice for replica selection integer in a variable that was initialized statically, the corresponding calls to libstdc++/libc++ runtime had been issued before the process called the main() function. That means some SSE4.2-specific instructions might be called since libkudu_client is unconditionally compiled with -msse4.2 flag, and there'd been no chance to call KuduClientBuilder::Build() that would verify the required features are present by calling CheckCPUFlags(). As a result, an attempt to run an application linked with kudu_client library at a machine lacking SSE4.2 support would result in a crash with SIGILL signal and a stack trace like below: #0 0x00007fc4b1b58162 in std::mersenne_twister_engine<...>::_M_gen_rand at include/c++/7.5.0/bits/random.tcc:408 #1 std::mersenne_twister_engine<...>::operator() at include/c++/7.5.0/bits/random.tcc:459 #2 0x00007fc4b1b1d65d in kudu::client::(anonymous namespace)::InitRandomSelectionInt at ../../../../../src/kudu/client/client-internal.cc:196 #3 0x00007fc4b1b1d6ef in __static_initialization_and_destruction_0 at ../../../../../src/kudu/client/client-internal.cc:198 #4 _GLOBAL__sub_I_client_internal.cc(void) at ../../../../../src/kudu/client/client-internal.cc:871 This patch addresses that deficiency, so now instead of unexpectedly crashing, the application would return an error upon at attempt to create an instance of KuduClient object. This is a follow-up to ccbbfb3. Change-Id: I11c2a29ef69a8c97c68330d261fdff64accebb0b Reviewed-on: http://gerrit.cloudera.org:8080/19828 Reviewed-by: Abhishek Chennaka <[email protected]> Reviewed-by: Wenzhe Zhou <[email protected]> Tested-by: Alexey Serbin <[email protected]>
- Loading branch information