From 76cce801349efaea694577c26d4d78226c40312c Mon Sep 17 00:00:00 2001
From: Danny Auble <da@schedmd.com>
Date: Mon, 11 Mar 2013 11:36:18 -0700
Subject: [PATCH] Handle initialization of the purge_resv option added in pre2
 for accounting.

---
 .../accounting_storage/common/common_as.c     | 14 +++++++++++
 .../mysql/as_mysql_rollup.c                   |  6 +++++
 src/sacctmgr/archive_functions.c              | 25 +++++++++++++++++++
 src/slurmdbd/proc_req.c                       |  2 ++
 4 files changed, 47 insertions(+)

diff --git a/src/plugins/accounting_storage/common/common_as.c b/src/plugins/accounting_storage/common/common_as.c
index 1cbff59914e..0c512abdd34 100644
--- a/src/plugins/accounting_storage/common/common_as.c
+++ b/src/plugins/accounting_storage/common/common_as.c
@@ -691,6 +691,20 @@ extern int archive_run_script(slurmdb_archive_cond_t *arch_cond,
 				     (long)curr_end);
 	}
 
+	if (arch_cond->purge_resv != NO_VAL) {
+		if (!(curr_end = archive_setup_end_time(
+			     last_submit, arch_cond->purge_job))) {
+			error("Parsing purge job failed");
+			return SLURM_ERROR;
+		}
+
+		env_array_append_fmt(&env, "SLURM_ARCHIVE_RESV", "%u",
+				     SLURMDB_PURGE_ARCHIVE_SET(
+					     arch_cond->purge_job));
+		env_array_append_fmt(&env, "SLURM_ARCHIVE_LAST_RESV", "%ld",
+				     (long)curr_end);
+	}
+
 	if (arch_cond->purge_step != NO_VAL) {
 		if (!(curr_end = archive_setup_end_time(
 			     last_submit, arch_cond->purge_step))) {
diff --git a/src/plugins/accounting_storage/mysql/as_mysql_rollup.c b/src/plugins/accounting_storage/mysql/as_mysql_rollup.c
index 3437cda4972..d8cd1ec1f38 100644
--- a/src/plugins/accounting_storage/mysql/as_mysql_rollup.c
+++ b/src/plugins/accounting_storage/mysql/as_mysql_rollup.c
@@ -128,6 +128,12 @@ static int _process_purge(mysql_conn_t *mysql_conn,
 		arch_cond.purge_job = slurmdbd_conf->purge_job;
 	else
 		arch_cond.purge_job = NO_VAL;
+
+	if (purge_period & slurmdbd_conf->purge_resv)
+		arch_cond.purge_resv = slurmdbd_conf->purge_resv;
+	else
+		arch_cond.purge_resv = NO_VAL;
+
 	if (purge_period & slurmdbd_conf->purge_step)
 		arch_cond.purge_step = slurmdbd_conf->purge_step;
 	else
diff --git a/src/sacctmgr/archive_functions.c b/src/sacctmgr/archive_functions.c
index f4a221ca777..87b29eaa47d 100644
--- a/src/sacctmgr/archive_functions.c
+++ b/src/sacctmgr/archive_functions.c
@@ -176,6 +176,10 @@ static int _set_cond(int *start, int argc, char *argv[],
 					  MAX(command_len, 1))) {
 			arch_cond->purge_job |= SLURMDB_PURGE_ARCHIVE;
 			set = 1;
+		} else if (!end && !strncasecmp(argv[i], "reservations",
+					  MAX(command_len, 1))) {
+			arch_cond->purge_resv |= SLURMDB_PURGE_ARCHIVE;
+			set = 1;
 		} else if (!end && !strncasecmp(argv[i], "steps",
 					  MAX(command_len, 1))) {
 			arch_cond->purge_step |= SLURMDB_PURGE_ARCHIVE;
@@ -283,6 +287,15 @@ static int _set_cond(int *start, int argc, char *argv[],
 				arch_cond->purge_job |= tmp;
 				set = 1;
 			}
+		} else if (!strncasecmp (argv[i], "PurgeResvAfter",
+					 MAX(command_len, 10))) {
+			if ((tmp = slurmdb_parse_purge(argv[i]+end))
+			    == NO_VAL) {
+				exit_code = 1;
+			} else {
+				arch_cond->purge_resv |= tmp;
+				set = 1;
+			}
 		} else if (!strncasecmp (argv[i], "PurgeStepAfter",
 					 MAX(command_len, 10))) {
 			if ((tmp = slurmdb_parse_purge(argv[i]+end))
@@ -321,6 +334,16 @@ static int _set_cond(int *start, int argc, char *argv[],
 				arch_cond->purge_job |= SLURMDB_PURGE_MONTHS;
 				set = 1;
 			}
+		} else if (!strncasecmp (argv[i], "PurgeResvMonths",
+					 MAX(command_len, 6))) {
+			if (get_uint(argv[i]+end, &tmp, "PurgeResvMonths")
+			    != SLURM_SUCCESS) {
+				exit_code = 1;
+			} else {
+				arch_cond->purge_resv |= tmp;
+				arch_cond->purge_resv |= SLURMDB_PURGE_MONTHS;
+				set = 1;
+			}
 		} else if (!strncasecmp (argv[i], "PurgeStepMonths",
 					 MAX(command_len, 7))) {
 			if (get_uint(argv[i]+end, &tmp, "PurgeStepMonths")
@@ -390,6 +413,8 @@ extern int sacctmgr_archive_dump(int argc, char *argv[])
 		arch_cond->purge_event = NO_VAL;
 	if (!arch_cond->purge_job)
 		arch_cond->purge_job = NO_VAL;
+	if (!arch_cond->purge_resv)
+		arch_cond->purge_resv = NO_VAL;
 	if (!arch_cond->purge_step)
 		arch_cond->purge_step = NO_VAL;
 	if (!arch_cond->purge_suspend)
diff --git a/src/slurmdbd/proc_req.c b/src/slurmdbd/proc_req.c
index 7e0b45169f0..886d179bdb7 100644
--- a/src/slurmdbd/proc_req.c
+++ b/src/slurmdbd/proc_req.c
@@ -907,6 +907,8 @@ static int _archive_dump(slurmdbd_conn_t *slurmdbd_conn,
 		arch_cond->purge_event = slurmdbd_conf->purge_event;
 	if (arch_cond->purge_job == NO_VAL)
 		arch_cond->purge_job = slurmdbd_conf->purge_job;
+	if (arch_cond->purge_resv == NO_VAL)
+		arch_cond->purge_resv = slurmdbd_conf->purge_resv;
 	if (arch_cond->purge_step == NO_VAL)
 		arch_cond->purge_step = slurmdbd_conf->purge_step;
 	if (arch_cond->purge_suspend == NO_VAL)
-- 
GitLab