[
https://issues.apache.org/jira/browse/IGNITE-3542?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15905208#comment-15905208
]
Ivan Veselovsky edited comment on IGNITE-3542 at 3/13/17 1:56 PM:
------------------------------------------------------------------
[~vozerov] ,
1) The suggested fix does not prevent the {code}delete{code} to be invoked on
underlying Fs in case integrity check failed, we just do retry and go to next
loop in this case. This is exactly what is requested by this ticket.
2) The problem is that we base on natural assertion "file does not exist after
removal", and with current implementation of IgfsImpl#exists() we can fulfill
it only if the file is also deleted from the secondary file system upon
removal. The reason is that if a file does not exist on primary file system,
but exists on the secondary one, IgfsImpl#exists() returns *true*. Test
org.apache.ignite.internal.processors.igfs.IgfsDualAbstractSelfTest#testDeletePathMissingPartially
asserts this behavior directly.
It seems, throwing an exception in this case would violate the method contract,
since method org.apache.ignite.IgniteFileSystem#delete javadoc specifies
throwing IgniteException on error only.
So, I would suggest to stay with the behavior suggested in the patch -- it
seems logical and corresponds to the existing tests.
was (Author: iveselovskiy):
[~vozerov] ,
1) The suggested fix does not prevent the {code}delete{code} to be invoked on
underlying Fs in case integrity check failed, we just do retry and go to next
loop in this case. This is exactly what is requested by this ticket.
2) The problem is that we base on natural assertion "file does not exist after
removal", and with current implementation of IgfsImpl#exists() we can fulfill
it only if the file is also deleted from the secondary file system upon
removal. The reason is that if a file does not exist on primary file system,
but exists on the secondary one, IgfsImpl#exists() returns *true*. Test
org.apache.ignite.internal.processors.igfs.IgfsDualAbstractSelfTest#testDeletePathMissingPartially
checks this behavior.
It seems, throwing an exception in this case would violate the method contract,
since method org.apache.ignite.IgniteFileSystem#delete javadoc specifies
throwing IgniteException on error only.
So, I would suggest to stay with the behavior suggested in the patch -- it
seems logical and corresponds to the existing tests.
> IGFS: Ensure IgfsPathIds.verifyIntegrity() always lead to re-try.
> -----------------------------------------------------------------
>
> Key: IGNITE-3542
> URL: https://issues.apache.org/jira/browse/IGNITE-3542
> Project: Ignite
> Issue Type: Bug
> Components: IGFS
> Affects Versions: 1.6
> Reporter: Vladimir Ozerov
> Assignee: Ivan Veselovsky
> Priority: Minor
> Fix For: 2.0
>
>
> If integrity check failed, it means that some concurrent file system update
> occurred. We should always perform re-try in this case.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)