You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by ta...@apache.org on 2018/03/28 17:19:15 UTC

[1/3] impala git commit: IMPALA-6699: Fix DST end time for Australian time zones

Repository: impala
Updated Branches:
  refs/heads/2.x b3ab27dc2 -> 9f31390c6


IMPALA-6699: Fix DST end time for Australian time zones

In Australian time zones where Daylight Saving Time is used (except
LHDT) DST should end at 3am on the first Sunday of April when the
clock is set back to 2am. However, the current time zone DB contains
wrong DST end time for them. This fix sets the DST end time to 3am
for the mentioned time zones.

Change-Id: I461cd4a9057dfebfe8dd85b568cba4f1e87ad215
Reviewed-on: http://gerrit.cloudera.org:8080/9724
Reviewed-by: Tim Armstrong <ta...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/720a6541
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/720a6541
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/720a6541

Branch: refs/heads/2.x
Commit: 720a6541aed3f76bc95008c9c3f524bf5fa685b7
Parents: b3ab27d
Author: Gabor Kaszab <ga...@cloudera.com>
Authored: Mon Mar 19 15:28:36 2018 +0100
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Wed Mar 28 03:55:45 2018 +0000

----------------------------------------------------------------------
 be/src/exprs/expr-test.cc   | 47 ++++++++++++++++++++++++++++++++++++++++
 be/src/exprs/timezone_db.cc | 28 ++++++++++++------------
 2 files changed, 61 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/720a6541/be/src/exprs/expr-test.cc
----------------------------------------------------------------------
diff --git a/be/src/exprs/expr-test.cc b/be/src/exprs/expr-test.cc
index 07f5eda..8b40f1e 100644
--- a/be/src/exprs/expr-test.cc
+++ b/be/src/exprs/expr-test.cc
@@ -265,6 +265,10 @@ class ExprTest : public testing::Test {
     EXPECT_EQ(expected_result, GetValue(expr, TYPE_STRING)) << expr;
   }
 
