Return-Path: Delivered-To: apmail-cassandra-user-archive@www.apache.org Received: (qmail 58429 invoked from network); 26 Jul 2010 19:14:56 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 26 Jul 2010 19:14:56 -0000 Received: (qmail 18894 invoked by uid 500); 26 Jul 2010 19:14:54 -0000 Delivered-To: apmail-cassandra-user-archive@cassandra.apache.org Received: (qmail 18861 invoked by uid 500); 26 Jul 2010 19:14:54 -0000 Mailing-List: contact user-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@cassandra.apache.org Delivered-To: mailing list user@cassandra.apache.org Received: (qmail 18853 invoked by uid 99); 26 Jul 2010 19:14:54 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 26 Jul 2010 19:14:54 +0000 X-ASF-Spam-Status: No, hits=2.2 required=10.0 tests=FREEMAIL_FROM,HTML_MESSAGE,RCVD_IN_DNSWL_NONE,SPF_PASS,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of aichrana@gmail.com designates 209.85.212.172 as permitted sender) Received: from [209.85.212.172] (HELO mail-px0-f172.google.com) (209.85.212.172) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 26 Jul 2010 19:14:47 +0000 Received: by pxi20 with SMTP id 20so238071pxi.31 for ; Mon, 26 Jul 2010 12:14:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:date:message-id :subject:from:to:content-type; bh=tevMzLy6lNEIArpNDyP6o5Qd5yIAZol7ss6VeBnIJ88=; b=Z8l8uouDdDueTepCn+rVK0ekJMbjpxe9Nb5so5DPJARr/S5VnjpW7mivHIoh9d0bY8 rPmTg8bOpEvmzoER+ge1LYJ/Oajuh/yjqzXXwrDotZ5wTqqcf0zBiZMXadSrpDPtgvRe YyWigNFEzDFGL4B8WgtEi92OtWUJcw78+iUbg= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=gusYYGZALP5w719luknSgJB+luuvSMNKw51RM3Frjt1zTDm7C2vZiLVrAyrVPiyHeo 13y/JAs1xJYL12wybztaCghvbDREv9TArgMBb/anJfNrpd3IdtcmmPHbcZBBf7yB0qc1 GQxepQ+epXMeZUZmUJjm2NchEiJqSRoBJGsAY= MIME-Version: 1.0 Received: by 10.142.140.20 with SMTP id n20mr9372436wfd.77.1280171667266; Mon, 26 Jul 2010 12:14:27 -0700 (PDT) Received: by 10.229.20.202 with HTTP; Mon, 26 Jul 2010 12:14:26 -0700 (PDT) Date: Mon, 26 Jul 2010 12:14:26 -0700 Message-ID: Subject: Help! Cassandra Data Loader threads are getting stuck From: Rana Aich To: user@cassandra.apache.org Content-Type: multipart/mixed; boundary=000e0cd1492e7a9e30048c4f3144 --000e0cd1492e7a9e30048c4f3144 Content-Type: multipart/alternative; boundary=000e0cd1492e7a9e22048c4f3142 --000e0cd1492e7a9e22048c4f3142 Content-Type: text/plain; charset=ISO-8859-1 Hi All, I have to load huge quantity of data into Cassandra (~10Billion rows). I'm trying to load the Data from files using multithreading. The idea is each thread will read the TAB delimited file and process chunk of records. For example Thread1 reads line 1-1000 lines Thread 2 reads line 1001-2000 and insert into Cassandra. Thread 3 reads line 2001-3000 and insert into Cassandra. Thread 10 reads line 9001-10000 and insert into Cassandra. Thread 1 reads line 10001-11000 and insert into Cassandra. Thread 2 reads line 11001-12000 and insert into Cassandra. and so on... I'm testing with a small file size with 200000 records. But somehow the process gets stuck and doesn't proceed any further after processing say 16,000 records. I've attached my working file. Any help will be very much appreciated. Regards raich --000e0cd1492e7a9e22048c4f3142 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hi All,

I have to load huge quantity of data into Cassan= dra (~10Billion rows).=A0

I'm trying to load t= he Data from files using multithreading.

The idea = is each thread will read the TAB delimited file and process chunk of record= s.

For example Thread1 reads line 1-1000 lines
T= hread 2 reads line 1001-2000 and insert into Cassandra.
Thread 3 = reads line 2001-3000=A0and insert into Cassandra.

