????????bug ????????????????????



------------------ ???????? ------------------
??????: "Michael Ho (JIRA)"<[email protected]>;
????????: 2019??3??4??(??????) ????8:41
??????: "issues"<[email protected]>;

????: [jira] [Created] (IMPALA-8274) Missing update to index intoprofiles 
vector in Coordinator::BackendState::ApplyExecStatusReport()



Michael Ho created IMPALA-8274:
----------------------------------

             Summary: Missing update to index into profiles vector in 
Coordinator::BackendState::ApplyExecStatusReport()
                 Key: IMPALA-8274
                 URL: https://issues.apache.org/jira/browse/IMPALA-8274
             Project: IMPALA
          Issue Type: Bug
          Components: Distributed Exec
            Reporter: Michael Ho
            Assignee: Michael Ho


{{idx}} isn't updated in case we skip a duplicated or stale duplicated update 
of a fragment instance. As a result, we may end up passing the wrong profile to 
{{instance_stats->Update()}}. This may lead to random crashes in 
{{Coordinator::BackendState::InstanceStats::Update}}.

{noformat}
  int idx = 0;
  const bool has_profile = thrift_profiles.profile_trees.size() > 0;
  TRuntimeProfileTree empty_profile;
  for (const FragmentInstanceExecStatusPB& instance_exec_status :
           backend_exec_status.instance_exec_status()) {
    int64_t report_seq_no = instance_exec_status.report_seq_no();
    int instance_idx = 
GetInstanceIdx(instance_exec_status.fragment_instance_id());
    DCHECK_EQ(instance_stats_map_.count(instance_idx), 1);
    InstanceStats* instance_stats = instance_stats_map_[instance_idx];
    int64_t last_report_seq_no = instance_stats->last_report_seq_no_;
    DCHECK(instance_stats->exec_params_.instance_id ==
        ProtoToQueryId(instance_exec_status.fragment_instance_id()));
    // Ignore duplicate or out-of-order messages.
    if (report_seq_no <= last_report_seq_no) {
      VLOG_QUERY << Substitute("Ignoring stale update for query instance $0 
with "
          "seq no $1", PrintId(instance_stats->exec_params_.instance_id), 
report_seq_no);
      continue; <<--- // XXX bad
    }

    DCHECK(!instance_stats->done_);
    DCHECK(!has_profile || idx < thrift_profiles.profile_trees.size());
    const TRuntimeProfileTree& profile =
        has_profile ? thrift_profiles.profile_trees[idx++] : empty_profile;
    instance_stats->Update(instance_exec_status, profile, exec_summary,
        scan_range_progress);
{noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to