You are viewing a plain text version of this content. The canonical link for it is here.
Posted to reviews@yunikorn.apache.org by GitBox <gi...@apache.org> on 2022/03/29 23:51:03 UTC

[GitHub] [yunikorn-core] wilfred-s commented on a change in pull request #397: [YUNIKORN-1163] Return history of application state transitions in REST API

wilfred-s commented on a change in pull request #397:
URL: https://github.com/apache/yunikorn-core/pull/397#discussion_r837996818



##########
File path: pkg/scheduler/objects/application.go
##########
@@ -53,6 +53,11 @@ const (
 	AppTagStateAwareDisable string = "application.stateaware.disable"
 )
 
+type EventLogEntry struct {
+	EventTime        time.Time
+	ApplicationState string
+}

Review comment:
       This should be called StateLogEntry, we log state changes not every event. 

##########
File path: pkg/scheduler/objects/application.go
##########
@@ -142,6 +149,20 @@ func (sa *Application) SetState(state string) {
 	sa.stateMachine.SetState(state)
 }
 
+func (sa *Application) recordEvent(time time.Time, appState string, prevState string) {

Review comment:
       signature cleanup:
   * time is always passed in as time.Now(), we can set it here. The nano second differences are not important.
   * prevState is not used as the ordering provides the previous state already

##########
File path: pkg/scheduler/objects/application.go
##########
@@ -80,6 +85,7 @@ type Application struct {
 	gangSchedulingStyle  string                 // gang scheduling style can be hard (after timeout we fail the application), or soft (after timeeout we schedule it as a normal application)
 	finishedTime         time.Time              // the time of finishing this application. the default value is zero time
 	rejectedMessage      string                 // If the application is rejected, save the rejected message
+	eventLog             []*EventLogEntry       // event log for this application

Review comment:
       This should be called stateLog

##########
File path: pkg/scheduler/objects/application.go
##########
@@ -281,6 +303,9 @@ func (sa *Application) timeoutStateTimer(expectedState string, event application
 				sa.notifyRMAllocationReleased(sa.rmID, toRelease, si.TerminationType_TIMEOUT, "releasing placeholders on app complete")
 				sa.clearStateTimer()
 			} else {
+				// HandleApplicationEvent assumes the lock to be held
+				sa.Lock()
+				defer sa.Unlock()

Review comment:
       We have two choices: 
   1. move adding this lock and a lock review of `timeoutStateTimer()` to a new jira., or
   2. fix all locking issues here: `getPlaceholderAllocations()` accesses the allocations map unlocked which might cause issues. `clearStateTimer()` in all cases but here is called under lock.
   We discussed the `clearStateTimer()` call yesterday and I am not sure it causes a problem but we might as well be careful.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: reviews-unsubscribe@yunikorn.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org