Skip to content

Commit d2057d3

Browse files
authored
Migrate stats columns from show to show_stats (#1228)
* Migrate stats columns from show to show_stats Frequently changing columns on the SHOW table were causing the show indexes to bloat faster than desired and impacting the system performance, specially in the Whiteboard queries for jobs. * Fix merge issues Add gpu columns * Version bump * Update cuebot/src/main/java/com/imageworks/spcue/dao/postgres/WhiteboardDaoJdbc.java Signed-off-by: Diego Tavares da Silva <[email protected]> * Creating a new show should also create a show_stats entry A show_stats row needs to be created and deleted together with a show row. This bug was introduced on https://gitlab.spimageworks.com/spi/dev/infrastructure/api/opencue/-/merge_requests/427 * Rename V21__AddShowStats.sql to V16__AddShowStats.sql --------- Signed-off-by: Diego Tavares da Silva <[email protected]>
1 parent 0199fb2 commit d2057d3

File tree

7 files changed

+72
-10
lines changed

7 files changed

+72
-10
lines changed

cuebot/src/main/java/com/imageworks/spcue/dao/postgres/JobDaoJdbc.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -574,7 +574,7 @@ public void activateJob(JobInterface job, JobState jobState) {
574574
jobTotals[0] + jobTotals[1], layers.size(), job.getJobId());
575575

576576
getJdbcTemplate().update(
577-
"UPDATE show SET int_frame_insert_count=int_frame_insert_count+?, int_job_insert_count=int_job_insert_count+1 WHERE pk_show=?",
577+
"UPDATE show_stats SET int_frame_insert_count=int_frame_insert_count+?, int_job_insert_count=int_job_insert_count+1 WHERE pk_show=?",
578578
jobTotals[0] + jobTotals[1], job.getShowId());
579579

580580
updateState(job, jobState);

cuebot/src/main/java/com/imageworks/spcue/dao/postgres/ShowDaoJdbc.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,15 @@ public ShowEntity getShowDetail(HostInterface host) {
138138
private static final String INSERT_SHOW =
139139
"INSERT INTO show (pk_show,str_name) VALUES (?,?)";
140140

141+
private static final String INSERT_SHOW_STATS =
142+
"INSERT INTO show_stats " +
143+
"(pk_show, int_frame_insert_count, int_job_insert_count, int_frame_success_count, int_frame_fail_count) " +
144+
"VALUES (?, 0, 0, 0, 0)";
145+
141146
public void insertShow(ShowEntity show) {
142147
show.id = SqlUtil.genKeyRandom();
143148
getJdbcTemplate().update(INSERT_SHOW, show.id, show.name);
149+
getJdbcTemplate().update(INSERT_SHOW_STATS, show.id);
144150
}
145151

146152
private static final String SHOW_EXISTS =
@@ -169,6 +175,8 @@ public void delete(ShowInterface s) {
169175
s.getShowId());
170176
getJdbcTemplate().update("DELETE FROM show_alias WHERE pk_show=?",
171177
s.getShowId());
178+
getJdbcTemplate().update("DELETE FROM show_stats WHERE pk_show=?",
179+
s.getShowId());
172180
getJdbcTemplate().update("DELETE FROM show WHERE pk_show=?",
173181
s.getShowId());
174182
}
@@ -262,7 +270,7 @@ public void updateFrameCounters(ShowInterface s, int exitStatus) {
262270
col = "int_frame_fail_count = int_frame_fail_count + 1";
263271
}
264272
getJdbcTemplate().update(
265-
"UPDATE show SET " + col + " WHERE pk_show=?", s.getShowId());
273+
"UPDATE show_stats SET " + col + " WHERE pk_show=?", s.getShowId());
266274
}
267275
}
268276

