salesforce / Argus

Time series monitoring and alerting platform.
BSD 3-Clause "New" or "Revised" License
505 stars 145 forks source link

Refactor PhoenixTSDBEngine to remove a few RESOURCE_LEAKS reported by Coverity #491

Open bsura opened 7 years ago

bsura commented 7 years ago

** CID 163940: FindBugs: Performance (FB.SBSC_USE_STRINGBUFFER_CONCATENATION) /ArgusCore/src/main/java/com/salesforce/dva/argus/service/tsdb/PhoenixTSDBEngine.java: 71 in com.salesforce.dva.argus.service.tsdb.PhoenixTSDBEngine.upsertMetrics(java.sql.Connection, com.salesforce.dva.argus.entity.Metric)()


*** CID 163940: FindBugs: Performance (FB.SBSC_USE_STRINGBUFFER_CONCATENATION) /ArgusCore/src/main/java/com/salesforce/dva/argus/service/tsdb/PhoenixTSDBEngine.java: 71 in com.salesforce.dva.argus.service.tsdb.PhoenixTSDBEngine.upsertMetrics(java.sql.Connection, com.salesforce.dva.argus.entity.Metric)() 65 66 String viewName = getPhoenixViewName(metric.getScope(), metric.getMetric()); 67 68 String tagkeys = "", tagvalues = ""; 69 for(Map.Entry<String, String> tagEntry : metric.getTags().entrySet()) { 70 tagkeys += "\"" + tagEntry.getKey() + "\",";

CID 163940:  FindBugs: Performance  (FB.SBSC_USE_STRINGBUFFER_CONCATENATION)
com.salesforce.dva.argus.service.tsdb.PhoenixTSDBEngine.upsertMetrics(Connection, Metric) concatenates strings using + in a loop.

71 tagvalues += "'" + tagEntry.getValue() + "',"; 72 } 73 74 if(metric.getDisplayName() != null && !metric.getDisplayName().isEmpty()) { 75 tagkeys += "DISPLAY_NAME,"; 76 tagvalues += "'" + metric.getDisplayName() + "',";

** CID 163939: FindBugs: Performance (FB.SBSC_USE_STRINGBUFFER_CONCATENATION) /ArgusCore/src/main/java/com/salesforce/dva/argus/service/tsdb/PhoenixTSDBEngine.java: 203 in com.salesforce.dva.argus.service.tsdb.PhoenixTSDBEngine.getPhoenixQuery(com.salesforce.dva.argus.service.tsdb.MetricQuery)()


*** CID 163939: FindBugs: Performance (FB.SBSC_USE_STRINGBUFFER_CONCATENATION) /ArgusCore/src/main/java/com/salesforce/dva/argus/service/tsdb/PhoenixTSDBEngine.java: 203 in com.salesforce.dva.argus.service.tsdb.PhoenixTSDBEngine.getPhoenixQuery(com.salesforce.dva.argus.service.tsdb.MetricQuery)() 197 List tagList = Arrays.asList(tagValue.split("\|")); 198 String tagValues = tagList.stream() 199 .map((s) -> "'" + s + "'") 200 .collect(Collectors.joining(", ")); 201 tagWhereClaue += " AND \"" + tagEntry.getKey() + "\" IN (" + tagValues + ")"; 202 } else {

CID 163939:  FindBugs: Performance  (FB.SBSC_USE_STRINGBUFFER_CONCATENATION)
com.salesforce.dva.argus.service.tsdb.PhoenixTSDBEngine.getPhoenixQuery(MetricQuery) concatenates strings using + in a loop.

203 tagWhereClaue += " AND \"" + tagEntry.getKey() + "\" IN ('" + tagValue + "')"; 204 } 205 } 206 207 String selectSql = MessageFormat.format("SELECT {0}(val) val, ts epoch_time, display_name, units {1} FROM {2}" 208 + " WHERE ts <= ? AND ts >= ? {3}"

** CID 163932: Resource leaks (RESOURCE_LEAK) /ArgusCore/src/main/java/com/salesforce/dva/argus/service/tsdb/PhoenixTSDBEngine.java: 161 in com.salesforce.dva.argus.service.tsdb.PhoenixTSDBEngine.selectMetrics(java.sql.Connection, com.salesforce.dva.argus.service.tsdb.MetricQuery)()


*** CID 163932: Resource leaks (RESOURCE_LEAK) /ArgusCore/src/main/java/com/salesforce/dva/argus/service/tsdb/PhoenixTSDBEngine.java: 161 in com.salesforce.dva.argus.service.tsdb.PhoenixTSDBEngine.selectMetrics(java.sql.Connection, com.salesforce.dva.argus.service.tsdb.MetricQuery)() 155 metric.setDatapoints(datapoints); 156 metric.setDisplayName(displayName); 157 metric.setUnits(units); 158 metrics.put(identifier, metric); 159 } 160 }

