You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Christian Schnidrig (JIRA)" <ji...@apache.org> on 2012/08/30 11:21:09 UTC
[jira] [Created] (CASSANDRA-4587) StackOverflowError in
LeveledCompactionStrategy$LeveledScanner.computeNext
Christian Schnidrig created CASSANDRA-4587:
----------------------------------------------
Summary: StackOverflowError in LeveledCompactionStrategy$LeveledScanner.computeNext
Key: CASSANDRA-4587
URL: https://issues.apache.org/jira/browse/CASSANDRA-4587
Project: Cassandra
Issue Type: Bug
Affects Versions: 1.1.4
Environment: debian
OpenJDK 64-Bit Server VM/1.6.0_18
Heap size: 8341422080/8342470656
Reporter: Christian Schnidrig
while running nodetool repair, the following was logged in system.log:
ERROR [ValidationExecutor:2] 2012-08-30 10:58:19,490 AbstractCassandraDaemon.java (line 134) Exception in thread Thread[ValidationExecutor:2,1,main]
java.lang.StackOverflowError
at sun.nio.cs.UTF_8.updatePositions(UTF_8.java:76)
at sun.nio.cs.UTF_8$Encoder.encodeArrayLoop(UTF_8.java:411)
at sun.nio.cs.UTF_8$Encoder.encodeLoop(UTF_8.java:466)
at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:561)
at java.lang.StringCoding$StringEncoder.encode(StringCoding.java:258)
at java.lang.StringCoding.encode(StringCoding.java:290)
at java.lang.String.getBytes(String.java:954)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:233)
at org.apache.cassandra.io.util.RandomAccessReader.<init>(RandomAccessReader.java:67)
at org.apache.cassandra.io.compress.CompressedRandomAccessReader.<init>(CompressedRandomAccessReader.java:64)
at org.apache.cassandra.io.compress.CompressedRandomAccessReader.open(CompressedRandomAccessReader.java:46)
at org.apache.cassandra.io.sstable.SSTableReader.openDataReader(SSTableReader.java:1007)
at org.apache.cassandra.io.sstable.SSTableScanner.<init>(SSTableScanner.java:56)
at org.apache.cassandra.io.sstable.SSTableBoundedScanner.<init>(SSTableBoundedScanner.java:41)
at org.apache.cassandra.io.sstable.SSTableReader.getDirectScanner(SSTableReader.java:869)
at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:247)
at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:240)
at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:248)
at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:240)
at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:248)
at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:240)
at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:248)
at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:240)
at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:248)
.
(about 900 lines deleted)
.
at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:240)
at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:248)
at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:202)
at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:140)
at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:135)
at org.apache.cassandra.utils.MergeIterator$Candidate.advance(MergeIterator.java:147)
at org.apache.cassandra.utils.MergeIterator$ManyToOne.<init>(MergeIterator.java:90)
at org.apache.cassandra.utils.MergeIterator.get(MergeIterator.java:47)
at org.apache.cassandra.db.compaction.CompactionIterable.iterator(CompactionIterable.java:60)
at org.apache.cassandra.db.compaction.CompactionManager.doValidationCompaction(CompactionManager.java:703)
at org.apache.cassandra.db.compaction.CompactionManager.access$600(CompactionManager.java:69)
at org.apache.cassandra.db.compaction.CompactionManager$8.call(CompactionManager.java:442)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:636)
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Updated] (CASSANDRA-4587) StackOverflowError in
LeveledCompactionStrategy$LeveledScanner.computeNext
Posted by "Jonathan Ellis (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/CASSANDRA-4587?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jonathan Ellis updated CASSANDRA-4587:
--------------------------------------
Reviewer: yukim
Priority: Minor (was: Major)
Fix Version/s: 1.1.5
Assignee: Jonathan Ellis
Labels: compaction (was: )
> StackOverflowError in LeveledCompactionStrategy$LeveledScanner.computeNext
> --------------------------------------------------------------------------
>
> Key: CASSANDRA-4587
> URL: https://issues.apache.org/jira/browse/CASSANDRA-4587
> Project: Cassandra
> Issue Type: Bug
> Affects Versions: 1.1.4
> Environment: debian
> OpenJDK 64-Bit Server VM/1.6.0_18
> Heap size: 8341422080/8342470656
> Reporter: Christian Schnidrig
> Assignee: Jonathan Ellis
> Priority: Minor
> Labels: compaction
> Fix For: 1.1.5
>
> Attachments: 4587.txt
>
>
> while running nodetool repair, the following was logged in system.log:
> ERROR [ValidationExecutor:2] 2012-08-30 10:58:19,490 AbstractCassandraDaemon.java (line 134) Exception in thread Thread[ValidationExecutor:2,1,main]
> java.lang.StackOverflowError
> at sun.nio.cs.UTF_8.updatePositions(UTF_8.java:76)
> at sun.nio.cs.UTF_8$Encoder.encodeArrayLoop(UTF_8.java:411)
> at sun.nio.cs.UTF_8$Encoder.encodeLoop(UTF_8.java:466)
> at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:561)
> at java.lang.StringCoding$StringEncoder.encode(StringCoding.java:258)
> at java.lang.StringCoding.encode(StringCoding.java:290)
> at java.lang.String.getBytes(String.java:954)
> at java.io.RandomAccessFile.open(Native Method)
> at java.io.RandomAccessFile.<init>(RandomAccessFile.java:233)
> at org.apache.cassandra.io.util.RandomAccessReader.<init>(RandomAccessReader.java:67)
> at org.apache.cassandra.io.compress.CompressedRandomAccessReader.<init>(CompressedRandomAccessReader.java:64)
> at org.apache.cassandra.io.compress.CompressedRandomAccessReader.open(CompressedRandomAccessReader.java:46)
> at org.apache.cassandra.io.sstable.SSTableReader.openDataReader(SSTableReader.java:1007)
> at org.apache.cassandra.io.sstable.SSTableScanner.<init>(SSTableScanner.java:56)
> at org.apache.cassandra.io.sstable.SSTableBoundedScanner.<init>(SSTableBoundedScanner.java:41)
> at org.apache.cassandra.io.sstable.SSTableReader.getDirectScanner(SSTableReader.java:869)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:247)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:240)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:248)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:240)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:248)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:240)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:248)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:240)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:248)
> .
> (about 900 lines deleted)
> .
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:240)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:248)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:202)
> at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:140)
> at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:135)
> at org.apache.cassandra.utils.MergeIterator$Candidate.advance(MergeIterator.java:147)
> at org.apache.cassandra.utils.MergeIterator$ManyToOne.<init>(MergeIterator.java:90)
> at org.apache.cassandra.utils.MergeIterator.get(MergeIterator.java:47)
> at org.apache.cassandra.db.compaction.CompactionIterable.iterator(CompactionIterable.java:60)
> at org.apache.cassandra.db.compaction.CompactionManager.doValidationCompaction(CompactionManager.java:703)
> at org.apache.cassandra.db.compaction.CompactionManager.access$600(CompactionManager.java:69)
> at org.apache.cassandra.db.compaction.CompactionManager$8.call(CompactionManager.java:442)
> at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
> at java.util.concurrent.FutureTask.run(FutureTask.java:166)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
> at java.lang.Thread.run(Thread.java:636)
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Updated] (CASSANDRA-4587) StackOverflowError in
LeveledCompactionStrategy$LeveledScanner.computeNext
Posted by "Jonathan Ellis (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/CASSANDRA-4587?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jonathan Ellis updated CASSANDRA-4587:
--------------------------------------
Attachment: 4587.txt
patch to simplify LeveledScanner.computeNext and avoid recursion
> StackOverflowError in LeveledCompactionStrategy$LeveledScanner.computeNext
> --------------------------------------------------------------------------
>
> Key: CASSANDRA-4587
> URL: https://issues.apache.org/jira/browse/CASSANDRA-4587
> Project: Cassandra
> Issue Type: Bug
> Affects Versions: 1.1.4
> Environment: debian
> OpenJDK 64-Bit Server VM/1.6.0_18
> Heap size: 8341422080/8342470656
> Reporter: Christian Schnidrig
> Assignee: Jonathan Ellis
> Priority: Minor
> Labels: compaction
> Fix For: 1.1.5
>
> Attachments: 4587.txt
>
>
> while running nodetool repair, the following was logged in system.log:
> ERROR [ValidationExecutor:2] 2012-08-30 10:58:19,490 AbstractCassandraDaemon.java (line 134) Exception in thread Thread[ValidationExecutor:2,1,main]
> java.lang.StackOverflowError
> at sun.nio.cs.UTF_8.updatePositions(UTF_8.java:76)
> at sun.nio.cs.UTF_8$Encoder.encodeArrayLoop(UTF_8.java:411)
> at sun.nio.cs.UTF_8$Encoder.encodeLoop(UTF_8.java:466)
> at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:561)
> at java.lang.StringCoding$StringEncoder.encode(StringCoding.java:258)
> at java.lang.StringCoding.encode(StringCoding.java:290)
> at java.lang.String.getBytes(String.java:954)
> at java.io.RandomAccessFile.open(Native Method)
> at java.io.RandomAccessFile.<init>(RandomAccessFile.java:233)
> at org.apache.cassandra.io.util.RandomAccessReader.<init>(RandomAccessReader.java:67)
> at org.apache.cassandra.io.compress.CompressedRandomAccessReader.<init>(CompressedRandomAccessReader.java:64)
> at org.apache.cassandra.io.compress.CompressedRandomAccessReader.open(CompressedRandomAccessReader.java:46)
> at org.apache.cassandra.io.sstable.SSTableReader.openDataReader(SSTableReader.java:1007)
> at org.apache.cassandra.io.sstable.SSTableScanner.<init>(SSTableScanner.java:56)
> at org.apache.cassandra.io.sstable.SSTableBoundedScanner.<init>(SSTableBoundedScanner.java:41)
> at org.apache.cassandra.io.sstable.SSTableReader.getDirectScanner(SSTableReader.java:869)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:247)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:240)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:248)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:240)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:248)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:240)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:248)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:240)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:248)
> .
> (about 900 lines deleted)
> .
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:240)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:248)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:202)
> at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:140)
> at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:135)
> at org.apache.cassandra.utils.MergeIterator$Candidate.advance(MergeIterator.java:147)
> at org.apache.cassandra.utils.MergeIterator$ManyToOne.<init>(MergeIterator.java:90)
> at org.apache.cassandra.utils.MergeIterator.get(MergeIterator.java:47)
> at org.apache.cassandra.db.compaction.CompactionIterable.iterator(CompactionIterable.java:60)
> at org.apache.cassandra.db.compaction.CompactionManager.doValidationCompaction(CompactionManager.java:703)
> at org.apache.cassandra.db.compaction.CompactionManager.access$600(CompactionManager.java:69)
> at org.apache.cassandra.db.compaction.CompactionManager$8.call(CompactionManager.java:442)
> at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
> at java.util.concurrent.FutureTask.run(FutureTask.java:166)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
> at java.lang.Thread.run(Thread.java:636)
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Commented] (CASSANDRA-4587) StackOverflowError in
LeveledCompactionStrategy$LeveledScanner.computeNext
Posted by "Yuki Morishita (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/CASSANDRA-4587?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13445173#comment-13445173 ]
Yuki Morishita commented on CASSANDRA-4587:
-------------------------------------------
+1
> StackOverflowError in LeveledCompactionStrategy$LeveledScanner.computeNext
> --------------------------------------------------------------------------
>
> Key: CASSANDRA-4587
> URL: https://issues.apache.org/jira/browse/CASSANDRA-4587
> Project: Cassandra
> Issue Type: Bug
> Affects Versions: 1.1.4
> Environment: debian
> OpenJDK 64-Bit Server VM/1.6.0_18
> Heap size: 8341422080/8342470656
> Reporter: Christian Schnidrig
> Assignee: Jonathan Ellis
> Priority: Minor
> Labels: compaction
> Fix For: 1.1.5
>
> Attachments: 4587.txt
>
>
> while running nodetool repair, the following was logged in system.log:
> ERROR [ValidationExecutor:2] 2012-08-30 10:58:19,490 AbstractCassandraDaemon.java (line 134) Exception in thread Thread[ValidationExecutor:2,1,main]
> java.lang.StackOverflowError
> at sun.nio.cs.UTF_8.updatePositions(UTF_8.java:76)
> at sun.nio.cs.UTF_8$Encoder.encodeArrayLoop(UTF_8.java:411)
> at sun.nio.cs.UTF_8$Encoder.encodeLoop(UTF_8.java:466)
> at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:561)
> at java.lang.StringCoding$StringEncoder.encode(StringCoding.java:258)
> at java.lang.StringCoding.encode(StringCoding.java:290)
> at java.lang.String.getBytes(String.java:954)
> at java.io.RandomAccessFile.open(Native Method)
> at java.io.RandomAccessFile.<init>(RandomAccessFile.java:233)
> at org.apache.cassandra.io.util.RandomAccessReader.<init>(RandomAccessReader.java:67)
> at org.apache.cassandra.io.compress.CompressedRandomAccessReader.<init>(CompressedRandomAccessReader.java:64)
> at org.apache.cassandra.io.compress.CompressedRandomAccessReader.open(CompressedRandomAccessReader.java:46)
> at org.apache.cassandra.io.sstable.SSTableReader.openDataReader(SSTableReader.java:1007)
> at org.apache.cassandra.io.sstable.SSTableScanner.<init>(SSTableScanner.java:56)
> at org.apache.cassandra.io.sstable.SSTableBoundedScanner.<init>(SSTableBoundedScanner.java:41)
> at org.apache.cassandra.io.sstable.SSTableReader.getDirectScanner(SSTableReader.java:869)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:247)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:240)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:248)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:240)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:248)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:240)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:248)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:240)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:248)
> .
> (about 900 lines deleted)
> .
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:240)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:248)
> at org.apache.cassandra.db.compaction.LeveledCompactionStrategy$LeveledScanner.computeNext(LeveledCompactionStrategy.java:202)
> at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:140)
> at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:135)
> at org.apache.cassandra.utils.MergeIterator$Candidate.advance(MergeIterator.java:147)
> at org.apache.cassandra.utils.MergeIterator$ManyToOne.<init>(MergeIterator.java:90)
> at org.apache.cassandra.utils.MergeIterator.get(MergeIterator.java:47)
> at org.apache.cassandra.db.compaction.CompactionIterable.iterator(CompactionIterable.java:60)
> at org.apache.cassandra.db.compaction.CompactionManager.doValidationCompaction(CompactionManager.java:703)
> at org.apache.cassandra.db.compaction.CompactionManager.access$600(CompactionManager.java:69)
> at org.apache.cassandra.db.compaction.CompactionManager$8.call(CompactionManager.java:442)
> at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
> at java.util.concurrent.FutureTask.run(FutureTask.java:166)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
> at java.lang.Thread.run(Thread.java:636)
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira