Github user mgummelt commented on a diff in the pull request:

    https://github.com/apache/spark/pull/11157#discussion_r69630404
  
    --- Diff: 
core/src/main/scala/org/apache/spark/scheduler/cluster/mesos/MesosSchedulerUtils.scala
 ---
    @@ -356,4 +374,233 @@ private[mesos] trait MesosSchedulerUtils extends 
Logging {
         
sc.conf.getTimeAsSeconds("spark.mesos.rejectOfferDurationForReachedMaxCores", 
"120s")
       }
     
    +  /**
    +   * Checks executor ports if they are within some range of the offered 
list of ports ranges,
    +   *
    +   * @param sc the Spark Context
    +   * @param ports the list of ports to check
    +   * @return true if ports are within range false otherwise
    +   */
    +  protected def checkPorts(sc: SparkContext, ports: List[(Long, Long)]): 
Boolean = {
    +
    +    def checkIfInRange(port: Long, ps: List[(Long, Long)]): Boolean = {
    +      ps.exists(r => r._1 <= port & r._2 >= port)
    +    }
    +
    +    val portsToCheck = ManagedPorts.getPortValues(sc.conf)
    +    val nonZeroPorts = portsToCheck.filter(_ != 0)
    +    val withinRange = nonZeroPorts.forall(p => checkIfInRange(p, ports))
    +    // make sure we have enough ports to allocate per offer
    +    ports.map(r => r._2 - r._1 + 1).sum >= portsToCheck.size && withinRange
    +  }
    +
    +  /**
    +   * Partitions port resources.
    +   *
    +   * @param conf the spark config
    +   * @param ports the ports offered
    +   * @return resources left, port resources to be used and the list of 
assigned ports
    +   */
    +  def partitionPorts(
    +      conf: SparkConf,
    +      ports: List[Resource])
    +    : (List[Resource], List[Resource], List[Long]) = {
    +    val taskPortRanges = getRangeResourceWithRoleInfo(ports.asJava, 
"ports")
    +    val portsToCheck = ManagedPorts.getPortValues(conf)
    --- End diff --
    
    Actually, I just realized something.  We should probably remove the logic 
that explicitly reserves random ports when a user specifies 0.  I realize 
you're doing it to ensure that ephemeral ports are reserved, but a properly 
configured Mesos cluster should not be offering ports in the ephemeral range, 
and there should therefore be no conflict.  I just filed a documentation Mesos 
JIRA about this to make it more clear to users: 
https://issues.apache.org/jira/browse/MESOS-5785


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to