CID 163932:  Resource leaks  (RESOURCE_LEAK)
Variable "preparedStmt" going out of scope leaks the resource it refers to.

161 } catch(SQLException sqle) { 162 _logger.warn("Failed to read data from Phoenix.", sqle); 163 } 164 165 return new ArrayList<>(metrics.values()); 166 }

** CID 163929: (RESOURCE_LEAK) /ArgusCore/src/main/java/com/salesforce/dva/argus/service/tsdb/PhoenixTSDBService.java: 61 in com.salesforce.dva.argus.service.tsdb.PhoenixTSDBService.(com.salesforce.dva.argus.system.SystemConfiguration, com.salesforce.dva.argus.service.MonitorService)() /ArgusCore/src/main/java/com/salesforce/dva/argus/service/tsdb/PhoenixTSDBService.java: 67 in com.salesforce.dva.argus.service.tsdb.PhoenixTSDBService.(com.salesforce.dva.argus.system.SystemConfiguration, com.salesforce.dva.argus.service.MonitorService)()


*** CID 163929: (RESOURCE_LEAK) /ArgusCore/src/main/java/com/salesforce/dva/argus/service/tsdb/PhoenixTSDBService.java: 61 in com.salesforce.dva.argus.service.tsdb.PhoenixTSDBService.(com.salesforce.dva.argus.system.SystemConfiguration, com.salesforce.dva.argus.service.MonitorService)() 55 _connection = DriverManager.getConnection(_phoenixJDBCUrl, props); 56 } catch (SQLException e) { 57 throw new SystemException("Failed to create connection to phoenix using jdbc url: " + _phoenixJDBCUrl, e); 58 } 59 60 try {

CID 163929:    (RESOURCE_LEAK)
Failing to save or close resource created by "_connection.createStatement()" leaks it.

61 _connection.createStatement().execute("CREATE SEQUENCE IF NOT EXISTS METRIC_ID_SEQ"); 62 } catch (SQLException e) { 63 throw new SystemException("Failed to create sequence : " + _phoenixJDBCUrl, e); 64 } 65 66 try { /ArgusCore/src/main/java/com/salesforce/dva/argus/service/tsdb/PhoenixTSDBService.java: 67 in com.salesforce.dva.argus.service.tsdb.PhoenixTSDBService.(com.salesforce.dva.argus.system.SystemConfiguration, com.salesforce.dva.argus.service.MonitorService)() 61 _connection.createStatement().execute("CREATE SEQUENCE IF NOT EXISTS METRIC_ID_SEQ"); 62 } catch (SQLException e) { 63 throw new SystemException("Failed to create sequence : " + _phoenixJDBCUrl, e); 64 } 65 66 try { CID 163929: (RESOURCE_LEAK) Failing to save or close resource created by "_connection.createStatement()" leaks it. 67 _connection.createStatement().execute("CREATE TABLE ARGUS.METRICS (id INTEGER NOT NULL, ts DATE NOT NULL, val DOUBLE, display_name varchar, units varchar CONSTRAINT PK PRIMARY KEY(id,ts)) APPEND_ONLY_SCHEMA = true, UPDATE_CACHE_FREQUENCY = 900000, AUTO_PARTITION_SEQ=METRIC_ID_SEQ"); 68 // TODO change the create table ddl to IF NOT EXISTS PHOENIX-3660 is fixed 69 } catch (TableAlreadyExistsException e) { 70 System.out.println(); 71 } catch (SQLException e) { 72 throw new SystemException("Failed to create base table: " + _phoenixJDBCUrl, e);

bsura commented 7 years ago

@twdsilva @JamesRTaylor