+  // Tests that DST of the given timezone ends at 3am
+  void TestAusDSTEndingForEastTimeZone(const string& time_zone);
+  void TestAusDSTEndingForCentralTimeZone(const string& time_zone);
+
   void TestCharValue(const string& expr, const string& expected_result,
                      const ColumnType& type) {
     EXPECT_EQ(expected_result, GetValue(expr, type)) << expr;
@@ -5694,6 +5698,49 @@ TEST_F(ExprTest, MoscowTimezoneConversion) {
 #pragma pop_macro("UTC_TO_MSC")
 }
 
+void ExprTest::TestAusDSTEndingForEastTimeZone(const string& time_zone) {
+  // Timestamps between 02:00:00 and 02:59:59 inclusive on the ending day of DST are
+  // ambiguous, hence excpecting NULL for timestamps in that range. Expect a UTC adjusted
+  // timestamp otherwise.
+  TestStringValue("cast(to_utc_timestamp('2018-04-01 01:59:59', '" + time_zone + "') "
+      "as string)", "2018-03-31 14:59:59");
+  TestStringValue("cast(to_utc_timestamp('2018-04-01 02:00:00', '" + time_zone + "') "
+      "as string)", "NULL");
+  TestStringValue("cast(to_utc_timestamp('2018-04-01 02:59:59', '" + time_zone + "') "
+      "as string)", "NULL");
+  TestStringValue("cast(to_utc_timestamp('2018-04-01 03:00:00', '" + time_zone + "') "
+      "as string)", "2018-03-31 17:00:00");
+}
+
+void ExprTest::TestAusDSTEndingForCentralTimeZone(const string& time_zone) {
+  TestStringValue("cast(to_utc_timestamp('2018-04-01 01:59:59', '" + time_zone + "') "
+      "as string)", "2018-03-31 15:29:59");
+  TestStringValue("cast(to_utc_timestamp('2018-04-01 02:00:00', '" + time_zone + "') "
+      "as string)", "NULL");
+  TestStringValue("cast(to_utc_timestamp('2018-04-01 02:59:59', '" + time_zone + "') "
+      "as string)", "NULL");
+  TestStringValue("cast(to_utc_timestamp('2018-04-01 03:00:00', '" + time_zone + "') "
+      "as string)", "2018-03-31 17:30:00");
+}
+
+// IMPALA-6699: Fix DST end time for Australian time-zones
+TEST_F(ExprTest, AusDSTEndingTests) {
+  TestAusDSTEndingForEastTimeZone("AET");
+  TestAusDSTEndingForEastTimeZone("Australia/ACT");
+  TestAusDSTEndingForCentralTimeZone("Australia/Adelaide");
+  TestAusDSTEndingForCentralTimeZone("Australia/Broken_Hill");
+  TestAusDSTEndingForEastTimeZone("Australia/Canberra");
+  TestAusDSTEndingForEastTimeZone("Australia/Currie");
+  TestAusDSTEndingForEastTimeZone("Australia/Hobart");
+  TestAusDSTEndingForEastTimeZone("Australia/Melbourne");
+  TestAusDSTEndingForEastTimeZone("Australia/NSW");
+  TestAusDSTEndingForCentralTimeZone("Australia/South");
+  TestAusDSTEndingForEastTimeZone("Australia/Sydney");
+  TestAusDSTEndingForEastTimeZone("Australia/Tasmania");
+  TestAusDSTEndingForEastTimeZone("Australia/Victoria");
+  TestAusDSTEndingForCentralTimeZone("Australia/Yancowinna");
+}
+
 TEST_F(ExprTest, TimestampFunctions) {
   // Regression for IMPALA-1105
   TestIsNull("cast(cast('NOTATIMESTAMP' as timestamp) as string)", TYPE_STRING);

http://git-wip-us.apache.org/repos/asf/impala/blob/720a6541/be/src/exprs/timezone_db.cc
----------------------------------------------------------------------
diff --git a/be/src/exprs/timezone_db.cc b/be/src/exprs/timezone_db.cc
index 37c466a..bf6d56c 100644
--- a/be/src/exprs/timezone_db.cc
+++ b/be/src/exprs/timezone_db.cc
@@ -44,7 +44,7 @@ const time_zone_ptr TimezoneDatabase::TIMEZONE_MSK_PRE_2014(time_zone_ptr(
 
 const char* TimezoneDatabase::TIMEZONE_DATABASE_STR = "\"ID\",\"STD ABBR\",\"STD NAME\",\"DST ABBR\",\"DST NAME\",\"GMT offset\",\"DST adjustment\",\"DST Start Date rule\",\"Start time\",\"DST End date rule\",\"End time\"\n\
 \"ACT\",\"ACST\",\"Australian Central Standard Time (Northern Territory)\",\"\",\"\",\"+09:30:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
-\"AET\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
+\"AET\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
 \"AGT\",\"ART\",\"Argentine Time\",\"\",\"\",\"-03:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
 \"ART\",\"EET\",\"Eastern European Time\",\"EEST\",\"Eastern European Summer Time\",\"+02:00:00\",\"+01:00:00\",\"-1;4;4\",\"+00:00:00\",\"-1;4;9\",\"+24:00:00\"\n\
 \"AST\",\"AKST\",\"Alaska Standard Time\",\"AKDT\",\"Alaska Daylight Time\",\"-09:00:00\",\"+01:00:00\",\"2;0;3\",\"+02:00:00\",\"1;0;11\",\"+02:00:00\"\n\
@@ -387,29 +387,29 @@ const char* TimezoneDatabase::TIMEZONE_DATABASE_STR = "\"ID\",\"STD ABBR\",\"STD
 \"Atlantic/South_Georgia\",\"GST\",\"South Georgia Standard Time\",\"\",\"\",\"-02:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
 \"Atlantic/St_Helena\",\"GMT\",\"Greenwich Mean Time\",\"\",\"\",\"+00:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
 \"Atlantic/Stanley\",\"FKT\",\"Falkland Is. Time\",\"\",\"\",\"-03:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
-\"Australia/ACT\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
-\"Australia/Adelaide\",\"ACST\",\"Australian Central Standard Time (South Australia)\",\"ACDT\",\"Australian Central Daylight Time (South Australia)\",\"+09:30:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
+\"Australia/ACT\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
+\"Australia/Adelaide\",\"ACST\",\"Australian Central Standard Time (South Australia)\",\"ACDT\",\"Australian Central Daylight Time (South Australia)\",\"+09:30:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
 \"Australia/Brisbane\",\"AEST\",\"Australian Eastern Standard Time (Queensland)\",\"\",\"\",\"+10:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
-\"Australia/Broken_Hill\",\"ACST\",\"Australian Central Standard Time (South Australia/New South Wales)\",\"ACDT\",\"Australian Central Daylight Time (South Australia/New South Wales)\",\"+09:30:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
-\"Australia/Canberra\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
-\"Australia/Currie\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
+\"Australia/Broken_Hill\",\"ACST\",\"Australian Central Standard Time (South Australia/New South Wales)\",\"ACDT\",\"Australian Central Daylight Time (South Australia/New South Wales)\",\"+09:30:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
+\"Australia/Canberra\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
+\"Australia/Currie\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
 \"Australia/Darwin\",\"ACST\",\"Australian Central Standard Time (Northern Territory)\",\"\",\"\",\"+09:30:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
 \"Australia/Eucla\",\"ACWST\",\"Australian Central Western Standard Time\",\"\",\"\",\"+08:45:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
-\"Australia/Hobart\",\"AEST\",\"Australian Eastern Standard Time (Tasmania)\",\"AEDT\",\"Australian Eastern Daylight Time (Tasmania)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
+\"Australia/Hobart\",\"AEST\",\"Australian Eastern Standard Time (Tasmania)\",\"AEDT\",\"Australian Eastern Daylight Time (Tasmania)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
 \"Australia/LHI\",\"LHST\",\"Lord Howe Standard Time\",\"LHDT\",\"Lord Howe Daylight Time\",\"+10:30:00\",\"+00:30:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
 \"Australia/Lindeman\",\"AEST\",\"Australian Eastern Standard Time (Queensland)\",\"\",\"\",\"+10:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
 \"Australia/Lord_Howe\",\"LHST\",\"Lord Howe Standard Time\",\"LHDT\",\"Lord Howe Daylight Time\",\"+10:30:00\",\"+00:30:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
-\"Australia/Melbourne\",\"AEST\",\"Australian Eastern Standard Time (Victoria)\",\"AEDT\",\"Australian Eastern Daylight Time (Victoria)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
-\"Australia/NSW\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
+\"Australia/Melbourne\",\"AEST\",\"Australian Eastern Standard Time (Victoria)\",\"AEDT\",\"Australian Eastern Daylight Time (Victoria)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
+\"Australia/NSW\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
 \"Australia/North\",\"ACST\",\"Australian Central Standard Time (Northern Territory)\",\"\",\"\",\"+09:30:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
 \"Australia/Perth\",\"AWST\",\"Australian Western Standard Time\",\"\",\"\",\"+08:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
 \"Australia/Queensland\",\"AEST\",\"Australian Eastern Standard Time (Queensland)\",\"\",\"\",\"+10:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
-\"Australia/South\",\"ACST\",\"Australian Central Standard Time (South Australia)\",\"ACDT\",\"Australian Central Daylight Time (South Australia)\",\"+09:30:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
-\"Australia/Sydney\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
-\"Australia/Tasmania\",\"AEST\",\"Australian Eastern Standard Time (Tasmania)\",\"AEDT\",\"Australian Eastern Daylight Time (Tasmania)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
-\"Australia/Victoria\",\"AEST\",\"Australian Eastern Standard Time (Victoria)\",\"AEDT\",\"Australian Eastern Daylight Time (Victoria)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
+\"Australia/South\",\"ACST\",\"Australian Central Standard Time (South Australia)\",\"ACDT\",\"Australian Central Daylight Time (South Australia)\",\"+09:30:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
+\"Australia/Sydney\",\"AEST\",\"Australian Eastern Standard Time (New South Wales)\",\"AEDT\",\"Australian Eastern Daylight Time (New South Wales)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
+\"Australia/Tasmania\",\"AEST\",\"Australian Eastern Standard Time (Tasmania)\",\"AEDT\",\"Australian Eastern Daylight Time (Tasmania)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
+\"Australia/Victoria\",\"AEST\",\"Australian Eastern Standard Time (Victoria)\",\"AEDT\",\"Australian Eastern Daylight Time (Victoria)\",\"+10:00:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
 \"Australia/West\",\"AWST\",\"Australian Western Standard Time\",\"\",\"\",\"+08:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
-\"Australia/Yancowinna\",\"ACST\",\"Australian Central Standard Time (South Australia/New South Wales)\",\"ACDT\",\"Australian Central Daylight Time (South Australia/New South Wales)\",\"+09:30:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+02:00:00\"\n\
+\"Australia/Yancowinna\",\"ACST\",\"Australian Central Standard Time (South Australia/New South Wales)\",\"ACDT\",\"Australian Central Daylight Time (South Australia/New South Wales)\",\"+09:30:00\",\"+01:00:00\",\"1;0;10\",\"+02:00:00\",\"1;0;4\",\"+03:00:00\"\n\
 \"BET\",\"BRT\",\"Brasilia Time\",\"BRST\",\"Brasilia Summer Time\",\"-03:00:00\",\"+01:00:00\",\"3;0;10\",\"+00:00:00\",\"3;0;2\",\"+00:00:00\"\n\
 \"BST\",\"BDT\",\"Bangladesh Time\",\"\",\"\",\"+06:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\
 \"Brazil/Acre\",\"ACT\",\"Acre Time\",\"\",\"\",\"-05:00:00\",\"+00:00:00\",\"\",\"\",\"\",\"\"\n\


[3/3] impala git commit: IMPALA-5980: Upgrade to LLVM 5.0.1

Posted by ta...@apache.org.
IMPALA-5980: Upgrade to LLVM 5.0.1

Highlighting a few changes in LLVM:
- Minor changes to some function signatures
- Minor changes to error handling
- Split Bitcode/ReaderWriter.h - https://reviews.llvm.org/D26502
- Introduced an optional new GVN optimization pass.

Needed to fix a bunch of new clang-tidy warnings.

Testing:
Ran core and ASAN tests successfully.

Performance:
Ran single node TPC-H and targeted perf with scale factor 60. Both
improved on average. Identified regression in
"primitive_filter_in_predicate" which will be addressed by IMPALA-6621.

+-------------------+-----------------------+---------+------------+------------+----------------+
| Workload          | File Format           | Avg (s) | Delta(Avg) | GeoMean(s) | Delta(GeoMean) |
+-------------------+-----------------------+---------+------------+------------+----------------+
| TARGETED-PERF(60) | parquet / none / none | 22.29   | -0.12%     | 3.90       | +3.16%         |
| TPCH(60)          | parquet / none / none | 15.97   | -3.64%     | 10.14      | -4.92%         |
+-------------------+-----------------------+---------+------------+------------+----------------+

+-------------------+--------------------------------------------------------+-----------------------+--------+-------------+------------+------------+----------------+-------------+-------+
| Workload          | Query                                                  | File Format           | Avg(s) | Base Avg(s) | Delta(Avg) | StdDev(%)  | Base StdDev(%) | Num Clients | Iters |
+-------------------+--------------------------------------------------------+-----------------------+--------+-------------+------------+------------+----------------+-------------+-------+
| TARGETED-PERF(60) | PERF_LIMIT-Q1                                          | parquet / none / none | 0.01   | 0.00        | R +156.43% | * 25.80% * | * 17.14% *     | 1           | 5     |
| TARGETED-PERF(60) | primitive_filter_in_predicate                          | parquet / none / none | 3.39   | 1.92        | R +76.33%  |   3.23%    |   4.37%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_filter_string_non_selective                  | parquet / none / none | 1.25   | 1.11        |   +12.46%  |   3.41%    |   5.36%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_filter_decimal_selective                     | parquet / none / none | 1.40   | 1.25        |   +12.25%  |   3.57%    |   3.44%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_filter_string_like                           | parquet / none / none | 16.87  | 15.65       |   +7.78%   |   5.05%    |   0.37%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_min_max_runtime_filter                       | parquet / none / none | 1.79   | 1.71        |   +4.77%   |   0.71%    |   1.73%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_broadcast_join_2                             | parquet / none / none | 0.60   | 0.58        |   +3.64%   |   3.19%    |   3.81%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_filter_string_selective                      | parquet / none / none | 0.95   | 0.93        |   +2.91%   |   5.23%    |   5.85%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_broadcast_join_3                             | parquet / none / none | 4.33   | 4.21        |   +2.83%   |   5.46%    |   3.25%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_groupby_bigint_lowndv                        | parquet / none / none | 4.59   | 4.47        |   +2.82%   |   3.73%    |   1.14%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_conjunct_ordering_3                          | parquet / none / none | 0.20   | 0.19        |   +2.65%   |   4.76%    |   2.24%        | 1           | 5     |
| TARGETED-PERF(60) | PERF_AGG-Q1                                            | parquet / none / none | 2.49   | 2.43        |   +2.31%   |   1.06%    |   1.93%        | 1           | 5     |
| TARGETED-PERF(60) | PERF_AGG-Q6                                            | parquet / none / none | 2.04   | 2.00        |   +2.09%   |   3.51%    |   2.80%        | 1           | 5     |
| TPCH(60)          | TPCH-Q3                                                | parquet / none / none | 12.37  | 12.17       |   +1.62%   |   0.80%    |   2.45%        | 1           | 5     |
| TARGETED-PERF(60) | PERF_STRING-Q5                                         | parquet / none / none | 4.52   | 4.45        |   +1.54%   |   1.23%    |   1.08%        | 1           | 5     |
| TPCH(60)          | TPCH-Q6                                                | parquet / none / none | 2.95   | 2.91        |   +1.33%   |   1.92%    |   1.67%        | 1           | 5     |
| TARGETED-PERF(60) | PERF_STRING-Q4                                         | parquet / none / none | 3.71   | 3.66        |   +1.26%   |   0.34%    |   0.53%        | 1           | 5     |
| TPCH(60)          | TPCH-Q1                                                | parquet / none / none | 18.69  | 18.47       |   +1.19%   |   0.75%    |   0.31%        | 1           | 5     |
| TARGETED-PERF(60) | PERF_STRING-Q7                                         | parquet / none / none | 8.15   | 8.07        |   +0.99%   |   3.92%    |   1.58%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_groupby_decimal_highndv                      | parquet / none / none | 31.31  | 31.01       |   +0.97%   |   1.74%    |   1.14%        | 1           | 5     |
| TPCH(60)          | TPCH-Q5                                                | parquet / none / none | 7.59   | 7.53        |   +0.78%   |   0.38%    |   0.99%        | 1           | 5     |
| TARGETED-PERF(60) | PERF_AGG-Q4                                            | parquet / none / none | 21.25  | 21.09       |   +0.76%   |   0.76%    |   0.75%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_conjunct_ordering_4                          | parquet / none / none | 0.24   | 0.24        |   +0.75%   |   3.14%    |   4.76%        | 1           | 5     |
| TPCH(60)          | TPCH-Q19                                               | parquet / none / none | 7.88   | 7.82        |   +0.74%   |   2.39%    |   2.64%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_orderby_bigint                               | parquet / none / none | 5.10   | 5.07        |   +0.61%   |   0.74%    |   0.54%        | 1           | 5     |
| TARGETED-PERF(60) | PERF_STRING-Q3                                         | parquet / none / none | 3.61   | 3.59        |   +0.60%   |   1.45%    |   0.90%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_orderby_all                                  | parquet / none / none | 27.63  | 27.48       |   +0.55%   |   0.85%    |   0.10%        | 1           | 5     |
| TPCH(60)          | TPCH-Q4                                                | parquet / none / none | 5.81   | 5.79        |   +0.45%   |   1.65%    |   2.16%        | 1           | 5     |
| TPCH(60)          | TPCH-Q13                                               | parquet / none / none | 23.49  | 23.43       |   +0.27%   |   0.83%    |   0.63%        | 1           | 5     |
| TPCH(60)          | TPCH-Q21                                               | parquet / none / none | 68.88  | 68.76       |   +0.18%   |   0.22%    |   0.19%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_groupby_decimal_lowndv.test                  | parquet / none / none | 4.38   | 4.37        |   +0.09%   |   2.45%    |   0.45%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_conjunct_ordering_5                          | parquet / none / none | 10.40  | 10.40       |   +0.07%   |   0.77%    |   0.50%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_long_predicate                               | parquet / none / none | 222.37 | 222.23      |   +0.06%   |   0.25%    |   0.25%        | 1           | 5     |
| TPCH(60)          | TPCH-Q8                                                | parquet / none / none | 10.65  | 10.65       |   +0.03%   |   0.55%    |   1.40%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_shuffle_join_one_to_many_string_with_groupby | parquet / none / none | 261.84 | 261.87      |   -0.01%   |   0.91%    |   0.74%        | 1           | 5     |
| TARGETED-PERF(60) | PERF_AGG-Q3                                            | parquet / none / none | 9.44   | 9.45        |   -0.02%   |   0.92%    |   1.33%        | 1           | 5     |
| TPCH(60)          | TPCH-Q16                                               | parquet / none / none | 5.21   | 5.21        |   -0.02%   |   1.46%    |   1.64%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_top-n_all                                    | parquet / none / none | 34.58  | 34.62       |   -0.11%   |   0.22%    |   0.19%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_topn_bigint                                  | parquet / none / none | 4.24   | 4.25        |   -0.13%   |   6.66%    |   2.03%        | 1           | 5     |
| TARGETED-PERF(60) | PERF_STRING-Q2                                         | parquet / none / none | 3.23   | 3.24        |   -0.34%   |   2.03%    |   0.32%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_broadcast_join_1                             | parquet / none / none | 0.18   | 0.18        |   -0.40%   |   6.16%    |   2.45%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_exchange_broadcast                           | parquet / none / none | 46.27  | 46.51       |   -0.52%   |   7.83%    | * 15.60% *     | 1           | 5     |
| TARGETED-PERF(60) | primitive_groupby_bigint_pk                            | parquet / none / none | 114.32 | 114.92      |   -0.52%   |   0.24%    |   0.61%        | 1           | 5     |
| TPCH(60)          | TPCH-Q22                                               | parquet / none / none | 6.66   | 6.70        |   -0.53%   |   1.39%    |   0.84%        | 1           | 5     |
| TPCH(60)          | TPCH-Q20                                               | parquet / none / none | 5.78   | 5.81        |   -0.62%   |   1.25%    |   0.67%        | 1           | 5     |
| TPCH(60)          | TPCH-Q2                                                | parquet / none / none | 2.53   | 2.55        |   -0.64%   |   3.86%    |   3.72%        | 1           | 5     |
| TARGETED-PERF(60) | PERF_AGG-Q5                                            | parquet / none / none | 0.58   | 0.58        |   -0.75%   |   0.99%    |   6.89%        | 1           | 5     |
| TARGETED-PERF(60) | PERF_AGG-Q7                                            | parquet / none / none | 2.05   | 2.07        |   -0.86%   |   2.16%    |   4.73%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_shuffle_join_union_all_with_groupby          | parquet / none / none | 54.86  | 55.34       |   -0.87%   |   0.25%    |   0.66%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_conjunct_ordering_2                          | parquet / none / none | 7.52   | 7.59        |   -0.98%   |   1.53%    |   1.73%        | 1           | 5     |
| TPCH(60)          | TPCH-Q9                                                | parquet / none / none | 36.43  | 36.79       |   -1.00%   |   1.60%    |   7.39%        | 1           | 5     |
| TARGETED-PERF(60) | PERF_STRING-Q1                                         | parquet / none / none | 2.79   | 2.82        |   -1.10%   |   1.15%    |   2.25%        | 1           | 5     |
| TPCH(60)          | TPCH-Q11                                               | parquet / none / none | 1.95   | 1.97        |   -1.18%   |   3.14%    |   2.24%        | 1           | 5     |
| TARGETED-PERF(60) | PERF_AGG-Q2                                            | parquet / none / none | 10.98  | 11.11       |   -1.24%   |   0.77%    |   1.45%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_small_join_1                                 | parquet / none / none | 0.22   | 0.22        |   -1.34%   | * 13.03% * | * 12.31% *     | 1           | 5     |
| TPCH(60)          | TPCH-Q7                                                | parquet / none / none | 42.82  | 43.41       |   -1.37%   |   1.63%    |   1.51%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_empty_build_join_1                           | parquet / none / none | 3.30   | 3.35        |   -1.54%   |   2.15%    |   1.27%        | 1           | 5     |
| TARGETED-PERF(60) | PERF_STRING-Q6                                         | parquet / none / none | 10.34  | 10.54       |   -1.81%   |   0.24%    |   2.02%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_groupby_bigint_highndv                       | parquet / none / none | 32.80  | 33.46       |   -1.98%   |   1.29%    |   0.61%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_filter_decimal_non_selective                 | parquet / none / none | 1.62   | 1.67        |   -3.01%   |   0.79%    |   1.65%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_conjunct_ordering_1                          | parquet / none / none | 0.13   | 0.14        |   -3.36%   |   8.66%    | * 12.66% *     | 1           | 5     |
| TARGETED-PERF(60) | primitive_exchange_shuffle                             | parquet / none / none | 84.92  | 87.96       |   -3.46%   |   1.46%    |   1.50%        | 1           | 5     |
| TPCH(60)          | TPCH-Q12                                               | parquet / none / none | 6.98   | 7.31        |   -4.57%   |   1.03%    |   7.13%        | 1           | 5     |
| TPCH(60)          | TPCH-Q18                                               | parquet / none / none | 47.54  | 50.39       |   -5.64%   |   5.70%    |   5.53%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_filter_bigint_non_selective                  | parquet / none / none | 0.88   | 0.96        |   -7.81%   |   4.27%    |   5.97%        | 1           | 5     |
| TPCH(60)          | TPCH-Q15                                               | parquet / none / none | 8.14   | 9.15        |   -11.09%  |   0.63%    | * 10.44% *     | 1           | 5     |
| TPCH(60)          | TPCH-Q10                                               | parquet / none / none | 12.66  | 14.28       |   -11.34%  |   4.32%    |   1.14%        | 1           | 5     |
| TPCH(60)          | TPCH-Q17                                               | parquet / none / none | 10.31  | 12.59       |   -18.14%  |   0.65%    |   3.72%        | 1           | 5     |
| TARGETED-PERF(60) | primitive_filter_bigint_selective                      | parquet / none / none | 0.14   | 0.19        | I -27.60%  | * 32.55% * | * 39.78% *     | 1           | 5     |
| TPCH(60)          | TPCH-Q14                                               | parquet / none / none | 6.10   | 11.00       | I -44.55%  |   4.06%    |   3.84%        | 1           | 5     |
+-------------------+--------------------------------------------------------+-----------------------+--------+-------------+------------+------------+----------------+-------------+-------+

Change-Id: Ib0a15cb53feab89e7b35a56b67b3b30eb3e62c6b
Reviewed-on: http://gerrit.cloudera.org:8080/9584
Reviewed-by: Tim Armstrong <ta...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/9f31390c
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/9f31390c
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/9f31390c

Branch: refs/heads/2.x
Commit: 9f31390c647a14c8a10f0172bfda7f18dd5d8c24
Parents: f46c695
Author: Bikramjeet Vig <bi...@cloudera.com>
Authored: Wed Oct 25 12:12:52 2017 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Wed Mar 28 07:40:00 2018 +0000

----------------------------------------------------------------------
 be/CMakeLists.txt                               | 12 ++++
 .../benchmarks/row-batch-serialize-benchmark.cc |  9 ++-
 be/src/codegen/codegen-anyval.cc                | 14 ++---
 be/src/codegen/instruction-counter-test.cc      |  4 +-
 be/src/codegen/llvm-codegen.cc                  | 59 ++++++++++++--------
 be/src/exprs/aggregate-functions-ir.cc          | 32 -----------
 be/src/rpc/impala-service-pool.h                |  4 +-
 be/src/runtime/bufferpool/buffer-pool-test.cc   |  6 +-
 be/src/runtime/data-stream-sender.cc            |  2 -
 be/src/runtime/data-stream-sender.h             |  3 -
 be/src/runtime/krpc-data-stream-sender.cc       |  1 -
 be/src/runtime/krpc-data-stream-sender.h        |  3 -
 be/src/runtime/row-batch-serialize-test.cc      |  3 +-
 be/src/runtime/row-batch.cc                     |  6 +-
 be/src/runtime/row-batch.h                      |  7 ++-
 be/src/runtime/types.cc                         |  2 +-
 be/src/service/fe-support.cc                    | 28 ++++++----
 be/src/thirdparty/squeasel/squeasel.c           |  9 ++-
 be/src/transport/TSasl.cpp                      | 26 +++++----
 be/src/transport/TSaslClientTransport.cpp       |  4 +-
 be/src/transport/TSaslTransport.cpp             |  2 +-
 be/src/udf/udf-test.cc                          |  3 +-
 be/src/udf/udf.h                                |  4 +-
 bin/bootstrap_toolchain.py                      |  2 +-
 bin/impala-config.sh                            |  8 +--
 .../queries/QueryTest/udf-errors.test           |  1 +
 26 files changed, 131 insertions(+), 123 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/be/CMakeLists.txt b/be/CMakeLists.txt
index 516166d..b6e10b0 100644
--- a/be/CMakeLists.txt
+++ b/be/CMakeLists.txt
@@ -65,8 +65,20 @@ SET(CXX_COVERAGE_FLAGS "-fprofile-arcs -ftest-coverage")
 #        when using ccache as clang thinks it is not called from a terminal.
 #   -Wno-mismatched-tags: ignore harmless class/struct mismatch for forward declarations.
 #        Disabling to be consistent with gcc, which doesn't have this warning.
+#   -Wno-zero-as-null-pointer-constant: We are slowly moving towards the use of nullptr,
+#        but till we switch to it completely, we will ignore the warnings due to use of
+#        NULL as a null pointer constant.
+#   -Wno-c++17-extensions: ignore warnings caused due to the use of [[nodiscard]]
+#        attribute which our current compiler does not support but is used in conjunction
+#        with WARN_UNUSED_RESULT with our current toolchain to be effective.
+#   -Wno-inconsistent-missing-destructor-override: ignore warnings to mark virtual
+#        destructors with 'override' which is enforced by clang by not recommended by c++
+#        core guidelines (read C.128).
 SET(CXX_CLANG_FLAGS "-Qunused-arguments -fcolor-diagnostics -Wno-unused-local-typedef")
 SET(CXX_CLANG_FLAGS "${CXX_CLANG_FLAGS} -Wno-mismatched-tags")
+SET(CXX_CLANG_FLAGS "${CXX_CLANG_FLAGS} -Wno-zero-as-null-pointer-constant")
+SET(CXX_CLANG_FLAGS "${CXX_CLANG_FLAGS} -Wno-c++17-extensions")
+SET(CXX_CLANG_FLAGS "${CXX_CLANG_FLAGS} -Wno-inconsistent-missing-destructor-override")
 # For any gcc builds:
 #   -g: Enable symbols for profiler tools
 #   -Wno-unused-local-typedefs: Do not warn for local typedefs that are unused.

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/benchmarks/row-batch-serialize-benchmark.cc
----------------------------------------------------------------------
diff --git a/be/src/benchmarks/row-batch-serialize-benchmark.cc b/be/src/benchmarks/row-batch-serialize-benchmark.cc
index a2071ca..b55d04b 100644
--- a/be/src/benchmarks/row-batch-serialize-benchmark.cc
+++ b/be/src/benchmarks/row-batch-serialize-benchmark.cc
@@ -128,8 +128,10 @@ class RowBatchSerializeBaseline {
       if (batch->compression_scratch_.size() < compressed_size) {
         batch->compression_scratch_.resize(compressed_size);
       }
-      uint8_t* input = (uint8_t*)output_batch->tuple_data.c_str();
-      uint8_t* compressed_output = (uint8_t*)batch->compression_scratch_.c_str();
+      uint8_t* input = const_cast<uint8_t*>(
+          reinterpret_cast<const uint8_t*>(output_batch->tuple_data.c_str()));
+      uint8_t* compressed_output = const_cast<uint8_t*>(
+          reinterpret_cast<const uint8_t*>(batch->compression_scratch_.c_str()));
       status =
           compressor.ProcessBlock(true, size, input, &compressed_size, &compressed_output);
       DCHECK(status.ok()) << status.GetDetail();
@@ -194,7 +196,8 @@ class RowBatchSerializeBaseline {
     uint8_t* tuple_data;
     if (input_batch.compression_type != THdfsCompression::NONE) {
       // Decompress tuple data into data pool
-      uint8_t* compressed_data = (uint8_t*)input_batch.tuple_data.c_str();
+      uint8_t* compressed_data = const_cast<uint8_t*>(
+          reinterpret_cast<const uint8_t*>(input_batch.tuple_data.c_str()));
       size_t compressed_size = input_batch.tuple_data.size();
 
       Lz4Decompressor decompressor(nullptr, false);

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/codegen/codegen-anyval.cc
----------------------------------------------------------------------
diff --git a/be/src/codegen/codegen-anyval.cc b/be/src/codegen/codegen-anyval.cc
index 6575cfd..3e2eb1e 100644
--- a/be/src/codegen/codegen-anyval.cc
+++ b/be/src/codegen/codegen-anyval.cc
@@ -46,20 +46,20 @@ llvm::Type* CodegenAnyVal::GetLoweredType(LlvmCodeGen* cg, const ColumnType& typ
     case TYPE_INT: // i64
       return cg->i64_type();
     case TYPE_BIGINT: // { i8, i64 }
-      return llvm::StructType::get(cg->i8_type(), cg->i64_type(), NULL);
+      return llvm::StructType::get(cg->i8_type(), cg->i64_type());
     case TYPE_FLOAT: // i64
       return cg->i64_type();
     case TYPE_DOUBLE: // { i8, double }
-      return llvm::StructType::get(cg->i8_type(), cg->double_type(), NULL);
+      return llvm::StructType::get(cg->i8_type(), cg->double_type());
     case TYPE_STRING: // { i64, i8* }
     case TYPE_VARCHAR: // { i64, i8* }
     case TYPE_FIXED_UDA_INTERMEDIATE: // { i64, i8* }
-      return llvm::StructType::get(cg->i64_type(), cg->ptr_type(), NULL);
+      return llvm::StructType::get(cg->i64_type(), cg->ptr_type());
     case TYPE_CHAR:
       DCHECK(false) << "NYI:" << type.DebugString();
       return NULL;
     case TYPE_TIMESTAMP: // { i64, i64 }
-      return llvm::StructType::get(cg->i64_type(), cg->i64_type(), NULL);
+      return llvm::StructType::get(cg->i64_type(), cg->i64_type());
     case TYPE_DECIMAL: // %"struct.impala_udf::DecimalVal" (isn't lowered)
                        // = { {i8}, [15 x i8], {i128} }
       return cg->GetNamedType(LLVM_DECIMALVAL_NAME);
@@ -805,12 +805,12 @@ llvm::Value* CodegenAnyVal::GetNullVal(LlvmCodeGen* codegen, llvm::Type* val_typ
       llvm::StructType* anyval_struct_type =
           llvm::cast<llvm::StructType>(struct_type->getElementType(0));
       llvm::Type* is_null_type = anyval_struct_type->getElementType(0);
-      llvm::Value* null_anyval = llvm::ConstantStruct::get(
+      llvm::Constant* null_anyval = llvm::ConstantStruct::get(
           anyval_struct_type, llvm::ConstantInt::get(is_null_type, 1));
       llvm::Type* type2 = struct_type->getElementType(1);
       llvm::Type* type3 = struct_type->getElementType(2);
       return llvm::ConstantStruct::get(struct_type, null_anyval,
-          llvm::Constant::getNullValue(type2), llvm::Constant::getNullValue(type3), NULL);
+          llvm::Constant::getNullValue(type2), llvm::Constant::getNullValue(type3));
     }
     // Return the struct { 1, 0 } (the 'is_null' byte, i.e. the first value's first byte,
     // is set to 1, the other bytes don't matter)
@@ -819,7 +819,7 @@ llvm::Value* CodegenAnyVal::GetNullVal(LlvmCodeGen* codegen, llvm::Type* val_typ
     DCHECK(type1->isIntegerTy()) << LlvmCodeGen::Print(type1);
     llvm::Type* type2 = struct_type->getElementType(1);
     return llvm::ConstantStruct::get(struct_type, llvm::ConstantInt::get(type1, 1),
-        llvm::Constant::getNullValue(type2), NULL);
+        llvm::Constant::getNullValue(type2));
   }
   // Return the int 1 ('is_null' byte is 1, other bytes don't matter)
   DCHECK(val_type->isIntegerTy());

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/codegen/instruction-counter-test.cc
----------------------------------------------------------------------
diff --git a/be/src/codegen/instruction-counter-test.cc b/be/src/codegen/instruction-counter-test.cc
index d719cf3..f404243 100644
--- a/be/src/codegen/instruction-counter-test.cc
+++ b/be/src/codegen/instruction-counter-test.cc
@@ -50,7 +50,7 @@ llvm::Module* CodegenMulAdd(llvm::LLVMContext* context) {
   llvm::Module* mod = new llvm::Module("test", *context);
   llvm::Constant* c = mod->getOrInsertFunction("mul_add",
       llvm::IntegerType::get(*context, 32), llvm::IntegerType::get(*context, 32),
-      llvm::IntegerType::get(*context, 32), llvm::IntegerType::get(*context, 32), NULL);
+      llvm::IntegerType::get(*context, 32), llvm::IntegerType::get(*context, 32));
   llvm::Function* mul_add = llvm::cast<llvm::Function>(c);
   mul_add->setCallingConv(llvm::CallingConv::C);
   llvm::Function::arg_iterator args = mul_add->arg_begin();
@@ -116,7 +116,7 @@ llvm::Module* CodegenGcd(llvm::LLVMContext* context) {
   llvm::Module* mod = new llvm::Module("gcd", *context);
   llvm::Constant* c = mod->getOrInsertFunction("gcd",
       llvm::IntegerType::get(*context, 32), llvm::IntegerType::get(*context, 32),
-      llvm::IntegerType::get(*context, 32), NULL);
+      llvm::IntegerType::get(*context, 32));
   llvm::Function* gcd = llvm::cast<llvm::Function>(c);
   llvm::Function::arg_iterator args = gcd->arg_begin();
   llvm::Value* x = &*args;

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/codegen/llvm-codegen.cc
----------------------------------------------------------------------
diff --git a/be/src/codegen/llvm-codegen.cc b/be/src/codegen/llvm-codegen.cc
index b3a1c50..5ac19ad 100644
--- a/be/src/codegen/llvm-codegen.cc
+++ b/be/src/codegen/llvm-codegen.cc
@@ -30,7 +30,7 @@
 #include <llvm/Analysis/InstructionSimplify.h>
 #include <llvm/Analysis/Passes.h>
 #include <llvm/Analysis/TargetTransformInfo.h>
-#include <llvm/Bitcode/ReaderWriter.h>
+#include <llvm/Bitcode/BitcodeReader.h>
 #include <llvm/ExecutionEngine/ExecutionEngine.h>
 #include <llvm/ExecutionEngine/MCJIT.h>
 #include <llvm/IR/Constants.h>
@@ -124,7 +124,7 @@ string LlvmCodeGen::target_features_attr_;
 CodegenCallGraph LlvmCodeGen::shared_call_graph_;
 
 [[noreturn]] static void LlvmCodegenHandleError(
-    void* user_data, const std::string& reason, bool gen_crash_diag) {
+    void* user_data, const string& reason, bool gen_crash_diag) {
   LOG(FATAL) << "LLVM hit fatal error: " << reason.c_str();
 }
 
@@ -217,7 +217,7 @@ Status LlvmCodeGen::CreateFromFile(RuntimeState* state, ObjectPool* pool,
   unique_ptr<llvm::Module> loaded_module;
   Status status = (*codegen)->LoadModuleFromFile(file, &loaded_module);
   if (!status.ok()) goto error;
-  status = (*codegen)->Init(std::move(loaded_module));
+  status = (*codegen)->Init(move(loaded_module));
   if (!status.ok()) goto error;
   return Status::OK();
 error:
@@ -247,10 +247,10 @@ Status LlvmCodeGen::CreateFromMemory(RuntimeState* state, ObjectPool* pool,
   unique_ptr<llvm::MemoryBuffer> module_ir_buf(
       llvm::MemoryBuffer::getMemBuffer(module_ir, "", false));
   unique_ptr<llvm::Module> loaded_module;
-  Status status = (*codegen)->LoadModuleFromMemory(std::move(module_ir_buf),
+  Status status = (*codegen)->LoadModuleFromMemory(move(module_ir_buf),
       module_name, &loaded_module);
   if (!status.ok()) goto error;
-  status = (*codegen)->Init(std::move(loaded_module));
+  status = (*codegen)->Init(move(loaded_module));
   if (!status.ok()) goto error;
   return Status::OK();
 error:
@@ -272,11 +272,11 @@ Status LlvmCodeGen::LoadModuleFromFile(
          << tmp_file_buffer.getError().message();
       return Status(ss.str());
     }
-    file_buffer = std::move(tmp_file_buffer.get());
+    file_buffer = move(tmp_file_buffer.get());
   }
 
   COUNTER_ADD(module_bitcode_size_, file_buffer->getBufferSize());
-  return LoadModuleFromMemory(std::move(file_buffer), file, module);
+  return LoadModuleFromMemory(move(file_buffer), file, module);
 }
 
 Status LlvmCodeGen::LoadModuleFromMemory(unique_ptr<llvm::MemoryBuffer> module_ir_buf,
@@ -284,14 +284,16 @@ Status LlvmCodeGen::LoadModuleFromMemory(unique_ptr<llvm::MemoryBuffer> module_i
   DCHECK(!module_name.empty());
   SCOPED_TIMER(prepare_module_timer_);
   COUNTER_ADD(module_bitcode_size_, module_ir_buf->getMemBufferRef().getBufferSize());
-  llvm::ErrorOr<unique_ptr<llvm::Module>> tmp_module =
-      getLazyBitcodeModule(std::move(module_ir_buf), context(), false);
-  if (!tmp_module) {
-    string diagnostic_err = diagnostic_handler_.GetErrorString();
-    return Status(diagnostic_err);
+  llvm::Expected<unique_ptr<llvm::Module>> tmp_module =
+      getOwningLazyBitcodeModule(move(module_ir_buf), context());
+  if (llvm::Error err = tmp_module.takeError()) {
+    string err_string;
+    llvm::handleAllErrors(
+        move(err), [&](llvm::ErrorInfoBase& eib) { err_string = eib.message(); });
+    return Status(err_string);
   }
 
-  *module = std::move(tmp_module.get());
+  *module = move(tmp_module.get());
 
   // We never run global constructors or destructors so let's strip them out for all
   // modules when we load them.
@@ -324,7 +326,7 @@ Status LlvmCodeGen::LinkModuleFromLocalFs(const string& file) {
     }
   }
 
-  bool error = llvm::Linker::linkModules(*module_, std::move(new_module));
+  bool error = llvm::Linker::linkModules(*module_, move(new_module));
   string diagnostic_err = diagnostic_handler_.GetErrorString();
   if (error) {
     stringstream ss;
@@ -399,7 +401,7 @@ Status LlvmCodeGen::Init(unique_ptr<llvm::Module> module) {
   opt_level = llvm::CodeGenOpt::None;
 #endif
   module_ = module.get();
-  llvm::EngineBuilder builder(std::move(module));
+  llvm::EngineBuilder builder(move(module));
   builder.setEngineKind(llvm::EngineKind::JIT);
   builder.setOptLevel(opt_level);
   unique_ptr<ImpalaMCJITMemoryManager> memory_manager(new ImpalaMCJITMemoryManager);
@@ -622,10 +624,13 @@ Status LlvmCodeGen::MaterializeFunctionHelper(llvm::Function* fn) {
   DCHECK(!is_compiled_);
   if (fn->isIntrinsic() || !fn->isMaterializable()) return Status::OK();
 
-  std::error_code err = module_->materialize(fn);
+  llvm::Error err = module_->materialize(fn);
   if (UNLIKELY(err)) {
+    string err_string;
+    llvm::handleAllErrors(
+        move(err), [&](llvm::ErrorInfoBase& eib) { err_string = eib.message(); });
     return Status(Substitute("Failed to materialize $0: $1",
-        fn->getName().str(), err.message()));
+        fn->getName().str(), err_string));
   }
 
   // Materialized functions are marked as not materializable by LLVM.
@@ -723,8 +728,8 @@ bool LlvmCodeGen::VerifyFunction(llvm::Function* fn) {
 
   if (is_corrupt_) {
     string fn_name = fn->getName(); // llvm has some fancy operator overloading
-    LOG(ERROR) << "Function corrupt: " << fn_name;
-    fn->dump();
+    LOG(ERROR) << "Function corrupt: " << fn_name <<"\nFunction Dump: "
+        << LlvmCodeGen::Print(fn);
     return false;
   }
   return true;
@@ -783,8 +788,8 @@ llvm::Function* LlvmCodeGen::FnPrototype::GeneratePrototype(
   return fn;
 }
 
-Status LlvmCodeGen::LoadFunction(const TFunction& fn, const std::string& symbol,
-    const ColumnType* return_type, const std::vector<ColumnType>& arg_types,
+Status LlvmCodeGen::LoadFunction(const TFunction& fn, const string& symbol,
+    const ColumnType* return_type, const vector<ColumnType>& arg_types,
     int num_fixed_args, bool has_varargs, llvm::Function** llvm_fn,
     LibCacheEntry** cache_entry) {
   DCHECK_GE(arg_types.size(), num_fixed_args);
@@ -1011,15 +1016,21 @@ llvm::Function* LlvmCodeGen::FinalizeFunction(llvm::Function* function) {
     return NULL;
   }
   finalized_functions_.insert(function);
-  if (FLAGS_dump_ir) function->dump();
+  if (FLAGS_dump_ir) {
+    string fn_name = function->getName();
+    LOG(INFO) << "Dump of Function "<< fn_name << ": " << LlvmCodeGen::Print(function);
+  }
   return function;
 }
 
 Status LlvmCodeGen::MaterializeModule() {
-  std::error_code err = module_->materializeAll();
+  llvm::Error err = module_->materializeAll();
   if (UNLIKELY(err)) {
+    string err_string;
+    llvm::handleAllErrors(
+        move(err), [&](llvm::ErrorInfoBase& eib) { err_string = eib.message(); });
     return Status(Substitute("Failed to materialize module $0: $1",
-        module_->getName().str(), err.message()));
+        module_->getName().str(), err_string));
   }
   return Status::OK();
 }

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/exprs/aggregate-functions-ir.cc
----------------------------------------------------------------------
diff --git a/be/src/exprs/aggregate-functions-ir.cc b/be/src/exprs/aggregate-functions-ir.cc
index 9af563e..3bf2867 100644
--- a/be/src/exprs/aggregate-functions-ir.cc
+++ b/be/src/exprs/aggregate-functions-ir.cc
@@ -2060,8 +2060,6 @@ template void AggregateFunctions::UpdateVal<FloatVal>(
     FunctionContext*, const FloatVal& src, FloatVal* dst);
 template void AggregateFunctions::UpdateVal<DoubleVal>(
     FunctionContext*, const DoubleVal& src, DoubleVal* dst);
-template void AggregateFunctions::UpdateVal<StringVal>(
-    FunctionContext*, const StringVal& src, StringVal* dst);
 template void AggregateFunctions::UpdateVal<TimestampVal>(
     FunctionContext*, const TimestampVal& src, TimestampVal* dst);
 template void AggregateFunctions::UpdateVal<DecimalVal>(
@@ -2112,14 +2110,6 @@ template void AggregateFunctions::Min<IntVal>(
     FunctionContext*, const IntVal& src, IntVal* dst);
 template void AggregateFunctions::Min<BigIntVal>(
     FunctionContext*, const BigIntVal& src, BigIntVal* dst);
-template void AggregateFunctions::Min<FloatVal>(
-    FunctionContext*, const FloatVal& src, FloatVal* dst);
-template void AggregateFunctions::Min<DoubleVal>(
-    FunctionContext*, const DoubleVal& src, DoubleVal* dst);
-template void AggregateFunctions::Min<StringVal>(
-    FunctionContext*, const StringVal& src, StringVal* dst);
-template void AggregateFunctions::Min<DecimalVal>(
-    FunctionContext*, const DecimalVal& src, DecimalVal* dst);
 
 template void AggregateFunctions::Max<BooleanVal>(
     FunctionContext*, const BooleanVal& src, BooleanVal* dst);
@@ -2131,14 +2121,6 @@ template void AggregateFunctions::Max<IntVal>(
     FunctionContext*, const IntVal& src, IntVal* dst);
 template void AggregateFunctions::Max<BigIntVal>(
     FunctionContext*, const BigIntVal& src, BigIntVal* dst);
-template void AggregateFunctions::Max<FloatVal>(
-    FunctionContext*, const FloatVal& src, FloatVal* dst);
-template void AggregateFunctions::Max<DoubleVal>(
-    FunctionContext*, const DoubleVal& src, DoubleVal* dst);
-template void AggregateFunctions::Max<StringVal>(
-    FunctionContext*, const StringVal& src, StringVal* dst);
-template void AggregateFunctions::Max<DecimalVal>(
-    FunctionContext*, const DecimalVal& src, DecimalVal* dst);
 
 template void AggregateFunctions::PcUpdate(
     FunctionContext*, const BooleanVal&, StringVal*);
@@ -2347,8 +2329,6 @@ template void AggregateFunctions::HllUpdate(
     FunctionContext*, const StringVal&, StringVal*);
 template void AggregateFunctions::HllUpdate(
     FunctionContext*, const TimestampVal&, StringVal*);
-template void AggregateFunctions::HllUpdate(
-    FunctionContext*, const DecimalVal&, StringVal*);
 
 template void AggregateFunctions::SampledNdvUpdate(
     FunctionContext*, const BooleanVal&, const DoubleVal&, StringVal*);
@@ -2398,8 +2378,6 @@ template void AggregateFunctions::LastValRemove<FloatVal>(
     FunctionContext*, const FloatVal& src, FloatVal* dst);
 template void AggregateFunctions::LastValRemove<DoubleVal>(
     FunctionContext*, const DoubleVal& src, DoubleVal* dst);
-template void AggregateFunctions::LastValRemove<StringVal>(
-    FunctionContext*, const StringVal& src, StringVal* dst);
 template void AggregateFunctions::LastValRemove<TimestampVal>(
     FunctionContext*, const TimestampVal& src, TimestampVal* dst);
 template void AggregateFunctions::LastValRemove<DecimalVal>(
@@ -2482,8 +2460,6 @@ template FloatVal AggregateFunctions::LastValIgnoreNullsGetValue<FloatVal>(
     FunctionContext*, const StringVal&);
 template DoubleVal AggregateFunctions::LastValIgnoreNullsGetValue<DoubleVal>(
     FunctionContext*, const StringVal&);
-template StringVal AggregateFunctions::LastValIgnoreNullsGetValue<StringVal>(
-    FunctionContext*, const StringVal&);
 template TimestampVal AggregateFunctions::LastValIgnoreNullsGetValue<TimestampVal>(
     FunctionContext*, const StringVal&);
 template DecimalVal AggregateFunctions::LastValIgnoreNullsGetValue<DecimalVal>(
@@ -2503,8 +2479,6 @@ template FloatVal AggregateFunctions::LastValIgnoreNullsFinalize<FloatVal>(
     FunctionContext*, const StringVal&);
 template DoubleVal AggregateFunctions::LastValIgnoreNullsFinalize<DoubleVal>(
     FunctionContext*, const StringVal&);
-template StringVal AggregateFunctions::LastValIgnoreNullsFinalize<StringVal>(
-    FunctionContext*, const StringVal&);
 template TimestampVal AggregateFunctions::LastValIgnoreNullsFinalize<TimestampVal>(
     FunctionContext*, const StringVal&);
 template DecimalVal AggregateFunctions::LastValIgnoreNullsFinalize<DecimalVal>(
@@ -2524,8 +2498,6 @@ template void AggregateFunctions::FirstValUpdate<FloatVal>(
     FunctionContext*, const FloatVal& src, FloatVal* dst);
 template void AggregateFunctions::FirstValUpdate<DoubleVal>(
     FunctionContext*, const DoubleVal& src, DoubleVal* dst);
-template void AggregateFunctions::FirstValUpdate<StringVal>(
-    FunctionContext*, const StringVal& src, StringVal* dst);
 template void AggregateFunctions::FirstValUpdate<TimestampVal>(
     FunctionContext*, const TimestampVal& src, TimestampVal* dst);
 template void AggregateFunctions::FirstValUpdate<DecimalVal>(
@@ -2566,8 +2538,6 @@ template void AggregateFunctions::FirstValIgnoreNullsUpdate<FloatVal>(
     FunctionContext*, const FloatVal& src, FloatVal* dst);
 template void AggregateFunctions::FirstValIgnoreNullsUpdate<DoubleVal>(
     FunctionContext*, const DoubleVal& src, DoubleVal* dst);
-template void AggregateFunctions::FirstValIgnoreNullsUpdate<StringVal>(
-    FunctionContext*, const StringVal& src, StringVal* dst);
 template void AggregateFunctions::FirstValIgnoreNullsUpdate<TimestampVal>(
     FunctionContext*, const TimestampVal& src, TimestampVal* dst);
 template void AggregateFunctions::FirstValIgnoreNullsUpdate<DecimalVal>(
@@ -2587,8 +2557,6 @@ template void AggregateFunctions::OffsetFnInit<FloatVal>(
     FunctionContext*, FloatVal*);
 template void AggregateFunctions::OffsetFnInit<DoubleVal>(
     FunctionContext*, DoubleVal*);
-template void AggregateFunctions::OffsetFnInit<StringVal>(
-    FunctionContext*, StringVal*);
 template void AggregateFunctions::OffsetFnInit<TimestampVal>(
     FunctionContext*, TimestampVal*);
 template void AggregateFunctions::OffsetFnInit<DecimalVal>(

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/rpc/impala-service-pool.h
----------------------------------------------------------------------
diff --git a/be/src/rpc/impala-service-pool.h b/be/src/rpc/impala-service-pool.h
index 9d34366..910ac53 100644
--- a/be/src/rpc/impala-service-pool.h
+++ b/be/src/rpc/impala-service-pool.h
@@ -52,10 +52,10 @@ class ImpalaServicePool : public kudu::rpc::RpcService {
   virtual ~ImpalaServicePool();
 
   /// Start up the thread pool.
-  virtual Status Init(int num_threads);
+  Status Init(int num_threads);
 
   /// Shut down the queue and the thread pool.
-  virtual void Shutdown();
+  void Shutdown();
 
   virtual kudu::rpc::RpcMethodInfo* LookupMethod(const kudu::rpc::RemoteMethod& method)
     override;

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/runtime/bufferpool/buffer-pool-test.cc
----------------------------------------------------------------------
diff --git a/be/src/runtime/bufferpool/buffer-pool-test.cc b/be/src/runtime/bufferpool/buffer-pool-test.cc
index d6547d2..5337bb4 100644
--- a/be/src/runtime/bufferpool/buffer-pool-test.cc
+++ b/be/src/runtime/bufferpool/buffer-pool-test.cc
@@ -1960,7 +1960,7 @@ void BufferPoolTest::TestRandomInternalMulti(
   }
 
   AtomicInt32 stop_maintenance(0);
-  thread* maintenance_thread = new thread([this, &pool, &stop_maintenance]() {
+  thread* maintenance_thread = new thread([&pool, &stop_maintenance]() {
     while (stop_maintenance.Load() == 0) {
       pool.Maintenance();
       SleepForMs(50);
@@ -2171,7 +2171,7 @@ TEST_F(BufferPoolTest, ConcurrentBufferOperations) {
   // Allocate threads allocate buffers whenever able and enqueue them.
   for (int i = 0; i < ALLOCATE_THREADS; ++i) {
     allocate_threads.add_thread(new thread([&] {
-        for (int i = 0; i < NUM_ALLOCATIONS_PER_THREAD; ++i) {
+        for (int j = 0; j < NUM_ALLOCATIONS_PER_THREAD; ++j) {
           // Try to deduct reservation.
           while (true) {
             int64_t val = available_reservation.Load();
@@ -2182,7 +2182,7 @@ TEST_F(BufferPoolTest, ConcurrentBufferOperations) {
           }
           BufferHandle buffer;
           ASSERT_OK(pool.AllocateBuffer(&client, TEST_BUFFER_LEN, &buffer));
-          uint8_t first_byte = static_cast<uint8_t>(i % 256);
+          uint8_t first_byte = static_cast<uint8_t>(j % 256);
           buffer.data()[0] = first_byte;
           delete_queue.BlockingPut(pair<uint8_t, BufferHandle>(first_byte, move(buffer)));
         }

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/runtime/data-stream-sender.cc
----------------------------------------------------------------------
diff --git a/be/src/runtime/data-stream-sender.cc b/be/src/runtime/data-stream-sender.cc
index a744929..f68788e 100644
--- a/be/src/runtime/data-stream-sender.cc
+++ b/be/src/runtime/data-stream-sender.cc
@@ -337,7 +337,6 @@ DataStreamSender::DataStreamSender(int sender_id, const RowDescriptor* row_desc,
     partition_type_(sink.output_partition.type),
     current_channel_idx_(0),
     flushed_(false),
-    closed_(false),
     current_thrift_batch_(&thrift_batch1_),
     serialize_batch_timer_(NULL),
     thrift_transmit_timer_(NULL),
@@ -534,7 +533,6 @@ void DataStreamSender::Close(RuntimeState* state) {
   ScalarExprEvaluator::Close(partition_expr_evals_, state);
   ScalarExpr::Close(partition_exprs_);
   DataSink::Close(state);
-  closed_ = true;
 }
 
 Status DataStreamSender::SerializeBatch(

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/runtime/data-stream-sender.h
----------------------------------------------------------------------
diff --git a/be/src/runtime/data-stream-sender.h b/be/src/runtime/data-stream-sender.h
index 992e9c9..37b9417 100644
--- a/be/src/runtime/data-stream-sender.h
+++ b/be/src/runtime/data-stream-sender.h
@@ -116,9 +116,6 @@ class DataStreamSender : public DataSink {
   /// Not valid to call Send() anymore.
   bool flushed_;
 
-  /// If true, this sender has been closed. Not valid to call Send() anymore.
-  bool closed_;
-
   /// serialized batches for broadcasting; we need two so we can write
   /// one while the other one is still being sent
   TRowBatch thrift_batch1_;

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/runtime/krpc-data-stream-sender.cc
----------------------------------------------------------------------
diff --git a/be/src/runtime/krpc-data-stream-sender.cc b/be/src/runtime/krpc-data-stream-sender.cc
index e6ff0a2..bc6a07d 100644
--- a/be/src/runtime/krpc-data-stream-sender.cc
+++ b/be/src/runtime/krpc-data-stream-sender.cc
@@ -756,7 +756,6 @@ void KrpcDataStreamSender::Close(RuntimeState* state) {
   ScalarExprEvaluator::Close(partition_expr_evals_, state);
   ScalarExpr::Close(partition_exprs_);
   DataSink::Close(state);
-  closed_ = true;
 }
 
 Status KrpcDataStreamSender::SerializeBatch(

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/runtime/krpc-data-stream-sender.h
----------------------------------------------------------------------
diff --git a/be/src/runtime/krpc-data-stream-sender.h b/be/src/runtime/krpc-data-stream-sender.h
index 0c3a32e..bc18574 100644
--- a/be/src/runtime/krpc-data-stream-sender.h
+++ b/be/src/runtime/krpc-data-stream-sender.h
@@ -140,9 +140,6 @@ class KrpcDataStreamSender : public DataSink {
   /// Not valid to call Send() anymore.
   bool flushed_ = false;
 
-  /// If true, this sender has been closed. Not valid to call Send() anymore.
-  bool closed_ = false;
-
   /// List of all channels. One for each destination.
   std::vector<Channel*> channels_;
 

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/runtime/row-batch-serialize-test.cc
----------------------------------------------------------------------
diff --git a/be/src/runtime/row-batch-serialize-test.cc b/be/src/runtime/row-batch-serialize-test.cc
index b6a0009..e765025 100644
--- a/be/src/runtime/row-batch-serialize-test.cc
+++ b/be/src/runtime/row-batch-serialize-test.cc
@@ -716,7 +716,8 @@ TEST_F(RowBatchSerializeTest, DedupPathologicalFull) {
     cv.ptr = pool->Allocate(array_item_desc->byte_size());
     memset(cv.ptr, 0, array_item_desc->byte_size());
     cv.num_tuples = 1;
-    StringValue huge_string_value((char*)huge_string.data(), huge_string_size);
+    StringValue huge_string_value(
+        const_cast<char*>(huge_string.data()), huge_string_size);
     RawValue::Write(&huge_string_value, reinterpret_cast<Tuple*>(cv.ptr),
         string_slot_desc, NULL);
     RawValue::Write(&cv, tuple, array_slot_desc, NULL);

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/runtime/row-batch.cc
----------------------------------------------------------------------
diff --git a/be/src/runtime/row-batch.cc b/be/src/runtime/row-batch.cc
index 87c0f2c..3581bd9 100644
--- a/be/src/runtime/row-batch.cc
+++ b/be/src/runtime/row-batch.cc
@@ -309,8 +309,10 @@ Status RowBatch::Serialize(bool full_dedup, vector<int32_t>* tuple_offsets,
     if (compression_scratch_.size() < compressed_size) {
       compression_scratch_.resize(compressed_size);
     }
-    uint8_t* input = (uint8_t*)tuple_data->c_str();
-    uint8_t* compressed_output = (uint8_t*)compression_scratch_.c_str();
+    uint8_t* input =
+        const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(tuple_data->c_str()));
+    uint8_t* compressed_output = const_cast<uint8_t*>(
+        reinterpret_cast<const uint8_t*>(compression_scratch_.c_str()));
     RETURN_IF_ERROR(
         compressor.ProcessBlock(true, size, input, &compressed_size, &compressed_output));
     if (LIKELY(compressed_size < size)) {

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/runtime/row-batch.h
----------------------------------------------------------------------
diff --git a/be/src/runtime/row-batch.h b/be/src/runtime/row-batch.h
index 1b3778e..270318a 100644
--- a/be/src/runtime/row-batch.h
+++ b/be/src/runtime/row-batch.h
@@ -56,14 +56,17 @@ class OutboundRowBatch {
   /// Returns the serialized tuple offsets' vector as a kudu::Slice.
   /// The tuple offsets vector is sent as KRPC sidecar.
   kudu::Slice TupleOffsetsAsSlice() const {
-    return kudu::Slice((uint8_t*)tuple_offsets_.data(),
+    return kudu::Slice(
+        const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(tuple_offsets_.data())),
         tuple_offsets_.size() * sizeof(tuple_offsets_[0]));
   }
 
   /// Returns the serialized tuple data's buffer as a kudu::Slice.
   /// The tuple data is sent as KRPC sidecar.
   kudu::Slice TupleDataAsSlice() const {
-    return kudu::Slice((uint8_t*)tuple_data_.data(), tuple_data_.length());
+    return kudu::Slice(
+        const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(tuple_data_.data())),
+        tuple_data_.length());
   }
 
   /// Returns true if the header has been intialized and ready to be sent.

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/runtime/types.cc
----------------------------------------------------------------------
diff --git a/be/src/runtime/types.cc b/be/src/runtime/types.cc
index c18c66e..ab8b8ec 100644
--- a/be/src/runtime/types.cc
+++ b/be/src/runtime/types.cc
@@ -366,7 +366,7 @@ llvm::ConstantStruct* ColumnType::ToIR(LlvmCodeGen* codegen) const {
 
   return llvm::cast<llvm::ConstantStruct>(
       llvm::ConstantStruct::get(column_type_type, type_field, len_field, precision_field,
-          scale_field, children_field, field_names_field, NULL));
+          scale_field, children_field, field_names_field));
 }
 
 }

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/service/fe-support.cc
----------------------------------------------------------------------
diff --git a/be/src/service/fe-support.cc b/be/src/service/fe-support.cc
index abb4acf..a8906a0 100644
--- a/be/src/service/fe-support.cc
+++ b/be/src/service/fe-support.cc
@@ -559,48 +559,52 @@ namespace impala {
 
 static JNINativeMethod native_methods[] = {
   {
-      (char*)"NativeFeTestInit", (char*)"()V",
+      const_cast<char*>("NativeFeTestInit"), const_cast<char*>("()V"),
       (void*)::Java_org_apache_impala_service_FeSupport_NativeFeTestInit
   },
   {
-      (char*)"NativeEvalExprsWithoutRow", (char*)"([B[B)[B",
+      const_cast<char*>("NativeEvalExprsWithoutRow"), const_cast<char*>("([B[B)[B"),
       (void*)::Java_org_apache_impala_service_FeSupport_NativeEvalExprsWithoutRow
   },
   {
-      (char*)"NativeCacheJar", (char*)"([B)[B",
+      const_cast<char*>("NativeCacheJar"), const_cast<char*>("([B)[B"),
       (void*)::Java_org_apache_impala_service_FeSupport_NativeCacheJar
   },
   {
-      (char*)"NativeLookupSymbol", (char*)"([B)[B",
+      const_cast<char*>("NativeLookupSymbol"), const_cast<char*>("([B)[B"),
       (void*)::Java_org_apache_impala_service_FeSupport_NativeLookupSymbol
   },
   {
-      (char*)"NativePrioritizeLoad", (char*)"([B)[B",
+      const_cast<char*>("NativePrioritizeLoad"), const_cast<char*>("([B)[B"),
       (void*)::Java_org_apache_impala_service_FeSupport_NativePrioritizeLoad
   },
   {
-      (char*)"NativeParseQueryOptions", (char*)"(Ljava/lang/String;[B)[B",
+      const_cast<char*>("NativeParseQueryOptions"),
+      const_cast<char*>("(Ljava/lang/String;[B)[B"),
       (void*)::Java_org_apache_impala_service_FeSupport_NativeParseQueryOptions
   },
   {
-      (char*)"NativeAddPendingTopicItem", (char*)"(JLjava/lang/String;J[BZ)Z",
+      const_cast<char*>("NativeAddPendingTopicItem"),
+      const_cast<char*>("(JLjava/lang/String;J[BZ)Z"),
       (void*)::Java_org_apache_impala_service_FeSupport_NativeAddPendingTopicItem
   },
   {
-      (char*)"NativeGetNextCatalogObjectUpdate",
-      (char*)"(J)Lorg/apache/impala/common/Pair;",
+      const_cast<char*>("NativeGetNextCatalogObjectUpdate"),
+      const_cast<char*>("(J)Lorg/apache/impala/common/Pair;"),
       (void*)::Java_org_apache_impala_service_FeSupport_NativeGetNextCatalogObjectUpdate
   },
   {
-      (char*)"NativeLibCacheSetNeedsRefresh", (char*)"(Ljava/lang/String;)Z",
+      const_cast<char*>("NativeLibCacheSetNeedsRefresh"),
+      const_cast<char*>("(Ljava/lang/String;)Z"),
       (void*)::Java_org_apache_impala_service_FeSupport_NativeLibCacheSetNeedsRefresh
   },
   {
-      (char*)"NativeLibCacheRemoveEntry", (char*)"(Ljava/lang/String;)Z",
+      const_cast<char*>("NativeLibCacheRemoveEntry"),
+      const_cast<char*>("(Ljava/lang/String;)Z"),
       (void*)::Java_org_apache_impala_service_FeSupport_NativeLibCacheRemoveEntry
   },
   {
-    (char*)"MinLogSpaceForBloomFilter", (char*)"(JD)I",
+    const_cast<char*>("MinLogSpaceForBloomFilter"), const_cast<char*>("(JD)I"),
     (void*)::Java_org_apache_impala_service_FeSupport_MinLogSpaceForBloomFilter
   },
 };

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/thirdparty/squeasel/squeasel.c
----------------------------------------------------------------------
diff --git a/be/src/thirdparty/squeasel/squeasel.c b/be/src/thirdparty/squeasel/squeasel.c
index d461b24..2149497 100644
--- a/be/src/thirdparty/squeasel/squeasel.c
+++ b/be/src/thirdparty/squeasel/squeasel.c
@@ -1057,6 +1057,7 @@ static int alloc_vprintf2(char **buf, const char *fmt, va_list ap) {
     if (!*buf) break;
     va_copy(ap_copy, ap);
     len = vsnprintf(*buf, size, fmt, ap_copy);
+    va_end(ap_copy);
   }
 
   return len;
@@ -1076,12 +1077,14 @@ static int alloc_vprintf(char **buf, size_t size, const char *fmt, va_list ap) {
   // On second pass, actually print the message.
   va_copy(ap_copy, ap);
   len = vsnprintf(NULL, 0, fmt, ap_copy);
+  va_end(ap_copy);
 
   if (len < 0) {
     // C runtime is not standard compliant, vsnprintf() returned -1.
     // Switch to alternative code path that uses incremental allocations.
     va_copy(ap_copy, ap);
     len = alloc_vprintf2(buf, fmt, ap);
+    va_end(ap_copy);
   } else if (len > (int) size &&
       (size = len + 1) > 0 &&
       (*buf = (char *) malloc(size)) == NULL) {
@@ -1089,6 +1092,7 @@ static int alloc_vprintf(char **buf, size_t size, const char *fmt, va_list ap) {
   } else {
     va_copy(ap_copy, ap);
     vsnprintf(*buf, size, fmt, ap_copy);
+    va_end(ap_copy);
   }
 
   return len;
@@ -1111,7 +1115,9 @@ int sq_vprintf(struct sq_connection *conn, const char *fmt, va_list ap) {
 int sq_printf(struct sq_connection *conn, const char *fmt, ...) {
   va_list ap;
   va_start(ap, fmt);
-  return sq_vprintf(conn, fmt, ap);
+  int ret_val = sq_vprintf(conn, fmt, ap);
+  va_end(ap);
+  return ret_val;
 }
 
 int sq_url_decode(const char *src, int src_len, char *dst,
@@ -4476,6 +4482,7 @@ struct sq_connection *sq_download(const char *host, int port, int use_ssl,
     sq_close_connection(conn);
     conn = NULL;
   }
+  va_end(ap);
 
   return conn;
 }

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/transport/TSasl.cpp
----------------------------------------------------------------------
diff --git a/be/src/transport/TSasl.cpp b/be/src/transport/TSasl.cpp
index 7b4d94d..a1e4a39 100644
--- a/be/src/transport/TSasl.cpp
+++ b/be/src/transport/TSasl.cpp
@@ -54,8 +54,8 @@ uint8_t* TSasl::unwrap(const uint8_t* incoming,
   uint8_t* output;
   int result;
 
-  result = sasl_decode(conn,
-                      (const char*)incoming, len, (const char**)&output, &outputlen);
+  result = sasl_decode(conn, reinterpret_cast<const char*>(incoming), len,
+      const_cast<const char**>(reinterpret_cast<char**>(&output)), &outputlen);
   if (result != SASL_OK) {
     throw SaslException(sasl_errdetail(conn));
   }
@@ -69,8 +69,8 @@ uint8_t* TSasl::wrap(const uint8_t* outgoing,
   uint8_t* output;
   int result;
 
-  result = sasl_encode(conn, (const char*)outgoing+offset,
-                       len, (const char**)&output, &outputlen);
+  result = sasl_encode(conn, reinterpret_cast<const char*>(outgoing) + offset, len,
+      const_cast<const char**>(reinterpret_cast<char**>(&output)), &outputlen);
   if (result != SASL_OK) {
     throw SaslException(sasl_errdetail(conn));
   }
@@ -158,9 +158,10 @@ uint8_t* TSaslClient::evaluateChallengeOrResponse(
     result=sasl_client_start(conn,
           mechList.c_str(),
           &client_interact, /* filled in if an interaction is needed */
-          (const char**)&out,      /* filled in on success */
+          const_cast<const char**>(
+              reinterpret_cast<char**>(&out)),      /* filled in on success */
           &outlen,   /* filled in on success */
-          (const char**)&mechUsing);
+          const_cast<const char**>(&mechUsing));
     clientStarted = true;
     if (result == SASL_OK || result == SASL_CONTINUE) {
       chosenMech = mechUsing;
@@ -168,10 +169,11 @@ uint8_t* TSaslClient::evaluateChallengeOrResponse(
   } else {
     if (len  > 0) {
       result=sasl_client_step(conn,  /* our context */
-          (const char*)challenge,    /* the data from the server */
+          reinterpret_cast<const char*>(challenge),    /* the data from the server */
           len, /* its length */
           &client_interact,  /* this should be unallocated and NULL */
-          (const char**)&out,     /* filled in on success */
+          const_cast<const char**>(
+              reinterpret_cast<char**>(&out)),     /* filled in on success */
           &outlen); /* filled in on success */
     } else {
       result = SASL_CONTINUE;
@@ -237,11 +239,11 @@ uint8_t* TSaslServer::evaluateChallengeOrResponse(const uint8_t* response,
   uint32_t result;
 
   if (!serverStarted) {
-    result = sasl_server_start(conn,
-        (const char *)response, NULL, 0, (const char **)&out, &outlen);
+    result = sasl_server_start(conn, reinterpret_cast<const char*>(response), NULL, 0,
+        const_cast<const char**>(reinterpret_cast<char**>(&out)), &outlen);
   } else {
-    result = sasl_server_step(conn,
-        (const char*)response, len, (const char**)&out, &outlen);
+    result = sasl_server_step(conn, reinterpret_cast<const char*>(response), len,
+        const_cast<const char**>(reinterpret_cast<char**>(&out)), &outlen);
   }
 
   if (result == SASL_OK) {

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/transport/TSaslClientTransport.cpp
----------------------------------------------------------------------
diff --git a/be/src/transport/TSaslClientTransport.cpp b/be/src/transport/TSaslClientTransport.cpp
index 279a966..5d20e63 100644
--- a/be/src/transport/TSaslClientTransport.cpp
+++ b/be/src/transport/TSaslClientTransport.cpp
@@ -65,8 +65,8 @@ void TSaslClientTransport::handleSaslStartMessage() {
   }
 
   /* These two calls comprise a single message in the thrift-sasl protocol. */
-  sendSaslMessage(TSASL_START,
-      (uint8_t*)sasl_->getMechanismName().c_str(),
+  sendSaslMessage(TSASL_START, const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(
+                                   sasl_->getMechanismName().c_str())),
       sasl_->getMechanismName().length(), false);
   sendSaslMessage(TSASL_OK, initialResponse, resLength);
 

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/transport/TSaslTransport.cpp
----------------------------------------------------------------------
diff --git a/be/src/transport/TSaslTransport.cpp b/be/src/transport/TSaslTransport.cpp
index 55e57c8..20eaef7 100644
--- a/be/src/transport/TSaslTransport.cpp
+++ b/be/src/transport/TSaslTransport.cpp
@@ -225,7 +225,7 @@ namespace apache { namespace thrift { namespace transport {
     const uint8_t* newBuf;
 
     if (shouldWrap_) {
-      newBuf = sasl_->wrap((uint8_t*)buf, 0, len, &len);
+      newBuf = sasl_->wrap(const_cast<uint8_t*>(buf), 0, len, &len);
     } else {
       newBuf = buf;
     }

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/udf/udf-test.cc
----------------------------------------------------------------------
diff --git a/be/src/udf/udf-test.cc b/be/src/udf/udf-test.cc
index 0bce70f..d16fb08 100644
--- a/be/src/udf/udf-test.cc
+++ b/be/src/udf/udf-test.cc
@@ -136,7 +136,8 @@ IntVal ValidateMem(FunctionContext* context) {
 }
 
 StringVal TimeToString(FunctionContext* context, const TimestampVal& time) {
-  ptime t(*(date*)&time.date);
+  ptime t(*const_cast<date*>(reinterpret_cast<const date*>(&time.date)));
+  // ptime t(*(date*)&time.date); is this conversion correct?
   t += nanoseconds(time.time_of_day);
   stringstream ss;
   ss << to_iso_extended_string(t.date()) << " " << to_simple_string(t.time_of_day());

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/udf/udf.h
----------------------------------------------------------------------
diff --git a/be/src/udf/udf.h b/be/src/udf/udf.h
index 3d04115..26e1f45 100644
--- a/be/src/udf/udf.h
+++ b/be/src/udf/udf.h
@@ -599,7 +599,9 @@ struct StringVal : public AnyVal {
 
   /// Construct a StringVal from NULL-terminated c-string. Note: this does not make a
   /// copy of ptr so the underlying string must exist as long as this StringVal does.
-  StringVal(const char* ptr) : len(strlen(ptr)), ptr((uint8_t*)ptr) {}
+  StringVal(const char* ptr)
+    : len(strlen(ptr)),
+      ptr(const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(ptr))) {}
 
   /// Creates a StringVal, allocating a new buffer with 'len'. This should
   /// be used to return StringVal objects in UDF/UDAs that need to allocate new

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/bin/bootstrap_toolchain.py
----------------------------------------------------------------------
diff --git a/bin/bootstrap_toolchain.py b/bin/bootstrap_toolchain.py
index 8cee665..a09c905 100755
--- a/bin/bootstrap_toolchain.py
+++ b/bin/bootstrap_toolchain.py
@@ -431,7 +431,7 @@ if __name__ == "__main__":
       "flatbuffers", "gcc", "gflags", "glog", "gperftools", "gtest", "libev",
       "lz4", "openldap", "openssl", "protobuf",
       "rapidjson", "re2", "snappy", "thrift", "tpc-h", "tpc-ds", "zlib"])
-  packages.insert(0, Package("llvm", "3.9.1-asserts"))
+  packages.insert(0, Package("llvm", "5.0.1-asserts"))
   bootstrap(toolchain_root, packages)
 
   # Download the CDH components if necessary.

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/bin/impala-config.sh
----------------------------------------------------------------------
diff --git a/bin/impala-config.sh b/bin/impala-config.sh
index e109573..7060499 100755
--- a/bin/impala-config.sh
+++ b/bin/impala-config.sh
@@ -72,7 +72,7 @@ fi
 # moving to a different build of the toolchain, e.g. when a version is bumped or a
 # compile option is changed. The build id can be found in the output of the toolchain
 # build jobs, it is constructed from the build number and toolchain git hash prefix.
-export IMPALA_TOOLCHAIN_BUILD_ID=53-d95bb7f778
+export IMPALA_TOOLCHAIN_BUILD_ID=88-8e37339d45
 # Versions of toolchain dependencies.
 # -----------------------------------
 export IMPALA_AVRO_VERSION=1.7.4-p4
@@ -105,14 +105,14 @@ export IMPALA_GTEST_VERSION=1.6.0
 unset IMPALA_GTEST_URL
 export IMPALA_LIBEV_VERSION=4.20
 unset IMPALA_LIBEV_URL
-export IMPALA_LLVM_VERSION=3.9.1
+export IMPALA_LLVM_VERSION=5.0.1
 unset IMPALA_LLVM_URL
-export IMPALA_LLVM_ASAN_VERSION=3.9.1
+export IMPALA_LLVM_ASAN_VERSION=5.0.1
 unset IMPALA_LLVM_ASAN_URL
 
 # Debug builds should use the release+asserts build to get additional coverage.
 # Don't use the LLVM debug build because the binaries are too large to distribute.
-export IMPALA_LLVM_DEBUG_VERSION=3.9.1-asserts
+export IMPALA_LLVM_DEBUG_VERSION=5.0.1-asserts
 unset IMPALA_LLVM_DEBUG_URL
 export IMPALA_LZ4_VERSION=1.7.5
 unset IMPALA_LZ4_URL

http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/testdata/workloads/functional-query/queries/QueryTest/udf-errors.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/functional-query/queries/QueryTest/udf-errors.test b/testdata/workloads/functional-query/queries/QueryTest/udf-errors.test
index 81e459a..fb91070 100644
--- a/testdata/workloads/functional-query/queries/QueryTest/udf-errors.test
+++ b/testdata/workloads/functional-query/queries/QueryTest/udf-errors.test
@@ -24,6 +24,7 @@ create function if not exists foo (string, string) returns string location
 '$FILESYSTEM_PREFIX/test-warehouse/$DATABASE_bad_udf.ll' symbol='MyAwesomeUdf';
 ---- CATCH
 Could not load binary: $FILESYSTEM_PREFIX/test-warehouse/$DATABASE_bad_udf.ll
+Invalid bitcode signature
 ====
 ---- QUERY
 # This test is run with codegen disabled. Interpretation only handles up to 20 arguments.


[2/3] impala git commit: IMPALA-6752: fix pip --no-binary usage

Posted by ta...@apache.org.
IMPALA-6752: fix pip --no-binary usage

The key facts here are:
* --no-cache-dir is crucial because it prevents us pulling in a
  cached package compiled with the wrong compiler.
* --no-binary takes a argument specifying the set of packages it
  should apply to.

The latent bug was that we didn't provide an argument to --no-binary
and it instead it took --no-index as the argument, which was a no-op
because there are no packages of that name. IMPALA-6731 moved the
arguments, and instead --no-cache-dir became the argument to
--no-binary

Testing:
I could reliably reproduce the failure in my environment by deleting
infra/python/env then running a test with impala-py.test. This patch
is sufficient to solve it.

Change-Id: I118738347ca537b2dddfa6142c3eb5608c49c2e0
Reviewed-on: http://gerrit.cloudera.org:8080/9829
Reviewed-by: Tim Armstrong <ta...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/f46c695a
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/f46c695a
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/f46c695a

Branch: refs/heads/2.x
Commit: f46c695a937eb61e16eaa2e8df5d9ec8536f3abd
Parents: 720a654
Author: Tim Armstrong <ta...@cloudera.com>
Authored: Tue Mar 27 15:49:20 2018 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Wed Mar 28 07:40:00 2018 +0000

----------------------------------------------------------------------
 infra/python/bootstrap_virtualenv.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/f46c695a/infra/python/bootstrap_virtualenv.py
----------------------------------------------------------------------
diff --git a/infra/python/bootstrap_virtualenv.py b/infra/python/bootstrap_virtualenv.py
index fe7695d..1953935 100644
--- a/infra/python/bootstrap_virtualenv.py
+++ b/infra/python/bootstrap_virtualenv.py
@@ -147,7 +147,7 @@ def exec_pip_install(args, cc="no-cc-available", env=None):
   # --no-cache-dir is used to prevent caching of compiled artifacts, which may be built
   # with different compilers or settings.
   cmd = [os.path.join(ENV_DIR, "bin", "python"), os.path.join(ENV_DIR, "bin", "pip"),
-    "install", "-v", "--no-binary", "--no-cache-dir"]
+      "install", "-v", "--no-binary", ":all:", "--no-cache-dir"]
 
   # When using a custom mirror, we also must use the index of that mirror.
   if "PYPI_MIRROR" in os.environ: