Tim Armstrong has posted comments on this change. ( 
http://gerrit.cloudera.org:8080/8303 )

Change subject: IMPALA-1575: Part 1: eagerly release query exec resources
......................................................................


Patch Set 11: Code-Review+1

(4 comments)

Thanks for the comments - I had to think hard about each one of them.

http://gerrit.cloudera.org:8080/#/c/8303/10/be/src/runtime/coordinator.cc
File be/src/runtime/coordinator.cc:

http://gerrit.cloudera.org:8080/#/c/8303/10/be/src/runtime/coordinator.cc@1095
PS10, Line 1095: query_state_ != nullptr)
> How would query_state_ be NULL if the coordinator hasn't release its refere
Your reasoning appears to be correct. My tendency is to keep the null check 
though - usually unnecessary checks like this just add confusion but on cleanup 
logic I find it's a good practice to write defensive code like this since code 
tends to change, it's hard to reason about the different possible failure modes 
and test coverage isn't always complete.


I'm open to removing it though, I think it would need a comment to explain why 
it's valid though.


http://gerrit.cloudera.org:8080/#/c/8303/10/be/src/runtime/mem-tracker.cc
File be/src/runtime/mem-tracker.cc:

http://gerrit.cloudera.org:8080/#/c/8303/10/be/src/runtime/mem-tracker.cc@322
PS10, Line 322: while (tracker != nullptr && !tracker->is_query_mem_tracker_) {
              :     tracker = tracker->parent_;
              :   }
> What's the thread safety story here? What if a any one of the trackers touc
The parent_ pointer is never modified so the only race possible is if 
intervening MemTrackers are destroyed. This is not possible since the 
MemTracker hierarchy is now all torn down at once when the query ends.

The thing about the parent pointer isn't documented anywhere so I made the 
pointer const and added a comment.


http://gerrit.cloudera.org:8080/#/c/8303/10/be/src/runtime/query-state.cc
File be/src/runtime/query-state.cc:

http://gerrit.cloudera.org:8080/#/c/8303/10/be/src/runtime/query-state.cc@96
PS10, Line 96:   if (query_mem_tracker_ != nullptr) {
             :     // Disconnect the query MemTracker hierarchy from the global 
hierarchy. After this
             :     // point nothing must touch this query's MemTracker and all 
tracked memory associated
             :     // with the query must be released. The whole query subtree 
of MemTrackers can
             :     // therefore be safely destroyed.
             :
> I'm still not clear why this moved from ReleaseExecResources() to ~QuerySta
It happens at the same time as before - previously ReleaseResources() ran 
immediately before the destructor. After this patch everything in 
ReleaseExecResources() can happen much sooner before the destructor. However 
this one action of disconnecting the query MemTracker couldn't be moved earlier.

I tried to improve the comment a bit to emphasise that this was disconnecting a 
control structure.

I also thought about making a separate Close() method that did this kind of 
teardown, but it seemed unnecessary given that it would run immediately before 
the destructor. I.e.

  query_state->Close();
  delete query_state


http://gerrit.cloudera.org:8080/#/c/8303/10/be/src/runtime/query-state.cc@135
PS10, Line 135:     initial_reservations_->Init(query_id(), 
rpc_params.min_reservation_bytes));
> Can we move this to the start of Init() and make L95 a DCHECK?
I like the idea but after trying it out I think it's significantly complicated 
by the fact that the coordinator grabs a resource refcount without calling 
Init() - in some cases when Init() fails the refcount is already non-zero so it 
wouldn't be valid to release the resources yet.



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

Gerrit-Project: Impala-ASF
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: I41ff374b0403f10a145f7fee9b3145953ee32341
Gerrit-Change-Number: 8303
Gerrit-PatchSet: 11
Gerrit-Owner: Tim Armstrong <tarmstr...@cloudera.com>
Gerrit-Reviewer: Dan Hecht <dhe...@cloudera.com>
Gerrit-Reviewer: Joe McDonnell <joemcdonn...@cloudera.com>
Gerrit-Reviewer: Sailesh Mukil <sail...@cloudera.com>
Gerrit-Reviewer: Tim Armstrong <tarmstr...@cloudera.com>
Gerrit-Comment-Date: Thu, 26 Oct 2017 21:59:07 +0000
Gerrit-HasComments: Yes

Reply via email to