Thread 10 reads line 9001-10000=A0and insert into Cassandra.
Thre= ad 1 =A0reads line 10001-11000=A0and insert into Cassandra.
Threa= d 2 reads line 11001-12000=A0and insert into Cassandra.

and so on...

I'm testing with a small file siz= e with 200000 records.

But somehow the process get= s stuck and doesn't proceed any further after processing say 16,000 rec= ords.

I've attached my working file.

=
Any help will be very much appreciated.

Regar= ds

raich
--000e0cd1492e7a9e22048c4f3142-- --000e0cd1492e7a9e30048c4f3144 Content-Type: application/octet-stream; name="CassandraDataLoader2.java" Content-Disposition: attachment; filename="CassandraDataLoader2.java" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gc3p2c3k0 cGFja2FnZSBteWNhc3NhbmRyYTsNCg0KaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7DQpp bXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07DQppbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlv bjsNCmltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOw0KaW1wb3J0IGphdmEudXRpbC4q Ow0KaW1wb3J0IGphdmEubGFuZy4qOw0KaW1wb3J0IG9yZy5hcGFjaGUudGhyaWZ0LnRyYW5zcG9y dC5UVHJhbnNwb3J0Ow0KaW1wb3J0IG9yZy5hcGFjaGUudGhyaWZ0LnRyYW5zcG9ydC5UU29ja2V0 Ow0KaW1wb3J0IG9yZy5hcGFjaGUudGhyaWZ0LnByb3RvY29sLlRQcm90b2NvbDsNCmltcG9ydCBv cmcuYXBhY2hlLnRocmlmdC5wcm90b2NvbC5UQmluYXJ5UHJvdG9jb2w7DQppbXBvcnQgb3JnLmFw YWNoZS50aHJpZnQuVEV4Y2VwdGlvbjsNCmltcG9ydCBvcmcuYXBhY2hlLmNhc3NhbmRyYS50aHJp ZnQuQ2Fzc2FuZHJhOw0KaW1wb3J0IG9yZy5hcGFjaGUuY2Fzc2FuZHJhLnRocmlmdC5Db2x1bW47 DQppbXBvcnQgb3JnLmFwYWNoZS5jYXNzYW5kcmEudGhyaWZ0LlN1cGVyQ29sdW1uOw0KaW1wb3J0 IG9yZy5hcGFjaGUuY2Fzc2FuZHJhLnRocmlmdC5Db2x1bW5PclN1cGVyQ29sdW1uOw0KaW1wb3J0 IG9yZy5hcGFjaGUuY2Fzc2FuZHJhLnRocmlmdC5Ob3RGb3VuZEV4Y2VwdGlvbjsNCmltcG9ydCBv cmcuYXBhY2hlLmNhc3NhbmRyYS50aHJpZnQuQ29sdW1uUGFyZW50Ow0KaW1wb3J0IG9yZy5hcGFj aGUuY2Fzc2FuZHJhLnRocmlmdC5Db2x1bW5QYXRoOw0KaW1wb3J0IG9yZy5hcGFjaGUuY2Fzc2Fu ZHJhLnRocmlmdC5Db25zaXN0ZW5jeUxldmVsOw0KaW1wb3J0IG9yZy5hcGFjaGUuY2Fzc2FuZHJh LnRocmlmdC5JbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbjsNCmltcG9ydCBvcmcuYXBhY2hlLmNhc3Nh bmRyYS50aHJpZnQuVGltZWRPdXRFeGNlcHRpb247DQppbXBvcnQgb3JnLmFwYWNoZS5jYXNzYW5k cmEudGhyaWZ0LlVuYXZhaWxhYmxlRXhjZXB0aW9uOw0KaW1wb3J0IG5ldC5zZi5qc29uLkpTT05P YmplY3Q7DQppbXBvcnQgb3JnLmFwYWNoZS5jYXNzYW5kcmEudGhyaWZ0Lk5vdEZvdW5kRXhjZXB0 aW9uOw0KDQovKioNCiAqIFJlYWQgc29tZSBkYXRhIGZyb20gYSBnemlwIGZpbGUuDQogKiANCiAq IEBhdXRob3IgSWFuIEYuIERhcndpbiwgaHR0cDovL3d3dy5kYXJ3aW5zeXMuY29tLw0KICogQHZl cnNpb24gJElkOiBSZWFkR1pJUC5qYXZhLHYgMS40IDIwMDQvMDMvMDYgMjA6NTQ6MzggaWFuIEV4 cCAkDQogKi8NCi8qDQpjbGFzcyBEQkV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbg0Kew0KICAg ICAgICBwdWJsaWMgREJFeGNlcHRpb24oKQ0KICAgICAgICB7DQogICAgICAgICAgICAgICAgc3Vw ZXIoKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHB1YmxpYyBEQkV4Y2VwdGlvbihTdHJpbmcgbXNn KQ0KICAgICAgICB7DQogICAgICAgICAgICAgICAgc3VwZXIobXNnKTsNCiAgICAgICAgfQ0KDQog ICAgICAgIHB1YmxpYyBEQkV4Y2VwdGlvbihUaHJvd2FibGUgY2F1c2UpDQogICAgICAgIHsNCiAg ICAgICAgICAgICAgICBzdXBlcihjYXVzZSk7DQogICAgICAgIH0NCg0KICAgICAgICBwdWJsaWMg REJFeGNlcHRpb24oU3RyaW5nIG1zZywgVGhyb3dhYmxlIGNhdXNlKQ0KICAgICAgICB7DQogICAg ICAgICAgICAgICAgc3VwZXIobXNnLCBjYXVzZSk7DQogICAgICAgIH0NCg0KfQ0KKi8NCnB1Ymxp YyBjbGFzcyBDYXNzYW5kcmFEYXRhTG9hZGVyMiBleHRlbmRzIFRocmVhZHsNCiAJLy9zdGF0aWMg UmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsNCglCdWZmZXJlZFJlYWRlciBpczsNCi8vICAg ICAgICBwcml2YXRlIFRUcmFuc3BvcnQgdHIgPSBudWxsOw0KICAgICAgICBDYXNzYW5kcmEuQ2xp ZW50IGNsaWVudDsNCiAgICAgICAgU3RyaW5nIGhvc3RzID0gIjE5Mi4xNjguMjAyLjIiOw0KICAg ICAgICBwdWJsaWMgaW50IENvbm5lY3Rpb25SZXRyaWVzID0gMzAwOw0KCWludCByZWFkbGluZSA9 IDEwMDA7DQoJaW50IHRocmVhZG5vID0gMDsNCglpbnQgaSA9IDE7DQoJaW50IG51bXRocmVhZHMg PSAxMDsNCiAgICAJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWVNQQUNFID0gIktleXNw YWNlMSI7DQogICAgCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT0xVTU5fRkFNSUxZID0g IlByb2JlIjsNCg0KICAgIAlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTkNPRElORyA9ICJ1 dGYtOCI7DQoNCiAgICAgICAgQ2Fzc2FuZHJhRGF0YUxvYWRlcjIoaW50IG5vKSB0aHJvd3MgRXhj ZXB0aW9uDQogICAgICAgIHsNCiAgICAgICAgICAgICAgICBpcyA9IG5ldyAgQnVmZmVyZWRSZWFk ZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKFN5c3RlbS5pbikpOw0KCQl0aHJlYWRubyA9IG5vOw0K CQl0aGlzLnN0YXJ0KCk7DQogICAgICAgIH0NCg0KCXB1YmxpYyB2b2lkIHJ1bigpDQogICAgICAg IHsNCgkJLy9Db25uZWN0IHRvIHRoZSBEYXRhYmFzZQ0KCQlUVHJhbnNwb3J0IHRyID0gbnVsbDsN CgkJdHJ5DQoJCXsNCgkJCXRyID0gaW5pdCgpOw0KCQl9DQoJCWNhdGNoKERCRXhjZXB0aW9uIGV4 KXt9DQoJCS8vU3RhcnQgcmVhZGluZyB0aGUgZmlsZQ0KCQkvL2xvbmcgc3RhcnR0aW1lID0gU3lz dGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7DQoJCXRyeQ0KCQl7DQogICAgICAgIA0KCQkJU3RyaW5n IGxpbmU7DQoJCQkvL0ZvciBUaHJlYWQgbm8gOiAxIHN0YXJ0bGluZSBpcyAxDQoJCQkvL0ZvciBU aHJlYWQgbm8gOiAyIHN0YXJ0bGluZSBpcyAxMDAxLi4uLg0KCQkJLy9Gb3IgVGhyZWFkIG5vIDog OSBzdGFydGxpbmUgaXMgODAwMS4uLg0KCQkJaW50IHN0YXJ0bGluZSA9IHJlYWRsaW5lICogKHRo cmVhZG5vIC0gMSkgKyAxOw0KCQkJU3RyaW5nIGRhdGUgPSBudWxsOw0KCQkJLy9Mb25nIGRhdGUx ID0gbmV3IExvbmcoIjAiKTs7DQoJCQlTdHJpbmcgdGltZSA9IG51bGw7DQoJCQkvL0xvbmcgdGlt ZTEgPSBuZXcgTG9uZygiMCIpOw0KCQkJU3RyaW5nIG1lc2hjb2RlID0gbnVsbDsNCgkJCVN0cmlu ZyBsYXRpdHVkZSA9IG51bGw7DQoJCQlTdHJpbmcgbG9uZ2l0dWRlID0gbnVsbDsNCgkJCVN0cmlu ZyBjb21wYW55ID0gbnVsbDsNCgkJCVN0cmluZyBvZmZpY2UgPSBudWxsOw0KCQkJU3RyaW5nIHZl aGljbGUgPSBudWxsOw0KCQkJU3RyaW5nIHNwZWVkID0gbnVsbDsNCgkJCVN0cmluZyBudWxsU3Ry aW5nID0gbnVsbDsNCgkJCVN0cmluZyBkaXJlY3Rpb24gPSBudWxsOw0KCQkJaW50IHBhc3MgPSAx Ow0KDQoJCQl3aGlsZSAoKGxpbmUgPSBpcy5yZWFkTGluZSgpKSAhPSBudWxsKQ0KICAgICAgICAg ICAgICAgIAl7DQoJCQlpZihpID49IHN0YXJ0bGluZSAmJiBpIDwgc3RhcnRsaW5lICsgcmVhZGxp bmUpDQoJCQl7DQoJCQkJTHBiUHJvYmUgbHByb2JlID0gbmV3IExwYlByb2JlKCk7DQoJCQkJaW50 IGNvdW50ID0gMTsNCgkJCQlTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVy KGxpbmUsICJcdCIpOw0KCQkJCXdoaWxlKHN0Lmhhc01vcmVUb2tlbnMoKSkNCgkJCQl7DQoJCQkJ CWlmKGNvdW50ID09IDEpDQoJCQkJCXsNCgkJCQkJCWRhdGUgPSBzdC5uZXh0VG9rZW4oKTsNCgkJ CQkJCS8vU3RyaW5nIG5ld2RhdGUgPSBkYXRlLnJlcGxhY2VBbGwoIi0iLCIiKTsNCgkJCQkJCS8v ZGF0ZTEgPSBMb25nLnZhbHVlT2YobmV3ZGF0ZSk7DQoJCQkJCQkvL2xwcm9iZS5zZXRHZXRkYXRl KGRhdGUpOw0KCQkJCQl9DQoJCQkJCWVsc2UgaWYoY291bnQgPT0gMikNCgkJCQkJew0KIAkJCQkJ CXRpbWUgPSBzdC5uZXh0VG9rZW4oKTsNCgkJCQkJCS8vU3RyaW5nIG5ld3RpbWUgPSB0aW1lLnJl cGxhY2VBbGwoIjoiLCIiKTsNCgkJCQkJCS8vdGltZTEgPSBMb25nLnZhbHVlT2YobmV3dGltZSk7 DQoJCQkJCQkvL2xwcm9iZS5zZXRHZXR0aW1lKHRpbWUpOw0KCQkJCQl9DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihjb3VudCA9PSAzKQ0KCQkJCQl7DQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNoY29kZSA9 IHN0Lm5leHRUb2tlbigpOw0KCQkJCQkJbHByb2JlLnNldE1lc2hjb2RlKG1lc2hjb2RlKTsNCgkJ CQkJfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoY291 bnQgPT0gNCkNCgkJCQkJew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGF0aXR1ZGUgPSBzdC5uZXh0VG9rZW4oKTsNCgkJCQkJCWxwcm9iZS5zZXRMYXRp dHVkZShsYXRpdHVkZSk7DQoJCQkJCX0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlbHNlIGlmKGNvdW50ID09IDUpDQoJCQkJCXsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdpdHVkZSA9IHN0Lm5leHRUb2tlbigpOw0K CQkJCQkJbHByb2JlLnNldExvbmdpdHVkZShsb25naXR1ZGUpOw0KCQkJCQl9DQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihjb3VudCA9PSA2KQ0KCQkJCQl7 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYW55 ID0gc3QubmV4dFRva2VuKCk7DQoJCQkJCQlscHJvYmUuc2V0Q29tcGFueUlkKGNvbXBhbnkpOw0K CQkJCQl9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihj b3VudCA9PSA3KQ0KCQkJCQl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvZmZpY2UgPSBzdC5uZXh0VG9rZW4oKTsNCgkJCQkJCWxwcm9iZS5zZXRPZmZp Y2VJZChvZmZpY2UpOw0KCQkJCQl9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZWxzZSBpZihjb3VudCA9PSA4KQ0KCQkJCQl7DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWhpY2xlID0gc3QubmV4dFRva2VuKCk7DQoJCQkJ CQlscHJvYmUuc2V0VmVoaWNsZUlkKHZlaGljbGUpOw0KCQkJCQl9DQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihjb3VudCA9PSA5KQ0KCQkJCQl7DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsU3RyaW5nID0g c3QubmV4dFRva2VuKCk7DQoJCQkJCX0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlbHNlIGlmKGNvdW50ID09IDEwKQ0KCQkJCQl7DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVlZCA9IHN0Lm5leHRUb2tlbigpOw0KCQkJ CQkJbHByb2JlLnNldFNwZWVkKHNwZWVkKTsNCgkJCQkJfQ0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoY291bnQgPT0gMTEpDQoJCQkJCXsNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IHN0Lm5l eHRUb2tlbigpOw0KCQkJCQkJbHByb2JlLnNldERpcmVjdGlvbihkaXJlY3Rpb24pOw0KCQkJCQl9 DQoJCQkJCWNvdW50Kys7DQoJCQkJfQ0KDQoJCQkJCUpTT05PYmplY3Qgam8gPSBscHJvYmUudG9K c29uT2JqZWN0KCk7DQoNCiBTeXN0ZW0ub3V0LnByaW50bG4oIkRBVEUgOiAiICsgZGF0ZSArICIg VElNRSA6ICIgKyB0aW1lICsgIiBNRVNIQ09ERSA6ICIgKyBtZXNoY29kZSArICIgTEFUSVRVREUg OiAiICsgbGF0aXR1ZGUgKyAiIExPTkdJVFVERSA6ICIgKyBsb25naXR1ZGUgKyAiIENPTVBBTlkg OiAiICsgY29tcGFueSArICIgT0ZGQ0lFIDogIiArIG9mZmljZSArICIgU1BFRUQgOiAiICsgc3Bl ZWQgKyAiIERJUkVDVElPTiA6ICIgKyBkaXJlY3Rpb24pOw0KDQoNCgkvL0luc2VydCBUaGUgRGF0 YQ0KCWxvbmcgdGltZXN0YW1wID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7DQogICAgICAg IE1hcDxTdHJpbmcsIExpc3Q8Q29sdW1uT3JTdXBlckNvbHVtbj4+IGluc2VydERhdGFNYXAgPSBu ZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8Q29sdW1uT3JTdXBlckNvbHVtbj4+KCk7DQoNCglMaXN0 PENvbHVtbk9yU3VwZXJDb2x1bW4+IHJvd0RhdGEgPSBuZXcgQXJyYXlMaXN0PENvbHVtbk9yU3Vw ZXJDb2x1bW4+KCk7DQoNCglMaXN0PENvbHVtbj4gY29sdW1ucyA9IG5ldyBBcnJheUxpc3Q8Q29s dW1uPigpOw0KDQogICAgICAgIGNvbHVtbnMuYWRkKG5ldyBDb2x1bW4odGltZS5nZXRCeXRlcyhF TkNPRElORyksIGpvLnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoRU5DT0RJTkcpLCB0aW1lc3RhbXApKTsN Cg0KCS8vSEVSRSBJUyBUSEUgU1VQRVIgQ09MVU1ODQoJU3VwZXJDb2x1bW4gc3VwZXJDb2x1bW4g PSBuZXcgU3VwZXJDb2x1bW4obWVzaGNvZGUuZ2V0Qnl0ZXMoRU5DT0RJTkcpLCBjb2x1bW5zKTsN CglDb2x1bW5PclN1cGVyQ29sdW1uIGNsb3NjbCA9IG5ldyBDb2x1bW5PclN1cGVyQ29sdW1uKCk7 DQoJY2xvc2NsLnNldFN1cGVyX2NvbHVtbihzdXBlckNvbHVtbik7DQoNCglyb3dEYXRhLmFkZChj bG9zY2wpOw0KCWluc2VydERhdGFNYXAucHV0KENPTFVNTl9GQU1JTFksIHJvd0RhdGEpOw0KCWNs aWVudC5iYXRjaF9pbnNlcnQoS0VZU1BBQ0UsIGRhdGUsIGluc2VydERhdGFNYXAsIENvbnNpc3Rl bmN5TGV2ZWwuT05FKTsNCgkJCX0vL0VuZCBJRg0KICAgICAgICAgICAgICAgIAkJLy9TeXN0ZW0u b3V0LnByaW50bG4oIkRBVEUgOiAiICsgZGF0ZSArICIgVElNRSA6ICIgKyB0aW1lICsgIiBNRVNI Q09ERSA6ICIgKyBtZXNoY29kZSArICIgTEFUSVRVREUgOiAiICsgbGF0aXR1ZGUgKyAiIExPTkdJ VFVERSA6ICIgKyBsb25naXR1ZGUgKyAiIENPTVBBTlkgOiAiICsgY29tcGFueSArICIgT0ZGQ0lF IDogIiArIG9mZmljZSArICIgU1BFRUQgOiAiICsgc3BlZWQgKyAiIERJUkVDVElPTiA6ICIgKyBk aXJlY3Rpb24pOw0KCQkJCS8vaWYoaSAlIDEwMDAgPT0gMCkNCgkJCQkvLwlTeXN0ZW0ub3V0LnBy aW50bG4oIlByb2Nlc3NlZCAiICsgaSArICIgUmVjb3JkcyIpOw0KCQkJCWkrKzsNCgkJCQlpZihp ID09IHN0YXJ0bGluZSArIHJlYWRsaW5lICsgMSkNCgkJCQl7DQoJCQkJCXN0YXJ0bGluZSA9IHBh c3MqcmVhZGxpbmUqbnVtdGhyZWFkcyArICh0aHJlYWRubyAtMSkqcmVhZGxpbmUgKyAxOw0KCQkJ CQkvL3Bhc3MrKzsNCgkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJUaHJlYWQgOiAiICsgdGhyZWFk bm8gKyAiIHByb2Nlc3NlZCAiICsgcGFzcypyZWFkbGluZSArICJyZWNvcmRzIik7DQoJCQkJCXBh c3MrKzsNCgkJCQl9DQoJCQkJDQogICAgICAgICAgICAgICAgCX0vL0VuZCBXaGlsZQ0KCQl9DQoJ CWNhdGNoKEV4Y2VwdGlvbiBlKXsgDQoJCQllLnByaW50U3RhY2tUcmFjZSgpOw0KCQkJU3lzdGVt Lm91dC5wcmludGxuKCJFeGNlcHRpb24gOiAiICsgZS50b1N0cmluZygpKTsNCgkJfQ0KCQl0ci5j bG9zZSgpOw0KCQkvL2xvbmcgZW5kdGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOw0K CQkvL2xvbmcgZWxhcHNlZHRpbWUgPSBlbmR0aW1lIC0gc3RhcnR0aW1lOw0KCQkvL1N5c3RlbS5v dXQucHJpbnRsbigiVG90YWwgVGltZSBlbGFwc2VkIDogIiArIGVsYXBzZWR0aW1lKTsNCiAgICAg ICAgfQ0KDQogLyoNCiAgICAgICAgICogSW5pdGlhbGl6ZSBhbnkgc3RhdGUgZm9yIHRoaXMgREIu DQogICAgICAgICAqIENhbGxlZCBvbmNlIHBlciBEQiBpbnN0YW5jZTsgdGhlcmUgaXMgb25lIERC IGluc3RhbmNlIHBlciBjbGllbnQgdGhyZWFkLg0KICAgICAgICAgKi8NCiAgICAgICAgcHVibGlj IFRUcmFuc3BvcnQgaW5pdCgpIHRocm93cyBEQkV4Y2VwdGlvbg0KICAgICAgICB7DQoNCiAgICAg ICAgICAgICAgICAvL1N0cmluZ1tdIGFsbGhvc3RzPWhvc3RzLnNwbGl0KCIsIik7DQogICAgICAg ICAgICAgICAgLy9TdHJpbmcgbXlob3N0PWFsbGhvc3RzW3JhbmRvbS5uZXh0SW50KGFsbGhvc3Rz Lmxlbmd0aCldOw0KCQlTdHJpbmcgbXlob3N0ID0gIjE5Mi4xNjguMjAyLjIiOw0KICAgICAgICAg ICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJNeSBob3N0OiBbIitteWhvc3QrIl0iKTsNCiAg ICAgICAgICAgICAgICAvL1N5c3RlbS5leGl0KDApOw0KDQogICAgICAgICAgICAgICAgRXhjZXB0 aW9uIGNvbm5lY3RleGNlcHRpb249bnVsbDsNCgkJVFRyYW5zcG9ydCB0ciA9IG51bGw7DQoNCiAg ICAgICAgICAgICAgICBmb3IgKGludCByZXRyeT0wOyByZXRyeTxDb25uZWN0aW9uUmV0cmllczsg cmV0cnkrKykNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0ciA9 IG5ldyBUU29ja2V0KG15aG9zdCwgOTE2MCk7DQogICAgICAgICAgICAgICAgICAgICAgICBUUHJv dG9jb2wgcHJvdG8gPSBuZXcgVEJpbmFyeVByb3RvY29sKHRyKTsNCiAgICAgICAgICAgICAgICAg ICAgICAgIGNsaWVudCA9IG5ldyBDYXNzYW5kcmEuQ2xpZW50KHByb3RvKTsNCiAgICAgICAgICAg ICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0ci5vcGVuKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbm5lY3RleGNlcHRpb249bnVsbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg ICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RleGNlcHRpb249ZTsNCiAgICAg ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAg ICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJl YWQuc2xlZXAoMTAwMCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg ICAgICAgICAgICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkNCiAgICAgICAgICAgICAg ICAgICAgICAgIHt9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChjb25u ZWN0ZXhjZXB0aW9uIT1udWxsKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAg ICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVW5hYmxlIHRvIGNvbm5lY3QgdG8gIitteWhvc3Qr IiBhZnRlciAiK0Nvbm5lY3Rpb25SZXRyaWVzKyIgdHJpZXMiKTsNCiAgICAgICAgICAgICAgICAg ICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5hYmxlIHRvIGNvbm5lY3QgdG8gIitteWhvc3Qr IiBhZnRlciAiK0Nvbm5lY3Rpb25SZXRyaWVzKyIgdHJpZXMiKTsNCiAgICAgICAgICAgICAgICAg ICAgICAgIHRocm93IG5ldyBEQkV4Y2VwdGlvbihjb25uZWN0ZXhjZXB0aW9uKTsNCiAgICAgICAg ICAgICAgICB9DQoJCXJldHVybiB0cjsNCiAgICAgICAgfQ0KDQogIHB1YmxpYyBzdGF0aWMgdm9p ZCBtYWluKFN0cmluZ1tdIGFyZ3YpIHRocm93cyBJT0V4Y2VwdGlvbiB7DQoJdHJ5DQoJew0KCQkv L1N0YXJ0IHJlYWRpbmcgdGhlIGZpbGUNCiAgICAgICAgICAgICAgICBsb25nIHN0YXJ0dGltZSA9 IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOw0KDQoJCUNhc3NhbmRyYURhdGFMb2FkZXIyIGRs W10gPSBuZXcgQ2Fzc2FuZHJhRGF0YUxvYWRlcjJbMTBdOw0KCQlmb3IoaW50IGk9MTsgaTw9MTA7 IGkrKykNCgkJCWRsW2ldID0gbmV3IENhc3NhbmRyYURhdGFMb2FkZXIyKGkpOw0KCQlmb3IoaW50 IGo9MTsgajw9MTA7IGorKykNCgkJewkNCgkJCXRyeQ0KCQkJew0KCQkJCWRsW2pdLmpvaW4oKTsN CgkJCX1jYXRjaChFeGNlcHRpb24gZSl7fQ0KCQl9DQoJCWxvbmcgZW5kdGltZSA9IFN5c3RlbS5j dXJyZW50VGltZU1pbGxpcygpOw0KICAgICAgICAgICAgICAgIGxvbmcgZWxhcHNlZHRpbWUgPSBl bmR0aW1lIC0gc3RhcnR0aW1lOw0KICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigi VG90YWwgVGltZSBlbGFwc2VkIDogIiArIGVsYXBzZWR0aW1lKTsNCg0KCX0NCgljYXRjaChFeGNl cHRpb24gZXgpe30NCg0KfQ0KDQp9DQo= --000e0cd1492e7a9e30048c4f3144--