[jira] [Commented] (CASSANDRA-9705) Simplify some of 8099's concrete implementations

2015-07-23 Thread Aleksey Yeschenko (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-9705?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14638778#comment-14638778
 ] 

Aleksey Yeschenko commented on CASSANDRA-9705:
--

This passes my tests now, thanks. Sorry for not running them as part of 
overeview myself.

 Simplify some of 8099's concrete implementations
 

 Key: CASSANDRA-9705
 URL: https://issues.apache.org/jira/browse/CASSANDRA-9705
 Project: Cassandra
  Issue Type: Sub-task
Reporter: Sylvain Lebresne
Assignee: Sylvain Lebresne
 Fix For: 3.0 beta 1


 As mentioned in the ticket comments, some of the concrete implementations 
 (for Cell, Row, Clustering, PartitionUpdate, ...) of the initial patch for 
 CASSANDRA-8099 are more complex than they should be (the use of flyweight is 
 typically probably ill-fitted), which probably has performance consequence. 
 This ticket is to track the refactoring/simplifying those implementation 
 (mainly by removing the use of flyweights and simplifying accordingly).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (CASSANDRA-9705) Simplify some of 8099's concrete implementations

2015-07-22 Thread Aleksey Yeschenko (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-9705?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14637487#comment-14637487
 ] 

Aleksey Yeschenko commented on CASSANDRA-9705:
--

FYI, since our upgrade tests are currently not being run by cassci (because of 
simultaneous Java7+Java8 issues), cassci had not caught an upgrade issue.

LegacySchemaMigrator breaks, trying to read from the old (2.1) sstables.

 Simplify some of 8099's concrete implementations
 

 Key: CASSANDRA-9705
 URL: https://issues.apache.org/jira/browse/CASSANDRA-9705
 Project: Cassandra
  Issue Type: Sub-task
Reporter: Sylvain Lebresne
Assignee: Sylvain Lebresne
 Fix For: 3.0 beta 1


 As mentioned in the ticket comments, some of the concrete implementations 
 (for Cell, Row, Clustering, PartitionUpdate, ...) of the initial patch for 
 CASSANDRA-8099 are more complex than they should be (the use of flyweight is 
 typically probably ill-fitted), which probably has performance consequence. 
 This ticket is to track the refactoring/simplifying those implementation 
 (mainly by removing the use of flyweights and simplifying accordingly).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (CASSANDRA-9705) Simplify some of 8099's concrete implementations

2015-07-21 Thread Aleksey Yeschenko (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-9705?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14635504#comment-14635504
 ] 

Aleksey Yeschenko commented on CASSANDRA-9705:
--

Fill disclosure:  the patch set is very sizable, so this is not a complete 
thorough review - merely an overeview answering the question 'can we merge this 
into trunk as is, and finish the review afterwards?'.

Broken:
1. {{ClusteringComponent.compareComponent()}} is broken for v1 == v2 == null 
(the first ternary is wrong). We need tests for this.

Looks fishy:
2. {{RangeTombstoneBoundaryMarker}} {{createCorrespondingCloseMarker()}} and 
{{createCorrespondingOpenMarker()}} have swapped their behavior in this patch 
set. I'm assuming that this was intentional, but if so, it at least warrants a 
comment

Unused fields and method arguments that are confusing (some not new to this 
patch set). Most of these, if not all, are benign, but some wasted some time to 
figure out:
3. {{UnfilteredDeserializer.OldFormatDeserializer.nextFlags}} is unused
4. {{MemtableAllocator.SubAllocator}} fields {{owns}} and {{reclaiming}} are 
unused
5. {{BitTableWriter.StatsCollector.collectStatsOn()}} is unused (but turns out 
to be benign)
6. {{SerializationHelper.endOfComplexColumn()}} method has an unused {{column}} 
argument

Nits:
7. {{PartitionUpdate.CounterMark}} class should be static

Nomenclature is arguable, and there is plenty of minor nits that I won't list 
here (but would urge Sylvain to go through each file in IDEA and pay attention 
to the inspections).

