I'm not yet convinced about the proposed URL change for publishing.  Can you 
help me understand why a POST to
the publications collection is more appropriate than the a POST to a publisher?

A POST to the publications/ collection means the POST body should define the 
publication to be created.
Right?  What about options that need to be passed to the publisher?


On 10/31/2017 03:13 PM, Brian Bouterse wrote:
> @dkliban, I'm +1 on that.
> 
> @all, Please jump in if this is not the best direction for us to go.
> 
> On Tue, Oct 31, 2017 at 3:55 PM, Dennis Kliban <dkli...@redhat.com 
> <mailto:dkli...@redhat.com>> wrote:
> 
>     On Tue, Oct 31, 2017 at 3:52 PM, Brian Bouterse <bbout...@redhat.com 
> <mailto:bbout...@redhat.com>> wrote:
> 
>         Would that return the 202 w/ a link to the task because the 
> publication hasn't been created yet? Then
>         using the created_resources they can see what was created, and in the 
> event of failure the task fails
>         and there are no created_resources.
> 
>         @dkliban is ^ the idea?
> 
> 
>     Yes, the response would the same as it for the /publish URL right now. 
> This is just a change in the URL
>     that is used to make the request.
> 
>      
> 
>         On Tue, Oct 31, 2017 at 3:48 PM, Dennis Kliban <dkli...@redhat.com 
> <mailto:dkli...@redhat.com>> wrote:
> 
> 
> 
>             On Tue, Oct 31, 2017 at 3:40 PM, Brian Bouterse 
> <bbout...@redhat.com <mailto:bbout...@redhat.com>>
>             wrote:
> 
>                 +1 to updating #3033 to have a created_resources attribute 
> which would be a list of
>                 GenericForeignKeys. It also needs docs, but I'm not entirely 
> sure where.
> 
>                 If we're going to introduce the above attribute, I think 
> having the controller endpoint as-is
>                 would be the most usable. @dkliban do you see value in 
> changing the URL structure if the
>                 created_resources attribute is introduced?
> 
> 
>             This API call creates a publication resource. A POST to 
> publishers/<id>/publications/ seems most
>             appropriate for creating new publication resources.
> 
>                 I can help review/groom these if that is helpful.
> 
>                 -Brian
> 
> 
>                 On Tue, Oct 31, 2017 at 1:39 PM, David Davis 
> <davidda...@redhat.com
>                 <mailto:davidda...@redhat.com>> wrote:
> 
>                     Personally I am not opposed to the url endpoint you 
> suggest. 
> 
>                     It also seems like there is some consensus around adding 
> a ‘created resources’
>                     relationship to Task or at least prototyping that out to 
> see what it would look like. 
> 
>                     If no one disagrees, should I update issue #3033 with 
> those two items?
> 
> 
>                     David
> 
>                     On Wed, Oct 25, 2017 at 1:23 PM, Dennis Kliban 
> <dkli...@redhat.com
>                     <mailto:dkli...@redhat.com>> wrote:
> 
>                         On Wed, Oct 25, 2017 at 11:24 AM, David Davis 
> <davidda...@redhat.com
>                         <mailto:davidda...@redhat.com>> wrote:
> 
>                             I don’t know that the ambiguity around whether a 
> task has a publication or not is
>                             a big deal. If I call the publication endpoint, 
> I’d expect a publication task
>                             which either has 1 publication or 0 (if the 
> publication failed) attached to it.
> 
>                             In terms of ambiguity, I see a worse problem 
> around adding a task_id field to
>                             publications. As a user, I don’t know if a 
> publication failed or not when I get
>                             back a publication object. Instead, I have to 
> look up the task to see if it is a
>                             real (or successful) publication. Moreover, since 
> we allow users to remove/clean
>                             up tasks, that task may not even exist anymore.
> 
> 
>                         I agree that the ephemeral nature of tasks makes the 
> originally proposed solution
>                         non-deterministic. I am open to associating 
> 'resources created' with a task instead.
> 
>                         However, I still think there is value in changing the 
> rest API endpoint for starting a
>                         publish task to POST
>                         
> /api/v3/repositories/<repo-id>/publishers/<type>/<name>/publications/. 
> However, I will
>                         start a separate thread for that discussion.
> 
>                          - Dennis
>                          
> 
> 
>                             David
> 
>                             On Wed, Oct 25, 2017 at 11:03 AM, Brian Bouterse 
> <bbout...@redhat.com
>                             <mailto:bbout...@redhat.com>> wrote:
> 
> 
> 
>                                 On Tue, Oct 24, 2017 at 10:00 PM, Michael 
> Hrivnak <mhriv...@redhat.com
>                                 <mailto:mhriv...@redhat.com>> wrote:
> 
> 
> 
>                                     On Tue, Oct 24, 2017 at 2:11 PM, Brian 
> Bouterse <bbout...@redhat.com
>                                     <mailto:bbout...@redhat.com>> wrote:
> 
>                                         Thanks everyone for all the 
> discussion! I'll try to recap the problem
>                                         and some of the solutions I've heard. 
> I'll also share some of my
>                                         perspective on them too.
> 
>                                         What problem are we solving?
>                                         When a user calls "publish" (the 
> action API endpoint) they get a 202
>                                         w/ a link to the task. That task will 
> produce a publication. How can
>                                         the user find the publication that 
> was produced by the task? How can
>                                         the user be sure the publication is 
> fully complete?
> 
> 
>                                         What are our options?
>                                         1) Start linking to created objects 
> from task status. I believe its
>                                         been clearly stated about why we 
> can't do this. If it's not clear, or
>                                         if there are other things we should 
> consider, let's talk about it.
>                                         Acknowledging or establishing 
> agreement on this is crucial because a
>                                         change like this would bring back a 
> lot of the user pain from pulp2. I
>                                         believe the HAL suggestion falls into 
> this area.
> 
> 
>                                     I may have missed something, but I do not 
> think this is clear. I know that
>                                     Pulp 2's API included a lot of 
> unstructured data, but that is not at all
>                                     what I'm suggesting here.
> 
>                                     It is standard and recommended practice 
> for REST API responses to include
>                                     links to resources along with information 
> about what type of resource each
>                                     link references. We could include a 
> reference to the created resource and
>                                     an identifier for what type of resource 
> it is, and that would be well
>                                     within the bounds of good REST API 
> design. HAL is just one of several ways
>                                     to accomplish that, and I'm not pitching 
> any particular solution there. In
>                                     any case, I'm not sure what the problem 
> would be with this approach.
> 
>                                  
>                                 I agree it is a standard practice for a 
> resource to include links to other
>                                 resources, but the proposal is to include 
> "generic" links is different and
>                                 creates a different user experience. I 
> believe referencing the task from the
>                                 publication will be easier for users and 
> clients. When a user looks up a
>                                 publication, they will always know they'll 
> get between 0 and 1 links to a
>                                 task. You can use that to check the state of 
> the publication. If we link to
>                                 "generic" resources (like a publication) from 
> a task, then if I ask a user "do
>                                 you expect task 
> ede3af3e-d5cf-4e18-8c57-69ac4d4e4de6 to contain a link to a
>                                 publication or not?" you can't know until you 
> query it. I think that ambiguity
>                                 was a pain point in Pulp2. I don't totally 
> reject this solution, but this is
>                                 an undesirable property (I think).
> 
>                                      
> 
> 
>                                         2) Have the user find the publication 
> via query that sorts on time and
>                                         filters only for a specific 
> publisher. This could be fragile because
>                                         with a multi-user system and no hard 
> references between publications
>                                         and tasks, answering the question 
> "which is the publication for me" is
>                                         hard because another user could have 
> submitted a publish too. While
>                                         not totally perfect, this could work.
> 
> 
>                                     In theory if a user queried for a 
> publication from a specific publisher
>                                     that was created between the start and 
> end times of the task, that should
>                                     unambiguously identify the correct 
> publication. But depending on
>                                     timestamps is not a particularly robust 
> nor confidence-inspiring way to
>                                     reference a resource.
> 
>                                 Agreed and Agreed
> 
>                                      
> 
> 
>                                         3) Have the user create a publication 
> directly like any other REST
>                                         resource, and help the user 
> understand the state of that resource over
>                                         time. I believe the proposal at the 
> start of this thread is
>                                         recommending this solution. I'm also 
> +1 on this solution.
> 
> 
>                                     I think the problem with this is that a 
> user cannot create a publication.
>                                     A user can only ask a plugin to create a 
> publication. Until the plugin
>                                     creates the publication, there is no 
> publication.
> 
> 
>                                 Note a publication is an object, but really 
> we mean a publication and it's
>                                 related PublishedArtifact, PublishedMetadat, 
> etc objects. It would be
>                                 straightforward for a user to create a 
> publication using the viewset and have
>                                 the task associated with it call the 
> publisher to build out the associated
>                                 PublishedArtifact, PublishedContent, 
> PublishedMetadata, etc. We should explore
>                                 if this is good or not, but it is possible.
> 
>                                 As an aside, this is related to a problem 
> everyone should be aware of: the
>                                 existence of a publication does not guarantee 
> that publication is finished
>                                 publishing. Even with option 1, where the 
> task creates the publisher and links
>                                 to it in the task status, while the publisher 
> is running it must save the
>                                 Publication so that the PublishedArtifact, 
> etc can link to it. So for any
>                                 given publication, in order to know if it's 
> "fully finished and consistent"
>                                 you must be able to check the status of the 
> associated task that produced it.
> 
> 
> 
>                                         As an aside, I don't think 
> considering versioned repos as a possible
>                                         solution is helping us with this 
> problem. The scope of the current
>                                         problem is relatively small and the 
> scope of planning for versioned
>                                         repos is large.
> 
> 
>                                     Versioned repos is a potential solution. 
> In that scenario, a user would
>                                     request publication of a specific repo 
> version (perhaps defaulting to the
>                                     latest), the publication would be linked 
> to that version, and that is an
>                                     easy mechanism for the user to find the 
> publication they want. Ultimately
>                                     the user is interested in working with a 
> specific content set anyway. They
>                                     get a repo to a state where it has the 
> content they want, and then they
>                                     publish that content set. No matter what 
> we do with publications, users
>                                     will think of them in terms of related 
> content sets. A repo version is
>                                     that immutable content set they can work 
> with confidently.
> 
> 
>                                 It's neat to me that that versions are 
> snapshots of content and publications
>                                 are snapshots of content. Publications 
> already create much of the value
>                                 propostion of versioned repos with 
> publications. They allow you to work with
>                                 specific content sets like you describe. Also 
> they allow for rollback. So that
>                                 is all great for our users. For this thread, 
> I want to bring the conversation
>                                 back to where it started, solving a small 
> problem about linking two resources
>                                 that already exist.
> 
> 
>                                     It helps the rollback scenario a lot as 
> well. Versioning repos allows a
>                                     user to see what the differences are 
> between two content sets, and thus
>                                     two different publications, which informs 
> them about when and how far back
>                                     they should roll back a distribution.
> 
> 
>                                     - user discovers a horrible flaw in a 
> piece of content
>                                     - user queries for which version of the 
> repo introduced that piece of content
>                                     - user updates the distribution to serve 
> the publication that came before
>                                     the one which introduced the piece of 
> content, optionally re-publishing
>                                     that version in case its publication was 
> deleted or had never been made in
>                                     the first place.
> 
>                                     -- 
> 
>                                     Michael Hrivnak
> 
>                                     Principal Software Engineer, RHCE 
> 
>                                     Red Hat
> 
> 
> 
>                                 
> _______________________________________________
>                                 Pulp-dev mailing list
>                                 Pulp-dev@redhat.com 
> <mailto:Pulp-dev@redhat.com>
>                                 
> https://www.redhat.com/mailman/listinfo/pulp-dev
>                                 
> <https://www.redhat.com/mailman/listinfo/pulp-dev>
> 
> 
> 
>                             _______________________________________________
>                             Pulp-dev mailing list
>                             Pulp-dev@redhat.com <mailto:Pulp-dev@redhat.com>
>                             https://www.redhat.com/mailman/listinfo/pulp-dev
>                             <https://www.redhat.com/mailman/listinfo/pulp-dev>
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> _______________________________________________
> Pulp-dev mailing list
> Pulp-dev@redhat.com
> https://www.redhat.com/mailman/listinfo/pulp-dev
> 

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Pulp-dev mailing list
Pulp-dev@redhat.com
https://www.redhat.com/mailman/listinfo/pulp-dev

Reply via email to