Re: Get Task's labels on reconciliation

2016-09-05 Thread Neil Conway
Hi Altan,

In my opinion, the reasons for not including labels in status updates are:

(1) Task labels cannot be changed after they are set; since the
framework defined the labels in the first place, the framework should
know what the labels are.

(2) The framework cannot safely "forget" about the labels on a task
and rely on getting them back from the master via reconciliation. The
reason is that the master might send status updates for tasks the
master doesn't have any metadata for. For example:

* framework launches task T with labels L on agent A
* master fails over, new master elected and recovers from registry
* new master waits 10 mins for agent A to reregister
* agent A never reregisters, so the framework gets slaveLost() for it
* when the framework does an explicit reconciliation for task T on A,
it will get TASK_LOST. However, the master cannot fill-in the labels
for the task because this master doesn't know anything about the task;
task metadata is not stored in the registry, so after failover the new
master doesn't have this information.

You could make a case for sending labels whenever we can, but for the
reasons above, I fear this might encourage questionable coding
practices by framework authors. Supporting functionality that only
works "most of the time" doesn't seem like a great idea.

Neil

On Fri, Sep 2, 2016 at 1:34 AM, Altan Alpay  wrote:
> Hi,
>
> I got bitten by the same issue. I was setting task labels but unable to 
> retrieve them back through reconciliation.
> If a framework can’t read the labels back, what’s the reason labeling tasks 
> at first place?
>
> Is there any other mechanism to read task labels that I am missing? 
> Preferable through Scheduler API?
>
> I see that the master exposes labels through /state.json but that’s 
> terrifiyingly big json blob to deal with.
>
> Thanks,
> Altan
>
> On 2016-01-29 12:16 (-0700), Benjamin Mahler  wrote:
>> Ah I'm sorry, not sure if the concept of "latest labels" applies in the>
>> same way as "latest health" information for a task, since health is an>
>> active property of the task, whereas labels can be specific to updates.>
>>
>> On Fri, Jan 29, 2016 at 12:09 PM, Benjamin Mahler >
>> wrote:>
>>
>> > I see that the following was filed:>
>> > https://issues.apache.org/jira/browse/MESOS-4477>
>> >>
>> > But this sounds like a bug: if the master knows about the task during>
>> > reconciliation, labels should be sent. For example we had this same bug 
>> > for>
>> > health information:>
>> > https://issues.apache.org/jira/browse/MESOS-2206>
>> >>
>> > On Fri, Jan 22, 2016 at 2:10 PM, Andrii Biletskyi <>
>> > andrii.bilets...@stealth.ly> wrote:>
>> >>
>> >> Okay, thanks for your answer. I will rework my algorithm so it doesn't>
>> >> rely on task labels/data.>
>> >>>
>> >> Thanks,>
>> >> Andrii>
>> >>>
>> >> On Fri, Jan 22, 2016 at 11:49 PM, Vinod Kone >
>> >> wrote:>
>> >>>
>> 
>> >>> On Fri, Jan 22, 2016 at 1:07 PM, Andrii Biletskyi <>
>> >>> andrii.bilets...@stealth.ly> wrote:>
>> 
>>  8. Scheduler.statusUpdate callback is called for>
>>  taskId=t1;state=Running. But here I don't receive as part of TaskStatus>
>>  task labels and taskData, they are just empty.>
>> >
>> 
>> >>> Yea, this is expected behavior. Currently master *generates* new status>
>> >>> updates (with only a few fields set) when it gets a reconciliation 
>> >>> request.>
>> 
>> >>>
>> >>>
>> >>
>>


Re: Get Task's labels on reconciliation

2016-09-01 Thread Altan Alpay
Hi,

I got bitten by the same issue. I was setting task labels but unable to 
retrieve them back through reconciliation.
If a framework can’t read the labels back, what’s the reason labeling tasks at 
first place?

Is there any other mechanism to read task labels that I am missing? Preferable 
through Scheduler API?

I see that the master exposes labels through /state.json but that’s 
terrifiyingly big json blob to deal with.

Thanks,
Altan

