@@ -1006,6 +1006,8 @@ func (bc *BuildController) handleActiveBuild(build *buildapi.Build, pod *v1.Pod)
10061006 // soon be deleted. The build should be transitioned to the Error phase.
10071007 if pod .DeletionTimestamp != nil {
10081008 update = transitionToPhase (buildapi .BuildPhaseError , buildapi .StatusReasonBuildPodDeleted , buildapi .StatusMessageBuildPodDeleted )
1009+ } else if isOOMKilled (pod ) {
1010+ update = transitionToPhase (buildapi .BuildPhaseFailed , buildapi .StatusReasonOOMKilled , buildapi .StatusMessageOOMKilled )
10091011 } else {
10101012 update = transitionToPhase (buildapi .BuildPhaseFailed , buildapi .StatusReasonGenericBuildFailed , buildapi .StatusMessageGenericBuildFailed )
10111013 }
@@ -1014,6 +1016,25 @@ func (bc *BuildController) handleActiveBuild(build *buildapi.Build, pod *v1.Pod)
10141016 return update , nil
10151017}
10161018
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+
10171038// handleCompletedBuild will only be called on builds that are already in a terminal phase. It is used to setup the
10181039// completion timestamp and failure logsnippet as needed.
10191040func (bc * BuildController ) handleCompletedBuild (build * buildapi.Build , pod * v1.Pod ) (* buildUpdate , error ) {
0 commit comments