This is an automated email from the ASF dual-hosted git repository.

vinodkone pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git


The following commit(s) were added to refs/heads/master by this push:
     new 0ef073c  Removed stale MPI framework.
0ef073c is described below

commit 0ef073c1719216415b63a2ead3f9e33d28aa0212
Author: Vinod Kone <vinodk...@gmail.com>
AuthorDate: Mon Mar 2 14:34:32 2020 -0600

    Removed stale MPI framework.
    
    The framework code hasn't been touched in years and likely
    doesn't work anymore.
    
    Review: https://reviews.apache.org/r/72196
---
 Makefile.am          |   4 -
 configure.ac         |   2 -
 mpi/README           |  63 --------------
 mpi/mpiexec-mesos.in |  39 ---------
 mpi/mpiexec-mesos.py | 234 ---------------------------------------------------
 5 files changed, 342 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 11192ac..b227461 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -56,10 +56,6 @@ AM_DISTCHECK_CONFIGURE_FLAGS = 
--disable-python-dependency-install
 AM_DISTCHECK_CONFIGURE_FLAGS += --disable-dependency-tracking
 
 
-# MPI framework.
-EXTRA_DIST += mpi/README mpi/mpiexec-mesos.in mpi/mpiexec-mesos.py
-
-
 if HAS_JAVA
 maven-install:
        @cd src && $(MAKE) $(AM_MAKEFLAGS) maven-install
diff --git a/configure.ac b/configure.ac
index 4aa4f76..46ca1c7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -200,8 +200,6 @@ AC_CONFIG_FILES([include/mesos/version.hpp])
 
 AC_CONFIG_FILES([src/java/generated/org/apache/mesos/MesosNativeLibrary.java])
 
-AC_CONFIG_FILES([mpi/mpiexec-mesos], [chmod +x mpi/mpiexec-mesos])
-
 
 ###############################################################################
 # Optional features.
