You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2018/01/17 09:27:01 UTC

[jira] [Commented] (KAFKA-2170) 10 LogTest cases failed for file.renameTo failed under windows

    [ https://issues.apache.org/jira/browse/KAFKA-2170?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16328534#comment-16328534 ] 

ASF GitHub Bot commented on KAFKA-2170:
---------------------------------------

GeorgeCGV opened a new pull request #4431: KAFKA-2170: Updated Fixes For Windows Platform
URL: https://github.com/apache/kafka/pull/4431
 
 
   **This is continuous development of [original pull request](https://github.com/apache/kafka/pull/3283) made by [nxmbriggs404](https://github.com/nxmbriggs404).**
   
   I am using Kafka primary on Windows platform; but [KAFKA-1194](https://issues.apache.org/jira/browse/KAFKA-1194) affects all Kafka versions on Windows and makes it unusable without restarts. There are several pull requests available to fix this problem but most of them are outdated. [Nxmbriggs404 pull request](https://github.com/apache/kafka/pull/3283) is the most recent of them. Unfortunately, there is no further discussion and progress on forementioned pull request, so I created a new one.
   
   Pull request contains the most recent merge of **apache/kafka** **trunk** branch into [original pull request](https://github.com/apache/kafka/pull/3283) made by [nxmbriggs404](https://github.com/nxmbriggs404) with all related tests and code part adaptations.
   
   The only major change is in the `LogManager.scala` file within `asyncDelete`. I had to change operations order for `removedLog` from
   
   1. Rename directory (atomic move) 
   2. Make checkpoint log for offsets and recovery
   3. Mark for deletion
   
   to
   
   1. Make checkpoint log for offsets and recovery
   2. Close `FileChannel` this avoids `AccessDeniedException` on Windows
   3. Rename directory (atomic move)
   4. Mark for deletion
   New order will allow `LogManagerTest.testFileReferencesAfterAsyncDelete` to succeed on Windows.
   
   Currently I am running long live test with all of the changes mentioned above. It seems to function as expected: log retention works.
   
   I think most Windows users would really like to see the old [KAFKA-1194](https://issues.apache.org/jira/browse/KAFKA-1194) issue being closed. 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


> 10 LogTest cases failed for  file.renameTo failed under windows
> ---------------------------------------------------------------
>
>                 Key: KAFKA-2170
>                 URL: https://issues.apache.org/jira/browse/KAFKA-2170
>             Project: Kafka
>          Issue Type: Bug
>          Components: log
>    Affects Versions: 0.10.1.0
>         Environment: Windows
>            Reporter: Honghai Chen
>            Assignee: Jay Kreps
>            Priority: Major
>
> get latest code from trunk, then run test 
> gradlew  -i core:test --tests kafka.log.LogTest
> Got 10 cases failed for same reason:
> kafka.common.KafkaStorageException: Failed to change the log file suffix from  to .deleted for log segment 0
> 	at kafka.log.LogSegment.changeFileSuffixes(LogSegment.scala:259)
> 	at kafka.log.Log.kafka$log$Log$$asyncDeleteSegment(Log.scala:756)
> 	at kafka.log.Log.kafka$log$Log$$deleteSegment(Log.scala:747)
> 	at kafka.log.Log$$anonfun$deleteOldSegments$1.apply(Log.scala:514)
> 	at kafka.log.Log$$anonfun$deleteOldSegments$1.apply(Log.scala:514)
> 	at scala.collection.immutable.List.foreach(List.scala:318)
> 	at kafka.log.Log.deleteOldSegments(Log.scala:514)
> 	at kafka.log.LogTest.testAsyncDelete(LogTest.scala:633)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:601)
> 	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
> 	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
> 	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
> 	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
> 	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
> 	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
> 	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
> 	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:44)
> 	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
> 	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
> 	at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
> 	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
> 	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
> 	at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
> 	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:86)
> 	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:49)
> 	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:69)
> 	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:48)
> 	at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:601)
> 	at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
> 	at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
> 	at org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
> 	at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
> 	at $Proxy2.processTestClass(Unknown Source)
> 	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:105)
> 	at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:601)
> 	at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
> 	at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
> 	at org.gradle.messaging.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:355)
> 	at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)
> 	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:722)
>  
>  
> testCompactedTopicConstraints
> java.io.IOException: The requested operation cannot be performed on a file with a user-mapped section open
> 	at java.io.RandomAccessFile.setLength(Native Method)
> 	at kafka.log.OffsetIndex$$anonfun$resize$1.apply(OffsetIndex.scala:285)
> 	at kafka.log.OffsetIndex$$anonfun$resize$1.apply(OffsetIndex.scala:276)
> 	at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:298)
> 	at kafka.log.OffsetIndex.resize(OffsetIndex.scala:276)
> 	at kafka.log.OffsetIndex$$anonfun$trimToValidSize$1.apply$mcV$sp(OffsetIndex.scala:265)
> 	at kafka.log.OffsetIndex$$anonfun$trimToValidSize$1.apply(OffsetIndex.scala:265)
> 	at kafka.log.OffsetIndex$$anonfun$trimToValidSize$1.apply(OffsetIndex.scala:265)
> 	at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:298)
> 	at kafka.log.OffsetIndex.trimToValidSize(OffsetIndex.scala:264)
> 	at kafka.log.LogSegment.recover(LogSegment.scala:198)
> 	at kafka.log.Log.recoverLog(Log.scala:238)
> 	at kafka.log.Log.loadSegments(Log.scala:210)
> 	at kafka.log.Log.<init>(Log.scala:83)
> 	at kafka.log.LogTest.testCompactedTopicConstraints(LogTest.scala:370)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:601)
> 	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
> 	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
> 	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
> 	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
> 	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
> 	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
> 	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
> 	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:44)
> 	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
> 	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
> 	at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
> 	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
> 	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
> 	at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
> 	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:86)
> 	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:49)
> 	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:69)
> 	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:48)
> 	at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:601)
> 	at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
> 	at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
> 	at org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
> 	at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
> 	at $Proxy2.processTestClass(Unknown Source)
> 	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:105)
> 	at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:601)
> 	at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
> 	at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
> 	at org.gradle.messaging.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:355)
> 	at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)
> 	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:722)
> LogTest. testAsyncDelete 
> LogTest. testCompactedTopicConstraints 
> LogTest. testCorruptLog 
> LogTest. testIndexRebuild 
> LogTest. testIndexResizingAtTruncation 
> LogTest. testLogRecoversToCorrectOffset 
> LogTest. testOpenDeletesObsoleteFiles 
> LogTest. testReopenThenTruncate 
> LogTest. testThatGarbageCollectingSegmentsDoesntChangeOffset 
> LogTest. testTruncateTo 
> Do we need call log.close and then call rename, and then reopen it?



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)