From aef5e6aa25edd3ec7dbeb063e882db16cae08537 Mon Sep 17 00:00:00 2001 From: Sylvain Lebresne Date: Thu, 8 Dec 2011 12:07:13 +0000 Subject: [PATCH] merge from 1.0 git-svn-id: https://svn.apache.org/repos/asf/cassandra/trunk@1211849 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 1 + .../cassandra/io/sstable/SSTableMetadata.java | 13 ++- .../cassandra/io/sstable/SSTableReader.java | 6 +- .../cassandra/io/sstable/SSTableWriter.java | 2 +- .../hb/Keyspace1/Indexed1-hb-1-Data.db | Bin 0 -> 84 bytes .../hb/Keyspace1/Indexed1-hb-1-Digest.sha1 | 1 + .../hb/Keyspace1/Indexed1-hb-1-Filter.db | Bin 0 -> 16 bytes .../hb/Keyspace1/Indexed1-hb-1-Index.db | Bin 0 -> 12 bytes .../hb/Keyspace1/Indexed1-hb-1-Statistics.db | Bin 0 -> 4292 bytes .../Indexed1.626972746864617465-hb-1-Data.db | Bin 0 -> 75 bytes ...dexed1.626972746864617465-hb-1-Digest.sha1 | 1 + ...Indexed1.626972746864617465-hb-1-Filter.db | Bin 0 -> 16 bytes .../Indexed1.626972746864617465-hb-1-Index.db | Bin 0 -> 18 bytes ...xed1.626972746864617465-hb-1-Statistics.db | Bin 0 -> 4292 bytes .../hb/Keyspace1/Standard1-hb-0-Data.db | Bin 0 -> 66600 bytes .../hb/Keyspace1/Standard1-hb-0-Digest.sha1 | 1 + .../hb/Keyspace1/Standard1-hb-0-Filter.db | Bin 0 -> 1704 bytes .../hb/Keyspace1/Standard1-hb-0-Index.db | Bin 0 -> 11700 bytes .../hb/Keyspace1/Standard1-hb-0-Statistics.db | Bin 0 -> 4292 bytes .../SSTableMetadataSerializerTest.java | 4 +- .../io/sstable/SSTableReaderTest.java | 77 ++++++++++++++++++ 21 files changed, 95 insertions(+), 11 deletions(-) create mode 100644 test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Data.db create mode 100644 test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Digest.sha1 create mode 100644 test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Filter.db create mode 100644 test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Index.db create mode 100644 test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Statistics.db create mode 100644 test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Data.db create mode 100644 test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Digest.sha1 create mode 100644 test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Filter.db create mode 100644 test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Index.db create mode 100644 test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Statistics.db create mode 100644 test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Data.db create mode 100644 test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Digest.sha1 create mode 100644 test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Filter.db create mode 100644 test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Index.db create mode 100644 test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Statistics.db diff --git a/CHANGES.txt b/CHANGES.txt index ab4323f4d4..13abd7a44a 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -42,6 +42,7 @@ (CASSANDRA-3558) * fix missing response during range slice repair (CASSANDRA-3551) * 'describe ring' moved from CLI to nodetool and available through JMX (CASSANDRA-3220) + * add back partitioner to sstable metadata (CASSANDRA-3540) Merged from 0.8: * use cannonical host for local node in nodetool info (CASSANDRA-3556) * detect misuses of CounterColumnType (CASSANDRA-3422) diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableMetadata.java b/src/java/org/apache/cassandra/io/sstable/SSTableMetadata.java index 7a102f0a71..4e52993714 100644 --- a/src/java/org/apache/cassandra/io/sstable/SSTableMetadata.java +++ b/src/java/org/apache/cassandra/io/sstable/SSTableMetadata.java @@ -29,7 +29,6 @@ import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.db.commitlog.ReplayPosition; import org.apache.cassandra.io.util.FileUtils; import org.apache.cassandra.utils.EstimatedHistogram; @@ -67,7 +66,7 @@ public class SSTableMetadata ReplayPosition.NONE, Long.MIN_VALUE, Double.MIN_VALUE, - DatabaseDescriptor.getPartitioner().getClass().getCanonicalName()); + null); } private SSTableMetadata(EstimatedHistogram rowSizes, EstimatedHistogram columnCounts, ReplayPosition replayPosition, long maxTimestamp, double cr, String partitioner) @@ -134,14 +133,14 @@ public class SSTableMetadata maxTimestamp = Math.max(maxTimestamp, potentialMax); } - public SSTableMetadata finalizeMetadata() + public SSTableMetadata finalizeMetadata(String partitioner) { return new SSTableMetadata(estimatedRowSize, estimatedColumnCount, replayPosition, maxTimestamp, compressionRatio, - DatabaseDescriptor.getPartitioner().getClass().getCanonicalName()); + partitioner); } public Collector estimatedRowSize(EstimatedHistogram estimatedRowSize) @@ -169,6 +168,8 @@ public class SSTableMetadata public void serialize(SSTableMetadata sstableStats, DataOutput dos) throws IOException { + assert sstableStats.partitioner != null; + EstimatedHistogram.serializer.serialize(sstableStats.estimatedRowSize, dos); EstimatedHistogram.serializer.serialize(sstableStats.estimatedColumnCount, dos); ReplayPosition.serializer.serialize(sstableStats.replayPosition, dos); @@ -209,9 +210,7 @@ public class SSTableMetadata double compressionRatio = desc.hasCompressionRatio ? dis.readDouble() : Double.MIN_VALUE; - String partitioner = desc.hasPartitioner - ? dis.readUTF() - : DatabaseDescriptor.getPartitioner().getClass().getCanonicalName(); + String partitioner = desc.hasPartitioner ? dis.readUTF() : null; return new SSTableMetadata(rowSizes, columnCounts, replayPosition, maxTimestamp, compressionRatio, partitioner); } } diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java index d4f7a27d10..e4cf60c280 100644 --- a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java +++ b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java @@ -138,9 +138,11 @@ public class SSTableReader extends SSTable ? SSTableMetadata.serializer.deserialize(descriptor) : SSTableMetadata.createDefaultInstance(); - // check if sstable is created using same partitioner as this node + // Check if sstable is created using same partitioner. + // Partitioner can be null, which indicates older version of sstable or no stats available. + // In that case, we skip the check. String partitionerName = partitioner.getClass().getCanonicalName(); - if (!partitionerName.equals(sstableMetadata.partitioner)) + if (sstableMetadata.partitioner != null && !partitionerName.equals(sstableMetadata.partitioner)) throw new RuntimeException(String.format("Cannot open %s because partitioner does not match %s", descriptor, partitionerName)); diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java b/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java index 84a603dead..ef2f1d4dd1 100644 --- a/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java +++ b/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java @@ -311,7 +311,7 @@ public class SSTableWriter extends SSTable dataFile.close(); // write sstable statistics - SSTableMetadata sstableMetadata = sstableMetadataCollector.finalizeMetadata(); + SSTableMetadata sstableMetadata = sstableMetadataCollector.finalizeMetadata(partitioner.getClass().getCanonicalName()); writeMetadata(descriptor, sstableMetadata); maybeWriteDigest(); diff --git a/test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Data.db b/test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Data.db new file mode 100644 index 0000000000000000000000000000000000000000..896897a275c4f2297e44f6321ffb3dc59160b4f5 GIT binary patch literal 84 zcmZQz$~I(x01qG~0L08d%m_vdEFeBZ0~CYUK)}ernUq;nl97^Fk_zIQ$dnqH0vQ}2 INg!YZ0P>{=2LJ#7 literal 0 HcmV?d00001 diff --git a/test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Digest.sha1 b/test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Digest.sha1 new file mode 100644 index 0000000000..bc0c4e4a78 --- /dev/null +++ b/test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Digest.sha1 @@ -0,0 +1 @@ +095dd05150d499846782cdf1c77544048477cc9b Indexed1-hb-1-Data.db \ No newline at end of file diff --git a/test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Filter.db b/test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Filter.db new file mode 100644 index 0000000000000000000000000000000000000000..4b61a27af76e956fc8eb9a9fb048820415c33a9f GIT binary patch literal 16 VcmZQzVBlh4U|@6rA`!+AMgRoe0QUd@ literal 0 HcmV?d00001 diff --git a/test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Index.db b/test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Index.db new file mode 100644 index 0000000000000000000000000000000000000000..03b3dc81cffe9fec1686e4e1b4c468dc65b04334 GIT binary patch literal 12 NcmZQz$~I(x0ssaH0G|K= literal 0 HcmV?d00001 diff --git a/test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Statistics.db b/test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Statistics.db new file mode 100644 index 0000000000000000000000000000000000000000..78c4ed3333dd6b4cf7bc77c96086f1aea068a0b4 GIT binary patch literal 4292 zcmeI!*-KPW90%~b%;>mH&bUuGluMR`noB0Qq>ZQ%XqrnKxg?d*LRyI!h1rXQS!5=- zw19|8QdTaBJy_aexe!^A;=^QN)KsKthE_Nif8X;L^f2>s?q|MdhI`NX-Ftr=$5n6( zAKo}h18YGFjHAd{##qkSjIlXm1!GIb){K>mRgCQ!J2Q4=?9SMmu|MNb#<50A>z2ag zdl?rpE@#}rco@wy`@yec@;t^}Xu*kb5n5#aU#!AhmW-AMpv}V2=FIgfW-+(yMOz!t zOU|OzSJ95!(V8Lja$oeyTC`6ZI=C7g)rn4UK&QK)bGM*NGSGEQ{r2iGH)z4U_8U5F zE4mu%lQ+DATu74Ya^Y*?DOyZ>0rO=ttbf^HALR1KrC_tK4PZsmJlJ9`8*DXa2UhOE zdQ|B?LT=yg2zDOTfL(_Z!S4OI-`>->-vMP0V1C%xd+?@6Jil!kJ>)r`)!@_d&EU$J z_29OLxIQCou%5i7?IfMgN5q^1pK_}QKkN3R7Q9;F`6^sizNERR$%pz7+jm*eT$XPU zPA%U#4A*ORcz-_4&D-=-)E2tvAJkUb4!ECe($oVqw-w`hsO^G1p`M+TGgoN7wDH0O z^@_mQ+tgmKQ$wkJ2lm~h4oN>*L#=!3mr9*jdoYMP%k$m_>f^s`#;HpmHN;RiCRMso zKd&f0Pd#;aD4LjGWs})Xowaczz5n@!gjRb0^YfRK^!^vJ^`rO6?}f3Z@B(5nkJn!$ zmU;B6n3+evIf0mWg_lNmvyYWaeUr}+Z;1026{I#B=#MZk@ztHPfzEMrk>sJlN zwy4Q`hm4XV^nKt`AJO4Ma_y6GHQg_d?=f*DBwv$k@TC1fP{5}iCCMX(KXjZR-dxq( zM9*i3AtZ>_^PxmtT^X5QoY~epMqKl5q_d8=>-vpmdcOK@@1fwuoL8Ue`yE9bmoqtA zv}i8Zcq~1G*-@G*NC(Ez)N|p2NIjSIZHjbY98EnJEQqP+g5}^$Jr}Hpspm5FT%;iW Zubzt!Ty|{jfxoAh&T;>a{iS}5{{yw(A!`5t literal 0 HcmV?d00001 diff --git a/test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Data.db b/test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Data.db new file mode 100644 index 0000000000000000000000000000000000000000..2bdae87404c42afdc6ce38c51f35d628f4ae497b GIT binary patch literal 75 wcmZSJV1NKdC~XO(1%Q|th{0k4j4WWO1|SK-P{7E*lx+xPGn&Yh8kvFw0Y{1hH~;_u literal 0 HcmV?d00001 diff --git a/test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Digest.sha1 b/test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Digest.sha1 new file mode 100644 index 0000000000..7af63e1f97 --- /dev/null +++ b/test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Digest.sha1 @@ -0,0 +1 @@ +a6a32d25ca3cdf76ac5a1a6bffa78936463f9648 Indexed1.626972746864617465-hb-1-Data.db \ No newline at end of file diff --git a/test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Filter.db b/test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Filter.db new file mode 100644 index 0000000000000000000000000000000000000000..1fd53624a6ebca61915466e03f43f0a88c10cb5e GIT binary patch literal 16 UcmZQzVBlh4U|0HXj3 literal 0 HcmV?d00001 diff --git a/test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Statistics.db b/test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Statistics.db new file mode 100644 index 0000000000000000000000000000000000000000..78c4ed3333dd6b4cf7bc77c96086f1aea068a0b4 GIT binary patch literal 4292 zcmeI!*-KPW90%~b%;>mH&bUuGluMR`noB0Qq>ZQ%XqrnKxg?d*LRyI!h1rXQS!5=- zw19|8QdTaBJy_aexe!^A;=^QN)KsKthE_Nif8X;L^f2>s?q|MdhI`NX-Ftr=$5n6( zAKo}h18YGFjHAd{##qkSjIlXm1!GIb){K>mRgCQ!J2Q4=?9SMmu|MNb#<50A>z2ag zdl?rpE@#}rco@wy`@yec@;t^}Xu*kb5n5#aU#!AhmW-AMpv}V2=FIgfW-+(yMOz!t zOU|OzSJ95!(V8Lja$oeyTC`6ZI=C7g)rn4UK&QK)bGM*NGSGEQ{r2iGH)z4U_8U5F zE4mu%lQ+DATu74Ya^Y*?DOyZ>0rO=ttbf^HALR1KrC_tK4PZsmJlJ9`8*DXa2UhOE zdQ|B?LT=yg2zDOTfL(_Z!S4OI-`>->-vMP0V1C%xd+?@6Jil!kJ>)r`)!@_d&EU$J z_29OLxIQCou%5i7?IfMgN5q^1pK_}QKkN3R7Q9;F`6^sizNERR$%pz7+jm*eT$XPU zPA%U#4A*ORcz-_4&D-=-)E2tvAJkUb4!ECe($oVqw-w`hsO^G1p`M+TGgoN7wDH0O z^@_mQ+tgmKQ$wkJ2lm~h4oN>*L#=!3mr9*jdoYMP%k$m_>f^s`#;HpmHN;RiCRMso zKd&f0Pd#;aD4LjGWs})Xowaczz5n@!gjRb0^YfRK^!^vJ^`rO6?}f3Z@B(5nkJn!$ zmU;B6n3+evIf0mWg_lNmvyYWaeUr}+Z;1026{I#B=#MZk@ztHPfzEMrk>sJlN zwy4Q`hm4XV^nKt`AJO4Ma_y6GHQg_d?=f*DBwv$k@TC1fP{5}iCCMX(KXjZR-dxq( zM9*i3AtZ>_^PxmtT^X5QoY~epMqKl5q_d8=>-vpmdcOK@@1fwuoL8Ue`yE9bmoqtA zv}i8Zcq~1G*-@G*NC(Ez)N|p2NIjSIZHjbY98EnJEQqP+g5}^$Jr}Hpspm5FT%;iW Zubzt!Ty|{jfxoAh&T;>a{iS}5{{yw(A!`5t literal 0 HcmV?d00001 diff --git a/test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Data.db b/test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Data.db new file mode 100644 index 0000000000000000000000000000000000000000..1cd5d15c5ddc736648840a66108062ee9cb809dc GIT binary patch literal 66600 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 literal 0 HcmV?d00001 diff --git a/test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Digest.sha1 b/test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Digest.sha1 new file mode 100644 index 0000000000..fa25470fcc --- /dev/null +++ b/test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Digest.sha1 @@ -0,0 +1 @@ +72295cc1b64e6ffdb67a39dec9996c4ff0363cce Standard1-hb-0-Data.db \ No newline at end of file diff --git a/test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Filter.db b/test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Filter.db new file mode 100644 index 0000000000000000000000000000000000000000..1fc44602d9e068117cc42ab1dd342d04525ab214 GIT binary patch literal 1704 zcmV;Z23Pq2000UA007jj1!Y#>^^hqHpg(H!A3hwOyBWOaw^!k`$SQ;uW z&|SekS*c%DKC>+Es1Mp7xi8_H@~{b*y-WCWhS=W+5Pa#%5$;nmpz#satA4OC9akd< zOFSOIg~a#oE8B8VWMM@_)X8zJaeeY4v>ae^n4z8ZGrzcbfZM@vXPU*(%7Ee1nNMeV zi$Q_HD_2#_@@h9P{?W9S8(0tk=a8nT+A-yb765spatWHq!NBrPF~MP}U;tISswNJjwvdL`N`Bi!PA2vVw1x2c+}{lv0piJHvb8d^(ZUE76I@0s9$r`fVZ*IM?7o z{es|NMm~ErP~~3ylU9V3Up~+&7bw`LR1uFq7E7#}&MmY%+g5jj;k-(rERl`O;vVM& zJz(=-Z;&`zxi=P6saS#p;D>F7BT6Z%sh()&z+DKWz;=>tw?G^P&Y71{6NKeXTi!%X zu%hMLB+-yX6pUnA?d#1yxx?5zH7QN>`oO~l;HX>p$n^3a5}ScKKb2Y=|K#X64Qhmo zVrCViRvC+sPeNO3ER}w|XE4jT8O;%EU4AxK12wY%&e1YbH$5~V%jNT1pObgrUtO>> zm=qF0y5v`4V2h^3Sz)r4)^zpXvD3Qo1n3QZQ+M!PA7m}30Tk9L?}d^-zS#d{HQMco)(oD~asv!^s; z(xrI3QZybHX!op~zfev95sYcIy6HDeH(^Dmkw$k}Xs`bvqydRAi{hl;cj*2NOi_F8ZdVobcr|yflQ~X-6GLrfa26pPUCFsBgGRQLw7G zFlxdF%0NtZHz&6`i33LYi5PoQVZ|lm4Sus_f{TjBvA~*|#XEaF0Ug)|8<8eXNs5Hu zWnldyh=$b8rX~?c86I&Q0&FO2{dsL|)H)3iTGKXlwmN@5V>8xxBeNT^@*H2;Cy-Nt z@i}!*Q<#{eQgcTTlr_d_i#;|iQ*-6mo~8UYVj*P-Ql+*%=1e9ikrNhYYQ$3+Rk>;~QVJSI;6}K=^(M|7AdEQ5G0gp;_Eu6NP}D|dN+bI| zzI_;-0)F-1n|AAZhOE+=UTHl%%$t(3odd}-gmKxAV2bt{R#la)DPl16V2BF!?3=(> zBK$H`oY8dluGq-nc5$cVxs=Xr1ZVfYqACL=3U5A9YMmBjtuH)u80OUgMF={&le>?V zB)P`X!knC-sOm5Qq>bW7$F=kcd9!v=JIdFekk(iWfCQ$8Rs0U?cT6uBhgJ@1kY}_) yiUch|sL&5AZ9g2S2UP(u{?#Ef`G}5Ecrn^wJzA;3Oo_F;pU5;CP$Ds!KYUgD0x@j> literal 0 HcmV?d00001 diff --git a/test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Index.db b/test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Index.db new file mode 100644 index 0000000000000000000000000000000000000000..bfe71f58bd8bbdff1e52908df1e8ab92c38b9258 GIT binary patch literal 11700 zcmXxkZ*3pXV>q3b${Mn_qoscMnw1O*)t+M0eX2)j|h+`N2a=i* z*%kB=6F{<91D8HtT=|$FvTRY{4Sa4hpu;93IV8L+*fCcRb z01MjB02Z|093aJl!Um>VX9(b_W)mI0;yA;u>H<$Cki?j@iJ1j%5+iiQy)8+yN{& zDG^w3Qa-TYq$*%Rr#8TXPQ!r(ofZNMI_(A)oSXtIIJq!DxQQp%01M*V0}J9u0Sn@n z01M*x0Siv)2P`;c8nED$jlhD0j=+M1+yLPwCM*LMBpd`5oH`I#aOzB8!Kqt-1)URs z1)awN3p!T<3r>pw7MzwIAl$^$N`M8Y)d35-bOjc4nE)*4vI@Y%O$8Qos|FUF*)~A9 ziD!-g7M!^VSa9YZU_tj(U_tjHU_ti{z=E?n01M6<4J3zFsm3z8av1;Gynu%OQrU_qaC zz=Gt~z=Gsqz=Grj0m4m8-UTcOo)W-Ka>q$~y&r0fM2^i2a6 z^ev8v?j3Go-&$ZnY89+!?@vb2kGE(&B*yX=4I}o0wJs zEJ!;9EI4m4u;9Gez=HF(0So$d0T%Qd4=m`n5?FA43t++dnE}F0JiioJaDF|opnrE@ zLH|j>g8plO1sAjg7F>`GEV!TySa87(V8MXI0O2MM$Oje-r~(#T*alc|;c#HVg$scN z7w!fY3`_wQ3@ii|46FebT+}{5xQQ2y0v24f1XysctNuwd{^V8P%mz=BH>fCZO~1r}UV2`osD02ZXD0}IkifCcGw z0m4nZv@5XS(h0zVOIHC4GGc%Q8AE^t8FPUJ84bXK%X$C{E}IN2xNL2Ja1%3I0ShvR z0t+(d0}C>D0t+rr0v2386L_5r)fvEotLFdz=G@A0Sm4h2`sp7F|gpey}*KzX~2S!#lV7*wZMYw;{t@6czq7A;QDf4 z!Sx4#1)~N43r5WV7L3{qEVv;aSa8D_V8IO)z=9hN1qe5B^k87Y=-I%6(c6FpH+BIQ z+&CUsaN|l~K~4)`K~5&HAg2^qkW(KZ+{Bx@0}F1N1T45|4X_}$C9ohj8(5HA1}w!z;xTO$Sa7zuaU`%^p!I)9N zf-y@1gqt{KAF$xoe!zlTrvVFY-3Tlg+YwkWHWyehb{Vi>>_K3`Z3BS?x6KR?ZsKiQ zfCb|cfCb~m0t?1f0t;@B02bVy4lKC61Xyr;9k5`0S75>T2?4@Q9KQ-!a7PTV;Eo}{ zf;;8{3+`wD7EI^?ESNAESTJENu;9*Cz=Au6Mnv}sH}TH-z=At>0t+T40ShKh1r|)K z1{U1a7FclC2w=foi+}}p?Ew}{N(~Th;-n&A!K4kqg1b8a3+^5bEVz3qu;A|fz=FyB zfd!MN0}Cc^0v6oUDL}Z1_v8T!?pY2jxTgtNFl7+1V9G3D!IZ7Qf_pmy3+^2UEVy?C zupmDwK)8wd8Nh=4IlzMa?ZATjx&aIBn+PnpZ#A%BYAmo|Y8J3y>O5e<)W!heCf?r@ zSaAOoV8Q+CfCUAufdvJ_fCU8$fCUA+fCUdE0}CD~02Vy3K0vsMh3$X^g(HClg^Pg& zg?oVo52gVN9xMhHJXi}XD2f9X6y*R5ipm3on^<%JSn$vQV8KH(fCUe21{M^@0}G1B z01JvMfCa^efCUc^1{OR#J3zRJ4{rk&OzQ$Hm^L0*Fl{BU;E@)h3m&Nl z7EJFBESNqiK)8w1*8mG1Z3!%RG#gm(Xc@5J(H+2o8HvDx8Tr718CAf7$Jzi39vdDY z+{DKg0t+774J??M0xXzW2rQUc11xyFJ+R>MQNV)7mjDYM-v=z1)h{ACIo!lq(|`rD zHUbNt=m;!$A{SWj#4=#P69<6>vj+kTX3qo`%-#YlcrqbCxQS1W1r|J62`ngy02Y*_ z0}Dz@fCVLWz=Ef`0t=p+04#WF6|i7VOn`6`=L`WB%$W-;n9~3(c)AC$;OWW0f~VI4 z3rbr73rdFq3rgn$3rcqe2siPWBw)caQ-KA~R09jsUSaywwb%OeAXoA~l#V8P3Kfdz}xfCY<-fdz|efd#L`0SjKq z0T#Sc4lH=(0I*=mfB@kpE|~!=Sh5*d@M=7;;MFm}f>$em1+N|g7AzeMELb`lSg>>( zu;8^W5z*&_oA}yzV8LrEfd%C)fCc55z=HBpU_p63u;BIXz=GE&0SjJV11wn9GC;VA z%d&w5%gTTS%XR<@-be%%ypazqc%uqfu)GbhVEJ%h!SaQ`g5|pdgq!$g3b5eKLSVt0 zHNb+3_P~OQQNV(VCBTA;eZYdZ`T+~xng%R*Yh!?L6DvCc3o3Jg1(nNy1(gSZ1#b@o z7Q8(ZSn&21V8Mz6V8M#9z=9Q(0m4muCjwaTPCBsQof2TdJ9WTHhb+dp4>$U<5KI#lC z_-Guk;G-45f~qKBK~)B@plS}VplUm?;Nxxq!cF{mBCz1&)xd)4SYSbQ7O7JOC=EcmPzSg;`uSg;`nSg@fSSg_#$u;B9nz=F?b01H0f z93b4p+IV0=?HFJ|Z3VEP_7Je(i^0HxFJ=P^zSssV*w_VFuyH)FVB^XF;U<3B0$A{6 zCa~bkQeeTC^}vEn-GK$0CIJgJtpOH%)e>0nRW`8TtFi#$CVsU8Sg<(}Sg<)CSg^SY zSnzclV8PeJfdyYL1QvX~8(6R<1z519FhID8TWWv>-?Rr7d@~AI@XZon!8iMW1zY<8 z3${)J7Hr)JEcmt~u;AO=0O2Nny9`+H?LlC{wt>KcZ8L!d+qM7;zDocWd^Z+Y@LeUa zpe_PfP?sJc+{C&PU_o6Su;BZyz=H2501Lif1uWPe11#7+1X!?rF0f#G1F+zS9s$Bl z{9!V%;D@!qg8Ej#g8HGrg8KQug8H4nf*+HB1wT#&7W`NZENEyOAl$@;5x|0mMZkiF zJ-~vWQh^0O6#)x=+5jwQ>;Noi91SdJTna2`+#eC$H{8UZ`vVJpo(?Sdc@wZ;M<-yx zjyzz&j^)6D9ZkT3Uj_jSewhU<_+@K=a1(cS1{Ulb2Q1jR0$A{C6tLje3}C^pbAScE zZU+|Z>IN*>H4#{_YjuEd6Mu^Z7W|e4Eck66u;8~wV8QO5z=GXVfCanP0SkU_4J`P5 z7_i{?1p&fM{CyX&U{5lzU{3+CV9$DB!5{5_1%HeL7W}aoSn$VQV8PxrV8Pzv0O2O? ztpyhR83!!*GY44kXF0Io&jY}MeFK06`(^+O_H70h{1p!@_-jmna1;Nk02cgp2w1Rx zFtA|%Y+%9uZNP%Ry8sLR9uF+|dnK^oKnq~Ofy@BmCLSmS796Mt7W~s4Sn$szV8K6Y zfCUFz0t*gi0}Bq80SgZ902ch47$DrlfAfI_|5gDDn%V#hnuY@lnic{Jnsx&V{+9wQ z_+KHg;D0s1fYk6nhPQ$azS%J zWW+MiTo4&?Fo2sF895L%7eq$R1kDAJky}7>L1a_{XfBA18Vi~WBBLsS1(u@<=M7gOn063bQv7W|5iT z(E%bVNm+R$_QKK*%Y$euQhc#l7_}8?nxPS{`ujeAK`(aS%=4M=Gt10#%=|?q~iPS}?wZ{$eq%fALU1%A2Id;yfqr{Z>QD_dF~et_)KC8xN2rI zxcw21&qzCrC#Q6rr2V<5`19b?UJc;qJwepGUmLt%`75edG#9i5us(#2y$YI(3lx#m zl07DPUg^<81vHnno2RH1`naFecDhd3PYy=SAk7^GLoc;cs4uK%H`UBlny+lSI6=L7 zW5OM3zc=aO)PaKsZ&8P3oT{bPzY9vIPOdu~LY?hY&b!jivjaYfNgR`=6V?tfKp$&oPfaAlLI_&5?z~LOy4{L@f3h z&={zvr;F(PNPd-9(C>$Aozr+U=`XLmU3iyRnRvbTII;b{vaj^{Rd3Z3^!e3839TB^ z-zBs382ui2G(>d0{?f;%(I}&GdeD zTf#!z*N Q;(w~S=B+<+dy7r(FD7s&fB*mh literal 0 HcmV?d00001 diff --git a/test/unit/org/apache/cassandra/io/sstable/SSTableMetadataSerializerTest.java b/test/unit/org/apache/cassandra/io/sstable/SSTableMetadataSerializerTest.java index 979b4b13ca..a549352ef0 100644 --- a/test/unit/org/apache/cassandra/io/sstable/SSTableMetadataSerializerTest.java +++ b/test/unit/org/apache/cassandra/io/sstable/SSTableMetadataSerializerTest.java @@ -28,6 +28,7 @@ import java.io.IOException; import org.junit.Test; import org.apache.cassandra.db.commitlog.ReplayPosition; +import org.apache.cassandra.dht.RandomPartitioner; import org.apache.cassandra.utils.EstimatedHistogram; public class SSTableMetadataSerializerTest @@ -49,7 +50,7 @@ public class SSTableMetadataSerializerTest .estimatedColumnCount(columnCounts) .replayPosition(rp); collector.updateMaxTimestamp(maxTimestamp); - SSTableMetadata originalMetadata = collector.finalizeMetadata(); + SSTableMetadata originalMetadata = collector.finalizeMetadata(RandomPartitioner.class.getCanonicalName()); ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(byteOutput); @@ -69,5 +70,6 @@ public class SSTableMetadataSerializerTest assert stats.replayPosition.equals(rp); assert stats.maxTimestamp == maxTimestamp; assert stats.maxTimestamp == originalMetadata.maxTimestamp; + assert RandomPartitioner.class.getCanonicalName().equals(stats.partitioner); } } diff --git a/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java b/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java index b2e3756092..09eef92bf3 100644 --- a/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java +++ b/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java @@ -21,6 +21,7 @@ package org.apache.cassandra.io.sstable; */ +import java.io.File; import java.io.IOException; import java.nio.ByteBuffer; import java.util.concurrent.ExecutionException; @@ -33,14 +34,21 @@ import org.junit.Test; import org.apache.cassandra.CleanupHelper; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.db.*; +import org.apache.cassandra.db.columniterator.IdentityQueryFilter; import org.apache.cassandra.db.compaction.CompactionManager; import org.apache.cassandra.db.filter.QueryPath; +import org.apache.cassandra.dht.IPartitioner; import org.apache.cassandra.dht.Range; import org.apache.cassandra.dht.Token; import org.apache.cassandra.io.util.FileDataInput; +import org.apache.cassandra.io.util.FileUtils; import org.apache.cassandra.io.util.MmappedSegmentedFile; import org.apache.cassandra.service.StorageService; +import org.apache.cassandra.thrift.IndexClause; +import org.apache.cassandra.thrift.IndexExpression; +import org.apache.cassandra.thrift.IndexOperator; import org.apache.cassandra.utils.ByteBufferUtil; +import org.apache.cassandra.utils.CLibrary; import org.apache.cassandra.utils.Pair; import org.apache.cassandra.Util; @@ -188,6 +196,75 @@ public class SSTableReaderTest extends CleanupHelper assert p.right == p7; } + @Test + public void testPersistentStatisticsWithSecondaryIndex() throws IOException, ExecutionException, InterruptedException + { + // Create secondary index and flush to disk + Table table = Table.open("Keyspace1"); + ColumnFamilyStore store = table.getColumnFamilyStore("Indexed1"); + ByteBuffer key = ByteBufferUtil.bytes(String.valueOf("k1")); + RowMutation rm = new RowMutation("Keyspace1", key); + rm.add(new QueryPath("Indexed1", null, ByteBufferUtil.bytes("birthdate")), ByteBufferUtil.bytes(1L), System.currentTimeMillis()); + rm.apply(); + store.forceBlockingFlush(); + + // check if opening and querying works + assertIndexQueryWorks(store); + } + + @Test + public void testPersistentStatisticsFromOlderIndexedSSTable() throws IOException, ExecutionException, InterruptedException + { + // copy legacy indexed sstables + String root = System.getProperty("legacy-sstable-root"); + assert root != null; + File rootDir = new File(root + File.separator + "hb" + File.separator + "Keyspace1"); + assert rootDir.isDirectory(); + + String[] destDirs = DatabaseDescriptor.getAllDataFileLocationsForTable("Keyspace1"); + assert destDirs != null; + assert destDirs.length > 0; + + FileUtils.createDirectory(destDirs[0]); + for (File srcFile : rootDir.listFiles()) + { + if (!srcFile.getName().startsWith("Indexed1")) + continue; + File destFile = new File(destDirs[0] + File.separator + srcFile.getName()); + CLibrary.createHardLinkWithExec(srcFile, destFile); + + destFile = new File(destDirs[0] + File.separator + srcFile.getName()); + + assert destFile.exists() : destFile.getAbsoluteFile(); + } + ColumnFamilyStore store = Table.open("Keyspace1").getColumnFamilyStore("Indexed1"); + + // check if opening and querying works + assertIndexQueryWorks(store); + } + + private void assertIndexQueryWorks(ColumnFamilyStore indexedCFS) + { + assert "Indexed1".equals(indexedCFS.getColumnFamilyName()); + + // make sure all sstables including 2ary indexes load from disk + indexedCFS.clearUnsafe(); + for (ColumnFamilyStore indexCfs : indexedCFS.indexManager.getIndexesBackedByCfs()) + { + indexCfs.clearUnsafe(); + indexCfs.loadNewSSTables(); // v1.0.4 would fail here (see CASSANDRA-3540) + } + indexedCFS.loadNewSSTables(); + + // query using index to see if sstable for secondary index opens + IndexExpression expr = new IndexExpression(ByteBufferUtil.bytes("birthdate"), IndexOperator.EQ, ByteBufferUtil.bytes(1L)); + IndexClause clause = new IndexClause(Arrays.asList(expr), ByteBufferUtil.EMPTY_BYTE_BUFFER, 100); + IPartitioner p = StorageService.getPartitioner(); + Range range = new Range(p.getMinimumToken(), p.getMinimumToken()); + List rows = indexedCFS.search(clause, range, new IdentityQueryFilter()); + assert rows.size() == 1; + } + private List> makeRanges(Token left, Token right) { return Arrays.>asList(new Range[]{ new Range(left, right) });