[
https://issues.apache.org/jira/browse/CASSANDRA-2805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13066059#comment-13066059
]
Gaurav Sharma commented on CASSANDRA-2805:
------------------------------------------
Based on my research so far scanning the MBean's and their internal users
(NodeProbe, NodeCmd and CliClient), there are 4 Cassandra-type dependencies:
CompactionInfo, CompactionType, Token, Range. Addressing them individually and
discussing my plan:
1. CompactionInfo/CompactionType
Now, CompactionInfo/CompactionType are manageable with a Map as suggested but
Range and Token are a bit tightly coupled and more involved.
2. Range
Since Range already has the partitioner (either injected or implicit from
StorageService), I believe I can add 2 new constructors that look like:
public Range(String left, String right)
public Range(String left, String right, IPartitioner partitioner)
and use the partioner.getTokenFactory().fromString() to curate the left and
right Token's.
Also, to replace the StorageServiceMBean's:
public Map<Range, List<String>> getRangeToEndpointMap(String keyspace);
public Map<Range, List<String>> getPendingRangeToEndpointMap(String
keyspace);
based on their usages, the Range in StorageService can be safely copied to
something like a Pair/Tuple.
I noticed that the getRangeToAddressMap() is not exposed on the
StorageServiceMBean interface - is that by design (not that I am complaining
because right now, it is 1 less dependency to decouple but if it is an
omission, I need to account for it)?
3. Token
I can change all MBean interfaces that need a Token to the corresponding String
representation using partitioner.getTokenFactory().toString() and then
reconstruct back using the fromString()
> Clean up mbeans that return Internal Cassandra types
> ----------------------------------------------------
>
> Key: CASSANDRA-2805
> URL: https://issues.apache.org/jira/browse/CASSANDRA-2805
> Project: Cassandra
> Issue Type: Bug
> Affects Versions: 0.8.1
> Reporter: Nick Bailey
> Assignee: Gaurav Sharma
> Priority: Minor
> Labels: lhf
> Fix For: 0.8.2
>
>
> We need to clean up wherever we return internal cassandra objects over jmx.
> Namely CompactionInfo objects as well as Tokens. There may be a few other
> examples.
> This is bad for two reasons
> 1. You have to load the cassandra jar when querying these mbeans, which sucks.
> 2. Stuff breaks between versions when things are moved. For example,
> CASSANDRA-1610 moves the compaction related classes around. Any code querying
> those jmx mbeans in 0.8.0 is now broken in 0.8.2. (assuming those moves stay
> in the 0.8 branch)
> For things like CompactionInfo we should just expose more mbean methods or
> serialize to something standard like json.
> I'd like to target this for 0.8.2. Since we've already broken compatibility
> between 0.8.0 and 0.8.1, I'd say just fix this everywhere now.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira