Tim Armstrong has posted comments on this change. ( http://gerrit.cloudera.org:8080/10744 )
Change subject: IMPALA-1760: Implement shutdown command ...................................................................... Patch Set 8: (30 comments) http://gerrit.cloudera.org:8080/#/c/10744/7//COMMIT_MSG Commit Message: http://gerrit.cloudera.org:8080/#/c/10744/7//COMMIT_MSG@56 PS7, Line 56: Limitations: > I think it would be good to mention that the shutdown cannot be aborted. Ev Agree these are useful to note but this commit message is already out of control. Might be easier to track in JIRA. I wonder if we should rename is_shutting_down to is_quiesced or something like that in the statestore topic if we're going to generalise it later. http://gerrit.cloudera.org:8080/#/c/10744/8//COMMIT_MSG Commit Message: http://gerrit.cloudera.org:8080/#/c/10744/8//COMMIT_MSG@39 PS8, Line 39: which is > how about: which ideally is set to the AC.... Done http://gerrit.cloudera.org:8080/#/c/10744/7/be/src/service/client-request-state.h File be/src/service/client-request-state.h: http://gerrit.cloudera.org:8080/#/c/10744/7/be/src/service/client-request-state.h@a451 PS7, Line 451: > What happened to LOAD DATA? There wasn't an implementation of this function, just cleaned up the unused declaration. http://gerrit.cloudera.org:8080/#/c/10744/6/be/src/service/client-request-state.cc File be/src/service/client-request-state.cc: http://gerrit.cloudera.org:8080/#/c/10744/6/be/src/service/client-request-state.cc@616 PS6, Line 616: > nit:avoids Done http://gerrit.cloudera.org:8080/#/c/10744/7/be/src/service/client-request-state.cc File be/src/service/client-request-state.cc: http://gerrit.cloudera.org:8080/#/c/10744/7/be/src/service/client-request-state.cc@612 PS7, Line 612: avoid > nit: avoids Done http://gerrit.cloudera.org:8080/#/c/10744/6/be/src/service/impala-hs2-server.cc File be/src/service/impala-hs2-server.cc: http://gerrit.cloudera.org:8080/#/c/10744/6/be/src/service/impala-hs2-server.cc@381 PS6, Line 381: HS2_RETURN_IF_ERROR(return_val, CheckNotShuttingDown(), SQLSTATE_GENERAL_ERROR); > we can probably remove the check here since its not starting any new operat That brings up a good point - I was a bit uncertain about what the best thing to do with requests like this. On one hand we could just continue to serve them and then if the client continues to send them at some point the connection will drop and the client will get a socket error or something similar. I thought that it might be better to fail with a clear error earlier so it's more obvious why the operation failed. It may be that there's no perfect solution without better integration with load balancer and clients. http://gerrit.cloudera.org:8080/#/c/10744/6/be/src/service/impala-server.h File be/src/service/impala-server.h: http://gerrit.cloudera.org:8080/#/c/10744/6/be/src/service/impala-server.h@354 PS6, Line 354: otherwi > nit: shutdown_status Done http://gerrit.cloudera.org:8080/#/c/10744/6/be/src/service/impala-server.h@358 PS6, Line 358: > dont mention private vars in public method comments. also at L367 Done http://gerrit.cloudera.org:8080/#/c/10744/6/be/src/service/impala-server.h@361 PS6, Line 361: ft > nit: a Done http://gerrit.cloudera.org:8080/#/c/10744/6/be/src/service/impala-server.h@362 PS6, Line 362: ly. > nit:before Done http://gerrit.cloudera.org:8080/#/c/10744/6/be/src/service/impala-server.cc File be/src/service/impala-server.cc: http://gerrit.cloudera.org:8080/#/c/10744/6/be/src/service/impala-server.cc@212 PS6, Line 212: > nit: long line Done http://gerrit.cloudera.org:8080/#/c/10744/7/be/src/service/impala-server.cc File be/src/service/impala-server.cc: http://gerrit.cloudera.org:8080/#/c/10744/7/be/src/service/impala-server.cc@216 PS7, Line 216: drain > I'd rephrase it as "wait for queries" since they might not even have arrive Done http://gerrit.cloudera.org:8080/#/c/10744/7/be/src/service/impala-server.cc@2328 PS7, Line 2328: while (deadline_val == 0 || deadline_val > absolute_deadline_ms) { > maybe name these "curr_deadline_val" and "new_deadline_val"? or something s Done http://gerrit.cloudera.org:8080/#/c/10744/8/be/src/service/impala-server.cc File be/src/service/impala-server.cc: http://gerrit.cloudera.org:8080/#/c/10744/8/be/src/service/impala-server.cc@1772 PS8, Line 1772: && is_shutting_down == it->second.is_shutting_down) { > maybe mention briefly that is_shutting_down is the only part that can chang Done http://gerrit.cloudera.org:8080/#/c/10744/6/common/thrift/ImpalaInternalService.thrift File common/thrift/ImpalaInternalService.thrift: http://gerrit.cloudera.org:8080/#/c/10744/6/common/thrift/ImpalaInternalService.thrift@865 PS6, Line 865: 5: optional TBloomFilter bloom_filter > not sure if mentioned elsewhere in the code, but maybe we can explain the d This probably isn't the best place to document since it's just a status message. I think I probably need to write a class-level comment in ImpalaServer to explain this holistically. http://gerrit.cloudera.org:8080/#/c/10744/6/common/thrift/ImpalaInternalService.thrift@867 PS6, Line 867: er > nit: deadline not sure how i ended up with that word http://gerrit.cloudera.org:8080/#/c/10744/7/common/thrift/ImpalaInternalService.thrift File common/thrift/ImpalaInternalService.thrift: http://gerrit.cloudera.org:8080/#/c/10744/7/common/thrift/ImpalaInternalService.thrift@881 PS7, Line 881: struct TShutdownStatus { > Why not fold this into the Result RPC below? The motivation was to allow using TShutdownStatus in both the local and remote shutdown paths - see ClientRequestState::ExecShutdownRequest(). On the local path the function returns a Status, so returning a TStatus inside a struct would be confusing. http://gerrit.cloudera.org:8080/#/c/10744/8/common/thrift/ImpalaInternalService.thrift File common/thrift/ImpalaInternalService.thrift: http://gerrit.cloudera.org:8080/#/c/10744/8/common/thrift/ImpalaInternalService.thrift@931 PS8, Line 931: // Called to initiate shutdown of this backend. : TRemoteShutdownResult RemoteShutdown(1:TRemoteShutdownParams params); > Yes, I think if you cherry-pick that patch mentioned above, you should be a Ok, maybe we'll wait to see who wins the race. I don't mind porting, would be good to learn a little bit about the KRPC infrastructure. http://gerrit.cloudera.org:8080/#/c/10744/7/common/thrift/Types.thrift File common/thrift/Types.thrift: http://gerrit.cloudera.org:8080/#/c/10744/7/common/thrift/Types.thrift@104 PS7, Line 104: comment > comment? command? maybe rename to ADMIN_CMD then? Reworded to "function" http://gerrit.cloudera.org:8080/#/c/10744/7/fe/src/main/java/org/apache/impala/analysis/AdminFnStmt.java File fe/src/main/java/org/apache/impala/analysis/AdminFnStmt.java: http://gerrit.cloudera.org:8080/#/c/10744/7/fe/src/main/java/org/apache/impala/analysis/AdminFnStmt.java@95 PS7, Line 95: * Supports optionally specify the backend and the deadline, either shutdown(), > nit: grammar Done http://gerrit.cloudera.org:8080/#/c/10744/7/fe/src/main/java/org/apache/impala/analysis/AdminFnStmt.java@128 PS7, Line 128: private Pair<Expr, Expr> getShutdownArgs() throws AnalysisException { > I think this might be more readable with a loop, parsing each expr and sett I had an earlier iteration of the code that did something like that and I felt it was harder to follow when the logic to set members was interleaved with this logic. http://gerrit.cloudera.org:8080/#/c/10744/7/fe/src/main/java/org/apache/impala/analysis/Expr.java File fe/src/main/java/org/apache/impala/analysis/Expr.java: http://gerrit.cloudera.org:8080/#/c/10744/7/fe/src/main/java/org/apache/impala/analysis/Expr.java@1546 PS7, Line 1546: * Analyzes and evaluates expression to a non-negative integral value, returned as a long. > nit: long line Done http://gerrit.cloudera.org:8080/#/c/10744/8/fe/src/main/java/org/apache/impala/analysis/Expr.java File fe/src/main/java/org/apache/impala/analysis/Expr.java: http://gerrit.cloudera.org:8080/#/c/10744/8/fe/src/main/java/org/apache/impala/analysis/Expr.java@1546 PS8, Line 1546: ong > nit:long line Done http://gerrit.cloudera.org:8080/#/c/10744/7/fe/src/test/java/org/apache/impala/analysis/ParserTest.java File fe/src/test/java/org/apache/impala/analysis/ParserTest.java: http://gerrit.cloudera.org:8080/#/c/10744/7/fe/src/test/java/org/apache/impala/analysis/ParserTest.java@3807 PS7, Line 3807: ParsesOk(":foobar()"); > Can you add some with arguments? Done http://gerrit.cloudera.org:8080/#/c/10744/7/fe/src/test/java/org/apache/impala/analysis/ParserTest.java@3831 PS7, Line 3831: ParserError(": shutdown() :other()"); > How about ": shutdown('hostA'); : shutdown('hostB'); ? Done http://gerrit.cloudera.org:8080/#/c/10744/7/tests/custom_cluster/test_restart_services.py File tests/custom_cluster/test_restart_services.py: http://gerrit.cloudera.org:8080/#/c/10744/7/tests/custom_cluster/test_restart_services.py@108 PS7, Line 108: """Test that idle impalads shut down in a timely manner after the quiesce period > nit: This comment seems to conflict with the comment in L113. Fixed in next PS http://gerrit.cloudera.org:8080/#/c/10744/7/tests/custom_cluster/test_restart_services.py@115 PS7, Line 115: e6c00ca5cd67b567eb96c6ecfb26f05 > nit: would this fit in a single line with a shorter hostname? Probably, the idea here was that an sha1 hash was extremely unlikely to be a valid hostname and making it shorter increases the odds of a collision. Not sure if there's a better way to pick a hostname that's guaranteed to be invalid. http://gerrit.cloudera.org:8080/#/c/10744/7/tests/custom_cluster/test_restart_services.py@238 PS7, Line 238: conf_overlay={"NUM_SCANNER_THREADS": "1"}, close_session=False) > Could you pass this as a default QO to the impalad options? Done http://gerrit.cloudera.org:8080/#/c/10744/7/tests/custom_cluster/test_restart_services.py@271 PS7, Line 271: self.execute_statement("select 1", None, TCLIService.TStatusCode.ERROR_STATUS, : SHUTDOWN_ERROR_PREFIX) > This doesn't seem to depend on the local function above and I couldn't see Done http://gerrit.cloudera.org:8080/#/c/10744/7/tests/custom_cluster/test_restart_services.py@278 PS7, Line 278: check_hs2_shutdown_error(self.hs2_client.GetTypeInfo( : TCLIService.TGetTypeInfoReq(self.session_handle))) > duplicate of above? Done -- To view, visit http://gerrit.cloudera.org:8080/10744 To unsubscribe, visit http://gerrit.cloudera.org:8080/settings Gerrit-Project: Impala-ASF Gerrit-Branch: master Gerrit-MessageType: comment Gerrit-Change-Id: I4d5606ccfec84db4482c1e7f0f198103aad141a0 Gerrit-Change-Number: 10744 Gerrit-PatchSet: 8 Gerrit-Owner: Tim Armstrong <tarmstr...@cloudera.com> Gerrit-Reviewer: Bikramjeet Vig <bikramjeet....@cloudera.com> Gerrit-Reviewer: Dan Hecht <dhe...@cloudera.com> Gerrit-Reviewer: Fredy Wijaya <fwij...@cloudera.com> Gerrit-Reviewer: Lars Volker <l...@cloudera.com> Gerrit-Reviewer: Michael Ho <k...@cloudera.com> Gerrit-Reviewer: Tim Armstrong <tarmstr...@cloudera.com> Gerrit-Comment-Date: Thu, 05 Jul 2018 05:43:37 +0000 Gerrit-HasComments: Yes