<div dir="ltr"><div>I agree if we couldn't add versioned repos later, then we should add it now. I believe the current API is already well setup to add it later. Specifically, here is a non-nested example of the versioned repository resource to be added in 3.1+<br></div><div><br></div><div>/api/v3/repo_version/</div><div><br></div><div>The user would POST to that to cause a new repo version to be created. What are the contents of that repo version? Well it depends on the POST data. That repo version could be the result of a sync being performed, or perhaps it could also include mass associate/unassociate operations right there. In other words, I see a clear path to adding such a resource, and I see endless flexibility in terms of the users intention (via POST data) of what should be contained in that repo version.<br></div><div><br></div><div>Can some feedback be given on this design? Why won't this work in 3.1+?</div><div><br></div><div>To give my own answer to the question. The main impact I see when adding this in 3.1+ is on plugin writers not users. Specifically the plugin writer API would change because a plugin writer would no longer be associating content with a repo as it's primary activity. Instead their code would be to associate content with a repo version. We can roll out that change in a clear, coordinated way with the plugin community. It's also appropriate because the plugin API is still < 1.0. We would bump the plugin api from 0.1 to 0.2 and plugins can easily declare their compatibility as pulpcore-plugin < 0.2. Relative to the effort of creating a plugin, porting plugin code for a change like this I think would be low effort.<br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Nov 29, 2017 at 10:19 AM, Jeff Ortel <span dir="ltr"><<a href="mailto:jortel@redhat.com" target="_blank">jortel@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
<br>
On 11/29/2017 07:22 AM, David Davis wrote:<br>
> I think we could design an API in 3.0 that would support versioned repos in 3.1+. However, our current API<br>
> does not. For example, the /repositorycontents/ endpoint doesn't make sense with versioned repos as no one<br>
> would want to add/remove content units one-by-one when doing so would generate a new repo version each time.<br>
> Imagine that we end up with an endpoint in 3.0 that’s not compatible with versioned repos. What would we do? I<br>
> think this is a strong argument for adding versioned repos now.<br>
<br>
</span>agreed.<br>
<span class=""><br>
><br>
> Of course the main drawback is that it might delay the beta. But I wonder by how much. It might be good to<br>
> groom the versioned repo user stories so that (a) we can see how much value they provide to end users and (b)<br>
> how closely they align with the work @mhrivnak has done.<br>
<br>
</span>agreed.<br>
<br>
><br>
><br>
> David<br>
<span class="">><br>
> On Tue, Nov 28, 2017 at 4:00 PM, Brian Bouterse <<a href="mailto:bbouters@redhat.com">bbouters@redhat.com</a> <mailto:<a href="mailto:bbouters@redhat.com">bbouters@redhat.com</a>>> wrote:<br>
><br>
>     In reading back over the last email thread in May, it ended with us looking at URL options to ensure we<br>
>     could release 3.0 and add in repo versions in 3.1+. We definitely want repo versions in the 3.y line, so<br>
>     we wanted to make sure that was possible. If it wasn't, then we may have to add it into 3.0.<br>
><br>
>     That question is a lot easier now given how firm the API is. I think we can add in versioned repos in<br>
>     3.1+, in a natural way. Just like a user creates a Publication which triggers a publish, a user would<br>
>     create a RepoVersion which would trigger a sync to produce that new RepoVersion. The repo versions work<br>
>     needs to continue, but first I hope we prioritize getting to Beta 1 for core. There are a lot of use cases<br>
>     in black on the MVP which are not implemented or written in Redmine. I believe closing that gap would be a<br>
>     better use of time given that we can add this later.<br>
><br>
>     What do others think?<br>
><br>
><br>
</span><span class="">>     On Tue, Nov 28, 2017 at 2:24 PM, Dennis Kliban <<a href="mailto:dkliban@redhat.com">dkliban@redhat.com</a> <mailto:<a href="mailto:dkliban@redhat.com">dkliban@redhat.com</a>>> wrote:<br>
><br>
>         I have a hard objection to including versioned repositories in 3.0. We agreed to make sure that our<br>
>         current design would not prevent us from adding versioned repositories in the future. We did NOT agree<br>
>         to including versioned repositories in 3.0 release. This is a big code change that did not go through<br>
>         our regular planning process. I greatly appreciate your effort in driving this feature forward, but we<br>
>         should take a step back and go through our regular process. I am also concerned that adding such a big<br>
>         change at this time will delay the beta.<br>
><br>
>         -Dennis<br>
><br>
><br>
</span>>         On Tue, Nov 28, 2017 at 10:10 AM, Michael Hrivnak <<a href="mailto:mhrivnak@redhat.com">mhrivnak@redhat.com</a> <mailto:<a href="mailto:mhrivnak@redhat.com">mhrivnak@redhat.com</a>>><br>
<div><div class="h5">>         wrote:<br>
><br>
>             Following up on previous discussions, I did an analysis of how repository versioning would impact<br>
>             Pulp 3's current REST API and plugin API. A lot has changed since we last discussed the topic (in<br>
>             May 2017), such as how we handle publications, and how the REST API is laid out. You can read the<br>
>             analysis here:<br>
><br>
>             <a href="https://pulp.plan.io/projects/pulp/wiki/Repository_Versions" rel="noreferrer" target="_blank">https://pulp.plan.io/projects/<wbr>pulp/wiki/Repository_Versions</a><br>
>             <<a href="https://pulp.plan.io/projects/pulp/wiki/Repository_Versions" rel="noreferrer" target="_blank">https://pulp.plan.io/<wbr>projects/pulp/wiki/Repository_<wbr>Versions</a>><br>
><br>
>             We previously discussed and vetted the mechanics at great length. While there was broad agreement<br>
>             on the value to Pulp 3, there was uncertainty about the details of how it would impact REST<br>
>             clients and plugin writers, and also uncertainty about how long it would take to fully implement.<br>
><br>
>             In the course of my recent analysis, two things became clear. 1) both current APIs are not<br>
>             compatible and would have to change. Details are on the wiki page above. 2) the PoC from earlier<br>
>             this year indeed covers the hard parts, leaving mostly DRF details to sort out.<br>
><br>
><br>
>         I don't agree with your assessment that the current REST API is not compatible with adding repository<br>
>         versions. A repository version is it's own resource that can be added<br>
><br>
><br>
><br>
>             I started rebasing the PoC onto current 3.0-dev, and within an hour I had it working with the<br>
>             updated REST endpoints. With that having been so easy, I threw caution to the wind, and within a<br>
>             few hours I had a fully functional branch that covered all the key use cases.<br>
><br>
>             - sync creates a new version<br>
>             - versions and their content sets are visible through the REST API<br>
>             - each version shows what content was added and removed<br>
>             - versions can be deleted, which queues a task that squashes changes as previously discussed<br>
>             - the ChangeSet and pulp_file were updated to work with versions<br>
>             - publish defaults to using the latest version<br>
><br>
>             I also created a set of tests to help prove that it behaves correctly:<br>
><br>
>             <a href="https://gist.github.com/mhrivnak/69af54063dff7465212914094dff34c2" rel="noreferrer" target="_blank">https://gist.github.com/<wbr>mhrivnak/<wbr>69af54063dff7465212914094dff34<wbr>c2</a><br>
>             <<a href="https://gist.github.com/mhrivnak/69af54063dff7465212914094dff34c2" rel="noreferrer" target="_blank">https://gist.github.com/<wbr>mhrivnak/<wbr>69af54063dff7465212914094dff34<wbr>c2</a>><br>
><br>
>             I have just about 12 hours of recent work into it, and the code is PR-ready. It's just missing doc<br>
>             updates and release notes. It's been difficult to keep discussion moving toward a full plan due to<br>
>             the uncertainties mentioned above, so hopefully this can alleviate those concerns and give<br>
>             everyone something concrete to look at.<br>
><br>
</div></div>>             <a href="https://github.com/pulp/pulp/pull/3228" rel="noreferrer" target="_blank">https://github.com/pulp/pulp/<wbr>pull/3228</a> <<a href="https://github.com/pulp/pulp/pull/3228" rel="noreferrer" target="_blank">https://github.com/pulp/pulp/<wbr>pull/3228</a>><br>
>             <a href="https://github.com/pulp/pulp_file/pull/20" rel="noreferrer" target="_blank">https://github.com/pulp/pulp_<wbr>file/pull/20</a> <<a href="https://github.com/pulp/pulp_file/pull/20" rel="noreferrer" target="_blank">https://github.com/pulp/pulp_<wbr>file/pull/20</a>><br>
<span class="">><br>
>             Two notable items are missing. One is that there is no way to arbitrarily add and remove content<br>
>             from a repo now, since this removes the "repositorycontent" endpoint. But we need to solve that<br>
>             with a more formal and bulk add/remove API anyway. I also found that the "repositorycontent"<br>
>             endpoint was not using tasks, and thus there was no repo locking, so it needed additional work<br>
>             anyway. Based on this overall effort, I think it will be very easy to add if we just agree on what<br>
>             the endpoints should look like.<br>
><br>
>             The other is that publish does not in this PR accept a reference to a version. It always uses the<br>
>             latest. That would also be a very easy enhancement to make.<br>
><br>
>             I am happy to support getting this merged as I transition to being a more passive community<br>
>             member, assuming there are no objections. I am also of course happy to help support this into the<br>
>             future, as I believe strongly in its value and importance (see previous thread).<br>
><br>
>             Please provide feedback and questions. If a live meeting this week would help expedite evaluation<br>
>             of this effort, I'm happy to schedule that. And assuming there are no hard objections, I'm happy<br>
>             to proceed with documentation updates.<br>
><br>
>             Thanks!<br>
><br>
>             --<br>
><br>
>             Michael Hrivnak<br>
><br>
>             Principal Software Engineer, RHCE<br>
><br>
>             Red Hat<br>
><br>
><br>
>             ______________________________<wbr>_________________<br>
>             Pulp-dev mailing list<br>
</span>>             <a href="mailto:Pulp-dev@redhat.com">Pulp-dev@redhat.com</a> <mailto:<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> <<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>
><br>
><br>
>         ______________________________<wbr>_________________<br>
>         Pulp-dev mailing list<br>
>         <a href="mailto:Pulp-dev@redhat.com">Pulp-dev@redhat.com</a> <mailto:<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> <<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>
><br>
><br>
>     ______________________________<wbr>_________________<br>
>     Pulp-dev mailing list<br>
>     <a href="mailto:Pulp-dev@redhat.com">Pulp-dev@redhat.com</a> <mailto:<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> <<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>
<div class="HOEnZb"><div class="h5">><br>
><br>
><br>
><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>
<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>