From 1d79c0c3fe64c774ec6fd270ffa262cc96b3ef47 Mon Sep 17 00:00:00 2001 From: Marius Tolzmann Date: Thu, 27 Aug 2015 14:26:13 +0200 Subject: [PATCH 1/3] mxq_group: Add new flags to tag dependencies between groups --- mxq_group.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mxq_group.h b/mxq_group.h index 3e2ff59..8ab438d 100644 --- a/mxq_group.h +++ b/mxq_group.h @@ -59,6 +59,9 @@ struct mxq_group { #define MXQ_GROUP_FLAG_CLOSED (1<<0) +#define MXQ_GROUP_FLAG_HAS_DEPENDENCY (1<<1) +#define MXQ_GROUP_FLAG_IS_DEPENDENCY (1<<2) + void mxq_group_free_content(struct mxq_group *g); inline uint64_t mxq_group_jobs_done(struct mxq_group *g); From e7c459ba8c0882caee1e2fce90062483bd4763fd Mon Sep 17 00:00:00 2001 From: Marius Tolzmann Date: Thu, 27 Aug 2015 16:16:22 +0200 Subject: [PATCH 2/3] mxqadmin: Prevent groups that some group depends on to be reopened implements https://github.molgen.mpg.de/mariux64/mxq/issues/15#issuecomment-139 --- mxqadmin.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mxqadmin.c b/mxqadmin.c index 5b7d3de..55d64bc 100644 --- a/mxqadmin.c +++ b/mxqadmin.c @@ -118,8 +118,10 @@ static int update_group_flags_reopen(struct mx_mysql *mysql, uint64_t group_id, struct mx_mysql_stmt *stmt = NULL; unsigned long long num_rows = 0; int res; + uint64_t flagsnottobeset; uint64_t newflags = 0; + flagsnottobeset = MXQ_GROUP_FLAG_IS_DEPENDENCY; newflags |= MXQ_GROUP_FLAG_CLOSED; stmt = mx_mysql_statement_prepare(mysql, @@ -127,6 +129,7 @@ static int update_group_flags_reopen(struct mx_mysql *mysql, uint64_t group_id, " group_flags = group_flags & ~(?)" " WHERE group_id = ?" " AND user_uid = ?" + " AND group_flags & ? = 0" ); if (!stmt) { mx_log_err("mx_mysql_statement_prepare(): %m"); @@ -136,6 +139,7 @@ static int update_group_flags_reopen(struct mx_mysql *mysql, uint64_t group_id, res = mx_mysql_statement_param_bind(stmt, 0, uint64, &(newflags)); res += mx_mysql_statement_param_bind(stmt, 1, uint64, &(group_id)); res += mx_mysql_statement_param_bind(stmt, 2, uint32, &(user_uid)); + res += mx_mysql_statement_param_bind(stmt, 3, uint64, &(flagsnottobeset)); assert(res == 0); res = mx_mysql_statement_execute(stmt, &num_rows); From 7f513bbb5d80b6398dbf811f88cf98a5c3fce608 Mon Sep 17 00:00:00 2001 From: Marius Tolzmann Date: Thu, 27 Aug 2015 16:44:13 +0200 Subject: [PATCH 3/3] mysql: Add dependency columns to mxq_group table --- mysql/alter_tables_0.13.0.sql | 5 +++++ mysql/create_tables.sql | 3 +++ 2 files changed, 8 insertions(+) create mode 100644 mysql/alter_tables_0.13.0.sql diff --git a/mysql/alter_tables_0.13.0.sql b/mysql/alter_tables_0.13.0.sql new file mode 100644 index 0000000..b2046be --- /dev/null +++ b/mysql/alter_tables_0.13.0.sql @@ -0,0 +1,5 @@ +ALTER TABLE mxq_group + ADD COLUMN ( + depends_on_group INT8 UNSIGNED NULL DEFAULT NULL, + dependency_of_group INT8 UNSIGNED NULL DEFAULT NULL + ); diff --git a/mysql/create_tables.sql b/mysql/create_tables.sql index d134ab5..30365ce 100644 --- a/mysql/create_tables.sql +++ b/mysql/create_tables.sql @@ -53,6 +53,9 @@ CREATE TABLE IF NOT EXISTS mxq_group ( stats_total_real_sec_finished INT8 UNSIGNED NOT NULL DEFAULT 0, stats_total_wait_sec_finished INT8 UNSIGNED NOT NULL DEFAULT 0, + depends_on_group INT8 UNSIGNED NULL DEFAULT NULL, + dependency_of_group INT8 UNSIGNED NULL DEFAULT NULL, + INDEX(group_id), INDEX(group_name) );