Re: Accumulo version at runtime?

2014-10-24 Thread Keith Turner
Below is something I wrote for 1.4 that would grab the version using
reflection.  If the constant has moved in later versions, could gracefully
handle class not found and field not found exceptions and look in other
places.

https://github.com/keith-turner/instamo/blob/master/src/main/java/instamo/MiniAccumuloCluster.java#L357

On Fri, Oct 24, 2014 at 1:38 AM, Dylan Hutchison dhutc...@stevens.edu
wrote:

 How about a compromise: create *two classes *for the two versions, both
 implementing the same interface.  Instantiate the class for the correct
 version either from (1) static configuration file or (2) runtime hack
 lookup to the version on the Monitor.

 (1) gives safety at the expense of the user having to specify another
 parameter.  (2) looks like it will work at least in the near future going
 to 1.7, as well as for past versions.

 Thanks for the suggestions!  I like the two classes approach better both
 as a developer and as a user; no need to juggle JARs.

 ~Dylan


 On Fri, Oct 24, 2014 at 12:41 AM, Sean Busbey bus...@cloudera.com wrote:


 On Thu, Oct 23, 2014 at 10:38 PM, Dylan Hutchison dhutc...@stevens.edu
 wrote:


 I'm working on a clean way to handle getting Accumulo monitor info for
 different versions of Accumulo, since I used methods to extract that
 information from Accumulo's internals which are version-dependent. As Sean
 wrote, these are not things one should do, but if it's a choice between
 getting the info or not...
 We're thinking of building separate JARs for each 1.x version.


 Why not just take the version of Accumulo you're going to talk to as
 configuration information that's given to you as a part of deploying your
 software?

 It'll make your life much simpler in the long run.


 --
 Sean




 --
 www.cs.stevens.edu/~dhutchis



Re: Accumulo version at runtime?

2014-10-24 Thread Corey Nolet
Dylan,

I know your original post mentioned grabbing it through the client API but
there's not currently a way to do that. As Sean mentioned, you can do it if
you have access to the cluster. You can run the reflection Keith provided
by adding the files in $ACCUMULO_HOME/lib/ to your classpath and running
your code on the cluster. I definitely think exposing the server version
should make it into 1.7.

On Fri, Oct 24, 2014 at 6:00 PM, Dylan Hutchison dhutc...@stevens.edu
wrote:

 Keith, I'm confused as to how you would run reflection

 Constants.class.getDeclaredField(VERSION).get(String.class)

 on the Accumulo server.  Wouldn't we need to compile in a function
 returning that into the server for a custom Accumulo server build?

 Say we have a 1.6 Accumulo instance live.  A client needs to know the
 version in order to load the appropriate class.  How would you execute that
 code on the server if it is built from the standard Accumulo 1.6 binaries?

 On Fri, Oct 24, 2014 at 10:22 AM, Keith Turner ke...@deenlo.com wrote:

 Below is something I wrote for 1.4 that would grab the version using
 reflection.  If the constant has moved in later versions, could gracefully
 handle class not found and field not found exceptions and look in other
 places.


 https://github.com/keith-turner/instamo/blob/master/src/main/java/instamo/MiniAccumuloCluster.java#L357

 On Fri, Oct 24, 2014 at 1:38 AM, Dylan Hutchison dhutc...@stevens.edu
 wrote:

 How about a compromise: create *two classes *for the two versions, both
 implementing the same interface.  Instantiate the class for the correct
 version either from (1) static configuration file or (2) runtime hack
 lookup to the version on the Monitor.

 (1) gives safety at the expense of the user having to specify another
 parameter.  (2) looks like it will work at least in the near future going
 to 1.7, as well as for past versions.

 Thanks for the suggestions!  I like the two classes approach better both
 as a developer and as a user; no need to juggle JARs.

 ~Dylan


 On Fri, Oct 24, 2014 at 12:41 AM, Sean Busbey bus...@cloudera.com
 wrote:


 On Thu, Oct 23, 2014 at 10:38 PM, Dylan Hutchison dhutc...@stevens.edu
  wrote:


 I'm working on a clean way to handle getting Accumulo monitor info
 for different versions of Accumulo, since I used methods to extract that
 information from Accumulo's internals which are version-dependent. As Sean
 wrote, these are not things one should do, but if it's a choice between
 getting the info or not...
 We're thinking of building separate JARs for each 1.x version.


 Why not just take the version of Accumulo you're going to talk to as
 configuration information that's given to you as a part of deploying your
 software?

 It'll make your life much simpler in the long run.


 --
 Sean




 --
 www.cs.stevens.edu/~dhutchis





 --
 www.cs.stevens.edu/~dhutchis



Re: Accumulo version at runtime?

2014-10-24 Thread Keith Turner
On Fri, Oct 24, 2014 at 6:00 PM, Dylan Hutchison dhutc...@stevens.edu
wrote:

 Keith, I'm confused as to how you would run reflection

 Constants.class.getDeclaredField(VERSION).get(String.class)

 on the Accumulo server.  Wouldn't we need to compile in a function
 returning that into the server for a custom Accumulo server build?


Didn't realize you were looking for the info from a server.  Thats
certainly not going to work for that case. The approach is for getting
client lib version.



 Say we have a 1.6 Accumulo instance live.  A client needs to know the
 version in order to load the appropriate class.  How would you execute that
 code on the server if it is built from the standard Accumulo 1.6 binaries?

 On Fri, Oct 24, 2014 at 10:22 AM, Keith Turner ke...@deenlo.com wrote:

 Below is something I wrote for 1.4 that would grab the version using
 reflection.  If the constant has moved in later versions, could gracefully
 handle class not found and field not found exceptions and look in other
 places.


 https://github.com/keith-turner/instamo/blob/master/src/main/java/instamo/MiniAccumuloCluster.java#L357

 On Fri, Oct 24, 2014 at 1:38 AM, Dylan Hutchison dhutc...@stevens.edu
 wrote:

 How about a compromise: create *two classes *for the two versions, both
 implementing the same interface.  Instantiate the class for the correct
 version either from (1) static configuration file or (2) runtime hack
 lookup to the version on the Monitor.

 (1) gives safety at the expense of the user having to specify another
 parameter.  (2) looks like it will work at least in the near future going
 to 1.7, as well as for past versions.

 Thanks for the suggestions!  I like the two classes approach better both
 as a developer and as a user; no need to juggle JARs.

 ~Dylan


 On Fri, Oct 24, 2014 at 12:41 AM, Sean Busbey bus...@cloudera.com
 wrote:


 On Thu, Oct 23, 2014 at 10:38 PM, Dylan Hutchison dhutc...@stevens.edu
  wrote:


 I'm working on a clean way to handle getting Accumulo monitor info
 for different versions of Accumulo, since I used methods to extract that
 information from Accumulo's internals which are version-dependent. As Sean
 wrote, these are not things one should do, but if it's a choice between
 getting the info or not...
 We're thinking of building separate JARs for each 1.x version.


 Why not just take the version of Accumulo you're going to talk to as
 configuration information that's given to you as a part of deploying your
 software?

 It'll make your life much simpler in the long run.


 --
 Sean




 --
 www.cs.stevens.edu/~dhutchis





 --
 www.cs.stevens.edu/~dhutchis