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(a)redhat.com
<mailto:eric.wittmann@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@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@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(a)redhat.com <mailto:eric.wittmann@redhat.com>
<mailto:eric.wittmann@redhat.com
<mailto:eric.wittmann@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(a)gmail.com <mailto:mssanjay@gmail.com>
<mailto:mssanjay@gmail.com <mailto:mssanjay@gmail.com>>
<mailto:mssanjay@gmail.com <mailto:mssanjay@gmail.com>
<mailto:mssanjay@gmail.com <mailto:mssanjay@gmail.com>>>>
wrote:
Thanks a ton! Worked like a charm :)
Sanjay
On Tue, Jan 5, 2016 at 8:01 AM, Eric Wittmann
<eric.wittmann(a)redhat.com
<mailto:eric.wittmann@redhat.com>
<mailto:eric.wittmann@redhat.com <mailto:eric.wittmann@redhat.com>>
<mailto:eric.wittmann@redhat.com
<mailto:eric.wittmann@redhat.com>
<mailto:eric.wittmann@redhat.com
<mailto:eric.wittmann@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(a)redhat.com
<mailto:eric.wittmann@redhat.com>
<mailto:eric.wittmann@redhat.com
<mailto:eric.wittmann@redhat.com>>
<mailto:eric.wittmann@redhat.com
<mailto:eric.wittmann@redhat.com>
<mailto:eric.wittmann@redhat.com
<mailto:eric.wittmann@redhat.com>>>
<mailto:eric.wittmann@redhat.com
<mailto:eric.wittmann@redhat.com>
<mailto:eric.wittmann@redhat.com
<mailto:eric.wittmann@redhat.com>>
<mailto:eric.wittmann@redhat.com
<mailto:eric.wittmann@redhat.com>
<mailto:eric.wittmann@redhat.com
<mailto:eric.wittmann@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(a)lists.jboss.org <mailto:Apiman-user@lists.jboss.org>
<mailto:Apiman-user@lists.jboss.org
<mailto:Apiman-user@lists.jboss.org>>
<mailto:Apiman-user@lists.jboss.org
<mailto:Apiman-user@lists.jboss.org>
<mailto:Apiman-user@lists.jboss.org
<mailto:Apiman-user@lists.jboss.org>>>
<mailto:Apiman-user@lists.jboss.org
<mailto:Apiman-user@lists.jboss.org>
<mailto:Apiman-user@lists.jboss.org
<mailto:Apiman-user@lists.jboss.org>>
<mailto:Apiman-user@lists.jboss.org
<mailto:Apiman-user@lists.jboss.org>
<mailto:Apiman-user@lists.jboss.org
<mailto:Apiman-user@lists.jboss.org>>>>
https://lists.jboss.org/mailman/listinfo/apiman-user