elasticsearch component config issues

2015-01-06 Thread batwad
We have been using the camel-elasticsearch component in transport client
configuration for some time, however we were seeing NodeClosedExceptions
when the node with which it was communicating was restarted so switched to
the node client to take advantage of the automatic failover.  We configured
the client with data=false as we didn't want it to store data and things
worked quite nicely.

However we also use Marvel to collect cluster stats and after a cluster
restart we found that the node client in our Camel application had become
the master node and no stats were being collected by Marvel on the other
nodes in the cluster.  When our application restarted one of the regular
nodes became master and Marvel started working again.

This leads me to question whether an application node client should be
eligible to be a master node or not.  I have also seen some plugins that
only run on the master node in a cluster, and if the master node is a node
client that would stop them working, wouldn't it?  Perhaps this could be
configurable.

I'd much rather use the transport client as it feels a better fit for our
application's purpose, however the lack of failover support in the component
is unacceptable. I'd like to be able to specify a list of hosts for the
component to use (maybe in the ActiveMQ style of
failover(host1:9200,host2:9200,host3:9200)) or enable sniffing so that the
transport client could discover the rest of the cluster if it can connect
once.

All things considered, it would be cumbersome to specify all these things in
the URI on a route, and I wonder if it would be better to have a more
flexible way of configuring the component in code or XML (again, like
ActiveMQ :-))

Apologies if that is a bit rambling.  I think Camel and elasticsearch are
fantastic and have been spoiled so far with how easy it is integrating
things that maybe I expect things to be too simple now!

Regards,
Alex.



--
View this message in context: 
http://camel.465427.n5.nabble.com/elasticsearch-component-config-issues-tp5761369.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: elasticsearch component config issues

2015-01-06 Thread Willem Jiang
It doesn’t make sense that camel-elasticsearch endpoint became a master node.
In camel we just setup the Client parameter here[1], please feel free to add 
more option on it if you need.

I think we can also introduce addresses option to add other host address for 
the transport client to use, please feel free to add a JIRA for it.

[1]https://github.com/apache/camel/blob/master/components/camel-elasticsearch/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchEndpoint.java#L82-L86

--  
Willem Jiang

Red Hat, Inc.
Web: http://www.redhat.com
Blog: http://willemjiang.blogspot.com (English)
http://jnn.iteye.com (Chinese)
Twitter: willemjiang  
Weibo: 姜宁willem



On January 6, 2015 at 8:40:56 PM, batwad (a...@oh.is.it) wrote:
 We have been using the camel-elasticsearch component in transport client
 configuration for some time, however we were seeing NodeClosedExceptions
 when the node with which it was communicating was restarted so switched to
 the node client to take advantage of the automatic failover. We configured
 the client with data=false as we didn't want it to store data and things
 worked quite nicely.
  
 However we also use Marvel to collect cluster stats and after a cluster
 restart we found that the node client in our Camel application had become
 the master node and no stats were being collected by Marvel on the other
 nodes in the cluster. When our application restarted one of the regular
 nodes became master and Marvel started working again.
  
 This leads me to question whether an application node client should be
 eligible to be a master node or not. I have also seen some plugins that
 only run on the master node in a cluster, and if the master node is a node
 client that would stop them working, wouldn't it? Perhaps this could be
 configurable.
  
 I'd much rather use the transport client as it feels a better fit for our
 application's purpose, however the lack of failover support in the component
 is unacceptable. I'd like to be able to specify a list of hosts for the
 component to use (maybe in the ActiveMQ style of
 failover(host1:9200,host2:9200,host3:9200)) or enable sniffing so that the
 transport client could discover the rest of the cluster if it can connect
 once.
  
 All things considered, it would be cumbersome to specify all these things in
 the URI on a route, and I wonder if it would be better to have a more
 flexible way of configuring the component in code or XML (again, like
 ActiveMQ :-))
  
 Apologies if that is a bit rambling. I think Camel and elasticsearch are
 fantastic and have been spoiled so far with how easy it is integrating
 things that maybe I expect things to be too simple now!
  
 Regards,
 Alex.
  
  
  
 --
 View this message in context: 
 http://camel.465427.n5.nabble.com/elasticsearch-component-config-issues-tp5761369.html
   
 Sent from the Camel - Users mailing list archive at Nabble.com.
  



Re: elasticsearch component config issues

2015-01-06 Thread batwad
Hi Willem,

Thanks for your reply.  I should have added that we are using Camel 2.12 and
I see the code you've highlighted is tagged as 2.14, so it's possible you've
fixed a bug already.  I notice the 2.14 code does enable sniffing, which the
2.12 code does not.

However it looks like node.client is only set when using the transport
client (i.e.: when you specify an IP address).  When using the node client
(i.e.: cluster name only, no IP) no settings are given so it doesn't look
like the node will be started in client mode.  Maybe that could be why our
application node became master.

Regards,
Alex.



--
View this message in context: 
http://camel.465427.n5.nabble.com/elasticsearch-component-config-issues-tp5761369p5761396.html
Sent from the Camel - Users mailing list archive at Nabble.com.