Once cassci is happy (which is to say, once it shows that these changes don't 
break anything new), I'm fine with committing it to trunk. Overall it's a 
welcome simplification that should fix and make a lot of things easier 
(including Tyler's backward compat work and Sam's 2i work).

 Simplify some of 8099's concrete implementations
 

 Key: CASSANDRA-9705
 URL: https://issues.apache.org/jira/browse/CASSANDRA-9705
 Project: Cassandra
  Issue Type: Sub-task
Reporter: Sylvain Lebresne
Assignee: Sylvain Lebresne
 Fix For: 3.0 beta 1


 As mentioned in the ticket comments, some of the concrete implementations 
 (for Cell, Row, Clustering, PartitionUpdate, ...) of the initial patch for 
 CASSANDRA-8099 are more complex than they should be (the use of flyweight is 
 typically probably ill-fitted), which probably has performance consequence. 
 This ticket is to track the refactoring/simplifying those implementation 
 (mainly by removing the use of flyweights and simplifying accordingly).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (CASSANDRA-9705) Simplify some of 8099's concrete implementations

2015-07-17 Thread Sylvain Lebresne (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-9705?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14631743#comment-14631743
 ] 

Sylvain Lebresne commented on CASSANDRA-9705:
-

I've pushed an additional commit to the branch that refactor the {{Reader}} in 
{{SSTableIterator}} and {{SSTableReverseIterator}}. The new implementations 
directly return the reader for the {{slice}} method, but more generally avoid 
pretty much all the code duplication there was (and is simpler/cleaner as a 
result).

bq. There are some unused imports around the place

Forgot to answer that one. I don't know a good way to find those imports that 
are unused due to this patch (and looking manually is not very fun), so if 
we're good with it, I propose to just run an import reorganization on the 
project on commit.

 Simplify some of 8099's concrete implementations
 

 Key: CASSANDRA-9705
 URL: https://issues.apache.org/jira/browse/CASSANDRA-9705
 Project: Cassandra
  Issue Type: Sub-task
Reporter: Sylvain Lebresne
Assignee: Sylvain Lebresne
 Fix For: 3.0 beta 1


 As mentioned in the ticket comments, some of the concrete implementations 
 (for Cell, Row, Clustering, PartitionUpdate, ...) of the initial patch for 
 CASSANDRA-8099 are more complex than they should be (the use of flyweight is 
 typically probably ill-fitted), which probably has performance consequence. 
 This ticket is to track the refactoring/simplifying those implementation 
 (mainly by removing the use of flyweights and simplifying accordingly).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (CASSANDRA-9705) Simplify some of 8099's concrete implementations

2015-07-15 Thread Benedict (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-9705?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14628375#comment-14628375
 ] 

Benedict commented on CASSANDRA-9705:
-

Yep, I'll leave it there. I can see we simply had two inconsistent (with each 
other, not internally) concepts of cell, and I'm happy to leave it there on 
that front. It doesn't mean I'm happy about ColumnData, though: it's still a 
very ambiguous term, and leaves us without a good term for the _general 
instance_ of the value(s) associated with a given (row, column) pair. Column 
data does not disambiguate between, e.g. all values taken by that column for 
all rows, nor possibly schema data associated with the column. Data is 
generally an empty term in a database. I'd _prefer_ it if we could come up with 
something better, but I won't push any further beyond that statement of desire.

I will propose one possibility, though: Gaol. A Gaol is, after all, a 
collection of cells. Sometimes only 1 :)

 Simplify some of 8099's concrete implementations
 

 Key: CASSANDRA-9705
 URL: https://issues.apache.org/jira/browse/CASSANDRA-9705
 Project: Cassandra
  Issue Type: Sub-task
Reporter: Sylvain Lebresne
Assignee: Sylvain Lebresne
 Fix For: 3.0 beta 1


 As mentioned in the ticket comments, some of the concrete implementations 
 (for Cell, Row, Clustering, PartitionUpdate, ...) of the initial patch for 
 CASSANDRA-8099 are more complex than they should be (the use of flyweight is 
 typically probably ill-fitted), which probably has performance consequence. 
 This ticket is to track the refactoring/simplifying those implementation 
 (mainly by removing the use of flyweights and simplifying accordingly).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (CASSANDRA-9705) Simplify some of 8099's concrete implementations

2015-07-15 Thread Sylvain Lebresne (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-9705?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14628296#comment-14628296
 ] 

Sylvain Lebresne commented on CASSANDRA-9705:
-

