Skip to content

Commit

Permalink
fix a memory bug
Browse files Browse the repository at this point in the history
  • Loading branch information
wraymo committed Dec 18, 2023
1 parent 2b72d5b commit 40754e9
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 42 deletions.
19 changes: 12 additions & 7 deletions components/core/src/Grep.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -487,17 +487,17 @@ SubQueryMatchabilityResult generate_logtypes_and_vars_for_subquery(
return SubQueryMatchabilityResult::MayMatch;
}

bool Grep::process_raw_query(
std::optional<Query> Grep::process_raw_query(
Archive const& archive,
string const& search_string,
epochtime_t search_begin_ts,
epochtime_t search_end_ts,
bool ignore_case,
Query& query,
log_surgeon::lexers::ByteLexer& forward_lexer,
log_surgeon::lexers::ByteLexer& reverse_lexer,
bool use_heuristic
) {
Query query;
// Set properties which require no processing
query.set_search_begin_timestamp(search_begin_ts);
query.set_search_end_timestamp(search_end_ts);
Expand Down Expand Up @@ -558,11 +558,11 @@ bool Grep::process_raw_query(
// - (token1 as logtype) (token2 as var)
// - (token1 as var) (token2 as logtype)
// - (token1 as var) (token2 as var)
SubQuery sub_query;
std::vector<SubQuery> sub_queries;
string logtype;
bool type_of_one_token_changed = true;
while (type_of_one_token_changed) {
sub_query.clear();
SubQuery sub_query;

// Compute logtypes and variables for query
auto matchability = generate_logtypes_and_vars_for_subquery(
Expand All @@ -579,9 +579,9 @@ bool Grep::process_raw_query(

// Since other sub-queries will be superceded by this one, we can stop processing
// now
return true;
return query;
case SubQueryMatchabilityResult::MayMatch:
query.add_sub_query(sub_query);
sub_queries.push_back(std::move(sub_query));
break;
case SubQueryMatchabilityResult::WontMatch:
default:
Expand All @@ -599,7 +599,12 @@ bool Grep::process_raw_query(
}
}

return query.contains_sub_queries();
if (sub_queries.empty()) {
return std::nullopt;
}

query.add_sub_queries(sub_queries);
return query;
}

bool Grep::get_bounds_of_next_potential_var(
Expand Down
3 changes: 1 addition & 2 deletions components/core/src/Grep.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,12 @@ class Grep {
* @param use_heuristic
* @return true if query may match messages, false otherwise
*/
static bool process_raw_query(
static std::optional<Query> process_raw_query(
streaming_archive::reader::Archive const& archive,
std::string const& search_string,
epochtime_t search_begin_ts,
epochtime_t search_end_ts,
bool ignore_case,
Query& query,
log_surgeon::lexers::ByteLexer& forward_lexer,
log_surgeon::lexers::ByteLexer& reverse_lexer,
bool use_heuristic
Expand Down
12 changes: 7 additions & 5 deletions components/core/src/Query.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -176,12 +176,14 @@ void Query::set_search_string(string const& search_string) {
m_search_string_matches_all = (m_search_string.empty() || "*" == m_search_string);
}

void Query::add_sub_query(SubQuery const& sub_query) {
m_sub_queries.push_back(sub_query);
void Query::add_sub_queries(std::vector<SubQuery>& sub_queries) {
m_sub_queries = std::move(sub_queries);

// Add to relevant sub-queries if necessary
if (sub_query.get_ids_of_matching_segments().count(m_prev_segment_id)) {
m_relevant_sub_queries.push_back(&m_sub_queries.back());
for (auto& sub_query : m_sub_queries) {
// Add to relevant sub-queries if necessary
if (sub_query.get_ids_of_matching_segments().count(m_prev_segment_id)) {
m_relevant_sub_queries.push_back(&m_sub_queries.back());
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion components/core/src/Query.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ class Query {
void set_ignore_case(bool ignore_case) { m_ignore_case = ignore_case; }

void set_search_string(std::string const& search_string);
void add_sub_query(SubQuery const& sub_query);
void add_sub_queries(std::vector<SubQuery>& sub_query);
void clear_sub_queries();
/**
* Populates the set of relevant sub-queries with only those that match the given segment
Expand Down
25 changes: 12 additions & 13 deletions components/core/src/clg/clg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -206,19 +206,18 @@ static bool search(
std::set<segment_id_t> ids_of_segments_to_search;
bool is_superseding_query = false;
for (auto const& search_string : search_strings) {
Query query;
if (Grep::process_raw_query(
archive,
search_string,
search_begin_ts,
search_end_ts,
command_line_args.ignore_case(),
query,
forward_lexer,
reverse_lexer,
use_heuristic
))
{
std::optional<Query> query_result = Grep::process_raw_query(
archive,
search_string,
search_begin_ts,
search_end_ts,
command_line_args.ignore_case(),
forward_lexer,
reverse_lexer,
use_heuristic
);
if (query_result) {
Query& query = query_result.value();
no_queries_match = false;

if (query.contains_sub_queries() == false) {
Expand Down
26 changes: 12 additions & 14 deletions components/core/src/clo/clo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -260,23 +260,21 @@ static bool search_archive(
auto search_begin_ts = command_line_args.get_search_begin_ts();
auto search_end_ts = command_line_args.get_search_end_ts();

Query query;
if (false
== Grep::process_raw_query(
archive_reader,
command_line_args.get_search_string(),
search_begin_ts,
search_end_ts,
command_line_args.ignore_case(),
query,
*forward_lexer,
*reverse_lexer,
use_heuristic
))
{
std::optional<Query> query_result = Grep::process_raw_query(
archive_reader,
command_line_args.get_search_string(),
search_begin_ts,
search_end_ts,
command_line_args.ignore_case(),
*forward_lexer,
*reverse_lexer,
use_heuristic
);
if (query_result) {
return true;
}

Query& query = query_result.value();
// Get all segments potentially containing query results
std::set<segment_id_t> ids_of_segments_to_search;
for (auto& sub_query : query.get_sub_queries()) {
Expand Down

0 comments on commit 40754e9

Please sign in to comment.