As part of the charset support, a call to MY_INIT() was added at the
initialization of the above processes. This call initializes the MySQL
thread environment required by the charset library. However, the
accompanying my_end() call required to terminate this thread environment
was not added at the termination of these process, hence leaking
resources. As a fix, we move the MY_INIT() calls to the Child()
functions of these services and also add the missing my_end() call.
* Add check for simd acrh support
* Updates
* More polite and detailed error messages
* Updates
* Always true to conditional
Co-authored-by: Leonid Fedorov <leonid.fedorov@mariadb.com>
* MCOL-4560 remove unused xml entries and code that references it.
There is reader code and variables for some of these settings, but nobody uses them.
EM and PP are most resource-hungry runtimes.
The merge enables to control their cummulative
resource consumption, thread allocation + enables
zero-copy data exchange b/w local EM and PP facilities.
* Fix clang warnings
* Remove vim tab guides
* initialize variables
* 'strncpy' output truncated before terminating nul copying as many bytes from a string as its length
* Fix ISO C++17 does not allow 'register' storage class specifier for outdated bison
* chars are unsigned on ARM, having if (ival < 0) always false
* chars are unsigned by default on ARM and comparison with -1 if always true
mcsconfig.h and my_config.h have the following
pre-processor definitions:
1. Conflicting definitions coming from the standard cmake definitions:
- PACKAGE
- PACKAGE_BUGREPORT
- PACKAGE_NAME
- PACKAGE_STRING
- PACKAGE_TARNAME
- PACKAGE_VERSION
- VERSION
2. Conflicting definitions of other kinds:
- HAVE_STRTOLL - this is a dirt in MariaDB headers.
Should be fixed in the server code. my_config.h erroneously
performs "#define HAVE_STRTOLL" instead of "#define HAVE_STRTOLL 1".
in some cases. The former is not CMake compatible style. The latter is.
3. Non-conflicting definitions:
Otherwise, mcsconfig.h and my_config.h should be mutually compatible,
because both are generated by cmake on the same host machine. So
they should have exactly equal definitions like "HAVE_XXX", "SIZEOF_XXX", etc.
Observations:
- It's OK to include both mcsconfig.h and my_config.h providing that we
suppress duplicate definition of the above conflicting types #1 and #2.
- There is no a need to suppress duplicate definitions mentioned in #3,
as they are compatible!
- my_sys.h and m_ctype.h must always follow a CMake configuation header,
either my_config.h or mcsconfig.h (or both).
They must never be included without any preceeding configuration header.
This change make sure that we resolve conflicts by:
- either disallowing inclusion of mcsconfig.h and my_config.h
at the same time
- or by hiding conflicting definitions #1 and #2
(with their later restoring).
- also, by making sure that my_sys.h and m_ctype.h always follow
a CMake configuration file.
Details:
- idb_mysql.h can now only be included only after my_config.h
An attempt to use idb_mysql.h with mcsconfig.h instead of
my_config.h is caught by the "#error" preprocessor directive.
- mariadb_my_sys.h can now be only included after mcsconfig.h.
An attempt to use mariadb_my_sys.h without mcscofig.h
(e.g. with my_config.h) is also caught by "#error".
- collation.h now can now be included in two ways.
It now has the following effective structure:
#if defined(PREFER_MY_CONFIG_H) && defined(MY_CONFIG_H)
// Remember current conflicting definitions on the preprocessor stack
// Undefine current conflicting definitions
#endif
#include "mcsconfig.h"
#include "m_ctype.h"
#if defined(PREFER_MY_CONFIG_H) && defined(MY_CONFIG_H)
# Restore conflicting definitions from the preprocessor stack
#endif
and can be included as follows:
a. using only mcsconfig.h as a configuration header:
// my_config.h must not be included so far
#include "collation.h"
b. using my_config.h as the first included configuration file:
#define PREFER_MY_CONFIG_H // Force conflict resolution
#include "my_config.h" // can be included directly or indirectly
...
#include "collation.h"
Other changes:
- Adding helper header files
utils/common/mcsconfig_conflicting_defs_remember.h
utils/common/mcsconfig_conflicting_defs_restore.h
utils/common/mcsconfig_conflicting_defs_undef.h
to perform conflict resolution easier.
- Removing `#include "collation.h"` from a number of files,
as it's automatically included from rowgroup.h.
- Removing redundant `#include "utils_utf8.h"`.
This change is not directly related to the problem being fixed,
but it's nice to remove redundant directives for both collation.h
and utils_utf8.h from all the files that do not really need them.
(this change could probably have gone as a separate commit)
- Changing my_init() to MY_INIT(argv[0]) in the MCS services sources.
After the fix of the complitation failure it appeared that ColumnStore
services compiled with the debug build crash due to recent changes in
safemalloc. The crash happened in strcmp() with `my_progname` as an argument
(where my_progname is a mysys global variable). This problem should
probably be fixed on the server side as well to avoid passing NULL.
But, the majority of MariaDB executable programs also use MY_INIT(argv[0])
rather than my_init(). So let's make MCS do like the other programs do.
Squashed commit of the following:
commit fe4cc375faf1588e30471062f78403e81229cd02
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Fri Nov 1 13:38:11 2019 -0400
Added some code comments to the new join code.
commit a7a82d093be4db3dfb44d33e4f514fd104b25f71
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Fri Nov 1 13:17:47 2019 -0400
Fixed an error down a path I think is unused.
commit 4e6c7c266a9aefd54c384ae2b466645770c81a5d
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Fri Nov 1 13:12:12 2019 -0400
std::atomic doesn't exist in C7, -> boost::atomic.
commit ed0996c3f4548fff0e19d43852d429ada1a72510
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Wed Oct 16 12:47:32 2019 -0500
Addition to the previous fix (join dependency projection).
commit 97bb806be9211e4688893460437f539c46f3796f
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Tue Oct 15 15:22:09 2019 -0500
Found and fixed a bad mem access, which may have been there for 8 years.
commit d8b0432d2abd70f28de5276daad758c494e4b04b
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Tue Oct 15 14:04:48 2019 -0500
Minor optimization in some code I happened to look at.
commit b6ec8204bf71670c7a8882464289e700aa5f7e33
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Tue Oct 15 14:04:11 2019 -0500
Fixed a compiler warning.
commit 0bf3e5218f71d92460ddc88090e3af77ecf28c35
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Tue Oct 15 10:11:09 2019 -0500
Undid part of the previous commit.
commit 5dfa1d23980e245c77c1644015b553aa4bcdf908
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Mon Oct 14 18:00:21 2019 -0500
Proofread the diff vs base, added some comments, removed some debugging stuff.
commit 411fd955ebbae97ddab210a7b17fe5708538001d
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Fri Oct 11 13:55:39 2019 -0500
If a dev build (SKIP_OAM_INIT), made postConfigure exit before trying
to start the system, because that won't work.
commit 634b1b8a7340b55fcaee045fd6d00b3e3a9269fa
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Mon Sep 30 14:55:45 2019 -0500
Reduced crit section of BPP::addToJoiner a little.
commit 31f30c64dd95942f2c7a247cc81feaa5933c1a07
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Wed Sep 18 11:09:27 2019 -0500
Checkpointing. make the add joiner stuff free tmp mem quickly.
commit 9b7e788690546af7ddc4c921a0ab441ee9a8df02
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Wed Sep 18 10:38:57 2019 -0500
Checkpoint. Removed tmp hardcoding of bucket count.
commit fda4d8b7fb30d0431dc15e473042abb3d8121b19
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Wed Sep 18 10:20:09 2019 -0500
Checkpoint. Adjusted unproductive loop wait time.
commit 7b9a67df7d192f240e9e558e6e66c7aa9f1e8687
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Wed Sep 18 10:10:43 2019 -0500
Checkpointing add'l optimizations.
If we promote bpp::processorThreads / bucket count to a power of 2, we can
use a bitmask instead of a mod operation to decide a bucket.
Also, boosted utilization by not waiting for a bucket lock to become free.
There are likely more gains to be had there with a smarter strategy.
Maybe have each thread generate a random bucket access pattern to reduce
chance of collision. TBD.
commit abe7dab8661b5120f6ee268abc005dd66cd643e2
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Tue Sep 17 16:15:51 2019 -0500
Multithreaded PM hash table construction likely works here.
A couple more fixes.
- missed a mod after a hash in one place.
- Made the PoolAllocator thread safe (small degree of performance hit
there in threaded env). May need to circle back to the table
construction code to eliminate contention for the allocators instead.
commit ab308762fbd873dbf246a6d1574223087cd0d5f6
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Tue Sep 17 12:14:14 2019 -0500
Checkpointing. Did some initial testing, fixed a couple things.
Not done testing yet.
commit 3b161d74fa859edb8b5ba84bb905e586ac0586e6
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Tue Sep 17 11:24:55 2019 -0500
Checkpointing. First cut of multithreaded PM join table building.
Builds but is untested.
commit cb7e6e1c2761fc6c33b3b1c6b6cda488d7792bca
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Mon Sep 16 13:03:50 2019 -0500
Increase the STLPoolAllocator window size to reduce destruction time.
commit b0ddaaae71a0a4959ad15c87579d85ed88e17e1f
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Fri Sep 13 11:52:51 2019 -0500
Fixed a bug preventing parallel table loading. works now.
commit b87039604e312c1ddb88cdb226228b1c3addf018
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Thu Sep 12 22:04:15 2019 -0500
Checkpointing some experimental changes.
- Made the allocator type used by PM joins the STLPoolAllocator
- Changed the default chunk size used by STLPoolAlloc based on a few test
runs
- Made BPP-JL interleave the PM join data by join # to take advantage
of new locking env on PM.
- While I was at it, fixed MCOL-1758.
commit fd4b09cc383d2b96959a8e5ca490c940bacb3d37
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Thu Sep 12 16:03:30 2019 -0500
Speculative change. Row estimator was stopping at 20 extents.
Removed that limitation.
commit 7dcdd5b5455f9ac06121dd3cf1ba722150f3ee56
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Thu Sep 5 09:10:28 2019 -0500
Inlined some hot simpleallocator fcns.
commit 6d84daceecc5499f6286cf3468c118b8b1d28d8f
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Wed Sep 4 17:02:29 2019 -0500
Some optimizations to PM hash table creation.
- made locks more granular.
- reduced logic per iteration when adding elements.
commit b20bf54ed97c5a0a88d414a4dd844a0afc2e27f3
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Wed Sep 4 15:32:32 2019 -0500
Reduced granularity of djLock in PrimProc.
commit 6273a8f3c4c62b87ef91c77a829033426e38e4d4
Author: Patrick LeBlanc <patrick.leblanc@mariadb.com>
Date: Wed Sep 4 14:45:58 2019 -0500
Added a timer to PM hash table construction
signal USR1 will print cumulative wall time to stdout & reset the timer.
Instead of a seperate param for cache size, we decided
to allow an override of the NumBlocksPct param instead.
If NumBlocksPct ends in an 'm' or a 'g', it will be interpreted
as megabytes or gigabytes instead of a %age.