I somehow sense that we're not going to reach an agreement easily, and I'd 
rather not spend too much time on this on this ticket for what I think is 
largely orthogonal to the main goals of the ticket. So I'm gonna answer your 
last remarks as a form of conclusion, but I'll ask that if your still unhappy 
with this, we create a follow-up ticket for that naming issue and continue the 
discussion there.  It'll focus the conversation, making it easier for others to 
share their opinion too.

bq. A ColumnFilter, for instance, does not filter ColumnData, but filters 
ColumnDefinition. A RowFilter filters ColumnData, however (or the whole Row). 
This is inconsistent, and I would rather we made it consistent.

I wouldn't say that's true at all. A {{ColumnData}} _is_ the data for a 
{{ColumnDefinition}}, so filtering {{ColumnDefinition}} _is_ filtering full 
{{ColumnData}} (hence {{ColumnFilter}} does filter {{ColumnData}}). In fact, 
it's very much the idea behind the use of {{Column}}. As for {{RowFilter}}, it 
_always_ filter whole rows (based on condition on the {{ColumData}} but still). 
So, without making claims of perfection, I do actually think it's pretty 
consistent.

bq. Renaming {{ComplexColumnData}} to {{ComplexCell}}

I frankly dislike the idea of calling {{ComplexCell}} something that's gonna 
hold cells. That, I personally find confusing and inconsitent (Beauty is in 
the eye of the beholder). To me, the name 'cell' has a notion of atomicity: 
it corresponds to a single value with it's related informations (timestamp, 
tll, ...). It's in that sense that I say it corresponds to the existing, 
pre-8099 notion of cell. And it's that notion that I don't see a good reason to 
change.

bq. renaming to {{RowDatum}} would be a little more consistent

For the reasons above, I disagree it would be more consistent, or even better, 
since a {{ColumnData}} is again very much the data for a given column of a 
row. But as it is indirectly also some datum from the row, let say that I 
wouldn't fight such renaming too hard. I'd still would want to gather other 
opinions on a separate, focused ticket however.


 Simplify some of 8099's concrete implementations
 

 Key: CASSANDRA-9705
 URL: https://issues.apache.org/jira/browse/CASSANDRA-9705
 Project: Cassandra
  Issue Type: Sub-task
Reporter: Sylvain Lebresne
Assignee: Sylvain Lebresne
 Fix For: 3.0 beta 1


 As mentioned in the ticket comments, some of the concrete implementations 
 (for Cell, Row, Clustering, PartitionUpdate, ...) of the initial patch for 
 CASSANDRA-8099 are more complex than they should be (the use of flyweight is 
 typically probably ill-fitted), which probably has performance consequence. 
 This ticket is to track the refactoring/simplifying those implementation 
 (mainly by removing the use of flyweights and simplifying accordingly).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (CASSANDRA-9705) Simplify some of 8099's concrete implementations

2015-07-15 Thread Benedict (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-9705?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14628001#comment-14628001
 ] 

Benedict commented on CASSANDRA-9705:
-

I have not reached the main guts of the changes yet. A few initial comments, as 
they've reached sufficient critical mass. I apologise if some of this stuff is 
blurring the lines of scope with 8099, but I want to raise things as they occur 
to me.

* {{ColumnData}} and {{ComplexColumnData}} are a bit confusingly named, to my 
mind, at least, because it is {{(Column  x Row) Data}}. Especially since 
{{Cell}} implements {{ColumnData}} but is also a _component_ of a 
{{ComplexColumnData}} in which context it doesn't seem very reasonable to call 
it a {{ColumnData}} at all. Could we not just have {{ComplexCell}} (made up of 
{{Cell}}), both implementing {{AbstractCell}}; or a {{SimpleCell}} both 
implementing {{Cell}}?
* Is it really better to have {{Row}} implement {{IterableColumnData}} than 
{{IterableCell}}? It looks like we use the latter more often, and have a lot 
of new expansions of for-loop into uglier while-loop-with-Iterator. Perhaps 
whichever we opt to not make default, we should return an {{Iterable}} for the 
opposing method, to help retain clarity? With Java 8 it is not at all ugly, and 
most likely also of zero runtime cost.
* I like the migration to {{Builder}}, but we still have a lot of methods 
labelled {{writeX}}
* There are some unused imports around the place
* {{SSTableReversedIterator:365}}: double assignment of {{markerEnd}}
* {{SSTableReversedIterator.ReverseIndexedReader}}: {{slice}} effectively moves 
the outer class itself, and duplicates/mirrors some of its functionality. Could 
we not merge the behaviour, so that slice() returns {{this}}, or another 
instance of the same class? 
** Same applies to {{SSTableIterator.ForwardIndexedReader}}, and to some extent 
the distinction between {{ForwardReader/ForwardIndexedReader}} and 
{{ReverseReader/ReverseIndexedReader}}.
* {{CompositesSearcher:176}}: unused property
* {{ObjectSizes:44}}: unused property


 Simplify some of 8099's concrete implementations
 

 Key: CASSANDRA-9705
 URL: https://issues.apache.org/jira/browse/CASSANDRA-9705
 Project: Cassandra
  Issue Type: Sub-task