diff --git a/mpi/README b/mpi/README
deleted file mode 100644
index 691ae78..0000000
--- a/mpi/README
+++ /dev/null
@@ -1,63 +0,0 @@
-Mesos MPICH2 framework readme
---------------------------------------------
-
-Table of Contents:
-1) Installing MPICH2
-2) Running the Mesos MPICH2 framework
-
-=====================
-1) INSTALLING MPICH2:
-=====================
-- This framework was developed for MPICH2 1.2 (mpd was deprecated
-  starting 1.3) on Linux(Ubuntu 11.10) and OS X Lion.
-  WARNING: MPICH2 later than 1.2 may not run on Mesos.
-  (You can configure newer version to include mpd,
-   but then mpdtrace may still be missing and
-   the executor script used for Mesos relies on it.)
-
-- You can install MPICH2 from scratch. You can get MPICH2 as well as
-  installation directions here:
-  http://www.mcs.anl.gov/research/projects/mpich2/. This tutorial
-  follows the latter. Unpack the tar.gz and...
-
-- To use MPI with Mesos, make sure to have MPICH2 installed on every
-  machine in your cluster.
-
-Setting up:
--> Install and configure:
-mac    :  ./configure --prefix=/Users/_your_username_/mpich2-install
-ubuntu :  ./configure --prefix=/home/_your_username_/mpich2-install
-         Then...
-         sudo make
-         sudo make install
-
-
--> Optional: add mpich binaries to PATH. You can specify the path to
-   installed MPICH2 binaries using mpiexec-meso's '--path' option
-mac    :  sudo vim ~/.bash_profile
-          export PATH=/Users/_your_username_/mpich2-install/bin:$PATH
-ubuntu :  sudo vim ~/.bashrc
-          export PATH=/home/_your_username_/mpich2-install/bin:$PATH
-
--> Create .mpd conf file in home directory:
-          echo "secretword=nil" > ~/.mpd.conf
-         chmod 600 .mpd.conf
-
--> Check installation - these should all return the PATH's set above
-          which mpd
-          which mpiexec
-          which mpirun
-
-
-=====================================
-2) RUNNING THE MESOS MPICH2 FRAMEWORK
-=====================================
-
-Using/testing mpiexec-mesos:
--> Start a Mesos master and slaves
-
--> How to run a Hello, World! program (pass the -h flag to see help options):
-       mpicc helloworld.c -helloworld
-      ./mpiexec-mesos 127.0.0.1:5050 ./helloworld
-   Paths to mesos, protobuf, and distribute eggs can be specified by setting
-   respective environment variables in mpiexec-mesos.
diff --git a/mpi/mpiexec-mesos.in b/mpi/mpiexec-mesos.in
deleted file mode 100644
index dc06953..0000000
--- a/mpi/mpiexec-mesos.in
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/sh
-#
-# This is a wrapper script for the MPI launcher framework.
-#
-# This script uses MESOS_SOURCE_DIR and MESOS_BUILD_DIR which come
-# from configuration substitutions.
-MESOS_SOURCE_DIR=@abs_top_srcdir@
-MESOS_BUILD_DIR=@abs_top_builddir@
-
-# Use colors for errors.
-. ${MESOS_SOURCE_DIR}/support/colors.sh
-
-# Force the use of the Python interpreter configured during building.
-test ! -z "${PYTHON}" && \
-  echo "${RED}Ignoring PYTHON environment variable (using @PYTHON@)${NORMAL}"
-
-PYTHON=@PYTHON@
-
-SETUPTOOLS=`echo ${MESOS_BUILD_DIR}/3rdparty/setuptools-*/`
-
-# Just warn in the case when build with --disable-bundled.
-test ! -e ${SETUPTOOLS} && \
-  echo "${RED}Failed to find ${SETUPTOOLS}${NORMAL}"
-
-PROTOBUF=`echo ${MESOS_BUILD_DIR}/3rdparty/protobuf-*/python/`
-
-test ! -e ${PROTOBUF} && \
-  echo "${RED}Failed to find ${PROTOBUF}${NORMAL}"
-
-MESOS_EGGS=$(find ${MESOS_BUILD_DIR}/src/python/dist -name "*.egg" | tr "\\n" 
":")
-
-SCRIPT=${MESOS_SOURCE_DIR}/mpi/mpiexec-mesos.py
-
-test ! -e ${SCRIPT} && \
-  echo "${RED}Failed to find ${SCRIPT}${NORMAL}" && \
-  exit 1
-
-PYTHONPATH="${SETUPTOOLS}:${PROTOBUF}:${MESOS_EGGS}" \
-  exec ${PYTHON} ${SCRIPT} "${@}"
diff --git a/mpi/mpiexec-mesos.py b/mpi/mpiexec-mesos.py
deleted file mode 100755
index 932e2f1..0000000
--- a/mpi/mpiexec-mesos.py
+++ /dev/null
@@ -1,234 +0,0 @@
-#!/usr/bin/env python
-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-import mesos.interface
-import mesos.native
-from mesos.interface import mesos_pb2
-import os
-import sys
-import time
-import re
-import threading
-
-from optparse import OptionParser
-from subprocess import *
-
-
-def mpiexec():
-  print "We've launched all our MPDs; waiting for them to come up"
-
-  while countMPDs() <= TOTAL_MPDS:
-    print "...waiting on MPD(s)..."
-    time.sleep(1)
-  print "Got %d mpd(s), running mpiexec" % TOTAL_MPDS
-
-  try:
-    print "Running mpiexec"
-    call([MPICH2PATH + 'mpiexec', '-1', '-n', str(TOTAL_MPDS)] + MPI_PROGRAM)
-
-  except OSError,e:
-    print >> sys.stderr, "Error executing mpiexec"
-    print >> sys.stderr, e
-    exit(2)
-
-  print "mpiexec completed, calling mpdallexit %s" % MPD_PID
-
-  # Ring/slave mpd daemons will be killed on executor's shutdown() if
-  # framework scheduler fails to call 'mpdallexit'.
-  call([MPICH2PATH + 'mpdallexit', MPD_PID])
-
-
-class MPIScheduler(mesos.interface.Scheduler):
-
-  def __init__(self, options, ip, port):
-    self.mpdsLaunched = 0
-    self.mpdsFinished = 0
-    self.ip = ip
-    self.port = port
-    self.options = options
-    self.startedExec = False
-
-  def registered(self, driver, fid, masterInfo):
-    print "Mesos MPI scheduler and mpd running at %s:%s" % (self.ip, self.port)
-    print "Registered with framework ID %s" % fid.value
-
-  def resourceOffers(self, driver, offers):
-    print "Got %d resource offers" % len(offers)
-
-    for offer in offers:
-      print "Considering resource offer %s from %s" % (offer.id.value, 
offer.hostname)
-
-      if self.mpdsLaunched == TOTAL_MPDS:
-        print "Declining permanently because we have already launched enough 
tasks"
-        driver.declineOffer(offer.id)
-        continue
-
-      cpus = 0
-      mem = 0
-      tasks = []
-
-      for resource in offer.resources:
-        if resource.name == "cpus":
-          cpus = resource.scalar.value
-        elif resource.name == "mem":
-          mem = resource.scalar.value
-
-      if cpus < CPUS or mem < MEM:
-        print "Declining offer due to too few resources"
-        driver.declineOffer(offer.id)
-      else:
-        tid = self.mpdsLaunched
-        self.mpdsLaunched += 1
-
-        print "Accepting offer on %s to start mpd %d" % (offer.hostname, tid)
-
-        task = mesos_pb2.TaskInfo()
-        task.task_id.value = str(tid)
-        task.slave_id.value = offer.slave_id.value
-        task.name = "task %d " % tid
-
-        cpus = task.resources.add()
-        cpus.name = "cpus"
-        cpus.type = mesos_pb2.Value.SCALAR
-        cpus.scalar.value = CPUS
-
-        mem = task.resources.add()
-        mem.name = "mem"
-        mem.type = mesos_pb2.Value.SCALAR
-        mem.scalar.value = MEM
-
-        task.command.value = "%smpd --noconsole --ncpus=%d --host=%s 
--port=%s" % (MPICH2PATH, CPUS, self.ip, self.port)
-
-        tasks.append(task)
-
-        print "Replying to offer: launching mpd %d on host %s" % (tid, 
offer.hostname)
-        driver.launchTasks(offer.id, tasks)
-
-    if not self.startedExec and self.mpdsLaunched == TOTAL_MPDS:
-      threading.Thread(target = mpiexec).start()
-      self.startedExec = True
-
-  def statusUpdate(self, driver, update):
-    print "Task %s in state %s" % (update.task_id.value, update.state)
-    if (update.state == mesos_pb2.TASK_FAILED or
-        update.state == mesos_pb2.TASK_KILLED or
-        update.state == mesos_pb2.TASK_LOST):
-      print "A task finished unexpectedly, calling mpdexit on %s" % MPD_PID
-      call([MPICH2PATH + "mpdexit", MPD_PID])
-      driver.stop()
-    if (update.state == mesos_pb2.TASK_FINISHED):
-      self.mpdsFinished += 1
-      if self.mpdsFinished == TOTAL_MPDS:
-        print "All tasks done, all mpd's closed, exiting"
-        driver.stop()
-
-
-def countMPDs():
-  try:
-    mpdtraceproc = Popen(MPICH2PATH + "mpdtrace -l", shell=True, stdout=PIPE)
-    mpdtraceline = mpdtraceproc.communicate()[0]
-    return mpdtraceline.count("\n")
-  except OSError,e:
-    print >>sys.stderr, "Error starting mpd or mpdtrace"
-    print >>sys.stderr, e
-    exit(2)
-
-
-def parseIpPort(s):
-  ba = re.search("([^_]*)_([0-9]*)", s)
-  ip = ba.group(1)
-  port = ba.group(2)
-  return (ip, port)
-
-
-if __name__ == "__main__":
-  parser = OptionParser(usage="Usage: %prog [options] mesos_master 
mpi_program")
-  parser.disable_interspersed_args()
-  parser.add_option("-n", "--num",
-                    help="number of mpd's to allocate (default 1)",
-                    dest="num", type="int", default=1)
-  parser.add_option("-c", "--cpus",
-                    help="number of cpus per mpd (default 1)",
-                    dest="cpus", type="int", default=1)
-  parser.add_option("-m","--mem",
-                    help="number of MB of memory per mpd (default 1GB)",
-                    dest="mem", type="int", default=1024)
-  parser.add_option("--name",
-                    help="framework name", dest="name", type="string")
-  parser.add_option("-p","--path",
-                    help="path to look for MPICH2 binaries (mpd, mpiexec, 
etc.)",
-                    dest="path", type="string", default="")
-  parser.add_option("--ifhn-master",
-                    help="alt. interface hostname for what mpd is running on 
(for scheduler)",
-                    dest="ifhn_master", type="string")
-
-  # Add options to configure cpus and mem.
-  (options,args) = parser.parse_args()
-  if len(args) < 2:
-    print >> sys.stderr, "At least two parameters required."
-    print >> sys.stderr, "Use --help to show usage."
-    exit(2)
-
-  TOTAL_MPDS = options.num
-  CPUS = options.cpus
-  MEM = options.mem
-  MPI_PROGRAM = args[1:]
-
-  # Give options.path a trailing '/', if it doesn't have one already.
-  MPICH2PATH = os.path.join(options.path, "")
-
-  print "Connecting to Mesos master %s" % args[0]
-
-  try:
-    mpd_cmd = MPICH2PATH + "mpd"
-    mpdtrace_cmd = MPICH2PATH + "mpdtrace -l"
-
-    if options.ifhn_master is not None:
-      call([mpd_cmd, "--daemon", "--ifhn=" + options.ifhn_master])
-    else:
-      call([mpd_cmd, "--daemon"])
-
-    mpdtraceproc = Popen(mpdtrace_cmd, shell=True, stdout=PIPE)
-    mpdtraceout = mpdtraceproc.communicate()[0]
-
-  except OSError,e:
-    print >> sys.stderr, "Error starting mpd or mpdtrace"
-    print >> sys.stderr, e
-    exit(2)
-
-  (ip,port) = parseIpPort(mpdtraceout)
-
-  MPD_PID = mpdtraceout.split(" ")[0]
-  print "MPD_PID is %s" % MPD_PID
-
-  scheduler = MPIScheduler(options, ip, port)
-
-  framework = mesos_pb2.FrameworkInfo()
-  framework.user = ""
-
-  if options.name is not None:
-    framework.name = options.name
-  else:
-    framework.name = "MPI: %s" % MPI_PROGRAM[0]
-
-  driver = mesos.native.MesosSchedulerDriver(
-    scheduler,
-    framework,
-    args[0])
-  sys.exit(0 if driver.run() == mesos_pb2.DRIVER_STOPPED else 1)

Reply via email to