/** * Executes the given Azkaban related SELECT SQL operations. it will call * {@link AzkabanDataSource#getConnection()} inside queryrunner.query. * * @param sqlQuery The SQL query statement to execute. * @param resultHandler The handler used to create the result object * @param params Initialize the PreparedStatement's IN parameters * @param <T> The type of object that the qeury handler returns * @return The object returned by the handler. */ public <T> T query(final String baseQuery, final ResultSetHandler<T> resultHandler, final Object... params) throws SQLException { try { return this.queryRunner.query(baseQuery, resultHandler, params); } catch (final SQLException ex) { // todo kunkun-tang: Retry logics should be implemented here. logger.error("query failed", ex); if (this.dbMetrics != null) { this.dbMetrics.markDBFailQuery(); } throw ex; } }