Dan Hecht has posted comments on this change.

Change subject: IMPALA-1972/IMPALA-3882: [DRAFT] Don't hold 
QueryExecState::lock_ during planning
......................................................................


Patch Set 2:

(9 comments)

http://gerrit.cloudera.org:8080/#/c/6707/2//COMMIT_MSG
Commit Message:

PS2, Line 7: Don't hold QueryExecState::lock_ during planning
let's not actually solve that problem right now. it doesn't seem necessary for 
IMPALA-1972 which is the large pain.

Instead, the other two changes should be sufficient:
- Never block on QES::lock_ while holding the map lock. This breaks the cycle 
that leads to one query blocking another query.
- Don't try to take QES::lock_ from the webserver if the query is still 
planning. This deals with the webserver freezing when metadata loading takes a 
long time.


Line 11:   the locking is the responsibility of the callers.
Yes, but please double check this is safe. From code inspection, I believe it 
is.


Line 18:   set after the ExecState is built.
As stated above, let's not do that.

But please add a short snippet about the webserver change.


Line 22: and run parallel queries.
As we discussed, please see if you can add a test that:
1) Executes a query and simulates getting stuck in planning.
2) Hits the debug webserver. Before this fix, it will hang.
3) Executes a second query. Before this fix, this will also get stuck.


http://gerrit.cloudera.org:8080/#/c/6707/2/be/src/service/impala-beeswax-server.cc
File be/src/service/impala-beeswax-server.cc:

Line 197:   // Convert TResultSetMetadata to Beeswax.ResultsMetadata
Let's take the QES::lock_ here and not do the promise thing.


http://gerrit.cloudera.org:8080/#/c/6707/2/be/src/service/impala-hs2-server.cc
File be/src/service/impala-hs2-server.cc:

Line 741:   // Convert TResultSetMetadata to TGetResultSetMetadataResp
same


http://gerrit.cloudera.org:8080/#/c/6707/2/be/src/service/impala-http-handler.cc
File be/src/service/impala-http-handler.cc:

Line 715:       if (exec_state->query_state() == beeswax::QueryState::CREATED) 
return;
please fill in those details.


http://gerrit.cloudera.org:8080/#/c/6707/2/be/src/service/impala-server.h
File be/src/service/impala-server.h:

PS2, Line 296: Callers are responsible
             :   /// for acquiring QueryExecState::lock_ before performing any 
operations on it.
I think this comment just adds confusion.  It's up to the QueryExecState class 
to explain its synchronization.


http://gerrit.cloudera.org:8080/#/c/6707/2/be/src/service/query-exec-state.h
File be/src/service/query-exec-state.h:

PS2, Line 244: planning_finished_promise_
we won't need that.


-- 
To view, visit http://gerrit.cloudera.org:8080/6707
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: Ie44daa93e3ae4d04d091261f3ec4891caffe8026
Gerrit-PatchSet: 2
Gerrit-Project: Impala-ASF
Gerrit-Branch: master
Gerrit-Owner: Bharath Vissapragada <bhara...@cloudera.com>
Gerrit-Reviewer: Dan Hecht <dhe...@cloudera.com>
Gerrit-Reviewer: Henry Robinson <he...@cloudera.com>
Gerrit-HasComments: Yes

Reply via email to