Reporter: Sylvain Lebresne
Assignee: Sylvain Lebresne
 Fix For: 3.0 beta 1


 As mentioned in the ticket comments, some of the concrete implementations 
 (for Cell, Row, Clustering, PartitionUpdate, ...) of the initial patch for 
 CASSANDRA-8099 are more complex than they should be (the use of flyweight is 
 typically probably ill-fitted), which probably has performance consequence. 
 This ticket is to track the refactoring/simplifying those implementation 
 (mainly by removing the use of flyweights and simplifying accordingly).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (CASSANDRA-9705) Simplify some of 8099's concrete implementations

2015-07-15 Thread Benedict (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-9705?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14628212#comment-14628212
 ] 

Benedict commented on CASSANDRA-9705:
-

bq. But what is currently called ComplexColumnData cannot reasonably implement 
Cell, not with the current definition/API of Cell at least.

I guess, to clarify, I'm somewhat taking exception to the use of {{Column}} in 
the name alone, without any reference to the {{Row}} component. A 
{{ColumnFilter}}, for instance, does not filter {{ColumnData}}, but filters 
{{ColumnDefinition}}. A {{RowFilter}} filters {{ColumnData}}, however (or the 
whole {{Row}}). This is inconsistent, and I would rather we made it consistent. 
Even renaming to {{RowDatum}} would be a little more consistent, but still not 
very consistent.

So my proposal is that we overload the _logical concept_ of a cell (lowercase) 
to mean {{(Clustering Prefix, Column) - Values}}, and special case to simple 
cells (where {{card(Values) = 1}}) and complex cells (where {{card(Values) = 
1}}). Another way of formulating this is that a cell is the collection of 
{{(Clustering Prefix, Column) - Value}} maps, but a simple cell is one where 
this map is guaranteed to be of size 1. This could be achieved by:

* Renaming {{ComplexColumnData}} to {{ComplexCell}}; and
* either:
** Renaming {{ColumnData}} to {{AbstractCell}} (or, perhaps, {{RowCell}}, or 
any other {{XCell}}); or
** Renaming {{Cell}} to {{SimpleCell}}, and {{ColumnData}} to {{Cell}}

The latter would further lead to normalising the concept of simple/complex 
around the place, somewhat, I think. However it may mean typing Simple a bit 
more than we might otherwise.

I'll note that, in my opinion at least, this is more of a clarification of the 
prior concept of cell that naturally follows from the other internal engine 
refactoring. This has previously been a bit of a gray zone, nomenclature-wise, 
and very few people will have used the verbiage around complex data internals, 
since very few people interact with it (or understand it). I'm hoping both will 
change for the better post 8099, but making our language a bit clearer will no 
doubt help.

 Simplify some of 8099's concrete implementations
 

 Key: CASSANDRA-9705
 URL: https://issues.apache.org/jira/browse/CASSANDRA-9705
 Project: Cassandra
  Issue Type: Sub-task
Reporter: Sylvain Lebresne
Assignee: Sylvain Lebresne
 Fix For: 3.0 beta 1


 As mentioned in the ticket comments, some of the concrete implementations 
 (for Cell, Row, Clustering, PartitionUpdate, ...) of the initial patch for 
 CASSANDRA-8099 are more complex than they should be (the use of flyweight is 
 typically probably ill-fitted), which probably has performance consequence. 
 This ticket is to track the refactoring/simplifying those implementation 
 (mainly by removing the use of flyweights and simplifying accordingly).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (CASSANDRA-9705) Simplify some of 8099's concrete implementations

