You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Michael McCandless (JIRA)" <ji...@apache.org> on 2011/04/29 14:29:03 UTC
[jira] [Created] (LUCENE-3052) PerFieldCodecWrapper.loadTermsIndex
concurrency problem
PerFieldCodecWrapper.loadTermsIndex concurrency problem
-------------------------------------------------------
Key: LUCENE-3052
URL: https://issues.apache.org/jira/browse/LUCENE-3052
Project: Lucene - Java
Issue Type: Bug
Reporter: Michael McCandless
Selckin's while(1) testing on RT branch hit another error:
{noformat}
[junit] Testsuite: org.apache.lucene.TestExternalCodecs
[junit] Testcase: testPerFieldCodec(org.apache.lucene.TestExternalCodecs): Caused an ERROR
[junit] (null)
[junit] java.lang.NullPointerException
[junit] at org.apache.lucene.index.PerFieldCodecWrapper$FieldsReader.loadTermsIndex(PerFieldCodecWrapper.java:202)
[junit] at org.apache.lucene.index.SegmentReader.loadTermsIndex(SegmentReader.java:1005)
[junit] at org.apache.lucene.index.IndexWriter$ReaderPool.get(IndexWriter.java:652)
[junit] at org.apache.lucene.index.IndexWriter$ReaderPool.get(IndexWriter.java:609)
[junit] at org.apache.lucene.index.BufferedDeletesStream.applyDeletes(BufferedDeletesStream.java:276)
[junit] at org.apache.lucene.index.IndexWriter.applyAllDeletes(IndexWriter.java:2660)
[junit] at org.apache.lucene.index.IndexWriter.maybeApplyDeletes(IndexWriter.java:2651)
[junit] at org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:381)
[junit] at org.apache.lucene.index.IndexReader.open(IndexReader.java:316)
[junit] at org.apache.lucene.TestExternalCodecs.testPerFieldCodec(TestExternalCodecs.java:541)
[junit] at org.apache.lucene.util.LuceneTestCase$LuceneTestCaseRunner.runChild(LuceneTestCase.java:1246)
[junit] at org.apache.lucene.util.LuceneTestCase$LuceneTestCaseRunner.runChild(LuceneTestCase.java:1175)
[junit]
[junit]
[junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0.909 sec
[junit]
[junit] ------------- Standard Error -----------------
[junit] NOTE: reproduce with: ant test -Dtestcase=TestExternalCodecs -Dtestmethod=testPerFieldCodec -Dtests.seed=-7296204858082494534:5010909751437000758
[junit] WARNING: test method: 'testPerFieldCodec' left thread running: merge thread: _i(4.0):Cv130 _m(4.0):Cv30 _n(4.0):cv10 into _o
[junit] RESOURCE LEAK: test method: 'testPerFieldCodec' left 1 thread(s) running
[junit] NOTE: test params are: codec=PreFlex, locale=zh_TW, timezone=America/Santo_Domingo
[junit] NOTE: all tests run in this JVM:
[junit] [TestDemo, TestExternalCodecs]
[junit] NOTE: Linux 2.6.37-gentoo amd64/Sun Microsystems Inc. 1.6.0_25 (64-bit)/cpus=8,threads=2,free=104153512,total=125632512
[junit] ------------- ---------------- ---------------
[junit] TEST org.apache.lucene.TestExternalCodecs FAILED
[junit] Exception in thread "Lucene Merge Thread #5" org.apache.lucene.util.ThreadInterruptedException: java.lang.InterruptedException: sleep interrupted
[junit] at org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:505)
[junit] at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:472)
[junit] Caused by: java.lang.InterruptedException: sleep interrupted
[junit] at java.lang.Thread.sleep(Native Method)
[junit] at org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:503)
[junit] ... 1 more
{noformat}
I suspect this is also a trunk issue, but I can't reproduce it yet.
I think this is happening because the codecs HashMap is changing (via another thread), while .loadTermsIndex is called.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org
[jira] [Commented] (LUCENE-3052)
PerFieldCodecWrapper.loadTermsIndex concurrency problem
Posted by "Michael McCandless (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/LUCENE-3052?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13026950#comment-13026950 ]
Michael McCandless commented on LUCENE-3052:
--------------------------------------------
This repro line seems to work:
{noformat}
ant test-core -Dtestcase=TestExternalCodecs -Dtests.seed=-7296204858082494534:5010909751437000758 -Dtests.iter=200 -Dtests.iter.min=1
{noformat}
> PerFieldCodecWrapper.loadTermsIndex concurrency problem
> -------------------------------------------------------
>
> Key: LUCENE-3052
> URL: https://issues.apache.org/jira/browse/LUCENE-3052
> Project: Lucene - Java
> Issue Type: Bug
> Affects Versions: 4.0
> Reporter: Michael McCandless
> Fix For: 4.0
>
>
> Selckin's while(1) testing on RT branch hit another error:
> {noformat}
> [junit] Testsuite: org.apache.lucene.TestExternalCodecs
> [junit] Testcase: testPerFieldCodec(org.apache.lucene.TestExternalCodecs): Caused an ERROR
> [junit] (null)
> [junit] java.lang.NullPointerException
> [junit] at org.apache.lucene.index.PerFieldCodecWrapper$FieldsReader.loadTermsIndex(PerFieldCodecWrapper.java:202)
> [junit] at org.apache.lucene.index.SegmentReader.loadTermsIndex(SegmentReader.java:1005)
> [junit] at org.apache.lucene.index.IndexWriter$ReaderPool.get(IndexWriter.java:652)
> [junit] at org.apache.lucene.index.IndexWriter$ReaderPool.get(IndexWriter.java:609)
> [junit] at org.apache.lucene.index.BufferedDeletesStream.applyDeletes(BufferedDeletesStream.java:276)
> [junit] at org.apache.lucene.index.IndexWriter.applyAllDeletes(IndexWriter.java:2660)
> [junit] at org.apache.lucene.index.IndexWriter.maybeApplyDeletes(IndexWriter.java:2651)
> [junit] at org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:381)
> [junit] at org.apache.lucene.index.IndexReader.open(IndexReader.java:316)
> [junit] at org.apache.lucene.TestExternalCodecs.testPerFieldCodec(TestExternalCodecs.java:541)
> [junit] at org.apache.lucene.util.LuceneTestCase$LuceneTestCaseRunner.runChild(LuceneTestCase.java:1246)
> [junit] at org.apache.lucene.util.LuceneTestCase$LuceneTestCaseRunner.runChild(LuceneTestCase.java:1175)
> [junit]
> [junit]
> [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0.909 sec
> [junit]
> [junit] ------------- Standard Error -----------------
> [junit] NOTE: reproduce with: ant test -Dtestcase=TestExternalCodecs -Dtestmethod=testPerFieldCodec -Dtests.seed=-7296204858082494534:5010909751437000758
> [junit] WARNING: test method: 'testPerFieldCodec' left thread running: merge thread: _i(4.0):Cv130 _m(4.0):Cv30 _n(4.0):cv10 into _o
> [junit] RESOURCE LEAK: test method: 'testPerFieldCodec' left 1 thread(s) running
> [junit] NOTE: test params are: codec=PreFlex, locale=zh_TW, timezone=America/Santo_Domingo
> [junit] NOTE: all tests run in this JVM:
> [junit] [TestDemo, TestExternalCodecs]
> [junit] NOTE: Linux 2.6.37-gentoo amd64/Sun Microsystems Inc. 1.6.0_25 (64-bit)/cpus=8,threads=2,free=104153512,total=125632512
> [junit] ------------- ---------------- ---------------
> [junit] TEST org.apache.lucene.TestExternalCodecs FAILED
> [junit] Exception in thread "Lucene Merge Thread #5" org.apache.lucene.util.ThreadInterruptedException: java.lang.InterruptedException: sleep interrupted
> [junit] at org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:505)
> [junit] at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:472)
> [junit] Caused by: java.lang.InterruptedException: sleep interrupted
> [junit] at java.lang.Thread.sleep(Native Method)
> [junit] at org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:503)
> [junit] ... 1 more
> {noformat}
> I suspect this is also a trunk issue, but I can't reproduce it yet.
> I think this is happening because the codecs HashMap is changing (via another thread), while .loadTermsIndex is called.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org
[jira] [Assigned] (LUCENE-3052) PerFieldCodecWrapper.loadTermsIndex
concurrency problem
Posted by "Michael McCandless (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/LUCENE-3052?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Michael McCandless reassigned LUCENE-3052:
------------------------------------------
Assignee: Michael McCandless
> PerFieldCodecWrapper.loadTermsIndex concurrency problem
> -------------------------------------------------------
>
> Key: LUCENE-3052
> URL: https://issues.apache.org/jira/browse/LUCENE-3052
> Project: Lucene - Java
> Issue Type: Bug
> Affects Versions: 4.0
> Reporter: Michael McCandless
> Assignee: Michael McCandless
> Fix For: 4.0
>
>
> Selckin's while(1) testing on RT branch hit another error:
> {noformat}
> [junit] Testsuite: org.apache.lucene.TestExternalCodecs
> [junit] Testcase: testPerFieldCodec(org.apache.lucene.TestExternalCodecs): Caused an ERROR
> [junit] (null)
> [junit] java.lang.NullPointerException
> [junit] at org.apache.lucene.index.PerFieldCodecWrapper$FieldsReader.loadTermsIndex(PerFieldCodecWrapper.java:202)
> [junit] at org.apache.lucene.index.SegmentReader.loadTermsIndex(SegmentReader.java:1005)
> [junit] at org.apache.lucene.index.IndexWriter$ReaderPool.get(IndexWriter.java:652)
> [junit] at org.apache.lucene.index.IndexWriter$ReaderPool.get(IndexWriter.java:609)
> [junit] at org.apache.lucene.index.BufferedDeletesStream.applyDeletes(BufferedDeletesStream.java:276)
> [junit] at org.apache.lucene.index.IndexWriter.applyAllDeletes(IndexWriter.java:2660)
> [junit] at org.apache.lucene.index.IndexWriter.maybeApplyDeletes(IndexWriter.java:2651)
> [junit] at org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:381)
> [junit] at org.apache.lucene.index.IndexReader.open(IndexReader.java:316)
> [junit] at org.apache.lucene.TestExternalCodecs.testPerFieldCodec(TestExternalCodecs.java:541)
> [junit] at org.apache.lucene.util.LuceneTestCase$LuceneTestCaseRunner.runChild(LuceneTestCase.java:1246)
> [junit] at org.apache.lucene.util.LuceneTestCase$LuceneTestCaseRunner.runChild(LuceneTestCase.java:1175)
> [junit]
> [junit]
> [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0.909 sec
> [junit]
> [junit] ------------- Standard Error -----------------
> [junit] NOTE: reproduce with: ant test -Dtestcase=TestExternalCodecs -Dtestmethod=testPerFieldCodec -Dtests.seed=-7296204858082494534:5010909751437000758
> [junit] WARNING: test method: 'testPerFieldCodec' left thread running: merge thread: _i(4.0):Cv130 _m(4.0):Cv30 _n(4.0):cv10 into _o
> [junit] RESOURCE LEAK: test method: 'testPerFieldCodec' left 1 thread(s) running
> [junit] NOTE: test params are: codec=PreFlex, locale=zh_TW, timezone=America/Santo_Domingo
> [junit] NOTE: all tests run in this JVM:
> [junit] [TestDemo, TestExternalCodecs]
> [junit] NOTE: Linux 2.6.37-gentoo amd64/Sun Microsystems Inc. 1.6.0_25 (64-bit)/cpus=8,threads=2,free=104153512,total=125632512
> [junit] ------------- ---------------- ---------------
> [junit] TEST org.apache.lucene.TestExternalCodecs FAILED
> [junit] Exception in thread "Lucene Merge Thread #5" org.apache.lucene.util.ThreadInterruptedException: java.lang.InterruptedException: sleep interrupted
> [junit] at org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:505)
> [junit] at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:472)
> [junit] Caused by: java.lang.InterruptedException: sleep interrupted
> [junit] at java.lang.Thread.sleep(Native Method)
> [junit] at org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:503)
> [junit] ... 1 more
> {noformat}
> I suspect this is also a trunk issue, but I can't reproduce it yet.
> I think this is happening because the codecs HashMap is changing (via another thread), while .loadTermsIndex is called.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org
[jira] [Resolved] (LUCENE-3052) PerFieldCodecWrapper.loadTermsIndex
concurrency problem
Posted by "Michael McCandless (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/LUCENE-3052?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Michael McCandless resolved LUCENE-3052.
----------------------------------------
Resolution: Fixed
Committed a missing sync'd in the test's codec.
> PerFieldCodecWrapper.loadTermsIndex concurrency problem
> -------------------------------------------------------
>
> Key: LUCENE-3052
> URL: https://issues.apache.org/jira/browse/LUCENE-3052
> Project: Lucene - Java
> Issue Type: Bug
> Affects Versions: 4.0
> Reporter: Michael McCandless
> Assignee: Michael McCandless
> Fix For: 4.0
>
>
> Selckin's while(1) testing on RT branch hit another error:
> {noformat}
> [junit] Testsuite: org.apache.lucene.TestExternalCodecs
> [junit] Testcase: testPerFieldCodec(org.apache.lucene.TestExternalCodecs): Caused an ERROR
> [junit] (null)
> [junit] java.lang.NullPointerException
> [junit] at org.apache.lucene.index.PerFieldCodecWrapper$FieldsReader.loadTermsIndex(PerFieldCodecWrapper.java:202)
> [junit] at org.apache.lucene.index.SegmentReader.loadTermsIndex(SegmentReader.java:1005)
> [junit] at org.apache.lucene.index.IndexWriter$ReaderPool.get(IndexWriter.java:652)
> [junit] at org.apache.lucene.index.IndexWriter$ReaderPool.get(IndexWriter.java:609)
> [junit] at org.apache.lucene.index.BufferedDeletesStream.applyDeletes(BufferedDeletesStream.java:276)
> [junit] at org.apache.lucene.index.IndexWriter.applyAllDeletes(IndexWriter.java:2660)
> [junit] at org.apache.lucene.index.IndexWriter.maybeApplyDeletes(IndexWriter.java:2651)
> [junit] at org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:381)
> [junit] at org.apache.lucene.index.IndexReader.open(IndexReader.java:316)
> [junit] at org.apache.lucene.TestExternalCodecs.testPerFieldCodec(TestExternalCodecs.java:541)
> [junit] at org.apache.lucene.util.LuceneTestCase$LuceneTestCaseRunner.runChild(LuceneTestCase.java:1246)
> [junit] at org.apache.lucene.util.LuceneTestCase$LuceneTestCaseRunner.runChild(LuceneTestCase.java:1175)
> [junit]
> [junit]
> [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0.909 sec
> [junit]
> [junit] ------------- Standard Error -----------------
> [junit] NOTE: reproduce with: ant test -Dtestcase=TestExternalCodecs -Dtestmethod=testPerFieldCodec -Dtests.seed=-7296204858082494534:5010909751437000758
> [junit] WARNING: test method: 'testPerFieldCodec' left thread running: merge thread: _i(4.0):Cv130 _m(4.0):Cv30 _n(4.0):cv10 into _o
> [junit] RESOURCE LEAK: test method: 'testPerFieldCodec' left 1 thread(s) running
> [junit] NOTE: test params are: codec=PreFlex, locale=zh_TW, timezone=America/Santo_Domingo
> [junit] NOTE: all tests run in this JVM:
> [junit] [TestDemo, TestExternalCodecs]
> [junit] NOTE: Linux 2.6.37-gentoo amd64/Sun Microsystems Inc. 1.6.0_25 (64-bit)/cpus=8,threads=2,free=104153512,total=125632512
> [junit] ------------- ---------------- ---------------
> [junit] TEST org.apache.lucene.TestExternalCodecs FAILED
> [junit] Exception in thread "Lucene Merge Thread #5" org.apache.lucene.util.ThreadInterruptedException: java.lang.InterruptedException: sleep interrupted
> [junit] at org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:505)
> [junit] at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:472)
> [junit] Caused by: java.lang.InterruptedException: sleep interrupted
> [junit] at java.lang.Thread.sleep(Native Method)
> [junit] at org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:503)
> [junit] ... 1 more
> {noformat}
> I suspect this is also a trunk issue, but I can't reproduce it yet.
> I think this is happening because the codecs HashMap is changing (via another thread), while .loadTermsIndex is called.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org
[jira] [Updated] (LUCENE-3052) PerFieldCodecWrapper.loadTermsIndex
concurrency problem
Posted by "Michael McCandless (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/LUCENE-3052?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Michael McCandless updated LUCENE-3052:
---------------------------------------
Affects Version/s: 4.0
Fix Version/s: 4.0
> PerFieldCodecWrapper.loadTermsIndex concurrency problem
> -------------------------------------------------------
>
> Key: LUCENE-3052
> URL: https://issues.apache.org/jira/browse/LUCENE-3052
> Project: Lucene - Java
> Issue Type: Bug
> Affects Versions: 4.0
> Reporter: Michael McCandless
> Fix For: 4.0
>
>
> Selckin's while(1) testing on RT branch hit another error:
> {noformat}
> [junit] Testsuite: org.apache.lucene.TestExternalCodecs
> [junit] Testcase: testPerFieldCodec(org.apache.lucene.TestExternalCodecs): Caused an ERROR
> [junit] (null)
> [junit] java.lang.NullPointerException
> [junit] at org.apache.lucene.index.PerFieldCodecWrapper$FieldsReader.loadTermsIndex(PerFieldCodecWrapper.java:202)
> [junit] at org.apache.lucene.index.SegmentReader.loadTermsIndex(SegmentReader.java:1005)
> [junit] at org.apache.lucene.index.IndexWriter$ReaderPool.get(IndexWriter.java:652)
> [junit] at org.apache.lucene.index.IndexWriter$ReaderPool.get(IndexWriter.java:609)
> [junit] at org.apache.lucene.index.BufferedDeletesStream.applyDeletes(BufferedDeletesStream.java:276)
> [junit] at org.apache.lucene.index.IndexWriter.applyAllDeletes(IndexWriter.java:2660)
> [junit] at org.apache.lucene.index.IndexWriter.maybeApplyDeletes(IndexWriter.java:2651)
> [junit] at org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:381)
> [junit] at org.apache.lucene.index.IndexReader.open(IndexReader.java:316)
> [junit] at org.apache.lucene.TestExternalCodecs.testPerFieldCodec(TestExternalCodecs.java:541)
> [junit] at org.apache.lucene.util.LuceneTestCase$LuceneTestCaseRunner.runChild(LuceneTestCase.java:1246)
> [junit] at org.apache.lucene.util.LuceneTestCase$LuceneTestCaseRunner.runChild(LuceneTestCase.java:1175)
> [junit]
> [junit]
> [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0.909 sec
> [junit]
> [junit] ------------- Standard Error -----------------
> [junit] NOTE: reproduce with: ant test -Dtestcase=TestExternalCodecs -Dtestmethod=testPerFieldCodec -Dtests.seed=-7296204858082494534:5010909751437000758
> [junit] WARNING: test method: 'testPerFieldCodec' left thread running: merge thread: _i(4.0):Cv130 _m(4.0):Cv30 _n(4.0):cv10 into _o
> [junit] RESOURCE LEAK: test method: 'testPerFieldCodec' left 1 thread(s) running
> [junit] NOTE: test params are: codec=PreFlex, locale=zh_TW, timezone=America/Santo_Domingo
> [junit] NOTE: all tests run in this JVM:
> [junit] [TestDemo, TestExternalCodecs]
> [junit] NOTE: Linux 2.6.37-gentoo amd64/Sun Microsystems Inc. 1.6.0_25 (64-bit)/cpus=8,threads=2,free=104153512,total=125632512
> [junit] ------------- ---------------- ---------------
> [junit] TEST org.apache.lucene.TestExternalCodecs FAILED
> [junit] Exception in thread "Lucene Merge Thread #5" org.apache.lucene.util.ThreadInterruptedException: java.lang.InterruptedException: sleep interrupted
> [junit] at org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:505)
> [junit] at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:472)
> [junit] Caused by: java.lang.InterruptedException: sleep interrupted
> [junit] at java.lang.Thread.sleep(Native Method)
> [junit] at org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:503)
> [junit] ... 1 more
> {noformat}
> I suspect this is also a trunk issue, but I can't reproduce it yet.
> I think this is happening because the codecs HashMap is changing (via another thread), while .loadTermsIndex is called.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org