The CStringStore class was introduced to support the "overlapping buckets" feature, because overlapping buckets created a need to remember field values for longer than a single bucket. Prior to this we just stored the field values in std::string objects that only existed while a particular bucket was being processed.
Over the years we've had to put effort into optimising the performance of CStringStore. Then the complexity introduced by that optimisation has led to ongoing issues like #2019.
But maybe now that we have deleted the code for the overlapping buckets functionality we can go back to just storing field values for the lifetime of the current bucket in simple std::string objects.
The first step is to audit the code to find out where CStringStore is used and whether there's an obvious reason why it cannot be removed. (We should also be able to dig out the commit where it was originally added from the legacy Prelert git history, which will show how things were done before that.)
The
CStringStoreclass was introduced to support the "overlapping buckets" feature, because overlapping buckets created a need to remember field values for longer than a single bucket. Prior to this we just stored the field values instd::stringobjects that only existed while a particular bucket was being processed.Over the years we've had to put effort into optimising the performance of
CStringStore. Then the complexity introduced by that optimisation has led to ongoing issues like #2019.But maybe now that we have deleted the code for the overlapping buckets functionality we can go back to just storing field values for the lifetime of the current bucket in simple
std::stringobjects.The first step is to audit the code to find out where
CStringStoreis used and whether there's an obvious reason why it cannot be removed. (We should also be able to dig out the commit where it was originally added from the legacy Prelert git history, which will show how things were done before that.)