[ 
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:
[email protected]


> 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)

Reply via email to