[Hawkular-dev] Sync with Inventory

Austin Kuo auszon3 at gmail.com
Fri Jul 8 10:05:43 EDT 2016


Ok, that way, we can just use '/sync' to sycn with inventory.
On Fri, Jul 8, 2016 at 10:00 PM Thomas Segismont <tsegismo at redhat.com>
wrote:

> Hi Austin,
>
> Not sure what you meant, but my opinion on the problem so far is that we
> should have a feed per Vert.x instance. Eventually (but that is beyond
> the scope of your project) we could find out when two Vert.x feeds are
> using the same clustered EventBus and then create a "logical" resource
> in inventory to represent it.
>
> Thomas
>
> Le 05/07/2016 à 01:53, Austin Kuo a écrit :
> > why "isParentOf" is more suitable than "contains" in vertx as Thomas
> said?
> >
> > If it is "contains", it also makes sense to me since if "MyApp" is gone,
> > the feeds it contains should disappear as well.
> >
> > Austin
> > Lukas Krejci <lkrejci at redhat.com <mailto:lkrejci at redhat.com>>於 2016年6
> > 月29日 週三,21:20寫道:
> >
> >     Btw. I've slightly updated the inventory organization description on
> the
> >     hawkular site (http://www.hawkular.org/docs/components/inventory/
> >     index.html#inventory-organization
> >     <
> http://www.hawkular.org/docs/components/inventory/index.html#inventory-organization
> >).
> >     I hope it explains the structure and
> >     intent of the entities in inventory in a slightly more
> >     comprehensible manner.
> >
> >     My answers are inline below...
> >
> >     On středa 29. června 2016 14:39:27 CEST Thomas Segismont wrote:
> >     > Thank you very much for the thorough reply Lukas. A few
> >     > questions/comments inline.
> >     >
> >     > Le 23/06/2016 à 15:59, Lukas Krejci a écrit :
> >     > > On Thursday, June 23, 2016 10:27:12 AM Thomas Segismont wrote:
> >     > >> Hey Lukas,
> >     > >>
> >     > >> Thank you for pointing us in the sync endpoint. Austin will
> >     look into
> >     > >> this and will certainly come back with more questions.
> >     > >>
> >     > >> With respect to the user creating resources question, the
> >     difference
> >     > >> between Vert.x and Wildfly is that the user creates resources
> >     > >> grammatically. So in version 1 of the application, there might
> >     be two
> >     > >> HTTP servers as well as 7 event bus handlers, but only 1 http
> >     server in
> >     > >> version 2. And a named worker pool in version 3.
> >     > >>
> >     > >> In the end, I believe it doesn't matter if it's container which
> >     creates
> >     > >> resources or if it's the user himself. Does it?
> >     > >
> >     > > It does not really (inventory has just a single API, so it does
> >     not really
> >     > > know who is talking to it - if a feed or if a user) - but
> >     resources inside
> >     > > and outside feeds have slightly different semantics.
> >     > >
> >     > > Right now the logic is this:
> >     > >
> >     > > Feeds are "agents" that don't care about anything else but their
> own
> >     > > little
> >     > > "world". That's why they can create their own resource types,
> >     metric types
> >     > > and they also declare resources and metrics of those types. Feed
> >     does not
> >     > > need to look "outside" of its own data and is in full charge of
> it.
> >     >
> >     > Does that mean that creating a feed is the only way to create
> >     > resource/metric types?
> >
> >     No, you can also create resource types and metric types directly
> >     under the
> >     tenant.
> >
> >     > I suppose the benefit of creating resource types is that then you
> can
> >     > search for different resources of the same type easily.
> >     >
> >     > And if feeds create resource types, how do you know that resource
> >     types
> >     > created by the Hawkular Agent feed running on server A are the
> same as
> >     > those created by another agent running on server B?
> >     >
> >
> >     Inventory automatically computes "identity hashes" of resource types
> and
> >     metric types - if 2 resource types in 2 feeds have the same ID and
> >     exactly the
> >     same configuration definitions, they are considered identical. If
> >     you know 1
> >     resource type, you can find all the identical ones using the
> >     following REST
> >     API (since 0.17.0.Final, the format of the URLs is thoroughly
> >     explained here:
> >     http://www.hawkular.org/docs/rest/rest-inventory.html#_api_endpoints
> ):
> >
> >     /hawkular/inventory/traversal/f;feedId/rt;resourceTypeId/identical
> >
> >     If for example some resource types should be known up-front and
> "shared"
> >     across all feeds, some kind of "gluecode" could create "global"
> >     resource types
> >     under the tenant, that would have the same id and structure as the
> >     types that
> >     the feeds declare. If then you want to for example find all
> >     resources of given
> >     type, you can:
> >
> >
>  /hawkular/inventory/traversal/rt;myType/identical/rl;defines/type=resource
> >
> >     I.e. for all types identical to the global one, find all resources
> >     defined by
> >     those types.
> >
> >     > > Hence the /sync endpoint applies to a feed nicely - since it is
> >     in charge,
> >     > > it merely declares what is the view it has currently of the
> >     "world" it
> >     > > sees and inventory will make sure it has the same picture -
> >     under that
> >     > > feed.
> >     > >
> >     > > Now if you have an application that spans multiple vms/machines
> >     and is
> >     > > composed of multiple processes, there is no such clear
> >     distinction of
> >     > > "ownership".
> >     >
> >     > Good point, Vert.x applications are often distributed and
> >     communicating
> >     > over the EventBus.
> >     >
> >     > > While indeed a "real" user can just act like a feed, the
> envisioned
> >     > > workflow is that the user operates directly in environments and
> >     at the
> >     > > top level. I.e. a user assigns feeds to environments (i.e. this
> feed
> >     > > reports on my server in staging environment, etc) and the user
> >     creates
> >     > > "logical" resources in the environment (i.e. "My App" resource
> >     in staging
> >     > > env is composed of a load balancer managed by this feed, mongodb
> >     managed
> >     > > by another feed there and clustered wflys there, there and
> there).
> >     > >
> >     > > To model this, inventory supports 2 kinds of tree hierarchies -
> >     1 created
> >     > > using the "contains" relationship, which expresses existential
> >     ownership -
> >     > > i.e. a feed contains its resources and if a feed disappears, so
> >     do the
> >     > > resources, because no one else can report on them. The entities
> >     bound by
> >     > > the
> >     > How does a feed "disappear"? That would be by deleting it through
> the
> >     > REST API, correct? Something the ManageIQ provider would do
> >     through the
> >     > Ruby client?
> >     >
> >
> >     yes
> >
> >     > > contains relationship form a tree - no loops or diamonds in it
> >     (this is
> >     > > enforced by inventory). But there can also be a hierarchy
> >     created using an
> >     > > "isParentOf" relationship (which represents "logical" ownership).
> >     > > Resources
> >     > > bound by "isParentOf" can form an acyclic graph - i.e. 1
> >     resource can have
> >     > > multiple parents as well as many children (isParentOf is
> >     applicable only
> >     > > to
> >     > > resources, not other types of entities).
> >     > >
> >     > > The hierarchies formed by "contains" and "isParentOf" are
> >     independent. So
> >     > > you can create a resource "My App" in the staging environment
> >     and declare
> >     > > it a parent (using "isParentOf") of the resources declared by
> >     feeds that
> >     > > manage the machines where the constituent servers live.
> >     >
> >     > Interesting, that may be the way to model a Vert.x app deployed on
> two
> >     > machines. Each process would have its own feed reporting discovered
> >     > resources (http servers, event bus handlers, ... etc), and a
> >     logical app
> >     > resource as parent.
> >     >
> >
> >     Exactly.
> >
> >     > > That is the envisaged workflow for "apps". Now the downside to
> >     that is
> >     > > that
> >     > > (currently) there is no "sync" for that. The reason is that the
> >     > > application
> >     > > really is a logical concept and the underlying servers can be
> >     repurposed
> >     > > to
> >     > > serve different applications (so if app stops using it, it
> shouldn't
> >     > > really
> >     > > disappear from inventory, as is the case with /sync - because if
> >     a feed
> >     > > doesn't "see" a resource, then it really is just gone, because
> >     the feed is
> >     > > solely responsible for reporting on it).
> >     >
> >     > What happens to the resources exactly? Are they marked as gone or
> >     simply
> >     > deleted?
> >
> >     Right now they are deleted. That is of course not optimal and
> >     versioning is in
> >     the pipeline right after the port of inventory to Tinkerpop3.
> >     Basically all
> >     the entities and relationships will get "from" and "to" timestamps.
> >     Implicitly, you'd look at the "present", but you'd be able to look
> >     at how
> >     things looked in the past by specifying a different "now" in your
> query.
> >
> >     > Do you know how dependent services are updated? For example, when
> >     a JMS
> >     > queue is gone, are alert definitions on queue depth removed as
> >     well? How
> >     > does that happen?
> >     >
> >
> >     Inventory sends events on the bus about every C/U/D of every entity
> or
> >     relationship, so other components can react on that.
> >
> >     > > We can think about how to somehow help clients with "App sync"
> >     but I'm not
> >     > > sure if having a feed for vertx is the right thing to do. On the
> >     other
> >     > > hand I very well may not be seeing some obvious problems of the
> >     above or
> >     > > parallels that make the 2 approaches really the same because the
> >     above
> >     > > model is just ingrained in my brain after so many hours thinking
> >     about it
> >     > > ;)
> >     > >
> >     > >> As for the feed question, the Vert.x feed will be the Metrics
> SPI
> >     > >> implementation (vertx-hawkular-metrics project). Again I guess
> >     it's not
> >     > >> much different than the Hawkular Agent.
> >     > >
> >     > > A feed would only be appropriate if vertx app never reported on
> >     something
> >     > > that would also be reported by other agents. I.e. if a part of a
> >     vertx
> >     > > application is also reported on by a wfly agent, because that
> >     part is
> >     > > running in a wfly server managed by us, then that will not work
> - 1
> >     > > resource cannot be "contained" in 2 different feeds (not just
> >     API wise,
> >     > > but logically, too).
> >     > I'm not too worried about this use case. First the vast majority of
> >     > Vert.x applications I know about are not embedded. Secondly the
> Vert.x
> >     > feed would not report resources already reported by the Hawkular
> >     Agent.
> >     >
> >     > >> Maybe the wording around user creating resources was confusing?
> >     Did you
> >     > >> thought he would do so from application code? In this case, the
> >     answer
> >     > >> is no.
> >     > >
> >     > > Yeah, we should probably get together and discuss what your
> >     plans are to
> >     > > get on the same page with everything.
> >     >
> >     > I believe that presenting to you (and to whoever is interested) the
> >     > conclusions of investigations would be beneficial indeed.
> >     >
> >
> >     +1
> >
> >     > >> Regards,
> >     > >> Thomas
> >     > >>
> >     > >> Le 23/06/2016 à 10:01, Austin Kuo a écrit :
> >     > >>> Yes, I’m gonna build the inventory for vertx applications.
> >     > >>> So I have to create a feed for it.
> >     > >>>
> >     > >>> Thanks!
> >     > >>>
> >     > >>> On Tue, Jun 21, 2016 at 7:55 PM Lukas Krejci
> >     <lkrejci at redhat.com <mailto:lkrejci at redhat.com>
> >     > >>>
> >     > >>> <mailto:lkrejci at redhat.com <mailto:lkrejci at redhat.com>>>
> wrote:
> >     > >>>     Hi Austin,
> >     > >>>
> >     > >>>     Inventory offers a /hawkular/inventory/sync endpoint that
> >     is used to
> >     > >>>     synchronize the "world view" of feeds (feed being
> >     something that
> >     > >>>     pushes data
> >     > >>>     into inventory).
> >     > >>>
> >     > >>>     You said though that a "user creates" the resources, so I
> >     am not
> >     > >>>     sure if /sync
> >     > >>>     would be applicable to your scenario. Would you please
> >     elaborate
> >     > >>>     more on where
> >     > >>>     in the inventory hierarchy you create your resources and
> >     how? I.e.
> >     > >>>     are you
> >     > >>>     using some sort of feed akin to Hawkular's Wildfly Agent
> >     or are you
> >     > >>>     just
> >     > >>>     creating your resources "manually" under environments?
> >     > >>>
> >     > >>>     On Tuesday, June 21, 2016 02:20:33 AM Austin Kuo wrote:
> >     > >>>     > Hi all,
> >     > >>>     >
> >     > >>>     > I’m currently investigating how to sync with inventory
> >     server.
> >     > >>>     > Here’s the example scenario:
> >     > >>>     > Consider the following problem. A user creates version 1
> >     of the
> >     > >>>
> >     > >>>     app with
> >     > >>>
> >     > >>>     > two http servers, one listening on port 8080, the other
> >     on port
> >     > >>>
> >     > >>>     8181. In
> >     > >>>
> >     > >>>     > version 2, the http server listening on port 8181 is no
> >     longer
> >     > >>>     > needed.
> >     > >>>     > When the old version is stopped and the new version
> >     started, there
> >     > >>>
> >     > >>>     will be
> >     > >>>
> >     > >>>     > just one http server listening. The application is not
> >     aware of
> >     > >>>     > the
> >     > >>>     > previous state. What should we do so that the second
> >     http server
> >     > >>>
> >     > >>>     is removed
> >     > >>>
> >     > >>>     > from Inventory?
> >     > >>>     >
> >     > >>>     > Thanks in advance.
> >     > >>>
> >     > >>>     --
> >     > >>>     Lukas Krejci
> >     > >>>
> >     > >>>     _______________________________________________
> >     > >>>     hawkular-dev mailing list
> >     > >>>     hawkular-dev at lists.jboss.org
> >     <mailto:hawkular-dev at lists.jboss.org>
> >     <mailto:hawkular-dev at lists.jboss.org
> >     <mailto:hawkular-dev at lists.jboss.org>>
> >     > >>>     https://lists.jboss.org/mailman/listinfo/hawkular-dev
> >     > >>>
> >     > >>> _______________________________________________
> >     > >>> hawkular-dev mailing list
> >     > >>> hawkular-dev at lists.jboss.org <mailto:
> hawkular-dev at lists.jboss.org>
> >     > >>> https://lists.jboss.org/mailman/listinfo/hawkular-dev
> >
> >
> >     --
> >     Lukas Krejci
> >
> >     _______________________________________________
> >     hawkular-dev mailing list
> >     hawkular-dev at lists.jboss.org <mailto:hawkular-dev at lists.jboss.org>
> >     https://lists.jboss.org/mailman/listinfo/hawkular-dev
> >
> >
> >
> > _______________________________________________
> > hawkular-dev mailing list
> > hawkular-dev at lists.jboss.org
> > https://lists.jboss.org/mailman/listinfo/hawkular-dev
> >
>
> --
> Thomas Segismont
> JBoss ON Engineering Team
> _______________________________________________
> hawkular-dev mailing list
> hawkular-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/hawkular-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/hawkular-dev/attachments/20160708/5b5669e6/attachment-0001.html 


More information about the hawkular-dev mailing list