private void updateRunnability ( ClusterNode node ) { synchronized ( node ) { for ( Map . Entry < ResourceType , RunnableIndices > entry : typeToIndices . entrySet ( ) ) { ResourceType type = entry . getKey ( ) ; RunnableIndices r = entry . getValue ( ) ; ResourceRequest unitReq = Utilities . getUnitResourceRequest ( type ) ; boolean currentlyRunnable = r . hasRunnable ( node ) ; boolean shouldBeRunnable = node . checkForGrant ( unitReq , resourceLimit ) ; if ( currentlyRunnable && ! shouldBeRunnable ) { LOG . info ( "Node " + node . getName ( ) + " is no longer " + type + " runnable" ) ; r . deleteRunnable ( node ) ; } else if ( ! currentlyRunnable && shouldBeRunnable ) { LOG . info ( "Node " + node . getName ( ) + " is now " + type + " runnable" ) ; r . addRunnable ( node ) ; } } } }
Update the runnable status of a node based on resources available . This checks both resources and slot availability .