public void free(WorkerSlot ws, Cluster cluster, boolean forceFree) {
        if (_freeSlots.contains(ws))
            return;
        boolean wasFound = false;
        for (Entry<String, Set<WorkerSlot>> entry : _topIdToUsedSlots.entrySet()) {
            Set<WorkerSlot> slots = entry.getValue();
            if (slots.remove(ws)) {
                cluster.freeSlot(ws);
                if (_isAlive) {
                    _freeSlots.add(ws);
                }
                wasFound = true;
            }
        }
        if (!wasFound) {
            if (forceFree) {
                LOG.info("Forcefully freeing the " + ws);
                cluster.freeSlot(ws);
                _freeSlots.add(ws);
            } else {
                throw new IllegalArgumentException("Tried to free a slot that was not" + " part of this node " + _nodeId);
            }
        }
    }
public void free ( WorkerSlot ws , Cluster cluster , boolean forceFree ) { if ( _freeSlots . contains ( ws ) ) return ; boolean wasFound = false ; for ( Entry < String , Set < WorkerSlot > > entry : _topIdToUsedSlots . entrySet ( ) ) { Set < WorkerSlot > slots = entry . getValue ( ) ; if ( slots . remove ( ws ) ) { cluster . freeSlot ( ws ) ; if ( _isAlive ) { _freeSlots . add ( ws ) ; } wasFound = true ; } } if ( ! wasFound ) { if ( forceFree ) { LOG . info ( "Forcefully freeing the " + ws ) ; cluster . freeSlot ( ws ) ; _freeSlots . add ( ws ) ; } else { throw new IllegalArgumentException ( "Tried to free a slot that was not" + " part of this node " + _nodeId ) ; } } }
Frees a single slot in this node

@param ws      the slot to free
@param cluster the cluster to update