diff --git a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java index c0823b6ef67c6c2cdc0484abac99ed81bac541ba..e4b9cd7e7dfb8de8a5889c8a089f6a533c2a4dcb 100644 --- a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java +++ b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java @@ -2334,6 +2334,26 @@ public void run() { verifyFetchedLog(incrementalLogs, expectedLogs); } + /** + * Test getting query log when HS2 disable logging. + * + * @throws Exception + */ + @Test + public void testGetQueryLogOnDisabledLog() throws Exception { + Statement setStmt = con.createStatement(); + setStmt.execute("set hive.server2.logging.operation.enabled = false"); + String sql = "select count(*) from " + tableName; + HiveStatement stmt = (HiveStatement)con.createStatement(); + assertNotNull("Statement is null", stmt); + stmt.executeQuery(sql); + List logs = stmt.getQueryLog(false, 10); + stmt.close(); + assertTrue(logs.size() == 0); + setStmt.execute("set hive.server2.logging.operation.enabled = true"); + setStmt.close(); + } + private void verifyFetchedLog(List logs, String[] expectedLogs) { StringBuilder stringBuilder = new StringBuilder(); diff --git a/jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java b/jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java index 6b3d05cfe287706b916915fa63a43540b0198009..ce1ebc596e70155c513b02cd028553869a37be34 100644 --- a/jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java +++ b/jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java @@ -31,6 +31,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.hive.service.cli.GetInfoType; import org.apache.hive.service.cli.RowSet; import org.apache.hive.service.cli.RowSetFactory; import org.apache.hive.service.cli.thrift.TCLIService; @@ -40,6 +41,8 @@ import org.apache.hive.service.cli.thrift.TCloseOperationResp; import org.apache.hive.service.cli.thrift.TExecuteStatementReq; import org.apache.hive.service.cli.thrift.TExecuteStatementResp; +import org.apache.hive.service.cli.thrift.TGetInfoReq; +import org.apache.hive.service.cli.thrift.TGetInfoResp; import org.apache.hive.service.cli.thrift.TGetOperationStatusReq; import org.apache.hive.service.cli.thrift.TGetOperationStatusResp; import org.apache.hive.service.cli.thrift.TOperationHandle; @@ -816,6 +819,13 @@ public boolean hasMoreLogs() { transportLock.lock(); try { if (stmtHandle != null) { + TGetInfoReq req = new TGetInfoReq(sessHandle, GetInfoType.CLI_HS2_LOGENABLED.toTGetInfoType()); + TGetInfoResp resp; + resp = client.GetInfo(req); + boolean loggingEnabled = Boolean.parseBoolean(resp.getInfoValue().getStringValue()); + if (!loggingEnabled) { + return logs; + } TFetchResultsReq tFetchResultsReq = new TFetchResultsReq(stmtHandle, getFetchOrientation(incremental), fetchSize); tFetchResultsReq.setFetchType((short)1); diff --git a/service/if/TCLIService.thrift b/service/if/TCLIService.thrift index baf583fb3ecd4a0ab248540ffb5db57100028968..898d01dd053a3f72f39ab47fa4297fa2b2ef0e4c 100644 --- a/service/if/TCLIService.thrift +++ b/service/if/TCLIService.thrift @@ -644,6 +644,7 @@ enum TGetInfoType { CLI_CATALOG_NAME = 10003, CLI_COLLATION_SEQ = 10004, CLI_MAX_IDENTIFIER_LEN = 10005, + CLI_HS2_LOGENABLED = 10100, } union TGetInfoValue { diff --git a/service/src/gen/thrift/gen-cpp/TCLIService_types.cpp b/service/src/gen/thrift/gen-cpp/TCLIService_types.cpp index 86eeea33a09a15b311c7a63e8b19d83c63921ff9..82c8273e373ac38af3674d8b638a70636ad43987 100644 --- a/service/src/gen/thrift/gen-cpp/TCLIService_types.cpp +++ b/service/src/gen/thrift/gen-cpp/TCLIService_types.cpp @@ -191,7 +191,8 @@ int _kTGetInfoTypeValues[] = { TGetInfoType::CLI_DESCRIBE_PARAMETER, TGetInfoType::CLI_CATALOG_NAME, TGetInfoType::CLI_COLLATION_SEQ, - TGetInfoType::CLI_MAX_IDENTIFIER_LEN + TGetInfoType::CLI_MAX_IDENTIFIER_LEN, + TGetInfoType::CLI_HS2_LOGENABLED }; const char* _kTGetInfoTypeNames[] = { "CLI_MAX_DRIVER_CONNECTIONS", @@ -240,9 +241,10 @@ const char* _kTGetInfoTypeNames[] = { "CLI_DESCRIBE_PARAMETER", "CLI_CATALOG_NAME", "CLI_COLLATION_SEQ", - "CLI_MAX_IDENTIFIER_LEN" + "CLI_MAX_IDENTIFIER_LEN", + "CLI_HS2_LOGENABLED" }; -const std::map _TGetInfoType_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(47, _kTGetInfoTypeValues, _kTGetInfoTypeNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL)); +const std::map _TGetInfoType_VALUES_TO_NAMES(::apache::thrift::TEnumIterator(48, _kTGetInfoTypeValues, _kTGetInfoTypeNames), ::apache::thrift::TEnumIterator(-1, NULL, NULL)); int _kTFetchOrientationValues[] = { TFetchOrientation::FETCH_NEXT, diff --git a/service/src/gen/thrift/gen-cpp/TCLIService_types.h b/service/src/gen/thrift/gen-cpp/TCLIService_types.h index 7bceabd5d1bb70ae947253c58205231a94cd0a4b..1e3af751995b24a1b53bbf3995bc0e7bc6d58411 100644 --- a/service/src/gen/thrift/gen-cpp/TCLIService_types.h +++ b/service/src/gen/thrift/gen-cpp/TCLIService_types.h @@ -151,7 +151,8 @@ struct TGetInfoType { CLI_DESCRIBE_PARAMETER = 10002, CLI_CATALOG_NAME = 10003, CLI_COLLATION_SEQ = 10004, - CLI_MAX_IDENTIFIER_LEN = 10005 + CLI_MAX_IDENTIFIER_LEN = 10005, + CLI_HS2_LOGENABLED = 10100 }; }; diff --git a/service/src/gen/thrift/gen-javabean/org/apache/hive/service/cli/thrift/TGetInfoType.java b/service/src/gen/thrift/gen-javabean/org/apache/hive/service/cli/thrift/TGetInfoType.java index d9dd62414f00183f8082e5bb0ab2e61082c94b80..9196b1969a8fd3b54ca73f01b115c31be2fb9a0d 100644 --- a/service/src/gen/thrift/gen-javabean/org/apache/hive/service/cli/thrift/TGetInfoType.java +++ b/service/src/gen/thrift/gen-javabean/org/apache/hive/service/cli/thrift/TGetInfoType.java @@ -58,7 +58,8 @@ CLI_DESCRIBE_PARAMETER(10002), CLI_CATALOG_NAME(10003), CLI_COLLATION_SEQ(10004), - CLI_MAX_IDENTIFIER_LEN(10005); + CLI_MAX_IDENTIFIER_LEN(10005), + CLI_HS2_LOGENABLED(10100); private final int value; @@ -173,6 +174,8 @@ public static TGetInfoType findByValue(int value) { return CLI_COLLATION_SEQ; case 10005: return CLI_MAX_IDENTIFIER_LEN; + case 10100: + return CLI_HS2_LOGENABLED; default: return null; } diff --git a/service/src/gen/thrift/gen-py/TCLIService/ttypes.py b/service/src/gen/thrift/gen-py/TCLIService/ttypes.py index 068727cecc36b8d58ca5bf7b11c1d65416d9f7e6..e8348d86d8345f89467453bdaed5a8411ffd06a1 100644 --- a/service/src/gen/thrift/gen-py/TCLIService/ttypes.py +++ b/service/src/gen/thrift/gen-py/TCLIService/ttypes.py @@ -260,6 +260,7 @@ class TGetInfoType: CLI_CATALOG_NAME = 10003 CLI_COLLATION_SEQ = 10004 CLI_MAX_IDENTIFIER_LEN = 10005 + CLI_HS2_LOGENABLED = 10100 _VALUES_TO_NAMES = { 0: "CLI_MAX_DRIVER_CONNECTIONS", @@ -309,6 +310,7 @@ class TGetInfoType: 10003: "CLI_CATALOG_NAME", 10004: "CLI_COLLATION_SEQ", 10005: "CLI_MAX_IDENTIFIER_LEN", + 10100: "CLI_HS2_LOGENABLED", } _NAMES_TO_VALUES = { @@ -359,6 +361,7 @@ class TGetInfoType: "CLI_CATALOG_NAME": 10003, "CLI_COLLATION_SEQ": 10004, "CLI_MAX_IDENTIFIER_LEN": 10005, + "CLI_HS2_LOGENABLED": 10100, } class TFetchOrientation: diff --git a/service/src/gen/thrift/gen-rb/t_c_l_i_service_types.rb b/service/src/gen/thrift/gen-rb/t_c_l_i_service_types.rb index b4825338f49cbcedeb59233c6c602933582a4d64..e7d917aa3b2ac6f98b9be254b6cd3c49a4dd2b97 100644 --- a/service/src/gen/thrift/gen-rb/t_c_l_i_service_types.rb +++ b/service/src/gen/thrift/gen-rb/t_c_l_i_service_types.rb @@ -131,8 +131,9 @@ module TGetInfoType CLI_CATALOG_NAME = 10003 CLI_COLLATION_SEQ = 10004 CLI_MAX_IDENTIFIER_LEN = 10005 - VALUE_MAP = {0 => "CLI_MAX_DRIVER_CONNECTIONS", 1 => "CLI_MAX_CONCURRENT_ACTIVITIES", 2 => "CLI_DATA_SOURCE_NAME", 8 => "CLI_FETCH_DIRECTION", 13 => "CLI_SERVER_NAME", 14 => "CLI_SEARCH_PATTERN_ESCAPE", 17 => "CLI_DBMS_NAME", 18 => "CLI_DBMS_VER", 19 => "CLI_ACCESSIBLE_TABLES", 20 => "CLI_ACCESSIBLE_PROCEDURES", 23 => "CLI_CURSOR_COMMIT_BEHAVIOR", 25 => "CLI_DATA_SOURCE_READ_ONLY", 26 => "CLI_DEFAULT_TXN_ISOLATION", 28 => "CLI_IDENTIFIER_CASE", 29 => "CLI_IDENTIFIER_QUOTE_CHAR", 30 => "CLI_MAX_COLUMN_NAME_LEN", 31 => "CLI_MAX_CURSOR_NAME_LEN", 32 => "CLI_MAX_SCHEMA_NAME_LEN", 34 => "CLI_MAX_CATALOG_NAME_LEN", 35 => "CLI_MAX_TABLE_NAME_LEN", 43 => "CLI_SCROLL_CONCURRENCY", 46 => "CLI_TXN_CAPABLE", 47 => "CLI_USER_NAME", 72 => "CLI_TXN_ISOLATION_OPTION", 73 => "CLI_INTEGRITY", 81 => "CLI_GETDATA_EXTENSIONS", 85 => "CLI_NULL_COLLATION", 86 => "CLI_ALTER_TABLE", 90 => "CLI_ORDER_BY_COLUMNS_IN_SELECT", 94 => "CLI_SPECIAL_CHARACTERS", 97 => "CLI_MAX_COLUMNS_IN_GROUP_BY", 98 => "CLI_MAX_COLUMNS_IN_INDEX", 99 => "CLI_MAX_COLUMNS_IN_ORDER_BY", 100 => "CLI_MAX_COLUMNS_IN_SELECT", 101 => "CLI_MAX_COLUMNS_IN_TABLE", 102 => "CLI_MAX_INDEX_SIZE", 104 => "CLI_MAX_ROW_SIZE", 105 => "CLI_MAX_STATEMENT_LEN", 106 => "CLI_MAX_TABLES_IN_SELECT", 107 => "CLI_MAX_USER_NAME_LEN", 115 => "CLI_OJ_CAPABILITIES", 10000 => "CLI_XOPEN_CLI_YEAR", 10001 => "CLI_CURSOR_SENSITIVITY", 10002 => "CLI_DESCRIBE_PARAMETER", 10003 => "CLI_CATALOG_NAME", 10004 => "CLI_COLLATION_SEQ", 10005 => "CLI_MAX_IDENTIFIER_LEN"} - VALID_VALUES = Set.new([CLI_MAX_DRIVER_CONNECTIONS, CLI_MAX_CONCURRENT_ACTIVITIES, CLI_DATA_SOURCE_NAME, CLI_FETCH_DIRECTION, CLI_SERVER_NAME, CLI_SEARCH_PATTERN_ESCAPE, CLI_DBMS_NAME, CLI_DBMS_VER, CLI_ACCESSIBLE_TABLES, CLI_ACCESSIBLE_PROCEDURES, CLI_CURSOR_COMMIT_BEHAVIOR, CLI_DATA_SOURCE_READ_ONLY, CLI_DEFAULT_TXN_ISOLATION, CLI_IDENTIFIER_CASE, CLI_IDENTIFIER_QUOTE_CHAR, CLI_MAX_COLUMN_NAME_LEN, CLI_MAX_CURSOR_NAME_LEN, CLI_MAX_SCHEMA_NAME_LEN, CLI_MAX_CATALOG_NAME_LEN, CLI_MAX_TABLE_NAME_LEN, CLI_SCROLL_CONCURRENCY, CLI_TXN_CAPABLE, CLI_USER_NAME, CLI_TXN_ISOLATION_OPTION, CLI_INTEGRITY, CLI_GETDATA_EXTENSIONS, CLI_NULL_COLLATION, CLI_ALTER_TABLE, CLI_ORDER_BY_COLUMNS_IN_SELECT, CLI_SPECIAL_CHARACTERS, CLI_MAX_COLUMNS_IN_GROUP_BY, CLI_MAX_COLUMNS_IN_INDEX, CLI_MAX_COLUMNS_IN_ORDER_BY, CLI_MAX_COLUMNS_IN_SELECT, CLI_MAX_COLUMNS_IN_TABLE, CLI_MAX_INDEX_SIZE, CLI_MAX_ROW_SIZE, CLI_MAX_STATEMENT_LEN, CLI_MAX_TABLES_IN_SELECT, CLI_MAX_USER_NAME_LEN, CLI_OJ_CAPABILITIES, CLI_XOPEN_CLI_YEAR, CLI_CURSOR_SENSITIVITY, CLI_DESCRIBE_PARAMETER, CLI_CATALOG_NAME, CLI_COLLATION_SEQ, CLI_MAX_IDENTIFIER_LEN]).freeze + CLI_HS2_LOGENABLED = 10100 + VALUE_MAP = {0 => "CLI_MAX_DRIVER_CONNECTIONS", 1 => "CLI_MAX_CONCURRENT_ACTIVITIES", 2 => "CLI_DATA_SOURCE_NAME", 8 => "CLI_FETCH_DIRECTION", 13 => "CLI_SERVER_NAME", 14 => "CLI_SEARCH_PATTERN_ESCAPE", 17 => "CLI_DBMS_NAME", 18 => "CLI_DBMS_VER", 19 => "CLI_ACCESSIBLE_TABLES", 20 => "CLI_ACCESSIBLE_PROCEDURES", 23 => "CLI_CURSOR_COMMIT_BEHAVIOR", 25 => "CLI_DATA_SOURCE_READ_ONLY", 26 => "CLI_DEFAULT_TXN_ISOLATION", 28 => "CLI_IDENTIFIER_CASE", 29 => "CLI_IDENTIFIER_QUOTE_CHAR", 30 => "CLI_MAX_COLUMN_NAME_LEN", 31 => "CLI_MAX_CURSOR_NAME_LEN", 32 => "CLI_MAX_SCHEMA_NAME_LEN", 34 => "CLI_MAX_CATALOG_NAME_LEN", 35 => "CLI_MAX_TABLE_NAME_LEN", 43 => "CLI_SCROLL_CONCURRENCY", 46 => "CLI_TXN_CAPABLE", 47 => "CLI_USER_NAME", 72 => "CLI_TXN_ISOLATION_OPTION", 73 => "CLI_INTEGRITY", 81 => "CLI_GETDATA_EXTENSIONS", 85 => "CLI_NULL_COLLATION", 86 => "CLI_ALTER_TABLE", 90 => "CLI_ORDER_BY_COLUMNS_IN_SELECT", 94 => "CLI_SPECIAL_CHARACTERS", 97 => "CLI_MAX_COLUMNS_IN_GROUP_BY", 98 => "CLI_MAX_COLUMNS_IN_INDEX", 99 => "CLI_MAX_COLUMNS_IN_ORDER_BY", 100 => "CLI_MAX_COLUMNS_IN_SELECT", 101 => "CLI_MAX_COLUMNS_IN_TABLE", 102 => "CLI_MAX_INDEX_SIZE", 104 => "CLI_MAX_ROW_SIZE", 105 => "CLI_MAX_STATEMENT_LEN", 106 => "CLI_MAX_TABLES_IN_SELECT", 107 => "CLI_MAX_USER_NAME_LEN", 115 => "CLI_OJ_CAPABILITIES", 10000 => "CLI_XOPEN_CLI_YEAR", 10001 => "CLI_CURSOR_SENSITIVITY", 10002 => "CLI_DESCRIBE_PARAMETER", 10003 => "CLI_CATALOG_NAME", 10004 => "CLI_COLLATION_SEQ", 10005 => "CLI_MAX_IDENTIFIER_LEN", 10100 => "CLI_HS2_LOGENABLED"} + VALID_VALUES = Set.new([CLI_MAX_DRIVER_CONNECTIONS, CLI_MAX_CONCURRENT_ACTIVITIES, CLI_DATA_SOURCE_NAME, CLI_FETCH_DIRECTION, CLI_SERVER_NAME, CLI_SEARCH_PATTERN_ESCAPE, CLI_DBMS_NAME, CLI_DBMS_VER, CLI_ACCESSIBLE_TABLES, CLI_ACCESSIBLE_PROCEDURES, CLI_CURSOR_COMMIT_BEHAVIOR, CLI_DATA_SOURCE_READ_ONLY, CLI_DEFAULT_TXN_ISOLATION, CLI_IDENTIFIER_CASE, CLI_IDENTIFIER_QUOTE_CHAR, CLI_MAX_COLUMN_NAME_LEN, CLI_MAX_CURSOR_NAME_LEN, CLI_MAX_SCHEMA_NAME_LEN, CLI_MAX_CATALOG_NAME_LEN, CLI_MAX_TABLE_NAME_LEN, CLI_SCROLL_CONCURRENCY, CLI_TXN_CAPABLE, CLI_USER_NAME, CLI_TXN_ISOLATION_OPTION, CLI_INTEGRITY, CLI_GETDATA_EXTENSIONS, CLI_NULL_COLLATION, CLI_ALTER_TABLE, CLI_ORDER_BY_COLUMNS_IN_SELECT, CLI_SPECIAL_CHARACTERS, CLI_MAX_COLUMNS_IN_GROUP_BY, CLI_MAX_COLUMNS_IN_INDEX, CLI_MAX_COLUMNS_IN_ORDER_BY, CLI_MAX_COLUMNS_IN_SELECT, CLI_MAX_COLUMNS_IN_TABLE, CLI_MAX_INDEX_SIZE, CLI_MAX_ROW_SIZE, CLI_MAX_STATEMENT_LEN, CLI_MAX_TABLES_IN_SELECT, CLI_MAX_USER_NAME_LEN, CLI_OJ_CAPABILITIES, CLI_XOPEN_CLI_YEAR, CLI_CURSOR_SENSITIVITY, CLI_DESCRIBE_PARAMETER, CLI_CATALOG_NAME, CLI_COLLATION_SEQ, CLI_MAX_IDENTIFIER_LEN, CLI_HS2_LOGENABLED]).freeze end module TFetchOrientation diff --git a/service/src/java/org/apache/hive/service/cli/GetInfoType.java b/service/src/java/org/apache/hive/service/cli/GetInfoType.java index 8dd33a88fdeb2c13fe05eb7ee23fe18e8497d4a7..b266035abdd1ffa779a0066f60460e6e5b34bcae 100644 --- a/service/src/java/org/apache/hive/service/cli/GetInfoType.java +++ b/service/src/java/org/apache/hive/service/cli/GetInfoType.java @@ -72,8 +72,8 @@ CLI_DESCRIBE_PARAMETER(TGetInfoType.CLI_DESCRIBE_PARAMETER), CLI_CATALOG_NAME(TGetInfoType.CLI_CATALOG_NAME), CLI_COLLATION_SEQ(TGetInfoType.CLI_COLLATION_SEQ), - CLI_MAX_IDENTIFIER_LEN(TGetInfoType.CLI_MAX_IDENTIFIER_LEN); - + CLI_MAX_IDENTIFIER_LEN(TGetInfoType.CLI_MAX_IDENTIFIER_LEN), + CLI_HS2_LOGENABLED(TGetInfoType.CLI_HS2_LOGENABLED); private final TGetInfoType tInfoType; GetInfoType(TGetInfoType tInfoType) { diff --git a/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java b/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java index cc3e807e7a8401c9e3351d7ed2c14f227e4e63bf..32636514514fc1ae19cb010795a38391bd429561 100644 --- a/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java +++ b/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java @@ -354,6 +354,8 @@ public GetInfoValue getInfo(GetInfoType getInfoType) return new GetInfoValue(128); case CLI_MAX_TABLE_NAME_LEN: return new GetInfoValue(128); + case CLI_HS2_LOGENABLED: + return new GetInfoValue((hiveConf.getBoolVar(ConfVars.HIVE_SERVER2_LOGGING_OPERATION_ENABLED))? "true" : "false" ); case CLI_TXN_CAPABLE: default: throw new HiveSQLException("Unrecognized GetInfoType value: " + getInfoType.toString());