)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":21922,"name":"Dobroslaw Zybort","email":"dobroslaw.zybort@ts.fujitsu.com","username":"dobrolaw.zybort"},"change_message_id":"eb899159f499411fd5df999525985d2b082c5eda","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2018-09-17 10:38:10 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Includes the value_meta field of a metric in generated alarms."},{"line_number":8,"context_line":"Story: #2001282"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Change-Id: Icc3c3fd183ced1db55a1236bef2de354f3d0560d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3f79a3b5_8e794c30","line":8,"updated":"2018-09-17 10:01:39.000000000","message":"Add empty line after commit first line.","commit_id":"087d9e3e9288f5985c3929cbff30760e01932119"},{"author":{"_account_id":21922,"name":"Dobroslaw Zybort","email":"dobroslaw.zybort@ts.fujitsu.com","username":"dobrolaw.zybort"},"change_message_id":"eb899159f499411fd5df999525985d2b082c5eda","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2018-09-17 10:38:10 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Includes the value_meta field of a metric in generated alarms."},{"line_number":8,"context_line":"Story: #2001282"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Change-Id: Icc3c3fd183ced1db55a1236bef2de354f3d0560d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3f79a3b5_2e72784b","line":8,"range":{"start_line":8,"start_character":0,"end_line":8,"end_character":15},"updated":"2018-09-17 10:01:39.000000000","message":"Also add reference to topic (I just added it 26492 )","commit_id":"087d9e3e9288f5985c3929cbff30760e01932119"}],"thresh/src/main/java/monasca/thresh/domain/model/Alarm.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"e245aae3fde065186ecd2733cbbaba10e57f8382","unresolved":false,"context_lines":[{"line_number":109,"context_line":"  public String buildAlarmMetaValue(Collection\u003cSubAlarm\u003e subAlarms) {"},{"line_number":110,"context_line":"    final ObjectMapper mapper \u003d new ObjectMapper();"},{"line_number":111,"context_line":"    final ObjectNode alarm_meta_value \u003d mapper.createObjectNode();"},{"line_number":112,"context_line":"    for(SubAlarm subAlarm : subAlarms) {"},{"line_number":113,"context_line":"        if(subAlarm.getState() !\u003d AlarmState.UNDETERMINED) {"},{"line_number":114,"context_line":"            final ObjectNode sub_alarm_meta_description \u003d mapper.createObjectNode();"},{"line_number":115,"context_line":"            sub_alarm_meta_description.put(\"state\", subAlarm.getState().name());"}],"source_content_type":"text/x-java","patch_set":2,"id":"3f79a3b5_bfad4932","line":112,"updated":"2018-09-27 19:40:15.000000000","message":"Notice all the current code has a space after the for and if in these statements. Please make your code match to make it easier to read","commit_id":"ec369c1afdc7d9afccdd6e2cd77b0447b574d752"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"e245aae3fde065186ecd2733cbbaba10e57f8382","unresolved":false,"context_lines":[{"line_number":266,"context_line":"    result \u003d prime * result + ((subAlarms \u003d\u003d null) ? 0 : subAlarms.hashCode());"},{"line_number":267,"context_line":"    result \u003d prime * result + ((alarmDefinitionId \u003d\u003d null) ? 0 : alarmDefinitionId.hashCode());"},{"line_number":268,"context_line":"    result \u003d prime * result + ((stateChangeReason \u003d\u003d null) ? 0 : stateChangeReason.hashCode());"},{"line_number":269,"context_line":"    result \u003d prime * result + ((alarmMetaValue \u003d\u003d null) ? 0 : alarmMetaValue.hashCode());"},{"line_number":270,"context_line":"    result \u003d prime * result + ((alarmedMetrics \u003d\u003d null) ? 0 : alarmedMetrics.hashCode());"},{"line_number":271,"context_line":"    return result;"},{"line_number":272,"context_line":"  }"}],"source_content_type":"text/x-java","patch_set":2,"id":"3f79a3b5_3f35b9f7","line":269,"updated":"2018-09-27 19:40:15.000000000","message":"If you change hashCode(), you MUST change Equals to also use alarmMetaValue","commit_id":"ec369c1afdc7d9afccdd6e2cd77b0447b574d752"},{"author":{"_account_id":16222,"name":"witek","email":"witold.bedyk@suse.com","username":"witek"},"change_message_id":"08754a9d305693106cfba9bf8f974778ba693a43","unresolved":false,"context_lines":[{"line_number":23,"context_line":"import monasca.common.model.alarm.AlarmSubExpression;"},{"line_number":24,"context_line":"import monasca.common.model.alarm.AlarmTransitionSubAlarm;"},{"line_number":25,"context_line":"import monasca.common.model.domain.common.AbstractEntity;"},{"line_number":26,"context_line":"import monasca.common.util.Serialization;"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"import com.fasterxml.jackson.databind.node.ObjectNode;"},{"line_number":29,"context_line":"import com.fasterxml.jackson.databind.ObjectMapper;"}],"source_content_type":"text/x-java","patch_set":6,"id":"3f79a3b5_cd857c0c","line":26,"updated":"2018-09-26 12:06:06.000000000","message":"Unused import.","commit_id":"98b2f0955a2412413603a613880141efa73b9da9"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"e245aae3fde065186ecd2733cbbaba10e57f8382","unresolved":false,"context_lines":[{"line_number":109,"context_line":"  public String buildAlarmMetaValue(Collection\u003cSubAlarm\u003e subAlarms) {"},{"line_number":110,"context_line":"    final ObjectMapper mapper \u003d new ObjectMapper();"},{"line_number":111,"context_line":"    final ObjectNode alarm_meta_value \u003d mapper.createObjectNode();"},{"line_number":112,"context_line":"    for(SubAlarm subAlarm : subAlarms) {"},{"line_number":113,"context_line":"        if(subAlarm.getState() !\u003d AlarmState.UNDETERMINED) {"},{"line_number":114,"context_line":"            final ObjectNode sub_alarm_meta_description \u003d mapper.createObjectNode();"},{"line_number":115,"context_line":"            sub_alarm_meta_description.put(\"state\", subAlarm.getState().name());"}],"source_content_type":"text/x-java","patch_set":6,"id":"3f79a3b5_d2cdbe30","line":112,"updated":"2018-09-27 19:40:15.000000000","message":"Notice that the original code has a space after \"for\" and \"if\" statements. Please follow the existing code formatting","commit_id":"98b2f0955a2412413603a613880141efa73b9da9"},{"author":{"_account_id":16222,"name":"witek","email":"witold.bedyk@suse.com","username":"witek"},"change_message_id":"159d153814bf88ee3c1108280671f367c362d26e","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    for(SubAlarm subAlarm : subAlarms) {"},{"line_number":113,"context_line":"        if(subAlarm.getState() !\u003d AlarmState.UNDETERMINED) {"},{"line_number":114,"context_line":"            final ObjectNode sub_alarm_meta_description \u003d mapper.createObjectNode();"},{"line_number":115,"context_line":"            sub_alarm_meta_description.put(\"state\", subAlarm.getState().name());"},{"line_number":116,"context_line":"            sub_alarm_meta_description.put(\"sub_expression\", subAlarm.getExpression().toString());"},{"line_number":117,"context_line":"            if(subAlarm.getValueMeta() !\u003d null){"},{"line_number":118,"context_line":"                final ObjectNode value_meta \u003d mapper.createObjectNode();"},{"line_number":119,"context_line":"                for(Map.Entry\u003cString, String\u003e entry: subAlarm.getValueMeta().entrySet())"}],"source_content_type":"text/x-java","patch_set":6,"id":"3f79a3b5_cd7226b1","line":116,"range":{"start_line":115,"start_character":12,"end_line":116,"end_character":98},"updated":"2018-09-26 14:29:54.000000000","message":"Why are we duplicating the data and copying `state` and `sub_expression` from subAlarm to value_meta? All this information can be retrieved from subAlarm, right?","commit_id":"98b2f0955a2412413603a613880141efa73b9da9"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"e245aae3fde065186ecd2733cbbaba10e57f8382","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    for(SubAlarm subAlarm : subAlarms) {"},{"line_number":113,"context_line":"        if(subAlarm.getState() !\u003d AlarmState.UNDETERMINED) {"},{"line_number":114,"context_line":"            final ObjectNode sub_alarm_meta_description \u003d mapper.createObjectNode();"},{"line_number":115,"context_line":"            sub_alarm_meta_description.put(\"state\", subAlarm.getState().name());"},{"line_number":116,"context_line":"            sub_alarm_meta_description.put(\"sub_expression\", subAlarm.getExpression().toString());"},{"line_number":117,"context_line":"            if(subAlarm.getValueMeta() !\u003d null){"},{"line_number":118,"context_line":"                final ObjectNode value_meta \u003d mapper.createObjectNode();"},{"line_number":119,"context_line":"                for(Map.Entry\u003cString, String\u003e entry: subAlarm.getValueMeta().entrySet())"}],"source_content_type":"text/x-java","patch_set":6,"id":"3f79a3b5_92d746c1","line":116,"range":{"start_line":115,"start_character":12,"end_line":116,"end_character":98},"in_reply_to":"3f79a3b5_cd7226b1","updated":"2018-09-27 19:40:15.000000000","message":"I agree with Witold","commit_id":"98b2f0955a2412413603a613880141efa73b9da9"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"e245aae3fde065186ecd2733cbbaba10e57f8382","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                final ObjectNode value_meta \u003d mapper.createObjectNode();"},{"line_number":119,"context_line":"                for(Map.Entry\u003cString, String\u003e entry: subAlarm.getValueMeta().entrySet())"},{"line_number":120,"context_line":"                    value_meta.put(entry.getKey(), entry.getValue());"},{"line_number":121,"context_line":"                sub_alarm_meta_description.put(\"value_meta\", value_meta);"},{"line_number":122,"context_line":"            } else {"},{"line_number":123,"context_line":"                sub_alarm_meta_description.putNull(\"value_meta\");"},{"line_number":124,"context_line":"            }"}],"source_content_type":"text/x-java","patch_set":6,"id":"3f79a3b5_92e3c606","line":121,"updated":"2018-09-27 19:40:15.000000000","message":"If there are more than one sub alarm, you are only saving the last one. And it might not be the one with actual data in value_meta","commit_id":"98b2f0955a2412413603a613880141efa73b9da9"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"e245aae3fde065186ecd2733cbbaba10e57f8382","unresolved":false,"context_lines":[{"line_number":266,"context_line":"    result \u003d prime * result + ((subAlarms \u003d\u003d null) ? 0 : subAlarms.hashCode());"},{"line_number":267,"context_line":"    result \u003d prime * result + ((alarmDefinitionId \u003d\u003d null) ? 0 : alarmDefinitionId.hashCode());"},{"line_number":268,"context_line":"    result \u003d prime * result + ((stateChangeReason \u003d\u003d null) ? 0 : stateChangeReason.hashCode());"},{"line_number":269,"context_line":"    result \u003d prime * result + ((alarmMetaValue \u003d\u003d null) ? 0 : alarmMetaValue.hashCode());"},{"line_number":270,"context_line":"    result \u003d prime * result + ((alarmedMetrics \u003d\u003d null) ? 0 : alarmedMetrics.hashCode());"},{"line_number":271,"context_line":"    return result;"},{"line_number":272,"context_line":"  }"}],"source_content_type":"text/x-java","patch_set":6,"id":"3f79a3b5_120256bb","line":269,"updated":"2018-09-27 19:40:15.000000000","message":"If you modify hashCode() you MUST modify Equals so they both use the same fields. See how they are used in HashMaps","commit_id":"98b2f0955a2412413603a613880141efa73b9da9"}],"thresh/src/main/java/monasca/thresh/domain/model/SubAlarm.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"e245aae3fde065186ecd2733cbbaba10e57f8382","unresolved":false,"context_lines":[{"line_number":62,"context_line":"  }"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"  @Override"},{"line_number":65,"context_line":"  public boolean equals(Object obj) {"},{"line_number":66,"context_line":"    if (this \u003d\u003d obj) {"},{"line_number":67,"context_line":"      return true;"},{"line_number":68,"context_line":"    }"}],"source_content_type":"text/x-java","patch_set":2,"id":"3f79a3b5_bf09c931","line":65,"updated":"2018-09-27 19:40:15.000000000","message":"Did you mean not to add valueMeta to Equals and hashCode?","commit_id":"ec369c1afdc7d9afccdd6e2cd77b0447b574d752"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"bd9fbdbf7d80a90a936252b9593e60549f6d88c8","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    this.currentValues.clear();"},{"line_number":134,"context_line":"  }"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"  @Override"},{"line_number":138,"context_line":"  public int hashCode() {"},{"line_number":139,"context_line":"    final int prime \u003d 31;"}],"source_content_type":"text/x-java","patch_set":2,"id":"3f79a3b5_5968d586","line":136,"updated":"2018-09-17 16:45:18.000000000","message":"nit: remove this newline","commit_id":"ec369c1afdc7d9afccdd6e2cd77b0447b574d752"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"bd9fbdbf7d80a90a936252b9593e60549f6d88c8","unresolved":false,"context_lines":[{"line_number":158,"context_line":"    return this.expression.isDeterministic();"},{"line_number":159,"context_line":"  }"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"  public void setStateAndValueMeta(AlarmState state, Map\u003cString, String\u003e valueMeta) {"},{"line_number":162,"context_line":"    this.state \u003d state;"},{"line_number":163,"context_line":"    this.valueMeta \u003d valueMeta;"},{"line_number":164,"context_line":"  }"}],"source_content_type":"text/x-java","patch_set":2,"id":"3f79a3b5_39c07950","line":161,"range":{"start_line":161,"start_character":2,"end_line":161,"end_character":8},"updated":"2018-09-17 16:45:18.000000000","message":"Can we split this into two methods, keeping the old one and adding a new setter for the valueMeta field?","commit_id":"ec369c1afdc7d9afccdd6e2cd77b0447b574d752"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"bd9fbdbf7d80a90a936252b9593e60549f6d88c8","unresolved":false,"context_lines":[{"line_number":179,"context_line":"  public String toString() {"},{"line_number":180,"context_line":"    return String.format(\"SubAlarm [id\u003d%s, alarmId\u003d%s, alarmSubExpressionId\u003d%s, expression\u003d%s, \" +"},{"line_number":181,"context_line":"        \"state\u003d%s, noState\u003d%s, currentValues:%s, valueMeta:%s ]\", id,"},{"line_number":182,"context_line":"        alarmId, alarmSubExpressionId, expression, state, noState, currentValues.toString()"},{"line_number":183,"context_line":"        , String.valueOf(valueMeta));"},{"line_number":184,"context_line":"  }"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-java","patch_set":2,"id":"3f79a3b5_99a18d98","line":182,"range":{"start_line":182,"start_character":67,"end_line":182,"end_character":80},"updated":"2018-09-17 16:45:18.000000000","message":"Strictly, this is unrelated to this change.","commit_id":"ec369c1afdc7d9afccdd6e2cd77b0447b574d752"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"bd9fbdbf7d80a90a936252b9593e60549f6d88c8","unresolved":false,"context_lines":[{"line_number":180,"context_line":"    return String.format(\"SubAlarm [id\u003d%s, alarmId\u003d%s, alarmSubExpressionId\u003d%s, expression\u003d%s, \" +"},{"line_number":181,"context_line":"        \"state\u003d%s, noState\u003d%s, currentValues:%s, valueMeta:%s ]\", id,"},{"line_number":182,"context_line":"        alarmId, alarmSubExpressionId, expression, state, noState, currentValues.toString()"},{"line_number":183,"context_line":"        , String.valueOf(valueMeta));"},{"line_number":184,"context_line":"  }"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"  /**"}],"source_content_type":"text/x-java","patch_set":2,"id":"3f79a3b5_39a5d9b5","line":183,"updated":"2018-09-17 16:45:18.000000000","message":"Will this throw a null pointer exception if this is Null? You could default it to an empty string? It would be nice to have some better test coverage.","commit_id":"ec369c1afdc7d9afccdd6e2cd77b0447b574d752"},{"author":{"_account_id":16222,"name":"witek","email":"witold.bedyk@suse.com","username":"witek"},"change_message_id":"08754a9d305693106cfba9bf8f974778ba693a43","unresolved":false,"context_lines":[{"line_number":51,"context_line":"  public SubAlarm() {"},{"line_number":52,"context_line":"  }"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"  public SubAlarm(String id, String alarmId, SubExpression expression, AlarmState state, Map\u003cString, String\u003e valueMeta) {"},{"line_number":55,"context_line":"    this.id \u003d id;"},{"line_number":56,"context_line":"    this.alarmId \u003d alarmId;"},{"line_number":57,"context_line":"    this.expression \u003d expression.getAlarmSubExpression();"}],"source_content_type":"text/x-java","patch_set":6,"id":"3f79a3b5_4dd64cc7","line":54,"updated":"2018-09-26 12:06:06.000000000","message":"Please wrap the line.","commit_id":"98b2f0955a2412413603a613880141efa73b9da9"}],"thresh/src/main/java/monasca/thresh/domain/model/SubAlarmStats.java":[{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"bd9fbdbf7d80a90a936252b9593e60549f6d88c8","unresolved":false,"context_lines":[{"line_number":81,"context_line":"   */"},{"line_number":82,"context_line":"  public boolean evaluateAndSlideWindow(long slideToTimestamp, long alarmDelay, Map\u003cString, String\u003e valueMeta) {"},{"line_number":83,"context_line":"    try {"},{"line_number":84,"context_line":"      return evaluate(slideToTimestamp, alarmDelay, valueMeta);"},{"line_number":85,"context_line":"    } catch (Exception e) {"},{"line_number":86,"context_line":"      logger.error(\"Failed to evaluate {}\", this, e);"},{"line_number":87,"context_line":"      return false;"}],"source_content_type":"text/x-java","patch_set":2,"id":"3f79a3b5_9fdbad7b","line":84,"range":{"start_line":84,"start_character":13,"end_line":84,"end_character":21},"updated":"2018-09-17 16:45:18.000000000","message":"Rather than passing in the valueMeta here, can we set it here if evaluate returns True? This will keep the purpose of the evaluate method focused and reduce boiler plate in the tests.","commit_id":"ec369c1afdc7d9afccdd6e2cd77b0447b574d752"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"1dd0cb1a7789bd462ecf6da5c9670913bea188e1","unresolved":false,"context_lines":[{"line_number":77,"context_line":"   */"},{"line_number":78,"context_line":"  public boolean evaluateAndSlideWindow(long slideToTimestamp, long alarmDelay) {"},{"line_number":79,"context_line":"    try {"},{"line_number":80,"context_line":"      return evaluate(slideToTimestamp, alarmDelay);"},{"line_number":81,"context_line":"    } catch (Exception e) {"},{"line_number":82,"context_line":"      logger.error(\"Failed to evaluate {}\", this, e);"},{"line_number":83,"context_line":"      return false;"}],"source_content_type":"text/x-java","patch_set":3,"id":"3f79a3b5_f73e76b7","line":80,"updated":"2018-09-18 10:49:57.000000000","message":"Don\u0027t you want to set the valueMeta here?","commit_id":"56f05d2d88c6b5b763cfea7481e1ff3034733cf9"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"e245aae3fde065186ecd2733cbbaba10e57f8382","unresolved":false,"context_lines":[{"line_number":148,"context_line":"      newState \u003d this.determineAlarmStateUsingView();"},{"line_number":149,"context_line":"      immediateAlarmTransition \u003d false;"},{"line_number":150,"context_line":"    }"},{"line_number":151,"context_line":"  "},{"line_number":152,"context_line":"    final boolean shouldSendStateChange \u003d this.shouldSendStateChange(newState);"},{"line_number":153,"context_line":"  "},{"line_number":154,"context_line":"    if (shouldSendStateChange \u0026\u0026 (shouldEvaluate || immediateAlarmTransition)) {"}],"source_content_type":"text/x-java","patch_set":6,"id":"3f79a3b5_32f0b266","side":"PARENT","line":151,"updated":"2018-09-27 19:40:15.000000000","message":"Why are you deleting this line?","commit_id":"a9b759dbfb01a0de50da531f4552d578160a044b"}],"thresh/src/main/java/monasca/thresh/domain/service/AlarmDAO.java":[{"author":{"_account_id":16222,"name":"witek","email":"witold.bedyk@suse.com","username":"witek"},"change_message_id":"08754a9d305693106cfba9bf8f974778ba693a43","unresolved":false,"context_lines":[{"line_number":54,"context_line":"  void deleteByDefinitionId(String alarmDefinitionId);"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"  /** Update the state of the given SubAlarm */"},{"line_number":57,"context_line":"  void updateSubAlarmState(String subAlarmId, AlarmState subAlarmState, Map\u003cString, String\u003e valueMeta);"},{"line_number":58,"context_line":"}"}],"source_content_type":"text/x-java","patch_set":6,"id":"3f79a3b5_9079d783","line":57,"updated":"2018-09-26 12:06:06.000000000","message":"I think we don\u0027t need valueMeta in the config DB. Anyway we would have to change the schema.","commit_id":"98b2f0955a2412413603a613880141efa73b9da9"}],"thresh/src/main/java/monasca/thresh/infrastructure/persistence/AlarmDAOImpl.java":[{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"bd9fbdbf7d80a90a936252b9593e60549f6d88c8","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                row, \"expression\")));"},{"line_number":119,"context_line":"        final AlarmState subAlarmState \u003d AlarmState.valueOf(getString(row, \"sub_alarm_state\"));"},{"line_number":120,"context_line":"        "},{"line_number":121,"context_line":"        final Map\u003cString, String\u003e valueMeta \u003d getString(row, \"sub_alarm_value_meta\").equals(\"\") "},{"line_number":122,"context_line":"            ? null"},{"line_number":123,"context_line":"            : Serialization.fromJson(getString(row, \"sub_alarm_value_meta\"), new HashMap\u003cString, String\u003e().getClass());"},{"line_number":124,"context_line":"        final SubAlarm subAlarm \u003d"}],"source_content_type":"text/x-java","patch_set":2,"id":"3f79a3b5_d9e4e5aa","line":121,"updated":"2018-09-17 16:45:18.000000000","message":"nit: remove space","commit_id":"ec369c1afdc7d9afccdd6e2cd77b0447b574d752"},{"author":{"_account_id":16222,"name":"witek","email":"witold.bedyk@suse.com","username":"witek"},"change_message_id":"08754a9d305693106cfba9bf8f974778ba693a43","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3f79a3b5_70375b4d","updated":"2018-09-26 12:06:06.000000000","message":"See my comment in interface AlarmDAO. Can probably be removed.","commit_id":"98b2f0955a2412413603a613880141efa73b9da9"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"e245aae3fde065186ecd2733cbbaba10e57f8382","unresolved":false,"context_lines":[{"line_number":79,"context_line":"  private List\u003cAlarm\u003e findAlarms(final String additionalWhereClause, String ... params) {"},{"line_number":80,"context_line":"    try (final Handle h \u003d db.open()) {"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"      final String ALARMS_SQL \u003d "},{"line_number":83,"context_line":"            \"select a.id, a.alarm_definition_id, a.state, sa.id as sub_alarm_id, sa.expression, \""},{"line_number":84,"context_line":"          + \"sa.state as sub_alarm_state, sa.sub_expression_id, ad.tenant_id from alarm a, \""},{"line_number":85,"context_line":"          + \"sa.value_meta as sub_alarm_value_meta\""}],"source_content_type":"text/x-java","patch_set":6,"id":"3f79a3b5_f2e9da7e","line":82,"updated":"2018-09-27 19:40:15.000000000","message":"Remove trailing space","commit_id":"98b2f0955a2412413603a613880141efa73b9da9"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"e245aae3fde065186ecd2733cbbaba10e57f8382","unresolved":false,"context_lines":[{"line_number":318,"context_line":"  public void updateSubAlarmState(String id, AlarmState subAlarmState, Map\u003cString, String\u003e valueMeta) {"},{"line_number":319,"context_line":"    try (Handle h \u003d db.open()) {"},{"line_number":320,"context_line":"      final String timestamp  \u003d formatDateFromMillis(System.currentTimeMillis());"},{"line_number":321,"context_line":"      final String value_meta \u003d valueMeta !\u003d null ? Serialization.toJson(valueMeta) : null;"},{"line_number":322,"context_line":"      h.createStatement("},{"line_number":323,"context_line":"              \"update sub_alarm set state\u003d:state, updated_at\u003d:updated_at, value_meta\u003d:value_meta where id\u003d:id\")"},{"line_number":324,"context_line":"          .bind(\"state\", subAlarmState.toString())"}],"source_content_type":"text/x-java","patch_set":6,"id":"3f79a3b5_528f6ecc","line":321,"updated":"2018-09-27 19:40:15.000000000","message":"IF you were going to save value_meta in the database then you need to handle the fact that the serialized form could be longer than the field in your database table. Just truncation json rarely works well","commit_id":"98b2f0955a2412413603a613880141efa73b9da9"}],"thresh/src/main/java/monasca/thresh/infrastructure/persistence/hibernate/AlarmSqlImpl.java":[{"author":{"_account_id":16222,"name":"witek","email":"witold.bedyk@suse.com","username":"witek"},"change_message_id":"08754a9d305693106cfba9bf8f974778ba693a43","unresolved":false,"context_lines":[{"line_number":263,"context_line":"  }"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"  @Override"},{"line_number":266,"context_line":"  public void updateSubAlarmState(String subAlarmId, AlarmState subAlarmState, Map\u003cString, String\u003e valueMeta) {"},{"line_number":267,"context_line":"    Transaction tx \u003d null;"},{"line_number":268,"context_line":"    Session session \u003d null;"},{"line_number":269,"context_line":"    try {"}],"source_content_type":"text/x-java","patch_set":6,"id":"3f79a3b5_1072a713","line":266,"updated":"2018-09-26 12:06:06.000000000","message":"We don\u0027t want to save it in config DB.","commit_id":"98b2f0955a2412413603a613880141efa73b9da9"}],"thresh/src/test/java/monasca/thresh/ThresholdingEngineAlarmTest.java":[{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"bd9fbdbf7d80a90a936252b9593e60549f6d88c8","unresolved":false,"context_lines":[{"line_number":439,"context_line":"      for (final Alarm alarm : alarms) {"},{"line_number":440,"context_line":"        for (final SubAlarm subAlarm : alarm.getSubAlarms()) {"},{"line_number":441,"context_line":"          if (subAlarm.getId().equals(subAlarmId)) {"},{"line_number":442,"context_line":"            subAlarm.setStateAndValueMeta(subAlarmState, null);"},{"line_number":443,"context_line":"          }"},{"line_number":444,"context_line":"        }"},{"line_number":445,"context_line":"      }"}],"source_content_type":"text/x-java","patch_set":2,"id":"3f79a3b5_b97249e2","line":442,"range":{"start_line":442,"start_character":57,"end_line":442,"end_character":61},"updated":"2018-09-17 16:45:18.000000000","message":"Why do we ignore valueMeta here?","commit_id":"ec369c1afdc7d9afccdd6e2cd77b0447b574d752"}],"thresh/src/test/java/monasca/thresh/domain/model/AlarmTest.java":[{"author":{"_account_id":16222,"name":"witek","email":"witold.bedyk@suse.com","username":"witek"},"change_message_id":"08754a9d305693106cfba9bf8f974778ba693a43","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    subAlarm2.setState(AlarmState.ALARM);"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    assertFalse(alarm.evaluate(expr));"},{"line_number":58,"context_line":"    assertEquals(alarm.getState(), AlarmState.UNDETERMINED, null);"},{"line_number":59,"context_line":"  }"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"  private Alarm createAlarm(AlarmExpression expr) {"}],"source_content_type":"text/x-java","patch_set":6,"id":"3f79a3b5_26dc1fe0","line":58,"updated":"2018-09-26 12:06:06.000000000","message":"Any reason why we shouldn\u0027t use `assertEquals(Object, Object)`?","commit_id":"98b2f0955a2412413603a613880141efa73b9da9"}],"thresh/src/test/java/monasca/thresh/domain/model/SubAlarmStatsTest.java":[{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"bd9fbdbf7d80a90a936252b9593e60549f6d88c8","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"  public void shouldNotTransitionToAlarmTwice() {"},{"line_number":75,"context_line":"    assertTrue(lastSubAlarmStats.addValue(99, lastViewStartTime + 10));"},{"line_number":76,"context_line":"    assertTrue(lastSubAlarmStats.evaluate(lastViewStartTime + 10, 0, null));"},{"line_number":77,"context_line":"    assertEquals(lastSubAlarmStats.getSubAlarm().getState(), AlarmState.ALARM);"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    assertTrue(lastSubAlarmStats.addValue(98, lastViewStartTime + 20));"}],"source_content_type":"text/x-java","patch_set":2,"id":"3f79a3b5_b95b2952","line":76,"range":{"start_line":76,"start_character":69,"end_line":76,"end_character":73},"updated":"2018-09-17 16:45:18.000000000","message":"This would be a lot cleaner if we didn\u0027t need to pass in the valueMeta here and in the other places. Let\u0027s try and add the valueMeta if evaluate returns True.","commit_id":"ec369c1afdc7d9afccdd6e2cd77b0447b574d752"}],"thresh/src/test/java/monasca/thresh/infrastructure/thresholding/AlarmThresholdingBoltTest.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"e245aae3fde065186ecd2733cbbaba10e57f8382","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    final String alarmId \u003d alarm.getId();"},{"line_number":123,"context_line":"    when(alarmDAO.findById(alarmId)).thenReturn(alarm);"},{"line_number":124,"context_line":"    when(alarmDefinitionDAO.findById(alarmDefinition.getId())).thenReturn(alarmDefinition);"},{"line_number":125,"context_line":"    "},{"line_number":126,"context_line":"    Map\u003cString, String\u003e alarmValueMeta \u003d new HashMap\u003c\u003e();"},{"line_number":127,"context_line":"    alarmValueMeta.put(\"rc\", \"1\");"},{"line_number":128,"context_line":"    "}],"source_content_type":"text/x-java","patch_set":2,"id":"3f79a3b5_1e2f86f5","line":125,"updated":"2018-09-27 19:40:15.000000000","message":"Please remove all trailing whitespace from the lines you have added in all files","commit_id":"ec369c1afdc7d9afccdd6e2cd77b0447b574d752"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"bd9fbdbf7d80a90a936252b9593e60549f6d88c8","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    when(alarmDefinitionDAO.findById(alarmDefinition.getId())).thenReturn(alarmDefinition);"},{"line_number":125,"context_line":"    "},{"line_number":126,"context_line":"    Map\u003cString, String\u003e alarmValueMeta \u003d new HashMap\u003c\u003e();"},{"line_number":127,"context_line":"    alarmValueMeta.put(\"rc\", \"1\");"},{"line_number":128,"context_line":"    "},{"line_number":129,"context_line":"    emitSubAlarmStateChange(alarmId, subAlarm, AlarmState.ALARM, alarmValueMeta);"},{"line_number":130,"context_line":"    for(int i \u003d 1; i \u003c subAlarms.size(); i++) {"}],"source_content_type":"text/x-java","patch_set":2,"id":"3f79a3b5_f913e163","line":127,"updated":"2018-09-17 16:45:18.000000000","message":"I think we need at least one test here with multiple entries in this map.","commit_id":"ec369c1afdc7d9afccdd6e2cd77b0447b574d752"},{"author":{"_account_id":16222,"name":"witek","email":"witold.bedyk@suse.com","username":"witek"},"change_message_id":"08754a9d305693106cfba9bf8f974778ba693a43","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    List\u003cSubAlarm\u003e mySubAlarms \u003d new ArrayList(alarm.getSubAlarms());"},{"line_number":145,"context_line":"    for (int i \u003d 1; i \u003c mySubAlarms.size(); i++) {"},{"line_number":146,"context_line":"        final ObjectNode ok_sub_alarm_value_meta \u003d mapper.createObjectNode();"},{"line_number":147,"context_line":"        ok_sub_alarm_value_meta.put(\"state\", \"OK\");"},{"line_number":148,"context_line":"        ok_sub_alarm_value_meta.put(\"sub_expression\", String.valueOf(mySubAlarms.get(i).getExpression()));"},{"line_number":149,"context_line":"        ok_sub_alarm_value_meta.putNull(\"value_meta\");"},{"line_number":150,"context_line":"        alarm_value_meta.put(mySubAlarms.get(i).getId(), ok_sub_alarm_value_meta);"}],"source_content_type":"text/x-java","patch_set":6,"id":"3f79a3b5_195b8422","line":147,"range":{"start_line":147,"start_character":8,"end_line":147,"end_character":51},"updated":"2018-09-26 12:06:06.000000000","message":"I don\u0027t quite understand what\u0027s happening here. Why are you adding `state` to value_meta? Could you add short inline comment about testing steps?","commit_id":"98b2f0955a2412413603a613880141efa73b9da9"}],"thresh/src/test/java/monasca/thresh/infrastructure/thresholding/MetricAggregationBoltTest.java":[{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"bd9fbdbf7d80a90a936252b9593e60549f6d88c8","unresolved":false,"context_lines":[{"line_number":1,"context_line":" /*"},{"line_number":2,"context_line":" * (C) Copyright 2014-2016 Hewlett Packard Enterprise Development LP"},{"line_number":3,"context_line":" * Copyright 2016 FUJITSU LIMITED"},{"line_number":4,"context_line":" *"}],"source_content_type":"text/x-java","patch_set":2,"id":"3f79a3b5_990c2d43","line":1,"updated":"2018-09-17 16:45:18.000000000","message":"Please undo this.","commit_id":"ec369c1afdc7d9afccdd6e2cd77b0447b574d752"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"e245aae3fde065186ecd2733cbbaba10e57f8382","unresolved":false,"context_lines":[{"line_number":477,"context_line":"    long t1 \u003d 50000;"},{"line_number":478,"context_line":"    bolt.setCurrentTime(t1);"},{"line_number":479,"context_line":"    sendSubAlarmCreated(metricDef5, subAlarm5);"},{"line_number":480,"context_line":"    verify(alarmDao, never()).updateSubAlarmState(eq(subAlarm5.getId()), (AlarmState) any(), (Map\u003cString, String\u003e) eq(null));"},{"line_number":481,"context_line":"    t1 +\u003d 1000;"},{"line_number":482,"context_line":"    bolt.execute(createMetricTuple(metricDef5, new Metric(metricDef5, t1, 1.0, null)));"},{"line_number":483,"context_line":"    assertEquals(subAlarm5.getState(), AlarmState.ALARM);"}],"source_content_type":"text/x-java","patch_set":6,"id":"3f79a3b5_f2455a70","line":480,"updated":"2018-09-27 19:40:15.000000000","message":"If you\u0027ve added a new parameter to the call, you need to add tests that ensure it gets set sometimes","commit_id":"98b2f0955a2412413603a613880141efa73b9da9"}]}
