I believe what you are running into is a slight change in how we represent
Resources. Older frameworks expect unreserved resources to look like this:
> {
> role: "*",
> reservation: ,
> reservations:
> }
In 1.4.0, we started representing unreserved resources like:
> {
> role: ,
> reservation: ,
> reservations: []
> }
And our Resources.hpp utility files were updated to expect this new
format. By compiling your framework against a newer libmesos, you were
using a utility expecting the new resource format, but receiving the older
format from the Master. You'll need to add this line to your FrameworkInfo
to receive the newer format:
framework.add_capabilities()->set_type(FrameworkInfo::Capability::RESERVATION_REFINEMENT);
Here's the JIRA that tracked this change:
https://issues.apache.org/jira/browse/MESOS-7575
On Wed, Sep 26, 2018 at 7:56 AM James Vanns wrote:
> Hi! It's been a looonng time since I've asked a question on this list
> (several years) so excuse me if this is now the wrong forum! Anyway,
> basically, I've got an old Mesos framework I'm resurrecting and it was
> developed against 0.26.x, I think. For the sheer Hell of it I just upgraded
> Mesos to 1.5.0 and by pure miracle (or rather, excellent API/ABI work on
> your part!) I only had to change about 1 or 2 lines of my C++ code to get a
> build :) However, when I run it and push a task to it, it now bails with
> this stack trace;
>
> F0926 14:35:34.225720 122 resources.cpp:1134] Check failed:
> !resource.has_role() cpus:8
> *** Check failure stack trace: ***
> @ 0x7fae14997a7d google::LogMessage::Fail()
> @ 0x7fae14999830 google::LogMessage::SendToLog()
> @ 0x7fae14997663 google::LogMessage::Flush()
> @ 0x7fae1499a259 google::LogMessageFatal::~LogMessageFatal()
> @ 0x7fae1393d8a3 mesos::Resources::isEmpty()
> @ 0x7fae1393d97c mesos::Resources::add()
> @ 0x7fae1393fce0 mesos::Resources::operator+=()
> @ 0x7fae1393fd8d mesos::Resources::operator+=()
> @ 0x7fae1394001b mesos::Resources::Resources()
>
> Which I happen to find is the same path as this random link for
> mesos-executor;
>
>
> https://files.sameroom.io/q9gILEXTOUokGlBYScOrZMVvAFz1g72fK9Ys1oxk0Ho/mesos-execute_.txt
>
> So given that none of my code ever had any explicit roles set and all
> slaves (sorry, agents - it's been that long ;) and the master have only
> ever assumed the default role ('*'), what do I need to add/remove in my
> code to get it to work as it did before!? If it helps it appears that the
> code that generates this dump is;
>
> offer->resources();
>
> I hope this is enough info! If not, please ask and I'll paste more context
> etc.
>
> Cheers,
>
> Jim
>
> --
> Senior Production Engineer,
> Industrial Light & Magic
>