> On Oct. 28, 2013, 10:10 p.m., Niklas Nielsen wrote:
> > src/master/master.cpp, line 1398
> > <https://reviews.apache.org/r/14669/diff/9/?file=369195#file369195line1398>
> >
> >     If we do that, we need to move the 
> >     
> >     if (offerError.isSome()) {
> >       ...
> >     }
> >     
> >     block out as well and propagate the error with another:
> >     
> >     if (offerError.isSome()) {
> >       break;
> >     }
> >     
> >     Or else, an invalid offer won't send a TASK_LOST.
> >     Do you prefer that approach?
> 
> Vinod Kone wrote:
>     I'm confused. There is already a if(oferError.isSome()) check on #1414. 
> Would that not catch it?

Sorry for not being clear. What I mean is that we could do something like this 
instead:

    foreach (OfferID offerId, offerIds) {
      Offer* offer = getOffer(offerId);
      if (offer == NULL) {
        offerError = OfferError::some(
            "Offer " + stringify(offerId) + " is no longer valid");
        break;
      }

      Slave* slave = getSlave(offer->slave_id());
      foreach (OfferVisitor* visitor, offerVisitors) {
        offerError = (*visitor)(
            offer,
            framework,
            slave);

        if (offerError.isSome()) {
          break;
        }
      }

      // Abort offer and task processing if any offer validation failed.
      if (offerError.isSome()) {
        break;
      }

      totalResources += offer->resources();
    }

    if (offerError.isSome()) {
      LOG(WARNING) << "Failed to validate offer " << offerId
                     << " : " << offerError.get();

      foreach (const TaskInfo& task, tasks) {
        const StatusUpdate& update = protobuf::createStatusUpdate(
            framework->id,
            task.slave_id(),
            task.task_id(),
            TASK_LOST,
            "Task launched with invalid offers");

        LOG(INFO) << "Sending status update " << update
                  << " for launch task attempt on invalid offers: "
                  << stringify(offerIds);
        StatusUpdateMessage message;
        message.mutable_update()->CopyFrom(update);
        send(framework->pid, message);
      }
    }

Does that look better? Should achieve the same thing.
We need the last break, as the break in the foreach (OfferVisitor...) loop 
won't break the outer loop.


- Niklas


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/14669/#review27626
-----------------------------------------------------------


On Oct. 28, 2013, 11:15 p.m., Niklas Nielsen wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/14669/
> -----------------------------------------------------------
> 
> (Updated Oct. 28, 2013, 11:15 p.m.)
> 
> 
> Review request for mesos, Benjamin Hindman, Ben Mahler, and Vinod Kone.
> 
> 
> Bugs: MESOS-749
>     https://issues.apache.org/jira/browse/MESOS-749
> 
> 
> Repository: mesos-git
> 
> 
> Description
> -------
> 
> Running tasks on more than one offer belonging to a single slave can be 
> useful in situations with multiple out-standing offers.
> 
> This patch extends the usual launchTasks() to accept a vector of OfferIDs. 
> The previous launchTasks (accepting a single OfferID) has been kept for 
> backward compatibility, but this now calls the new launchTasks() with a 
> one-element list.
> This also applied for the JNI and python interfaces, which accepts both 
> formats as well.
> 
> Offers are verified to belong to the same slave and framework, before 
> resources are merged and used.
> 
> 
> Diffs
> -----
> 
>   include/mesos/scheduler.hpp fa1ffe8 
>   src/java/jni/org_apache_mesos_MesosSchedulerDriver.cpp 9869929 
>   src/java/src/org/apache/mesos/MesosSchedulerDriver.java ed4b4a3 
>   src/java/src/org/apache/mesos/SchedulerDriver.java 93aaa54 
>   src/master/master.hpp 1eba03f 
>   src/master/master.cpp 1147cc6 
>   src/messages/messages.proto a5dded2 
>   src/python/native/mesos_scheduler_driver_impl.cpp 059ed5d 
>   src/sched/sched.cpp 3049096 
>   src/tests/master_tests.cpp bf790d2 
>   src/tests/resource_offers_tests.cpp 2864c9a 
> 
> Diff: https://reviews.apache.org/r/14669/diff/
> 
> 
> Testing
> -------
> 
> Three new tests has been added: LaunchCombinedOfferTest, 
> LaunchAcrossSlavesTest and LaunchDuplicateOfferTest
> This test ensures that:
> 1) Multiple offers can be used to run a single task (requesting the sum of 
> offer resources).
> 2) Offers cannot span multiple slaves.
> 3) No offers can appear more than once in offer list.
> 
> $ make check
> ...
> [ RUN      ] MasterTest.LaunchCombinedOfferTest
> [       OK ] MasterTest.LaunchCombinedOfferTest (2010 ms)
> [ RUN      ] MasterTest.LaunchAcrossSlavesTest
> [       OK ] MasterTest.LaunchAcrossSlavesTest (3 ms)
> [ RUN      ] MasterTest.LaunchDuplicateOfferTest
> [       OK ] MasterTest.LaunchDuplicateOfferTest (3 ms)
> ...
> 
> 
> Thanks,
> 
> Niklas Nielsen
> 
>

Reply via email to