yangwwei commented on a change in pull request #89: Core allocation/reservation
logic renovation
URL:
https://github.com/apache/incubator-yunikorn-core/pull/89#discussion_r381544763
##########
File path: pkg/scheduler/scheduling_application.go
##########
@@ -19,22 +19,604 @@
package scheduler
import (
+ "fmt"
+ "math"
+ "strings"
+ "sync"
+ "time"
+
+ "go.uber.org/zap"
+
"github.com/apache/incubator-yunikorn-core/pkg/cache"
"github.com/apache/incubator-yunikorn-core/pkg/common/resources"
+ "github.com/apache/incubator-yunikorn-core/pkg/log"
+ "github.com/apache/incubator-yunikorn-core/pkg/plugins"
+ "github.com/apache/incubator-yunikorn-scheduler-interface/lib/go/si"
)
+var reservationDelay = 2 * time.Second
+
type SchedulingApplication struct {
- ApplicationInfo *cache.ApplicationInfo
- Requests *SchedulingRequests
- MayAllocatedResource *resources.Resource // Maybe allocated, set by
scheduler
+ ApplicationInfo *cache.ApplicationInfo
// Private fields need protection
- queue *SchedulingQueue // queue the application is running in
+ queue *SchedulingQueue // queue the
application is running in
+ allocating *resources.Resource // allocating
resource set by the scheduler
+ pending *resources.Resource // pending resources
from asks for the app
+ reservations map[string]*reservation // a map of
reservations
+ requests map[string]*schedulingAllocationAsk // a map of asks
+ sortedRequests []*schedulingAllocationAsk
+
+ sync.RWMutex
}
-func NewSchedulingApplication(appInfo *cache.ApplicationInfo)
*SchedulingApplication {
+func newSchedulingApplication(appInfo *cache.ApplicationInfo)
*SchedulingApplication {
return &SchedulingApplication{
ApplicationInfo: appInfo,
- Requests: NewSchedulingRequests(),
+ allocating: resources.NewResource(),
+ pending: resources.NewResource(),
+ requests: make(map[string]*schedulingAllocationAsk),
+ reservations: make(map[string]*reservation),
+ }
+}
+
+// override reservation delay for tests
+func OverrideReservationDelay(delay time.Duration) {
+ log.Logger().Debug("Test override reservation delay",
+ zap.Duration("delay", delay))
+ reservationDelay = delay
+}
+
+// Return an array of all reservation keys for the app.
+// This will return an empty array if there are no reservations.
+// Visible for tests
+func (sa *SchedulingApplication) GetReservations() []string {
+ sa.RLock()
+ defer sa.RUnlock()
+ keys := make([]string, 0)
+ for key := range sa.reservations {
+ keys = append(keys, key)
+ }
+ return keys
+}
+
+// Return the allocation ask for the key, nil if not found
+func (sa *SchedulingApplication) GetSchedulingAllocationAsk(allocationKey
string) *schedulingAllocationAsk {
+ sa.RLock()
+ defer sa.RUnlock()
+ return sa.requests[allocationKey]
+}
+
+// Return the allocated resources for this application
+func (sa *SchedulingApplication) GetAllocatedResource() *resources.Resource {
+ return sa.ApplicationInfo.GetAllocatedResource()
+}
+
+// Return the pending resources for this application
+func (sa *SchedulingApplication) GetPendingResource() *resources.Resource {
+ sa.RLock()
+ defer sa.RUnlock()
+ return sa.pending
+}
+
+// Return the allocating and allocated resources for this application
+func (sa *SchedulingApplication) getUnconfirmedAllocated() *resources.Resource
{
Review comment:
allocated is confirmed resource
here it calls (allocated + allocating = unconfirmedAllocated) is a bit
misleading. Can we rename this to `getAssumeAllocated`?
----------------------------------------------------------------
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.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]