[Apiman-user] How to update backend implementation URL for published Service without changing the version
Sanjay Melinamani
mssanjay at gmail.com
Wed Jan 27 00:17:20 EST 2016
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>
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>> 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>>> 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>>> 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>>>> 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>>>
>> https://lists.jboss.org/mailman/listinfo/apiman-user
>>
>>
>>
>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/apiman-user/attachments/20160127/d8d9589e/attachment-0001.html
More information about the Apiman-user
mailing list