cuebot/src/main/java/com/imageworks/spcue/dao/postgres/WhiteboardDaoJdbc.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2060,7 +2060,21 @@ public Show mapRow(ResultSet rs, int rowNum) throws SQLException {
20602060

20612061
private static final String GET_SHOW =
20622062
"SELECT " +
2063-
"show.*," +
2063+
"show.pk_show," +
2064+
"show.str_name," +
2065+
"show.b_paused," +
2066+
"show.int_default_min_cores," +
2067+
"show.int_default_max_cores," +
2068+
"show.int_default_min_gpus," +
2069+
"show.int_default_max_gpus," +
2070+
"show.b_booking_enabled," +
2071+
"show.b_dispatch_enabled," +
2072+
"show.b_active," +
2073+
"show.str_comment_email," +
2074+
"show_stats.int_frame_insert_count," +
2075+
"show_stats.int_job_insert_count," +
2076+
"show_stats.int_frame_success_count," +
2077+
"show_stats.int_frame_fail_count," +
20642078
"COALESCE(vs_show_stat.int_pending_count,0) AS int_pending_count," +
20652079
"COALESCE(vs_show_stat.int_running_count,0) AS int_running_count," +
20662080
"COALESCE(vs_show_stat.int_dead_count,0) AS int_dead_count," +
@@ -2069,6 +2083,7 @@ public Show mapRow(ResultSet rs, int rowNum) throws SQLException {
20692083
"COALESCE(vs_show_stat.int_job_count,0) AS int_job_count " +
20702084
"FROM " +
20712085
"show " +
2086+
"JOIN show_stats ON (show.pk_show = show_stats.pk_show) " +
20722087
"LEFT JOIN vs_show_stat ON (vs_show_stat.pk_show = show.pk_show) " +
20732088
"LEFT JOIN vs_show_resource ON (vs_show_resource.pk_show=show.pk_show) " +
20742089
"WHERE " +
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
CREATE TABLE show_stats (
2+
pk_show VARCHAR(36) NOT NULL,
3+
int_frame_insert_count BIGINT DEFAULT 0 NOT NULL,
4+
int_job_insert_count BIGINT DEFAULT 0 NOT NULL,
5+
int_frame_success_count BIGINT DEFAULT 0 NOT NULL,
6+
int_frame_fail_count BIGINT DEFAULT 0 NOT NULL
7+
);
8+
9+
INSERT INTO show_stats (
10+
pk_show,
11+
int_frame_insert_count,
12+
int_job_insert_count,
13+
int_frame_success_count,
14+
int_frame_fail_count
15+
) SELECT
16+
pk_show,
17+
int_frame_insert_count,
18+
int_job_insert_count,
19+
int_frame_success_count,
20+
int_frame_fail_count
21+
FROM show;
22+
23+
CREATE UNIQUE INDEX c_show_stats_pk ON show_stats (pk_show);
24+
ALTER TABLE show_stats ADD CONSTRAINT c_show_stats_pk PRIMARY KEY
25+
USING INDEX c_show_stats_pk;
26+
27+
28+
-- Destructive changes. Please test changes above prior to executing this.
29+
ALTER TABLE show
30+
DROP COLUMN int_frame_insert_count,
31+
DROP COLUMN int_job_insert_count,
32+
DROP COLUMN int_frame_success_count,
33+
DROP COLUMN int_frame_fail_count;

cuebot/src/main/resources/conf/ddl/postgres/seed_data.sql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
Insert into SHOW (PK_SHOW,STR_NAME,INT_DEFAULT_MAX_CORES,INT_DEFAULT_MIN_CORES,INT_FRAME_INSERT_COUNT,INT_JOB_INSERT_COUNT,INT_FRAME_SUCCESS_COUNT,INT_FRAME_FAIL_COUNT,B_BOOKING_ENABLED,B_DISPATCH_ENABLED,B_ACTIVE) values ('00000000-0000-0000-0000-000000000000', 'testing', 200000, 100, 0, 0, 0, 0, true, true, true);
1+
Insert into SHOW (PK_SHOW,STR_NAME,INT_DEFAULT_MAX_CORES,INT_DEFAULT_MIN_CORES,B_BOOKING_ENABLED,B_DISPATCH_ENABLED,B_ACTIVE) values ('00000000-0000-0000-0000-000000000000', 'testing', 200000, 100, true, true, true);
2+
3+
Insert into SHOW_STATS (PK_SHOW,INT_FRAME_INSERT_COUNT,INT_JOB_INSERT_COUNT,INT_FRAME_SUCCESS_COUNT,INT_FRAME_FAIL_COUNT) values ('00000000-0000-0000-0000-000000000000',0,0,0,0)
24

35
Insert into SHOW_ALIAS (PK_SHOW_ALIAS,PK_SHOW,STR_NAME) values ('00000000-0000-0000-0000-000000000001', '00000000-0000-0000-0000-000000000000', 'test');
46

cuebot/src/test/java/com/imageworks/spcue/test/dao/postgres/ShowDaoTests.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -219,20 +219,20 @@ public void testUpdateActive() {
219219
public void testUpdateFrameCounters() {
220220
ShowEntity show = showDao.findShowDetail(SHOW_NAME);
221221
int frameSuccess = jdbcTemplate.queryForObject(
222-
"SELECT int_frame_success_count FROM show WHERE pk_show=?",
222+
"SELECT int_frame_success_count FROM show_stats WHERE pk_show=?",
223223
Integer.class, show.id);
224224
showDao.updateFrameCounters(show, 0);
225225
int frameSucces2 = jdbcTemplate.queryForObject(
226-
"SELECT int_frame_success_count FROM show WHERE pk_show=?",
226+
"SELECT int_frame_success_count FROM show_stats WHERE pk_show=?",
227227
Integer.class, show.id);
228228
assertEquals(frameSuccess + 1,frameSucces2);
229229

230230
int frameFail= jdbcTemplate.queryForObject(
231-
"SELECT int_frame_fail_count FROM show WHERE pk_show=?",
231+
"SELECT int_frame_fail_count FROM show_stats WHERE pk_show=?",
232232
Integer.class, show.id);
233233
showDao.updateFrameCounters(show, 1);
234234
int frameFail2 = jdbcTemplate.queryForObject(
235-
"SELECT int_frame_fail_count FROM show WHERE pk_show=?",
235+
"SELECT int_frame_fail_count FROM show_stats WHERE pk_show=?",
236236
Integer.class, show.id);
237237
assertEquals(frameFail+ 1,frameFail2);
238238
}

cuebot/src/test/resources/conf/ddl/postgres/test_data.sql

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1-
Insert into SHOW (PK_SHOW,STR_NAME,INT_DEFAULT_MAX_CORES,INT_DEFAULT_MIN_CORES,INT_FRAME_INSERT_COUNT,INT_JOB_INSERT_COUNT,INT_FRAME_SUCCESS_COUNT,INT_FRAME_FAIL_COUNT,B_BOOKING_ENABLED,B_DISPATCH_ENABLED,B_ACTIVE) values ('00000000-0000-0000-0000-000000000000','pipe',20000,100,0,0,0,0,true,true,true)
1+
Insert into SHOW (PK_SHOW,STR_NAME,INT_DEFAULT_MAX_CORES,INT_DEFAULT_MIN_CORES,B_BOOKING_ENABLED,B_DISPATCH_ENABLED,B_ACTIVE) values ('00000000-0000-0000-0000-000000000000','pipe',20000,100,true,true,true)
22

3-
Insert into SHOW (PK_SHOW,STR_NAME,INT_DEFAULT_MAX_CORES,INT_DEFAULT_MIN_CORES,INT_FRAME_INSERT_COUNT,INT_JOB_INSERT_COUNT,INT_FRAME_SUCCESS_COUNT,INT_FRAME_FAIL_COUNT,B_BOOKING_ENABLED,B_DISPATCH_ENABLED,B_ACTIVE) values ('00000000-0000-0000-0000-000000000001','edu',20000,100,0,0,0,0,true,true,true)
3+
Insert into SHOW (PK_SHOW,STR_NAME,INT_DEFAULT_MAX_CORES,INT_DEFAULT_MIN_CORES,B_BOOKING_ENABLED,B_DISPATCH_ENABLED,B_ACTIVE) values ('00000000-0000-0000-0000-000000000001','edu',20000,100,true,true,true)
4+
5+
Insert into SHOW_STATS (PK_SHOW,INT_FRAME_INSERT_COUNT,INT_JOB_INSERT_COUNT,INT_FRAME_SUCCESS_COUNT,INT_FRAME_FAIL_COUNT) values ('00000000-0000-0000-0000-000000000000',0,0,0,0)
6+
7+
Insert into SHOW_STATS (PK_SHOW,INT_FRAME_INSERT_COUNT,INT_JOB_INSERT_COUNT,INT_FRAME_SUCCESS_COUNT,INT_FRAME_FAIL_COUNT) values ('00000000-0000-0000-0000-000000000001',0,0,0,0)
48

59

610
Insert into SHOW_ALIAS (PK_SHOW_ALIAS,PK_SHOW,STR_NAME) values ('00000000-0000-0000-0000-000000000001','00000000-0000-0000-0000-000000000000','fx')

0 commit comments

Comments
 (0)