@@ -1006,6 +1006,8 @@ func (bc *BuildController) handleActiveBuild(build *buildapi.Build, pod *v1.Pod)
1006
1006
// soon be deleted. The build should be transitioned to the Error phase.
1007
1007
if pod .DeletionTimestamp != nil {
1008
1008
update = transitionToPhase (buildapi .BuildPhaseError , buildapi .StatusReasonBuildPodDeleted , buildapi .StatusMessageBuildPodDeleted )
1009
+ } else if isOOMKilled (pod ) {
1010
+ update = transitionToPhase (buildapi .BuildPhaseFailed , buildapi .StatusReasonOutOfMemoryKilled , buildapi .StatusMessageOutOfMemoryKilled )
1009
1011
} else {
1010
1012
update = transitionToPhase (buildapi .BuildPhaseFailed , buildapi .StatusReasonGenericBuildFailed , buildapi .StatusMessageGenericBuildFailed )
1011
1013
}
@@ -1014,6 +1016,25 @@ func (bc *BuildController) handleActiveBuild(build *buildapi.Build, pod *v1.Pod)
1014
1016
return update , nil
1015
1017
}
1016
1018
1019
+ func isOOMKilled (pod * v1.Pod ) bool {
1020
+ if pod .Status .Reason == "OOMKilled" {
1021
+ return true
1022
+ }
1023
+ for _ , c := range pod .Status .InitContainerStatuses {
1024
+ terminated := c .State .Terminated
1025
+ if terminated != nil && terminated .Reason == "OOMKilled" {
1026
+ return true
1027
+ }
1028
+ }
1029
+ for _ , c := range pod .Status .ContainerStatuses {
1030
+ terminated := c .State .Terminated
1031
+ if terminated != nil && terminated .Reason == "OOMKilled" {
1032
+ return true
1033
+ }
1034
+ }
1035
+ return false
1036
+ }
1037
+
1017
1038
// handleCompletedBuild will only be called on builds that are already in a terminal phase. It is used to setup the
1018
1039
// completion timestamp and failure logsnippet as needed.
1019
1040
func (bc * BuildController ) handleCompletedBuild (build * buildapi.Build , pod * v1.Pod ) (* buildUpdate , error ) {
0 commit comments