maintenance: use random minute in cron scheduler
The get_random_minute() method was created to allow maintenance schedules to be fixed to a random minute of the hour. This randomness is only intended to spread out the load from a number of clients, but each client should have an hour between each maintenance cycle. Add this random minute to the cron integration. The cron schedule specification starts with a minute indicator, which was previously inserted as the "0" string but now takes the given minute as an integer parameter. Signed-off-by: Derrick Stolee <derrickstolee@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
		 Derrick Stolee
					Derrick Stolee
				
			
				
					committed by
					
						 Junio C Hamano
						Junio C Hamano
					
				
			
			
				
	
			
			
			 Junio C Hamano
						Junio C Hamano
					
				
			
						parent
						
							62a239987c
						
					
				
				
					commit
					9b43399057
				
			| @ -2174,6 +2174,7 @@ static int crontab_update_schedule(int run_maintenance, int fd) | ||||
| 	FILE *cron_list, *cron_in; | ||||
| 	struct strbuf line = STRBUF_INIT; | ||||
| 	struct tempfile *tmpedit = NULL; | ||||
| 	int minute = get_random_minute(); | ||||
|  | ||||
| 	get_schedule_cmd(&cmd, NULL); | ||||
| 	strvec_split(&crontab_list.args, cmd); | ||||
| @ -2228,11 +2229,11 @@ static int crontab_update_schedule(int run_maintenance, int fd) | ||||
| 			"# replaced in the future by a Git command.\n\n"); | ||||
|  | ||||
| 		strbuf_addf(&line_format, | ||||
| 			    "%%s %%s * * %%s \"%s/git\" --exec-path=\"%s\" for-each-repo --config=maintenance.repo maintenance run --schedule=%%s\n", | ||||
| 			    "%%d %%s * * %%s \"%s/git\" --exec-path=\"%s\" for-each-repo --config=maintenance.repo maintenance run --schedule=%%s\n", | ||||
| 			    exec_path, exec_path); | ||||
| 		fprintf(cron_in, line_format.buf, "0", "1-23", "*", "hourly"); | ||||
| 		fprintf(cron_in, line_format.buf, "0", "0", "1-6", "daily"); | ||||
| 		fprintf(cron_in, line_format.buf, "0", "0", "0", "weekly"); | ||||
| 		fprintf(cron_in, line_format.buf, minute, "1-23", "*", "hourly"); | ||||
| 		fprintf(cron_in, line_format.buf, minute, "0", "1-6", "daily"); | ||||
| 		fprintf(cron_in, line_format.buf, minute, "0", "0", "weekly"); | ||||
| 		strbuf_release(&line_format); | ||||
|  | ||||
| 		fprintf(cron_in, "\n%s\n", END_LINE); | ||||
|  | ||||
		Reference in New Issue
	
	Block a user