On 2016-01-29 12:16 (-0700), Benjamin Mahler  wrote: 
> Ah I'm sorry, not sure if the concept of "latest labels" applies in the> 
> same way as "latest health" information for a task, since health is an> 
> active property of the task, whereas labels can be specific to updates.> 
> 
> On Fri, Jan 29, 2016 at 12:09 PM, Benjamin Mahler > 
> wrote:> 
> 
> > I see that the following was filed:> 
> > https://issues.apache.org/jira/browse/MESOS-4477> 
> >> 
> > But this sounds like a bug: if the master knows about the task during> 
> > reconciliation, labels should be sent. For example we had this same bug 
> > for> 
> > health information:> 
> > https://issues.apache.org/jira/browse/MESOS-2206> 
> >> 
> > On Fri, Jan 22, 2016 at 2:10 PM, Andrii Biletskyi <> 
> > andrii.bilets...@stealth.ly> wrote:> 
> >> 
> >> Okay, thanks for your answer. I will rework my algorithm so it doesn't> 
> >> rely on task labels/data.> 
> >>> 
> >> Thanks,> 
> >> Andrii> 
> >>> 
> >> On Fri, Jan 22, 2016 at 11:49 PM, Vinod Kone > 
> >> wrote:> 
> >>> 
>  
> >>> On Fri, Jan 22, 2016 at 1:07 PM, Andrii Biletskyi <> 
> >>> andrii.bilets...@stealth.ly> wrote:> 
>  
>  8. Scheduler.statusUpdate callback is called for> 
>  taskId=t1;state=Running. But here I don't receive as part of TaskStatus> 
>  task labels and taskData, they are just empty.> 
> > 
>  
> >>> Yea, this is expected behavior. Currently master *generates* new status> 
> >>> updates (with only a few fields set) when it gets a reconciliation 
> >>> request.> 
>  
> >>> 
> >>> 
> >> 
> 

Re: Get Task's labels on reconciliation

2016-01-29 Thread Benjamin Mahler
Ah I'm sorry, not sure if the concept of "latest labels" applies in the
same way as "latest health" information for a task, since health is an
active property of the task, whereas labels can be specific to updates.

On Fri, Jan 29, 2016 at 12:09 PM, Benjamin Mahler 
wrote:

> I see that the following was filed:
> https://issues.apache.org/jira/browse/MESOS-4477
>
> But this sounds like a bug: if the master knows about the task during
> reconciliation, labels should be sent. For example we had this same bug for
> health information:
> https://issues.apache.org/jira/browse/MESOS-2206
>
> On Fri, Jan 22, 2016 at 2:10 PM, Andrii Biletskyi <
> andrii.bilets...@stealth.ly> wrote:
>
>> Okay, thanks for your answer. I will rework my algorithm so it doesn't
>> rely on task labels/data.
>>
>> Thanks,
>> Andrii
>>
>> On Fri, Jan 22, 2016 at 11:49 PM, Vinod Kone 
>> wrote:
>>
>>>
>>> On Fri, Jan 22, 2016 at 1:07 PM, Andrii Biletskyi <
>>> andrii.bilets...@stealth.ly> wrote:
>>>
 8. Scheduler.statusUpdate callback is called for
 taskId=t1;state=Running. But here I don't receive as part of TaskStatus
 task labels and taskData, they are just empty.

>>>
>>> Yea, this is expected behavior. Currently master *generates* new status
>>> updates (with only a few fields set) when it gets a reconciliation request.
>>>
>>
>>
>


Re: Get Task's labels on reconciliation

2016-01-29 Thread Benjamin Mahler
I see that the following was filed:
https://issues.apache.org/jira/browse/MESOS-4477

But this sounds like a bug: if the master knows about the task during
reconciliation, labels should be sent. For example we had this same bug for
health information:
https://issues.apache.org/jira/browse/MESOS-2206

On Fri, Jan 22, 2016 at 2:10 PM, Andrii Biletskyi <
andrii.bilets...@stealth.ly> wrote:

> Okay, thanks for your answer. I will rework my algorithm so it doesn't
> rely on task labels/data.
>
> Thanks,
> Andrii
>
> On Fri, Jan 22, 2016 at 11:49 PM, Vinod Kone  wrote:
>
>>
>> On Fri, Jan 22, 2016 at 1:07 PM, Andrii Biletskyi <
>> andrii.bilets...@stealth.ly> wrote:
>>
>>> 8. Scheduler.statusUpdate callback is called for
>>> taskId=t1;state=Running. But here I don't receive as part of TaskStatus
>>> task labels and taskData, they are just empty.
>>>
>>
>> Yea, this is expected behavior. Currently master *generates* new status
>> updates (with only a few fields set) when it gets a reconciliation request.
>>
>
>


Re: Get Task's labels on reconciliation

2016-01-22 Thread Andrii Biletskyi
Okay, thanks for your answer. I will rework my algorithm so it doesn't rely
on task labels/data.

Thanks,
Andrii

On Fri, Jan 22, 2016 at 11:49 PM, Vinod Kone  wrote:

>
> On Fri, Jan 22, 2016 at 1:07 PM, Andrii Biletskyi <
> andrii.bilets...@stealth.ly> wrote:
>
>> 8. Scheduler.statusUpdate callback is called for taskId=t1;state=Running.
>> But here I don't receive as part of TaskStatus task labels and taskData,
>> they are just empty.
>>
>
> Yea, this is expected behavior. Currently master *generates* new status
> updates (with only a few fields set) when it gets a reconciliation request.
>


Re: Get Task's labels on reconciliation

