<div dir="ltr"><div><div>Thanks for all the discussion! I agree there are improvements to be made here.<br></div><div><br></div><div>I don't think either of these proposals solve all the problems without creating a few new ones. Rather than saying +1 to either, I want to talk about the goals and use cases a bit more. Here is a list of 3 related use cases that Pulp currently *can't* do, along with some commentary on the state of why. Once we decide on what we think users need, figuring out how to make it should be straightforward.<br><br></div>1) As a user, I can know if a task is current locking a worker or not. Say they need to take a worker offline. They have no way of knowing if that is safe to do at this moment without this info. Pulp internally knows this information, but I don't believe this is visible to the user currently. This is useful info for debugging that we regularly have to pull from the db. Regardless of either proposal, we still need to decide if this will be included in the Task viewset. I'm +1 to adding this use case to the MVP explicitly. Do people feel this use case should be added to the MVP?<br></div><div><br></div><div>2) As a user, I can filter for tasks by the resource locked, e.g. repo 'foo', without forming a special search string to search by. Currently the 'resource' field in the TaskTag model stores a string like 'repository:foo'. Even if you know the name 'foo' you need to search via substring (inefficient and maybe dangerous).You also can't search by other properties like the UUID, feed, etc because to Pulp it's just a string 'repository:foo'. It doesn't know that is actually repository xxxxx-yyyy-yyyy-zzzzzzz with a name='foo'.<br></div><div><br></div><div>3) As a user, I can filter for tasks by operation type (e.g. sync). Currently we have no way to do this. The data model doesn't even have a field to capture this information. This feature seems simple from a high level, but determining the specific taxonomy of those operation types it can get messy. We have 'sync' and 'publish', those are pretty clear. What about 'update' like a publisher/importer/repo attribute update? How about 'add' and 'remove' content? What if both add and remove happen in the same operation? Is that two tags or a new one? If we're going to talk about this feature we need to call out the use cases more specifically. A series of use cases like: "As a user, I can filter for tasks labeled with the 'sync' operation" could work.</div><div><br></div><div>Another way to accomplish use case (3) is to record the actual task name as a string, e.g. 'pulpcore.app.tasks.importer.sync'. This won't work well either because we DRY up our tasks, especially update, so I think the simple taxonomy is still the way forward for that feature. <a href="https://pulp.plan.io/issues/3038">https://pulp.plan.io/issues/3038</a><br></div><div><br></div><div>Each proposal affects these use cases, but neither of them totally enables all of them. Aside from solving them, what do others thing about these use cases and the current state of Pulp3 w.r.t them? Thanks for all the discussion.</div><div><br></div><div>-Brian<br></div><div><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 9, 2017 at 3:43 PM, Dennis Kliban <span dir="ltr"><<a href="mailto:dkliban@redhat.com" target="_blank">dkliban@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class="">On Mon, Nov 6, 2017 at 2:17 PM, David Davis <span dir="ltr"><<a href="mailto:daviddavis@redhat.com" target="_blank">daviddavis@redhat.com</a>></span> wrote:<br></span><span class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Originally I scheduled a meeting for tomorrow but on second thought, I figured a pulp-dev thread would be more inclusive than a meeting. I hope to get this resolved by the end of this week and if not then maybe we can have a meeting. <div><br></div><div>This is to design out the replacement of task tags in Pulp 3. I’ve got feedback from a few other developers in terms of how to do that so I wrote up a sort of outline of the problem and two possible proposals. Looking for feedback/questions/etc on what people prefer.</div><div><br></div><div><div><br></div><div><div>Background</div><div>---</div><div><br></div><div>In Pulp 2, tasks have tags that either provide a task name/description or info on what resources a task acts on. Tasks also have reserved resources, which provide a way for tasks to lock a particular resource.</div><div><br></div><div>In Pulp 3, we have models TaskTag and ReservedResource[0]. Tasks are associated with the resources they work on via TaskTag. If a resource is locked, a ReservedResource record is created in the db and then removed from the db once the resource is unlocked.</div><div><br></div><div><br></div><div>Problem</div><div>---</div><div><br></div><div>The task tag model doesn't really fit Pulp 3. It's perhaps too generic and totally unnecessary (see Proposal 1), or it could be redesigned to accomodate other things (see Proposal 2).</div><div><br></div><div>Also, we need to support created resources (e.g. publications) with tasks. Refactoring task tags might provide an opportunity to do so.</div><div><br></div><div><br></div><div>User stories</div><div>---</div><div><br></div><div>As an authenticated user, I can see what resource(s) a task acted on.</div><div>As an authenticated user, I can search for a tasks based on what resource they acted on.</div><div><br></div><div><br></div><div>Proposal 1</div><div>---</div><div><br></div><div>Since tags and reserved resources in Pulp 3 will only store information about a particular repository (not 100% sure here), it should be possible to simplify the data model. We could ditch both TaskTag and ReservedResource models and just have a direct relationship between Tasks and Repositories (e.g. TaskRepository). This model could also have some sort of field to indicate whether a particular field is locked (e.g. is_locked). Unlike ReservedResource, this relationship would be persisted—only the is_locked field would be updated when a task is done.</div><div><br></div><div><br></div><div>Proposal 2</div><div>---</div><div><br></div><div>We could keep the TaskTag relationship (perhaps even rename it to TaskResource) and we could add a field to indicate the nature of the relationship between task and resource (e.g. created, updated, etc). This field could not only capture what TaskTag is currently used for but also stuff like created resources (e.g. publications). We could also have a field to indicate which task resources are locked (e.g. is_locked).</div><div><br></div></div></div></div></blockquote><div><br></div></span><div>I like proposal number 2.<br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><div dir="ltr"><div><div><div></div><div>This would be useful for <a href="https://pulp.plan.io/issues/3033" target="_blank">https://pulp.plan.io/issues/30<wbr>33</a>.</div><div><br></div><div><br></div><div>Questions</div><div>---</div><div><br></div><div>- What proposal do we want to adopt?</div><div>- When do we need to address these changes?</div><div>- Do we really need to allow users to search tasks by a resource/repo at all?</div><div><br></div><div><br></div><div>[0] <a href="https://git.io/vF8iH" target="_blank">https://git.io/vF8iH</a></div><span class="m_1564723096873111214HOEnZb"><font color="#888888"><div><div class="m_1564723096873111214m_-6864214716201173032gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><br></div><div>David<br></div></div></div></div></div></div></div></div>
</font></span></div></div></div>
<br></span><span class="">______________________________<wbr>_________________<br>
Pulp-dev mailing list<br>
<a href="mailto:Pulp-dev@redhat.com" target="_blank">Pulp-dev@redhat.com</a><br>
<a href="https://www.redhat.com/mailman/listinfo/pulp-dev" rel="noreferrer" target="_blank">https://www.redhat.com/mailman<wbr>/listinfo/pulp-dev</a><br>
<br></span></blockquote></div><br></div></div>
<br>______________________________<wbr>_________________<br>
Pulp-dev mailing list<br>
<a href="mailto:Pulp-dev@redhat.com">Pulp-dev@redhat.com</a><br>
<a href="https://www.redhat.com/mailman/listinfo/pulp-dev" rel="noreferrer" target="_blank">https://www.redhat.com/<wbr>mailman/listinfo/pulp-dev</a><br>
<br></blockquote></div><br></div></div>