2015-07-15 Thread Sylvain Lebresne (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-9705?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14628176#comment-14628176
 ] 

Sylvain Lebresne commented on CASSANDRA-9705:
-

I've pushed a commit to the branch with some of those first remarks fixed. I 
discuss the rest below.

bq. {{ColumnData}} and {{ComplexColumnData}} are a bit confusingly named, to my 
mind, at least, because it is {{(Column x Row) Data}}.

The idea is that {{ColumnData}} is the data for a single column within a row. 
For a simple column, that data is just a single cell, so making {{Cell}} 
implement {{ColumnData}} directly felt simpler (we could, I suppose, have a 
{{SimpleColumnData}} that {{Cell}} would extend, but I don't see what that 
would buy us). And {{ComplexColumnData}} is the implementation for complex 
columns. I understand we don't all find the same things intuitive/confusing, 
but I have to admit that as far as naming goes, it's one I'm reasonably happy 
with.

bq. Could we not just have ComplexCell (made up of Cell), both implementing 
AbstractCell; or a SimpleCell both implementing Cell?

Not totally sure to understand the suggestion. But what is currently called 
{{ComplexColumnData}} cannot reasonably implement {{Cell}}, not with the 
current definition/API of {{Cell}} at least.

I'll also add that the current cell concept is pretty close to our existing 
concept, which is strongly suspect is a good thing, so I'm reluctant to change 
what it means too much (in case you were suggesting along those lines).

bq. Is it really better to have Row implement {{IterableColumnData}} than 
{{IterableCell}}?

I do strongly believe it is. Mainly because when you iterate over the cells, 
you're missing the complex column deletion informations, so iterating on cells 
should only be done when you know that it's ok to do so. Also, quite a few of 
the places where we iterate on cells is for 2ndary index, and that's because 
the current API is fundamentally cell based. But that's actually inefficient: 
typically, if you're not indexing a collection column, there is no point in 
checking all the individual cells for that column, but that's what we do. That 
should be fixed by the 2ndary API refactor though, so I expect the direct cell 
iterations to diminish, and iteration on {{ColumnData}} to be by far 
predominant. As it should be.

That said, totally agreed about the {{Iterable}} point and I've made that 
change in the new commit.

bq. I like the migration to Builder, but we still have a lot of methods 
labelled {{writeX}}

I've fixed a few ({{RangeTombstoneMarker.Builder}}, which had a few, was 
actually unused), but it's hard to make sure I found all occurrences (write 
is a pretty common symbol prefix in the code base), so if you find some 
remaining, I'll be happy to fix them too.


Regarding {{SSTable\[Reversed\]Iterator}} readers, I agree it's not perfect in 
term of code duplication. I'll have a fresh look at trying to clean it up but 
it will take a tad more time.


 Simplify some of 8099's concrete implementations
 

 Key: CASSANDRA-9705
 URL: https://issues.apache.org/jira/browse/CASSANDRA-9705
 Project: Cassandra
  Issue Type: Sub-task
Reporter: Sylvain Lebresne
Assignee: Sylvain Lebresne
 Fix For: 3.0 beta 1


 As mentioned in the ticket comments, some of the concrete implementations 
 (for Cell, Row, Clustering, PartitionUpdate, ...) of the initial patch for 
 CASSANDRA-8099 are more complex than they should be (the use of flyweight is 
 typically probably ill-fitted), which probably has performance consequence. 
 This ticket is to track the refactoring/simplifying those implementation 
 (mainly by removing the use of flyweights and simplifying accordingly).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (CASSANDRA-9705) Simplify some of 8099's concrete implementations

2015-07-15 Thread Benedict (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-9705?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14628220#comment-14628220
 ] 

Benedict commented on CASSANDRA-9705:
-

(I'll also note I'm not pushing hard for this, I just think it improves things)

 Simplify some of 8099's concrete implementations
 

 Key: CASSANDRA-9705
 URL: https://issues.apache.org/jira/browse/CASSANDRA-9705
 Project: Cassandra
  Issue Type: Sub-task
