Return-Path: Delivered-To: apmail-incubator-cassandra-user-archive@minotaur.apache.org Received: (qmail 85632 invoked from network); 30 Sep 2009 20:58:01 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 30 Sep 2009 20:58:01 -0000 Received: (qmail 50120 invoked by uid 500); 30 Sep 2009 20:58:01 -0000 Delivered-To: apmail-incubator-cassandra-user-archive@incubator.apache.org Received: (qmail 50072 invoked by uid 500); 30 Sep 2009 20:58:01 -0000 Mailing-List: contact cassandra-user-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: cassandra-user@incubator.apache.org Delivered-To: mailing list cassandra-user@incubator.apache.org Received: (qmail 50063 invoked by uid 99); 30 Sep 2009 20:58:01 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 30 Sep 2009 20:58:01 +0000 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of temijun@gmail.com designates 209.85.223.202 as permitted sender) Received: from [209.85.223.202] (HELO mail-iw0-f202.google.com) (209.85.223.202) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 30 Sep 2009 20:57:51 +0000 Received: by iwn40 with SMTP id 40so771iwn.32 for ; Wed, 30 Sep 2009 13:56:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type; bh=4zccVFxWSUlIVAMN0M9Szq8qzwwaiLnK0S3W5qJKIww=; b=tN+SxznFRWS+F/cvk6qtQ0F3zjWNHqjyvGeNEoXHslF0fqLZAbPDxQeVPXj3DnF6Gx Od0g00CZtcBqD+Q2E3znXE2PZnqeZKX8VW1rsFXZRbF7iI52dISWsQ1IoibqnrNDMm4N x18QWYQr79sROeRCk/VK/VYOaLtcSR8rnBee4= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; b=DqFvGrxcgkre1vZbymzlrLquKc/X/9w7b10kXeNHRTPdD9wDRIq4iN3lvxGykIbWMR 9HKK8+NSDBAcU0pkaBU9F7V9v6+QqEc4qvO8rJIoUoKXf9EfrQZf0pokRA24OBu8Fufw VmeRO8nmx+IMhY5cx5bF58d/+28oqmAvbc2fQ= MIME-Version: 1.0 Received: by 10.231.24.208 with SMTP id w16mr494957ibb.38.1254344189753; Wed, 30 Sep 2009 13:56:29 -0700 (PDT) In-Reply-To: <20090930182415.GC20338@alumni.caltech.edu> References: <20090930182415.GC20338@alumni.caltech.edu> Date: Wed, 30 Sep 2009 13:56:29 -0700 Message-ID: <6bd5d4070909301356g24f4464ek95ca561dabf56dd2@mail.gmail.com> Subject: Re: Data Corruption Problem with cassandra 0.4.0 From: Sammy Yu To: anthonym@alumni.caltech.edu, cassandra-user@incubator.apache.org Content-Type: multipart/mixed; boundary=001517740964db38f70474d1c310 X-Virus-Checked: Checked by ClamAV on apache.org --001517740964db38f70474d1c310 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hi Anthony, We have seen similar issues that we filed under CASSANDRA-452. I've filed a ticket CASSANDRA-453 which won't resolve the issue, but can help figure out which sstables are corrupt. In order to run apply the patch to trunk compile and run with the followin= g: bin/sstabletool validate /home/sammy/corrupt/Digg/*-Data.db Please note if you copied onto a different machine, you will need to have the sstable in a parent directory with the keyspace name. Cheers, Sammy On Wed, Sep 30, 2009 at 11:24 AM, Anthony Molinaro wrote: > Hi, > > I'm not getting any responses on IRC, so figured I'd put this out on > the mailing list. > > I had a 3 node cassandra cluster, replication factor 3 on > 3 ec2 m1.large instances behind an haproxy. =A0I restarted one > of the node to test out some modified sysctl's (tcp stack tuning). > As soon as I restarted it the other 2 nodes started spiking memory > use and the first node seemed to have corrupted data. =A0The corruption > is an exception when I read some and only some keys. > > The exception is > > ERROR [pool-1-thread-1] 2009-09-30 17:50:30,037 Cassandra.java (line 679)= Internal error processing get_slice > java.lang.RuntimeException: java.io.EOFException > =A0 =A0 =A0 =A0at org.apache.cassandra.service.CassandraServer.readColumn= Family(CassandraServer.java:104) > =A0 =A0 =A0 =A0at org.apache.cassandra.service.CassandraServer.getSlice(C= assandraServer.java:182) > =A0 =A0 =A0 =A0at org.apache.cassandra.service.CassandraServer.multigetSl= iceInternal(CassandraServer.java:251) > =A0 =A0 =A0 =A0at org.apache.cassandra.service.CassandraServer.get_slice(= CassandraServer.java:220) > =A0 =A0 =A0 =A0at org.apache.cassandra.service.Cassandra$Processor$get_sl= ice.process(Cassandra.java:671) > =A0 =A0 =A0 =A0at org.apache.cassandra.service.Cassandra$Processor.proces= s(Cassandra.java:627) > =A0 =A0 =A0 =A0at org.apache.thrift.server.TThreadPoolServer$WorkerProces= s.run(TThreadPoolServer.java:253) > =A0 =A0 =A0 =A0at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(= ThreadPoolExecutor.java:886) > =A0 =A0 =A0 =A0at java.util.concurrent.ThreadPoolExecutor$Worker.run(Thre= adPoolExecutor.java:908) > =A0 =A0 =A0 =A0at java.lang.Thread.run(Thread.java:619) > Caused by: java.io.EOFException > =A0 =A0 =A0 =A0at java.io.RandomAccessFile.readInt(RandomAccessFile.java:= 725) > =A0 =A0 =A0 =A0at org.apache.cassandra.io.IndexHelper.deserializeIndex(In= dexHelper.java:95) > =A0 =A0 =A0 =A0at org.apache.cassandra.db.filter.SSTableSliceIterator$Col= umnGroupReader.(SSTableSliceIterator.java:118) > =A0 =A0 =A0 =A0at org.apache.cassandra.db.filter.SSTableSliceIterator.(SSTableSliceIterator.java:56) > =A0 =A0 =A0 =A0at org.apache.cassandra.db.filter.SliceQueryFilter.getSSTa= bleColumnIterator(SliceQueryFilter.java:64) > =A0 =A0 =A0 =A0at org.apache.cassandra.db.ColumnFamilyStore.getColumnFami= ly(ColumnFamilyStore.java:1390) > =A0 =A0 =A0 =A0at org.apache.cassandra.db.ColumnFamilyStore.getColumnFami= ly(ColumnFamilyStore.java:1325) > =A0 =A0 =A0 =A0at org.apache.cassandra.db.Table.getRow(Table.java:590) > =A0 =A0 =A0 =A0at org.apache.cassandra.db.SliceFromReadCommand.getRow(Sli= ceFromReadCommand.java:59) > =A0 =A0 =A0 =A0at org.apache.cassandra.service.StorageProxy.weakReadLocal= (StorageProxy.java:471) > =A0 =A0 =A0 =A0at org.apache.cassandra.service.StorageProxy.readProtocol(= StorageProxy.java:309) > =A0 =A0 =A0 =A0at org.apache.cassandra.service.CassandraServer.readColumn= Family(CassandraServer.java:100) > =A0 =A0 =A0 =A0... 9 more > > > I ended up having to fire up some new instances, and reload the data > (luckily this is my small instance which I can reload quickly, I've got a > large cassandra cluster currently loading which I will not be > able to do this with, so I'm a little scared about that cluster). > > Anyway, any ideas? =A0I've left the broken cluster so I can investigate/p= atch/etc. > > -Anthony > > -- > ------------------------------------------------------------------------ > Anthony Molinaro =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > --001517740964db38f70474d1c310 Content-Type: application/octet-stream; name="0001-CASSANDRA-453-Added-initial-version-of-the-sstable-t.patch" Content-Disposition: attachment; filename="0001-CASSANDRA-453-Added-initial-version-of-the-sstable-t.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g08jbnw60 RnJvbSBlZDVhMDVhZGQwNmZiMjM0ODY1MDg1NTYyNWI3ZjQyYWNiNDQzNDEyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1teSBZdSA8c3l1QHNhbW15eXUubmV0PgpEYXRlOiBXZWQs IDIzIFNlcCAyMDA5IDEwOjUxOjExIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gQ0FTU0FORFJBLTQ1 MyBBZGRlZCBpbml0aWFsIHZlcnNpb24gb2YgdGhlIHNzdGFibGUgdG9vbAoKLS0tCiBiaW4vc3N0 YWJsZXRvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDkgKysrKysK IHNyYy9qYXZhL29yZy9hcGFjaGUvY2Fzc2FuZHJhL2lvL0l0ZXJhdGluZ1Jvdy5qYXZhIHwgICAg MiArLQogLi4uL29yZy9hcGFjaGUvY2Fzc2FuZHJhL3Rvb2xzL1NTVGFibGVUb29sLmphdmEgICAg fCAgMjI0ICsrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDI3NCBpbnNlcnRp b25zKCspLCAxIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNzU1IGJpbi9zc3RhYmxldG9v bAogbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBzcmMvamF2YS9vcmcvYXBhY2hlL2Nhc3Nh bmRyYS9pby9JdGVyYXRpbmdSb3cuamF2YQogY3JlYXRlIG1vZGUgMTAwNzU1IHNyYy9qYXZhL29y Zy9hcGFjaGUvY2Fzc2FuZHJhL3Rvb2xzL1NTVGFibGVUb29sLmphdmEKCmRpZmYgLS1naXQgYS9i aW4vc3N0YWJsZXRvb2wgYi9iaW4vc3N0YWJsZXRvb2wKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k ZXggMDAwMDAwMC4uMGMyZmMyNgotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9zc3RhYmxldG9vbApA QCAtMCwwICsxLDQ5IEBACisjIS9iaW4vc2gKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxp Y2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyMgZGlzdHJpYnV0ZWQgd2l0 aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyMgcmVnYXJkaW5nIGNvcHly aWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIyB0byB5b3UgdW5k ZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisjICJMaWNlbnNlIik7IHlv dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyMgd2l0aCB0aGUg TGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAg ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVz cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m dHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g YW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0Yg QU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBm b3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGlt aXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworaWYgWyAieCRDQVNTQU5EUkFfSU5DTFVE RSIgPSAieCIgXTsgdGhlbgorICAgIGZvciBpbmNsdWRlIGluIC91c3Ivc2hhcmUvY2Fzc2FuZHJh L2Nhc3NhbmRyYS5pbi5zaCBcCisgICAgICAgICAgICAgICAgICAgL3Vzci9sb2NhbC9zaGFyZS9j YXNzYW5kcmEvY2Fzc2FuZHJhLmluLnNoIFwKKyAgICAgICAgICAgICAgICAgICAvb3B0L2Nhc3Nh bmRyYS9jYXNzYW5kcmEuaW4uc2ggXAorICAgICAgICAgICAgICAgICAgIGBkaXJuYW1lICQwYC9j YXNzYW5kcmEuaW4uc2g7IGRvCisgICAgICAgIGlmIFsgLXIgJGluY2x1ZGUgXTsgdGhlbgorICAg ICAgICAgICAgLiAkaW5jbHVkZQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICBk b25lCitlbGlmIFsgLXIgJENBU1NBTkRSQV9JTkNMVURFIF07IHRoZW4KKyAgICAuICRDQVNTQU5E UkFfSU5DTFVERQorZmkKKworaWYgWyAteiAkQ0FTU0FORFJBX0NPTkYgLW8gLXogJENMQVNTUEFU SCBdOyB0aGVuCisgICAgZWNobyAiWW91IG11c3Qgc2V0IHRoZSBDQVNTQU5EUkFfQ09ORiBhbmQg Q0xBU1NQQVRIIHZhcnMiID4mMgorICAgIGV4aXQgMQorZmkKKworIyBTcGVjaWFsLWNhc2UgcGF0 aCB2YXJpYWJsZXMuCitjYXNlICJgdW5hbWVgIiBpbgorICAgIENZR1dJTiopIAorICAgICAgICBD TEFTU1BBVEg9YGN5Z3BhdGggLXAgLXcgIiRDTEFTU1BBVEgiYAorICAgICAgICBDQVNTQU5EUkFf Q09ORj1gY3lncGF0aCAtcCAtdyAiJENBU1NBTkRSQV9DT05GImAKKyAgICA7OworZXNhYworCitq YXZhIC1jcCAkQ0xBU1NQQVRIIC1Ec3RvcmFnZS1jb25maWc9JENBU1NBTkRSQV9DT05GIFwKKyAg ICAgICAgb3JnLmFwYWNoZS5jYXNzYW5kcmEudG9vbHMuU1NUYWJsZVRvb2wgJEAKKworIyB2aTph aSBzdz00IHRzPTQgdHc9MCBldApkaWZmIC0tZ2l0IGEvc3JjL2phdmEvb3JnL2FwYWNoZS9jYXNz YW5kcmEvaW8vSXRlcmF0aW5nUm93LmphdmEgYi9zcmMvamF2YS9vcmcvYXBhY2hlL2Nhc3NhbmRy YS9pby9JdGVyYXRpbmdSb3cuamF2YQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1Cmlu ZGV4IDY4NGE1ZWIuLmJiN2JiZmMKLS0tIGEvc3JjL2phdmEvb3JnL2FwYWNoZS9jYXNzYW5kcmEv aW8vSXRlcmF0aW5nUm93LmphdmEKKysrIGIvc3JjL2phdmEvb3JnL2FwYWNoZS9jYXNzYW5kcmEv aW8vSXRlcmF0aW5nUm93LmphdmEKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljIGNsYXNzIEl0ZXJh dGluZ1JvdyBleHRlbmRzIEFic3RyYWN0SXRlcmF0b3I8SUNvbHVtbj4gaW1wbGVtZW50cyBDb21w YXJhYmwKICAgICB7CiAgICAgICAgIHJldHVybiBmaW5pc2hlZEF0OwogICAgIH0KLQorICAgIAog ICAgIHByb3RlY3RlZCBJQ29sdW1uIGNvbXB1dGVOZXh0KCkKICAgICB7CiAgICAgICAgIHRyeQpk aWZmIC0tZ2l0IGEvc3JjL2phdmEvb3JnL2FwYWNoZS9jYXNzYW5kcmEvdG9vbHMvU1NUYWJsZVRv b2wuamF2YSBiL3NyYy9qYXZhL29yZy9hcGFjaGUvY2Fzc2FuZHJhL3Rvb2xzL1NTVGFibGVUb29s LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjBlYjZhNwotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9qYXZhL29yZy9hcGFjaGUvY2Fzc2FuZHJhL3Rvb2xzL1NTVGFibGVU b29sLmphdmEKQEAgLTAsMCArMSwyMjQgQEAKKy8qKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNo ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmli dXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmli dXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJk aW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICog dG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxp Y2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQor ICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5z ZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0y LjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRv IGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBp cyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVT IE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisg KiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVy bWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitw YWNrYWdlIG9yZy5hcGFjaGUuY2Fzc2FuZHJhLnRvb2xzOworCitpbXBvcnQgamF2YS5pby5JT0V4 Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5M aW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5N YXA7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmNhc3NhbmRyYS5pby5JdGVyYXRpbmdSb3c7CitpbXBv cnQgb3JnLmFwYWNoZS5jYXNzYW5kcmEuaW8uU1NUYWJsZVJlYWRlcjsKK2ltcG9ydCBvcmcuYXBh Y2hlLmNhc3NhbmRyYS5pby5TU1RhYmxlU2Nhbm5lcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1v bnMuY2xpLkNvbW1hbmRMaW5lOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jbGkuQ29tbWFu ZExpbmVQYXJzZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNsaS5IZWxwRm9ybWF0dGVy OworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jbGkuT3B0aW9uczsKK2ltcG9ydCBvcmcuYXBh Y2hlLmNvbW1vbnMuY2xpLlBhcnNlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9u cy5jbGkuUG9zaXhQYXJzZXI7CisKKy8qKgorICogU1NUYWJsZSB0b29sIHVzZSB0byB2ZXJpZnkg YW5kIGdldCBpbmZvcm1hdGlvbiBhYm91dCBzc3RhYmxlcy4KKyAqLworcHVibGljIGNsYXNzIFNT VGFibGVUb29sCit7CisgICAgcHJpdmF0ZSBzdGF0aWMgT3B0aW9ucyBvcHRpb25zID0gbnVsbDsK KyAgICBwcml2YXRlIENvbW1hbmRMaW5lIGNtZCA9IG51bGw7CisgICAgCisgICAgc3RhdGljCisg ICAgeworICAgICAgICBvcHRpb25zID0gbmV3IE9wdGlvbnMoKTsKKyAgICB9CisgICAgCisgICAg LyoqCisgICAgICogQ3JlYXRlcyBhIE5vZGVQcm9iZSB1c2luZyBjb21tYW5kLWxpbmUgYXJndW1l bnRzLgorICAgICAqIAorICAgICAqIEBwYXJhbSBjbWRBcmdzIGxpc3Qgb2YgYXJndW1lbnRzIHBh c3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lCisgICAgICogQHRocm93cyBQYXJzZUV4Y2VwdGlvbiBm b3IgbWlzc2luZyByZXF1aXJlZCwgb3IgdW5yZWNvZ25pemVkIG9wdGlvbnMKKyAgICAgKiBAdGhy b3dzIElPRXhjZXB0aW9uIG9uIGNvbm5lY3Rpb24gZmFpbHVyZXMKKyAgICAgKi8KKyAgICBwcml2 YXRlIFNTVGFibGVUb29sKFN0cmluZ1tdIGNtZEFyZ3MpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiwg SU9FeGNlcHRpb24KKyAgICB7CisgICAgICAgIHBhcnNlQXJncyhjbWRBcmdzKTsKKyAgICB9Cisg ICAgICAgIAorICAgIC8qKgorICAgICAqIFBhcnNlIHRoZSBzdXBwbGllZCBjb21tYW5kIGxpbmUg YXJndW1lbnRzLgorICAgICAqIAorICAgICAqIEBwYXJhbSBhcmdzIGFyZ3VtZW50cyBwYXNzZWQg b24gdGhlIGNvbW1hbmQgbGluZQorICAgICAqIEB0aHJvd3MgUGFyc2VFeGNlcHRpb24gZm9yIG1p c3NpbmcgcmVxdWlyZWQsIG9yIHVucmVjb2duaXplZCBvcHRpb25zCisgICAgICovCisgICAgcHJp dmF0ZSB2b2lkIHBhcnNlQXJncyhTdHJpbmdbXSBhcmdzKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24K KyAgICB7CisgICAgICAgIENvbW1hbmRMaW5lUGFyc2VyIHBhcnNlciA9IG5ldyBQb3NpeFBhcnNl cigpOworICAgICAgICBjbWQgPSBwYXJzZXIucGFyc2Uob3B0aW9ucywgYXJncyk7CisgICAgfQor ICAgIAorICAgIC8qKgorICAgICAqIFJldHJpZXZlIGFueSBub24tb3B0aW9uIGFyZ3VtZW50cyBw YXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuIG5vbi1v cHRpb24gY29tbWFuZCBhcmdzCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmdbXSBnZXRBcmdz KCkKKyAgICB7CisgICAgICAgIHJldHVybiBjbWQuZ2V0QXJncygpOworICAgIH0KKyAgICAKKyAg ICAvKioKKyAgICAgKiBQcmludHMgdXNhZ2UgaW5mb3JtYXRpb24gdG8gc3Rkb3V0LgorICAgICAq LworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRVc2FnZSgpCisgICAgeworICAgICAgICBI ZWxwRm9ybWF0dGVyIGhmID0gbmV3IEhlbHBGb3JtYXR0ZXIoKTsKKyAgICAgICAgU3RyaW5nIGhl YWRlciA9IFN0cmluZy5mb3JtYXQoCisgICAgICAgICAgICAgICAgIiVuQXZhaWxhYmxlIGNvbW1h bmRzOiB2YWxpZGF0ZSwgc3RhdHMiKTsKKyAgICAgICAgU3RyaW5nIHVzYWdlID0gU3RyaW5nLmZv cm1hdCgiamF2YSAlcyA8Y29tbWFuZD4gPHNzIHRhYmxlcz4lbiIsIFNTVGFibGVUb29sLmNsYXNz LmdldE5hbWUoKSk7CisgICAgICAgIGhmLnByaW50SGVscCh1c2FnZSwgIiIsIG9wdGlvbnMsIGhl YWRlcik7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHBhcmFtIGFyZ3MKKyAgICAgKi8KKyAg ICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgSU9FeGNlcHRp b24KKyAgICB7CisgICAgICAgIFNTVGFibGVUb29sIHByb2JlID0gbnVsbDsKKyAgICAgICAgdHJ5 CisgICAgICAgIHsKKyAgICAgICAgICAgIHByb2JlID0gbmV3IFNTVGFibGVUb29sKGFyZ3MpOwor ICAgICAgICB9CisgICAgICAgIGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBwZSkKKyAgICAgICAgewor ICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKHBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAg ICAgICBTU1RhYmxlVG9vbC5wcmludFVzYWdlKCk7CisgICAgICAgICAgICBTeXN0ZW0uZXhpdCgx KTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQorICAgICAgICB7 CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yIGNvbm5lY3RpbmcgdG8gcmVt b3RlIEpNWCBhZ2VudCEiKTsKKyAgICAgICAgICAgIGlvZS5wcmludFN0YWNrVHJhY2UoKTsKKyAg ICAgICAgICAgIFN5c3RlbS5leGl0KDMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp ZiAocHJvYmUuZ2V0QXJncygpLmxlbmd0aCA8IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN5 c3RlbS5lcnIucHJpbnRsbigiTWlzc2luZyBhcmd1bWVudCBmb3IgY29tbWFuZC4iKTsKKyAgICAg ICAgICAgIFNTVGFibGVUb29sLnByaW50VXNhZ2UoKTsKKyAgICAgICAgICAgIFN5c3RlbS5leGl0 KDEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHByb2JlLmdldEFyZ3MoKS5sZW5ndGggPCAy KQorICAgICAgICB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIk1pc2luZyBzc3Rh Ymxlcy4iKTsKKyAgICAgICAgICAgIFNTVGFibGVUb29sLnByaW50VXNhZ2UoKTsKKyAgICAgICAg ICAgIFN5c3RlbS5leGl0KDEpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBFeGVj dXRlIHRoZSByZXF1ZXN0ZWQgY29tbWFuZC4KKyAgICAgICAgU3RyaW5nW10gYXJndW1lbnRzID0g cHJvYmUuZ2V0QXJncygpOworICAgICAgICBTdHJpbmcgY21kTmFtZSA9IGFyZ3VtZW50c1swXTsK KyAgICAgICAgU3RyaW5nW10gc3NUYWJsZUxpc3QgPSBuZXcgU3RyaW5nW2FyZ3VtZW50cy5sZW5n dGgtMV07CisgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoYXJndW1lbnRzLCAxLCBzc1RhYmxlTGlz dCwgMCwgc3NUYWJsZUxpc3QubGVuZ3RoKTsKKyAgICAgICAgTGlua2VkSGFzaE1hcDxTdHJpbmcs IEJvb2xlYW4+IHNzVGFibGVTdGF0ZU1hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFN0cmluZywgQm9v bGVhbj4gKCk7CisgICAgICAgIExpc3Q8U3RyaW5nPiBlcnJvck1zZ3MgPSBuZXcgQXJyYXlMaXN0 PFN0cmluZz4gKCk7CisgICAgICAgIAorICAgICAgICBpZiAoY21kTmFtZS5lcXVhbHMoInZhbGlk YXRlIikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoU3RyaW5nIHNzVGFibGU6IHNzVGFi bGVMaXN0KSB7CisgICAgICAgICAgICAgICAgYm9vbGVhbiB2YWxpZCA9IHRydWU7CisgICAgICAg ICAgICAgICAgU3RyaW5nIGxhc3RLZXkgPSBudWxsOworICAgICAgICAgICAgICAgIGxvbmcgbGFz dFN0YXJ0UG9zaXRpb24gPSAwOworICAgICAgICAgICAgICAgIGxvbmcgbGFzdEVuZFBvc2l0aW9u ID0gMDsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbm9ybWFsaXplZFNTVGFibGVOYW1lID0gc3NU YWJsZTsKKyAgICAgICAgICAgICAgICB0cnkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICAgIFNTVGFibGVSZWFkZXIgc3NUYWJsZVJlYWRlciA9IFNTVGFibGVSZWFkZXIub3Bl bihzc1RhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgTGlzdCA8U3RyaW5nPiBpbmRleGVkS2V5 cyA9IHNzVGFibGVSZWFkZXIuZ2V0SW5kZXhlZEtleXMoKTsKKyAgICAgICAgICAgICAgICAgICAg CisgICAgICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIGtleXM6IGluZGV4ZWRLZXlzKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIktleSBpbiBpbmRleCBm aWxlIGlzICIgKyBrZXlzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICBub3JtYWxpemVkU1NUYWJsZU5hbWUgPSBzc1RhYmxlUmVhZGVyLmdldEZpbGVuYW1lKCk7 CisgICAgICAgICAgICAgICAgICAgIFNTVGFibGVTY2FubmVyIHNzVGFibGVTY2FubmVyID0gc3NU YWJsZVJlYWRlci5nZXRTY2FubmVyKCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzc1Rh YmxlU2Nhbm5lci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdGlu Z1JvdyByb3cgPSBzc1RhYmxlU2Nhbm5lci5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAg ICBsYXN0S2V5ID0gcm93LmdldEtleSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEVu ZFBvc2l0aW9uID0gcm93LmdldEVuZFBvc2l0aW9uKCk7CisvKgorICAgICAgICAgICAgICAgICAg ICAgICAgbGFzdFN0YXJ0UG9zaXRpb24gPSByb3cuZ2V0U3RhcnRQb3NpdGlvbigpOworICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ZWRLZXlzLmNvbnRhaW5zKGxhc3RLZXkpKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RTdGFydFBvc2l0aW9uICE9IHNzVGFi bGVSZWFkZXIuZ2V0UG9zaXRpb24obGFzdEtleSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZXJyb3JNc2dzLmFkZChub3JtYWxpemVkU1NUYWJsZU5hbWUgKyAiOiBwb3NpdGlv biBmb3Iga2V5ICIgKyBsYXN0S2V5ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiIGluIGluZGV4IGZpbGUgPSAiICsgc3NUYWJsZVJlYWRlci5nZXRQb3NpdGlvbihs YXN0S2V5KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpcyBp bmNvcnJlY3QgaXQgc2hvdWxkIGJlICIgKyBsYXN0U3RhcnRQb3NpdGlvbik7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ZWRLZXlzLnJlbW92 ZShsYXN0S2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyovCisgICAgICAgICAgICAg ICAgICAgICAgICByb3cuZ2V0Q29sdW1uRmFtaWx5KCk7CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgCisvKgorICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXhl ZEtleXMuc2l6ZSgpID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNc2dzLmFk ZChub3JtYWxpemVkU1NUYWJsZU5hbWUgKyAiOiBpbmRleCBmaWxlIGhhcyAiICsgaW5kZXhlZEtl eXMuc2l6ZSgpICsgIm5vbi1leGlzdGVudCBrZXlzIik7CisgICAgICAgICAgICAgICAgICAgICAg ICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisqLworICAgICAgICAgICAg ICAgICAgICBzc1RhYmxlU2Nhbm5lci5jbG9zZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKQorICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICAgZXJyb3JNc2dzLmFkZChub3JtYWxpemVkU1NUYWJsZU5hbWUgKyAi OiBjb3VsZCBub3QgYmUgZnVsbHkgcmVhZCBsYXN0IGtleT0iICsgbGFzdEtleSArICIgYXQgcG9z aXRpb24gIiArIGxhc3RFbmRQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHZhbGlkID0g ZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNzVGFibGVTdGF0ZU1h cC5wdXQobm9ybWFsaXplZFNTVGFibGVOYW1lLCB2YWxpZCk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KFN0cmluZy5mb3JtYXQo IiUtNjBzICIsICJEYXRhIEZpbGUiKSk7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KFN0 cmluZy5mb3JtYXQoIiUtMTVzIiwgIlN0YXRlIikpOworICAgICAgICAgICAgU3lzdGVtLm91dC5w cmludGxuKCk7CisKKyAgICAgICAgICAgIGZvciAoTWFwLkVudHJ5PFN0cmluZywgQm9vbGVhbj4g ZW50cnkgOiBzc1RhYmxlU3RhdGVNYXAuZW50cnlTZXQoKSkKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KFN0cmluZy5mb3JtYXQoIiUtNjBzICIsIGVudHJ5 LmdldEtleSgpKSk7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludChTdHJpbmcuZm9y bWF0KCIlLTE1cyAiLCAoZW50cnkuZ2V0VmFsdWUoKSA/ICJPSyIgOiAiQ09SUlVQVCIpKSk7Cisg ICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CisgICAgICAgICAgICB9CisKKyAg ICAgICAgICAgIGlmIChlcnJvck1zZ3Muc2l6ZSgpID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJFcnJvciBsb2dcbj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PVxuIik7CisgICAgICAgICAgICAgICAgZm9yIChTdHJpbmcgZXJyb3JN c2c6IGVycm9yTXNncykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFN5 c3RlbS5vdXQucHJpbnRsbihlcnJvck1zZyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgU3lz dGVtLmVyci5wcmludGxuKCJVbnJlY29nbml6ZWQgY29tbWFuZDogIiArIGNtZE5hbWUgKyAiLiIp OworICAgICAgICAgICAgU1NUYWJsZVRvb2wucHJpbnRVc2FnZSgpOworICAgICAgICAgICAgU3lz dGVtLmV4aXQoMSk7CisgICAgICAgIH0KKworICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKKyAgICB9 CisKK30KLS0gCjEuNS42Cgo= --001517740964db38f70474d1c310--