Skip to content

Commit

Permalink
hooking up limit database queries
Browse files Browse the repository at this point in the history
  • Loading branch information
Greg Denton committed Aug 15, 2019
1 parent 43128c3 commit 8dc1d35
Show file tree
Hide file tree
Showing 14 changed files with 883 additions and 123 deletions.
2 changes: 2 additions & 0 deletions cuebot/src/main/java/com/imageworks/spcue/LimitEntity.java
Expand Up @@ -24,13 +24,15 @@
public class LimitEntity extends Entity implements LimitInterface {

public int maxValue;
public int currentRunning;

public LimitEntity() {}

public LimitEntity(Limit grpcLimit) {
this.id = grpcLimit.getId();
this.name = grpcLimit.getName();
this.maxValue = grpcLimit.getMaxValue();
this.currentRunning = grpcLimit.getCurrentRunning();
}

public String getLimitId() {
Expand Down

Large diffs are not rendered by default.

Expand Up @@ -155,7 +155,29 @@ public boolean updateFrameCleared(FrameInterface frame) {
"AND " +
"str_state = ? " +
"AND " +
"int_version = ?";
"int_version = ? " +
"AND " +
"frame.pk_layer IN (" +
"SELECT " +
"layer.pk_layer " +
"FROM " +
"layer " +
"LEFT JOIN layer_limit ON layer_limit.pk_layer = layer.pk_layer " +
"LEFT JOIN limit_record ON limit_record.pk_limit_record = layer_limit.pk_limit_record " +
"LEFT JOIN (" +
"SELECT " +
"limit_record.pk_limit_record, " +
"SUM(layer_stat.int_running_count) AS int_sum_running " +
"FROM " +
"layer_limit " +
"LEFT JOIN limit_record ON layer_limit.pk_limit_record = limit_record.pk_limit_record " +
"LEFT JOIN layer_stat ON layer_stat.pk_layer = layer_limit.pk_layer " +
"GROUP BY limit_record.pk_limit_record) AS sum_running " +
"ON limit_record.pk_limit_record = sum_running.pk_limit_record " +
"WHERE " +
"sum_running.int_sum_running < limit_record.int_max_value " +
"OR sum_running.int_sum_running IS NULL " +
")";

private static final String UPDATE_FRAME_RETRIES =
"UPDATE " +
Expand Down
Expand Up @@ -38,6 +38,7 @@ public LimitEntity mapRow(ResultSet rs, int rowNum) throws SQLException {
limit.id = rs.getString("pk_limit_record");
limit.name = rs.getString("str_name");
limit.maxValue = rs.getInt("int_max_value");
limit.currentRunning = rs.getInt("int_current_running");
return limit;
}
};
Expand All @@ -59,16 +60,26 @@ public void deleteLimit(LimitInterface limit) {

@Override
public LimitEntity findLimit(String name){
return getJdbcTemplate().queryForObject(
"SELECT pk_limit_record, str_name, int_max_value FROM limit_record WHERE str_name=?",
LIMIT_MAPPER, name);
String findLimitQuery = GET_LIMIT_BASE +
"WHERE " +
"limit-record.str_name=? " +
"GROUP BY " +
"limit_record.str_name, " +
"limit_record.pk_limit_record, " +
"limit_record.int_max_value";
return getJdbcTemplate().queryForObject(findLimitQuery, LIMIT_MAPPER, name);
}

@Override
public LimitEntity getLimit(String id) {
return getJdbcTemplate().queryForObject(
"SELECT pk_limit_record, str_name, int_max_value FROM limit_record WHERE pk_limit_record=?",
LIMIT_MAPPER, id);
String getLimitQuery = GET_LIMIT_BASE +
"WHERE " +
"limit_record.pk_limit_record=? " +
"GROUP BY " +
"limit_record.str_name, " +
"limit_record.pk_limit_record, " +
"limit_record.int_max_value";
return getJdbcTemplate().queryForObject(getLimitQuery, LIMIT_MAPPER, id);
}

@Override
Expand All @@ -81,4 +92,19 @@ public void setMaxValue(LimitInterface limit, int maxValue) {
getJdbcTemplate().update("UPDATE limit_record SET int_max_value = ? WHERE pk_limit_record = ?",
maxValue, limit.getId());
}

private static final String GET_LIMIT_BASE =
"SELECT " +
"limit_record.pk_limit_record, " +
"limit_record.str_name, " +
"limit_record.int_max_value," +
"SUM(layer_stat.int_running_count) AS int_current_running " +
"FROM " +
"limit_record " +
"LEFT JOIN " +
"layer_limit ON layer_limit.pk_limit_record = limit_record.pk_limit_record " +
"LEFT JOIN " +
"layer ON layer.pk_layer = layer_limit.pk_layer " +
"LEFT JOIN " +
"layer_stat ON layer_stat.pk_layer = layer.pk_layer ";
}
Expand Up @@ -354,25 +354,30 @@ public Job getJob(String id) {
@Override
public Layer getLayer(String id) {
return getJdbcTemplate().queryForObject(
GET_LAYER + " AND layer.pk_layer=?",
GET_LAYER_WITH_LIMITS + " WHERE layer.pk_layer=?",
LAYER_MAPPER, id);
}

@Override
public Layer findLayer(String job, String layer) {
return getJdbcTemplate().queryForObject(
GET_LAYER + " AND job.str_state='PENDING' AND job.str_name=? AND layer.str_name=?",
GET_LAYER_WITH_LIMITS + " WHERE job.str_state='PENDING' AND job.str_name=? AND layer.str_name=?",
LAYER_MAPPER, job, layer);
}

@Override
public LayerSeq getLayers(JobInterface job) {
String query = GET_LAYER + " AND layer.pk_job=? ORDER BY layer.int_dispatch_order ASC";
String query = GET_LAYER_WITH_LIMITS + " WHERE layer.pk_job=? ORDER BY layer.int_dispatch_order ASC";
List<Layer> layers = getJdbcTemplate().query(
query, LAYER_MAPPER, job.getJobId());
return LayerSeq.newBuilder().addAllLayers(layers).build();
}

public List<String> getLimitNames(String layerId) {
return getJdbcTemplate().query(GET_LIMIT_NAMES,
LIMIT_NAME_MAPPER, layerId);
}

@Override
public List<Limit> getLimits(LayerInterface layer) {
List<Limit> limits = getJdbcTemplate().query(
Expand Down Expand Up @@ -755,22 +760,34 @@ public FacilitySeq getFacilities() {

@Override
public Limit findLimit(String name) {
return getJdbcTemplate().queryForObject(
QUERY_FOR_LIMIT + " WHERE limit.str_name = ?",
LIMIT_MAPPER, name);
String findLimitQuery = QUERY_FOR_LIMIT +
" WHERE limit_record.str_name = ? " +
"GROUP BY " +
"limit_record.str_name, " +
"limit_record.pk_limit_record, " +
"limit_record.int_max_value";
return getJdbcTemplate().queryForObject(findLimitQuery, LIMIT_MAPPER, name);
}

@Override
public Limit getLimit(String id) {
return getJdbcTemplate().queryForObject(
QUERY_FOR_LIMIT + " WHERE limit.pk_limit_record = ?",
LIMIT_MAPPER, id);
String getLimitQuery = QUERY_FOR_LIMIT +
" WHERE limit_record.pk_limit_record = ? "+
"GROUP BY " +
"limit_record.str_name, " +
"limit_record.pk_limit_record, " +
"limit_record.int_max_value";
return getJdbcTemplate().queryForObject(getLimitQuery, LIMIT_MAPPER, id);
}

@Override
public List<Limit> getLimits() {
return getJdbcTemplate().query(
QUERY_FOR_LIMIT, LIMIT_MAPPER);
String getLimitsQuery = QUERY_FOR_LIMIT +
" GROUP BY " +
"limit_record.str_name, " +
"limit_record.pk_limit_record, " +
"limit_record.int_max_value";
return getJdbcTemplate().query(getLimitsQuery, LIMIT_MAPPER);
}

/*
Expand All @@ -784,6 +801,7 @@ public Limit mapRow(ResultSet rs, int rowNum) throws SQLException {
.setId(SqlUtil.getString(rs, "pk_limit_record"))
.setName(SqlUtil.getString(rs, "str_name"))
.setMaxValue(rs.getInt("int_max_value"))
.setCurrentRunning(rs.getInt("int_current_running"))
.build();
}
};
Expand Down Expand Up @@ -1222,6 +1240,7 @@ public Layer mapRow(ResultSet rs, int rowNum) throws SQLException {
SqlUtil.getString(rs, "str_tags").
replaceAll(" ","").split("\\|")))
.addAllServices(Arrays.asList(SqlUtil.getString(rs, "str_services").split(",")))
.addAllLimits(Arrays.asList(SqlUtil.getString(rs,"str_limit_names").split(",")))
.setMemoryOptimizerEnabled(rs.getBoolean("b_optimize"));

LayerStats.Builder statsBuilder = LayerStats.newBuilder()
Expand Down Expand Up @@ -1263,6 +1282,13 @@ public Layer mapRow(ResultSet rs, int rowNum) throws SQLException {
}
};

private static final RowMapper<String> LIMIT_NAME_MAPPER =
new RowMapper<String>() {
public String mapRow(ResultSet rs, int rowNum) throws SQLException {
return rs.getString("str_name");
}
};

public static final RowMapper<Subscription> SUBSCRIPTION_MAPPER =
new RowMapper<Subscription>() {
public Subscription mapRow(ResultSet rs, int rowNum) throws SQLException {
Expand Down Expand Up @@ -1710,24 +1736,40 @@ public Show mapRow(ResultSet rs, int rowNum) throws SQLException {
"facility ";

private static final String QUERY_FOR_LIMIT =
"SELECT " +
"limit_record.pk_limit_record, " +
"limit_record.str_name, " +
"limit_record.int_max_value " +
"FROM " +
"limit_record ";
"SELECT " +
"limit_record.pk_limit_record, " +
"limit_record.str_name, " +
"limit_record.int_max_value, " +
"SUM(layer_stat.int_running_count) AS int_current_running " +
"FROM " +
"limit_record " +
"LEFT JOIN " +
"layer_limit ON layer_limit.pk_limit_record = limit_record.pk_limit_record " +
"LEFT JOIN " +
"layer ON layer.pk_layer = layer_limit.pk_layer " +
"LEFT JOIN " +
"layer_stat ON layer_stat.pk_layer = layer.pk_layer ";

private static final String GET_LIMIT_FROM_LAYER_ID =
"SELECT " +
"limit_record.pk_limit_record, " +
"limit_record.str_name, " +
"limit_record.int_max_value " +
"FROM " +
"limit_record, " +
"layer_limit " +
"WHERE " +
"layer_limit.pk_layer = ? " +
"AND limit_record.pk_limit_record = layer_limit.pk_limit_record";
"SELECT " +
"limit_record.pk_limit_record, " +
"limit_record.str_name, " +
"limit_record.int_max_value, " +
"SUM(layer_stat.int_running_count) AS int_current_running " +
"FROM " +
"limit_record " +
"LEFT JOIN " +
"layer_limit ON layer_limit.pk_limit_record = limit_record.pk_limit_record " +
"LEFT JOIN " +
"layer ON layer.pk_layer = layer_limit.pk_layer " +
"LEFT JOIN " +
"layer_stat ON layer_stat.pk_layer = layer.pk_layer " +
"WHERE " +
"layer_limit.pk_layer = ? " +
"GROUP BY " +
"limit_record.str_name, " +
"limit_record.pk_limit_record, " +
"limit_record.int_max_value";

public static final String GET_GROUPS =
"SELECT " +
Expand Down Expand Up @@ -1878,6 +1920,64 @@ public Show mapRow(ResultSet rs, int rowNum) throws SQLException {
"AND " +
"layer.pk_layer = layer_mem.pk_layer ";

private static final String GET_LAYER_WITH_LIMITS =
"SELECT " +
"layer.*, " +
"layer_stat.int_total_count, " +
"layer_stat.int_waiting_count, " +
"layer_stat.int_running_count, " +
"layer_stat.int_dead_count, " +
"layer_stat.int_depend_count, " +
"layer_stat.int_eaten_count, " +
"layer_stat.int_succeeded_count, " +
"layer_usage.int_core_time_success, " +
"layer_usage.int_core_time_fail, " +
"layer_usage.int_frame_success_count, " +
"layer_usage.int_frame_fail_count, " +
"layer_usage.int_clock_time_low, " +
"layer_usage.int_clock_time_high, " +
"layer_usage.int_clock_time_success, " +
"layer_usage.int_clock_time_fail, " +
"layer_mem.int_max_rss, " +
"layer_resource.int_cores, " +
"limit_names.str_limit_names " +
"FROM " +
"layer " +
"JOIN " +
"job ON layer.pk_job = job.pk_job " +
"JOIN " +
"layer_stat ON layer.pk_layer = layer_stat.pk_layer " +
"JOIN " +
"layer_resource ON layer.pk_layer = layer_resource.pk_layer " +
"JOIN " +
"layer_usage ON layer.pk_layer = layer_usage.pk_layer " +
"JOIN " +
"layer_mem ON layer.pk_layer = layer_mem.pk_layer " +
"LEFT JOIN " +
"(" +
"SELECT " +
"layer_limit.pk_layer, " +
"LISTAGG(limit_record.str_name, ',') AS str_limit_names " +
"FROM " +
"limit_record, " +
"layer_limit " +
"WHERE " +
"layer_limit.pk_limit_record = limit_record.pk_limit_record " +
"GROUP BY " +
"layer_limit.pk_layer) AS limit_names " +
"ON layer.pk_layer = limit_names.pk_layer ";

private static final String GET_LIMIT_NAMES =
"SELECT " +
"limit_record.str_name " +
"FROM " +
"layer_limit, " +
"limit_record " +
"WHERE " +
"layer_limit.pk_layer = ? " +
"AND " +
"limit_record.pk_limit_record = layer_limit.pk_limit_record ";

private static final String GET_SHOW =
"SELECT " +
"show.*," +
Expand Down

0 comments on commit 8dc1d35

Please sign in to comment.