Reporter: Sylvain Lebresne
Assignee: Sylvain Lebresne
 Fix For: 3.0 beta 1


 As mentioned in the ticket comments, some of the concrete implementations 
 (for Cell, Row, Clustering, PartitionUpdate, ...) of the initial patch for 
 CASSANDRA-8099 are more complex than they should be (the use of flyweight is 
 typically probably ill-fitted), which probably has performance consequence. 
 This ticket is to track the refactoring/simplifying those implementation 
 (mainly by removing the use of flyweights and simplifying accordingly).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (CASSANDRA-9705) Simplify some of 8099's concrete implementations

2015-07-13 Thread Sylvain Lebresne (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-9705?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14624757#comment-14624757
 ] 

Sylvain Lebresne commented on CASSANDRA-9705:
-

I had pushed a tad quickly on Friday so for info I've forced pushed an update 
that:
# is rebased against trunk
# fixes a few minor test failures
# add a few additional comments
# switch the implementations of {{ArrayBackedRow}} and {{ComplexColumnData}} 
from lists to arrays. I started with arrays for convenience but using arrays 
was pretty simple in that case so that makes the objects slightly less fat.

 Simplify some of 8099's concrete implementations
 

 Key: CASSANDRA-9705
 URL: https://issues.apache.org/jira/browse/CASSANDRA-9705
 Project: Cassandra
  Issue Type: Sub-task
Reporter: Sylvain Lebresne
Assignee: Sylvain Lebresne
 Fix For: 3.0 beta 1


 As mentioned in the ticket comments, some of the concrete implementations 
 (for Cell, Row, Clustering, PartitionUpdate, ...) of the initial patch for 
 CASSANDRA-8099 are more complex than they should be (the use of flyweight is 
 typically probably ill-fitted), which probably has performance consequence. 
 This ticket is to track the refactoring/simplifying those implementation 
 (mainly by removing the use of flyweights and simplifying accordingly).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Commented] (CASSANDRA-9705) Simplify some of 8099's concrete implementations

2015-07-10 Thread Sylvain Lebresne (JIRA)

[ 
https://issues.apache.org/jira/browse/CASSANDRA-9705?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=14622556#comment-14622556
 ] 

Sylvain Lebresne commented on CASSANDRA-9705:
-

Pushed a branch for this 
[here|https://github.com/pcmanus/cassandra/commits/9705]. It removes all use of 
flyweights, and basically rewrite all Row, Cell and Partition implementations. 
The result is admittedly a lot simpler and less error prone. I suspect it's 
also faster but haven't looked at that much yet.

The patch is actually not very small because the change of implementation 
allowed a lot of related simplifications. Hopefully this won't be too 
disruptive on other patches, but I'd still be happy if we can get that in as 
fast as possible, if only because I'd rather not spend too much time fixing 
unit tests and dtests that are fixed with this or easier to.

Concretely there is 3 commits:
* the first one update the implementations of {{ClusteringPrefix}} and its 
subclasses. That one is pretty simple and self-contained.
* the second one is the main meat. It rewrites most of the rest and was 
unfortunately much harder to split in smaller pieces.
* the last one if kind of a follow-up: we're currently using {{LivenessInfo}} 
for both {{Row}} and {{Cell}}, but after the previous patches it's barely used 
by {{Cell}}. So that 3rd patch make it be only for rows, which make things 
cleaner/simpler anyways.

I plan on doing another review of the whole patch on Monday and to add comments 
where they are missing so there may be a few minor updates then, but it's 
basically ready for review otherwise.



 Simplify some of 8099's concrete implementations
 

 Key: CASSANDRA-9705
 URL: https://issues.apache.org/jira/browse/CASSANDRA-9705
 Project: Cassandra
  Issue Type: Sub-task
Reporter: Sylvain Lebresne
Assignee: Sylvain Lebresne
 Fix For: 3.0 beta 1


 As mentioned in the ticket comments, some of the concrete implementations 
 (for Cell, Row, Clustering, PartitionUpdate, ...) of the initial patch for 
 CASSANDRA-8099 are more complex than they should be (the use of flyweight is 
 typically probably ill-fitted), which probably has performance consequence. 
 This ticket is to track the refactoring/simplifying those implementation 
 (mainly by removing the use of flyweights and simplifying accordingly).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)