From a3e0712e5de17f0fe2775dda9ecfbbba3e475f8a Mon Sep 17 00:00:00 2001
From: Morris Jette <jette@schedmd.com>
Date: Wed, 27 Nov 2013 09:41:00 -0800
Subject: [PATCH] select/cray: Add apbasil open retry logic

---
 src/plugins/select/cray/libalps/basil_request.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/plugins/select/cray/libalps/basil_request.c b/src/plugins/select/cray/libalps/basil_request.c
index 4b2335b1f3c..4dc93f43e8e 100644
--- a/src/plugins/select/cray/libalps/basil_request.c
+++ b/src/plugins/select/cray/libalps/basil_request.c
@@ -7,6 +7,7 @@
  */
 #include "parser_internal.h"
 #include <stdarg.h>
+#include <unistd.h>
 
 int   log_sel = -1;
 char *xml_log_loc = NULL;
@@ -190,9 +191,9 @@ static void _rsvn_write_reserve_xml(FILE *fp, struct basil_reservation *r,
 int basil_request(struct basil_parse_data *bp)
 {
 	int to_child, from_child;
-	int ec, rc = -BE_UNKNOWN;
+	int ec, i, rc = -BE_UNKNOWN;
 	FILE *apbasil;
-	pid_t pid;
+	pid_t pid = -1;
 	DEF_TIMERS;
 
 	if (log_sel == -1)
@@ -206,7 +207,11 @@ int basil_request(struct basil_parse_data *bp)
 	assert(bp->method > BM_none && bp->method < BM_MAX);
 
 	START_TIMER;
-	pid = popen2(cray_conf->apbasil, &to_child, &from_child, true);
+	for (i = 0; ((i < 10) && (pid < 0)); i++) {
+		if (i)
+			usleep(100000);
+		pid = popen2(cray_conf->apbasil, &to_child, &from_child, true);
+	}
 	if (pid < 0)
 		fatal("popen2(\"%s\", ...)", cray_conf->apbasil);
 
-- 
GitLab