2016-01-22 Thread Vinod Kone
On Fri, Jan 22, 2016 at 1:07 PM, Andrii Biletskyi <
andrii.bilets...@stealth.ly> wrote:

> 8. Scheduler.statusUpdate callback is called for taskId=t1;state=Running.
> But here I don't receive as part of TaskStatus task labels and taskData,
> they are just empty.
>

Yea, this is expected behavior. Currently master *generates* new status
updates (with only a few fields set) when it gets a reconciliation request.


Re: Get Task's labels on reconciliation

2016-01-22 Thread Andrii Biletskyi
Neil, thanks for the link!

Regarding task labels - maybe I'm doing something wrong because I can't see
task labels/
taskData received upon task reconciliation. Here's what I'm doing:

1. Start scheduler
2. Scheduler asks to launch some task (taskId=t1)
3. Executor successfully launches task, through mesosDriver returns state
Running and sets some labels, taskData
4. Scheduler receives status update, persists it somewhere. Important to
note that here I *do receive* as part of TaskStatus object valid task
labels and taskData
5. After some time I restart the scheduler
6. Scheduler is registered with defined frameworkId
7. Scheduler requests task reconciliation through
driver.reconcileTasks(Collections.empty)
8. Scheduler.statusUpdate callback is called for taskId=t1;state=Running.
But here I don't receive as part of TaskStatus task labels and taskData,
they are just empty.

So is it expected behavior?

Thanks,
Andrii


On Fri, Jan 22, 2016 at 9:02 PM, Neil Conway  wrote:

> Hi Andrii,
>
> TaskStatus includes the task's labels [1], so what you're trying to do
> should work.
>
> BTW, we recently wrote up some suggestions on how to write highly
> available frameworks. The docs will be on the website the next time it
> is refreshed; in the mean time, you can find them here:
>
> https://reviews.apache.org/r/41896/diff/8#1
>
> Neil
>
> [1]
> https://github.com/apache/mesos/blob/master/include/mesos/mesos.proto#L1162
>
> On Fri, Jan 22, 2016 at 6:49 AM, Andrii Biletskyi
>  wrote:
> > Hi,
> >
> > I'm using Mesos 0.25. Is there any way to get some more information about
> > the task (like label, taskData)
> > when requesting task reconciliation? Right now i see that driver returns
> > only taskId, slaveId, status, timestamp.
> >
> > Let me describe my use case so you have a better understanding.
> >
> > I'm trying to implement HA framework that will manage a cluster of
> database
> > nodes.
> > The scheduler will be run on marathon, and since I'm managing database
> nodes
> > I want to store mesos state
> > there to tolerate scheduler failures. So the workflow is the following:
> > User starts Scheduler on marathon providing some generated frameworkId.
> > Scheduler registers itself with the given
> > frameworkId and immediately starts reconciliation. If it's a fresh start
> > nothing has to be done - we are ready to accept
> > "add database node" commands. If it's a failover the idea was to inspect
> > each task state returned by the reconciliation
> > procedure, extract labels to distinguish whether it's a node, responsible
> > for storing mesos state, then extract task data
> > where we store node's host:port. With that you can initialize your
> storage
> > and may operate normally.
> >
> > Thanks in advance,
> > Andrii
> >
>


Re: Get Task's labels on reconciliation

2016-01-22 Thread Neil Conway
Hi Andrii,

TaskStatus includes the task's labels [1], so what you're trying to do
should work.

BTW, we recently wrote up some suggestions on how to write highly
available frameworks. The docs will be on the website the next time it
is refreshed; in the mean time, you can find them here:

https://reviews.apache.org/r/41896/diff/8#1

Neil

[1] https://github.com/apache/mesos/blob/master/include/mesos/mesos.proto#L1162

On Fri, Jan 22, 2016 at 6:49 AM, Andrii Biletskyi
 wrote:
> Hi,
>
> I'm using Mesos 0.25. Is there any way to get some more information about
> the task (like label, taskData)
> when requesting task reconciliation? Right now i see that driver returns
> only taskId, slaveId, status, timestamp.
>
> Let me describe my use case so you have a better understanding.
>
> I'm trying to implement HA framework that will manage a cluster of database
> nodes.
> The scheduler will be run on marathon, and since I'm managing database nodes
> I want to store mesos state
> there to tolerate scheduler failures. So the workflow is the following:
> User starts Scheduler on marathon providing some generated frameworkId.
> Scheduler registers itself with the given
> frameworkId and immediately starts reconciliation. If it's a fresh start
> nothing has to be done - we are ready to accept
> "add database node" commands. If it's a failover the idea was to inspect
> each task state returned by the reconciliation
> procedure, extract labels to distinguish whether it's a node, responsible
> for storing mesos state, then extract task data
> where we store node's host:port. With that you can initialize your storage
> and may operate normally.
>
> Thanks in advance,
> Andrii
>