@@ -138,8 +138,19 @@ public synchronized void launch(SlaveComputer computer, TaskListener listener) {
138138 Metrics .metricRegistry ().counter (MetricNames .CREATION_FAILED ).inc ();
139139 int httpCode = e .getCode ();
140140 if (400 <= httpCode && httpCode < 500 ) { // 4xx
141- runListener .getLogger ().printf ("ERROR: Unable to create pod %s %s/%s.%n%s%n" , cloudName , namespace , pod .getMetadata ().getName (), e .getMessage ());
142- PodUtils .cancelQueueItemFor (pod , e .getMessage ());
141+ if (httpCode == 403 && e .getMessage ().contains ("is forbidden: exceeded quota" )) {
142+ runListener .getLogger ().printf ("WARNING: Unable to create pod: %s %s/%s because kubernetes resource quota exceeded. %n%s%nRetrying...%n%n" ,
143+ cloudName , namespace , pod .getMetadata ().getName (), e .getMessage ());
144+ }
145+ else if (httpCode == 409 && e .getMessage ().contains ("Operation cannot be fulfilled on resourcequotas" )) {
146+ // See: https://github.com/kubernetes/kubernetes/issues/67761 ; A retry usually works.
147+ runListener .getLogger ().printf ("WARNING: Unable to create pod: %s %s/%s because kubernetes resource quota update conflict. %n%s%nRetrying...%n%n" ,
148+ cloudName , namespace , pod .getMetadata ().getName (), e .getMessage ());
149+ }
150+ else {
151+ runListener .getLogger ().printf ("ERROR: Unable to create pod %s %s/%s.%n%s%n" , cloudName , namespace , pod .getMetadata ().getName (), e .getMessage ());
152+ PodUtils .cancelQueueItemFor (pod , e .getMessage ());
153+ }
143154 } else if (500 <= httpCode && httpCode < 600 ) { // 5xx
144155 LOGGER .log (FINE ,"Kubernetes returned HTTP code {0} {1}. Retrying..." , new Object [] {e .getCode (), e .getStatus ()});
145156 } else {
0 commit comments