[Apiman-user] How to update backend implementation URL for published Service without changing the version
Eric Wittmann
eric.wittmann at redhat.com
Wed Jan 27 09:04:28 EST 2016
Sanjay - I will do some testing again to see if I can reproduce this
behavior. I'll respond back with *exact* steps and we'll see how it goes.
I honestly can't explain how you could be experiencing this - but then
again I'm not really an expert on Elastic. Based on what I know, I
didn't think it was possible to run up against what you're seeing.
We'll see how my testing goes....
-Eric
On 1/27/2016 12:17 AM, Sanjay Melinamani wrote:
> Hi Eric,
> When I run curl -XGET
> http://localhost:19200/apiman_gateway/service/_search , I do see Old
> implementation URLs.
> I have restarted apiman many times. Still the old url is being used.
>
> Thanks
> Sanjay
>
>
> On Tue, Jan 26, 2016 at 8:06 AM, Eric Wittmann <eric.wittmann at redhat.com
> <mailto:eric.wittmann at redhat.com>> wrote:
>
> Thanks. :)
>
> As for the index files - I think the bigger question is what do you
> see when you do a search in elastic?
>
> curl -XGET http://localhost:19200/apiman_gateway/service/_search
>
> What are the results of doing the above?
>
> I don't have any idea what might be stored in the elasticsearch
> index files - so I can't tell you what to expect from a grep.
>
> I *can* tell you that there is no re-index operation. When you
> update the document (via the PUT http request) it should store the
> new data in ES *and* update its indices. That's EXACTLY what apiman
> does internally when updating/adding/publishing a service.
>
> After restarting apiman, is your gateway still using the wrong (old)
> endpoint?
>
> One last thing - if you are planning on using this in production, we
> really recommend that you install a standalone instance of
> elasticsearch rather than using the one included in the apiman
> quickstart. There's more information in the production guide:
>
> http://www.apiman.io/latest/production-guide.html
>
> -Eric
>
> On 1/26/2016 2:08 AM, Sanjay Melinamani wrote:
>
> Hi Eric,
>
> Congratulations on the new Release! I can't wait to migrate to
> 1.2.1 !!
>
> Meanwhile I am still having hard time replacing the
> implementation URL
> used in a published API.. Here is what I see..
> When I execute GET, I see the new implementation URL used
> (http://internal-XXXX.elb.amazonaws.com:8080/hra-web/services/engine/OSA/cf)
> but when I do a grep on my old URL "10.0.0.241", I see the
> matches in
> index files. How can I rebuild the indices?
>
>
> [ec2-user at Prism-ST-GWY wildfly-8.2.0.Final]$ curl -XGET
> http://localhost:19200/apiman_gateway/service/prism:osa:1.0/_source
> {"endpoint":"http://internal-XXXX.elb.amazonaws.com:8080/hra-web/services/engine/OSA/cf","endpointType":"rest","publicService":false,"organizationId":"prism","serviceId":"osa","version":"1.0","endpointProperties":[],"policies":[]}
>
>
> [ec2-user at Prism-ST-GWY wildfly-8.2.0.Final]$ grep -rnw . -e
> "10.0.0.241"
> Binary file
> ./standalone/data/es/data/apiman/nodes/0/indices/apiman_gateway/3/index/_0.cfs
> matches
> Binary file
> ./standalone/data/es/data/apiman/nodes/0/indices/apiman_gateway/3/index/_1y.cfs
> matches
> Binary file
> ./standalone/data/es/data/apiman/nodes/0/indices/apiman_gateway/3/index/_1z.cfs
> matches
> Binary file
> ./standalone/data/es/data/apiman/nodes/0/indices/apiman_gateway/2/index/_2.cfs
> matches
> Binary file
> ./standalone/data/es/data/apiman/nodes/0/indices/apiman_gateway/2/index/_3.cfs
> matches
> Binary file
> ./standalone/data/es/data/apiman/nodes/0/indices/apiman_gateway/2/index/_4.cfs
> matches
> Binary file
> ./standalone/data/es/data/apiman/nodes/0/indices/apiman_gateway/4/index/_0.cfs
> matches
> Binary file
> ./standalone/data/es/data/apiman/nodes/0/indices/apiman_gateway/4/index/_1.cfs
> matches
>
> Thanks
> Sanjay
>
>
>
> On Thu, Jan 7, 2016 at 8:08 AM, Eric Wittmann
> <eric.wittmann at redhat.com <mailto:eric.wittmann at redhat.com>
> <mailto:eric.wittmann at redhat.com
> <mailto:eric.wittmann at redhat.com>>> wrote:
>
> No nothing like that should be needed. Doing that curl
> command is
> just like doing an UPDATE on a SQL db. I even tried it locally
> (switching between URLs by updating that record in elastic) and
> didn't have any problems.
>
> Did you restart apiman after the change? Unfortunately
> (for this
> use-case) apiman will cache the information so that it
> doesn't have
> to do a lookup in ES for *every* request.
>
> Also what happens how when you do the -XGET call? Do you
> see the
> new data?
>
> -Eric
>
> On 1/7/2016 2:58 AM, Sanjay Melinamani wrote:
>
> Hi Eric,
> Even after the restart, gateway is still using the OLD
> service
> implementation URL. Do I have to rebuild the index,
> clear cache
> or do
> something else??
> When grepped for old URL, I can still see it in indices
> folder of
> elastic search. I tried to clear cache and used refresh
> commands
> but did
> not work!
>
> Appreciate if you can provide some more guidance here.
>
> Thanks
> Sanjay
>
>
> On Wed, Jan 6, 2016 at 12:57 PM, Sanjay Melinamani
> <mssanjay at gmail.com <mailto:mssanjay at gmail.com>
> <mailto:mssanjay at gmail.com <mailto:mssanjay at gmail.com>>
> <mailto:mssanjay at gmail.com <mailto:mssanjay at gmail.com>
> <mailto:mssanjay at gmail.com <mailto:mssanjay at gmail.com>>>> wrote:
>
> Thanks a ton! Worked like a charm :)
>
> Sanjay
>
>
> On Tue, Jan 5, 2016 at 8:01 AM, Eric Wittmann
> <eric.wittmann at redhat.com
> <mailto:eric.wittmann at redhat.com>
> <mailto:eric.wittmann at redhat.com <mailto:eric.wittmann at redhat.com>>
> <mailto:eric.wittmann at redhat.com
> <mailto:eric.wittmann at redhat.com>
> <mailto:eric.wittmann at redhat.com
> <mailto:eric.wittmann at redhat.com>>>> wrote:
>
> Drop the /_source from the PUT command. :)
>
> -Eric
>
> On 1/5/2016 1:45 AM, Sanjay Melinamani wrote:
>
> Thanks Eric for your reply! makes sense...
>
> I tried to use the two CURL commands.
>
> GET worked and I was able to see the end point
> being used.
> curl -XGET
> http://localhost:19200/apiman_gateway/service/prism:osa:1.0/_source
>
>
> {"endpoint":"http://OLD_URL","endpointType":"rest","publicService":false,"organizationId":"prism","serviceId":"osa","version":"1.0","endpointProperties":[],"policies":[]}
>
>
>
> But the PUT failed as below..
>
> curl -XPUT
> http://localhost:19200/apiman_gateway/service/prism:osa:1.0/_source
> -d
>
>
> '{"endpoint":"http://NEW_URL","endpointType":"rest","publicService":false,"organizationId":"prism","serviceId":"osa","version":"1.0","endpointProperties":[],"policies":[]}'
>
> No handler found for uri
>
> [/apiman_gateway/service/prism:osa:1.0/_source]
> and method [PUT]
>
>
> Thanks again for your time
>
> Sanjay
>
>
> On Mon, Jan 4, 2016 at 11:26 AM, Eric Wittmann
> <eric.wittmann at redhat.com
> <mailto:eric.wittmann at redhat.com>
> <mailto:eric.wittmann at redhat.com
> <mailto:eric.wittmann at redhat.com>>
> <mailto:eric.wittmann at redhat.com
> <mailto:eric.wittmann at redhat.com>
> <mailto:eric.wittmann at redhat.com <mailto:eric.wittmann at redhat.com>>>
> <mailto:eric.wittmann at redhat.com
> <mailto:eric.wittmann at redhat.com>
> <mailto:eric.wittmann at redhat.com
> <mailto:eric.wittmann at redhat.com>>
>
> <mailto:eric.wittmann at redhat.com
> <mailto:eric.wittmann at redhat.com>
> <mailto:eric.wittmann at redhat.com
> <mailto:eric.wittmann at redhat.com>>>>> wrote:
>
> Hi Sanjay, thanks for the questions.
>
> Currently there is no easy way to
> update the
> backend
> implementation
> endpiont URL without creating a new
> version of
> the service.
>
> However, if this is a one-off sort of
> thing
> then you
> may be able to
> get it done. It depends mostly on what
> configuration
> you are
> using. But I'll explain based on the
> most
> recent 1.1.x
> release
> (1.1.9.Final) with its default
> configuration.
>
> The Manager and Gateway are decoupled,
> resulting in the
> duplication
> of *some* of the data (including the
> endpoint
> URL). So
> when you
> "publish" a service from the Manager, the
> Gateway is given
> information about the service. This
> information is
> stored in the
> Gateway's "registry". By default the
> registry
> implementation is
> elasticsearch. So if you wanted to
> change the
> endpoint
> URL for a
> service, you would need to update that
> information in
> your Database
> (you did this) *and* in elasticsearch.
>
> It's actually not that difficult to
> update the
> information in
> elasticsearch. You'll need to find the
> correct record
> and then
> update it. If you're using the default
> installation,
> then ES is
> running on port 19200. If you want
> to change the
> following service:
>
> Organization: Example
> Service ID: MyService
> Version: 1.0
>
> Then you might do something like this:
>
> curl -XGET
> http://localhost:19200/apiman_gateway/service/Example:MyService:1.0/_source
>
> You could then take that JSON result,
> modify
> the bits
> you want to
> change, and then update it like so (as an
> example -
> please replace
> the JSON below with the JSON you get
> back from
> the GET
> above):
>
> curl -XPUT
> http://localhost:19200/apiman_gateway/service/Example:MyService:1.0
> -d '
> {
> "endpoint" :
> "http://UPDATED-ENDPOINT-HERE",
> "endpointType" : "rest",
> "publicService" : true,
> "organizationId" : "Example",
> "serviceId": "MyService",
> "version" : "1.0",
> "endpointProperties": [],
> "policies":[]
> }
> '
>
> Once this is done you'll have to restart
> apiman so that
> the Gateway
> picks up the changes.
>
> Note: we are making some changes in
> apiman
> 1.2.x that
> will make all
> of this easier under some
> circumstances. In
> particular, as of
> apiman 1.2.0.Final you will be able
> to re-publish
> "Public" services
> (now called APIs). So if the API is
> public
> then you
> can simply make
> changes and then republish those
> changes to the
> Gateway. If the API
> is *not* public then the current
> semantics are the
> same: you cannot
> make changes and republish because
> that may
> violate
> contracts that
> consumers have made with your API.
>
> -Eric
>
>
>
> On 12/29/2015 12:19 PM, Sanjay
> Melinamani wrote:
>
> Hi All,
> I am using APIMAN 1.1.9 and for an
> existing API
> that I have
> published to
> consumers, I like to change its
> backend
> implementation end point URL
> without changing the API service
> version.
> I updated the backend
> implementation URL in
> database table
> "service_versions". I can see the
> updated
> URL from
> UI but still the
> gateway is using the old
> implementation
> URL specified.
> Does it cache the implementation
> URL once the
> service is
> published ? Is
> there anyway I can update the
> implementation URL
> for an
> existing service?
>
> Appreciate your time and help.
>
> Thanks
> Sanjay
>
>
>
>
>
> _______________________________________________
> Apiman-user mailing list
> Apiman-user at lists.jboss.org <mailto:Apiman-user at lists.jboss.org>
> <mailto:Apiman-user at lists.jboss.org
> <mailto:Apiman-user at lists.jboss.org>>
> <mailto:Apiman-user at lists.jboss.org
> <mailto:Apiman-user at lists.jboss.org>
> <mailto:Apiman-user at lists.jboss.org
> <mailto:Apiman-user at lists.jboss.org>>>
> <mailto:Apiman-user at lists.jboss.org
> <mailto:Apiman-user at lists.jboss.org>
> <mailto:Apiman-user at lists.jboss.org
> <mailto:Apiman-user at lists.jboss.org>>
> <mailto:Apiman-user at lists.jboss.org
> <mailto:Apiman-user at lists.jboss.org>
> <mailto:Apiman-user at lists.jboss.org
> <mailto:Apiman-user at lists.jboss.org>>>>
> https://lists.jboss.org/mailman/listinfo/apiman-user
>
>
>
>
>
>
More information about the Apiman-user
mailing list