[ 
https://issues.apache.org/jira/browse/OAK-9094?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mohit Kataria updated OAK-9094:
-------------------------------
    Description: 
It may happen that between retrieving files from remote and evaluating size of 
file, the remote file may get get removed leading to IO exception. Adding a 
check to handle this case.
{noformat}
IndexSanityChecker
    private boolean isThereASizeMismatch() throws IOException {
        for (String fileName : remote.listAll()){
            long localLength = DirectoryUtils.getFileLength(local, fileName);
            long remoteLength = remote.fileLength(fileName); // <== line 81

            //This is a weak check based on length.
            if (localLength > 0 && localLength != remoteLength){
                log.warn("[{}] Found local copy for {} in {} but size of local 
{} differs from remote {}. ",
                        indexPath, fileName, local, localLength, remoteLength);
                return true;
            }

            if (localLength > 0) {
                localDirSize += localLength;
                localFileCount++;
            }

            remoteDirSize += remoteLength;
            remoteFileCount++;
        }
        return false;
    }

OakDirectory:
   @Override
    public long fileLength(String name) throws IOException {
        NodeBuilder file = directoryBuilder.getChildNode(name);
        if (!file.exists()) {
            String msg = String.format("[%s] %s", indexName, name);
            throw new FileNotFoundException(msg);
        }
        OakIndexInput input = new OakIndexInput(name, file, indexName, 
blobFactory);
        try {
            return input.length();
        } finally {
            input.close();
        }
    }
{noformat}
 

> Error message "Could not access the Lucene index" / FileNotFoundException
> -------------------------------------------------------------------------
>
>                 Key: OAK-9094
>                 URL: https://issues.apache.org/jira/browse/OAK-9094
>             Project: Jackrabbit Oak
>          Issue Type: Improvement
>            Reporter: Mohit Kataria
>            Assignee: Mohit Kataria
>            Priority: Minor
>
> It may happen that between retrieving files from remote and evaluating size 
> of file, the remote file may get get removed leading to IO exception. Adding 
> a check to handle this case.
> {noformat}
> IndexSanityChecker
>     private boolean isThereASizeMismatch() throws IOException {
>         for (String fileName : remote.listAll()){
>             long localLength = DirectoryUtils.getFileLength(local, fileName);
>             long remoteLength = remote.fileLength(fileName); // <== line 81
>             //This is a weak check based on length.
>             if (localLength > 0 && localLength != remoteLength){
>                 log.warn("[{}] Found local copy for {} in {} but size of 
> local {} differs from remote {}. ",
>                         indexPath, fileName, local, localLength, 
> remoteLength);
>                 return true;
>             }
>             if (localLength > 0) {
>                 localDirSize += localLength;
>                 localFileCount++;
>             }
>             remoteDirSize += remoteLength;
>             remoteFileCount++;
>         }
>         return false;
>     }
> OakDirectory:
>    @Override
>     public long fileLength(String name) throws IOException {
>         NodeBuilder file = directoryBuilder.getChildNode(name);
>         if (!file.exists()) {
>             String msg = String.format("[%s] %s", indexName, name);
>             throw new FileNotFoundException(msg);
>         }
>         OakIndexInput input = new OakIndexInput(name, file, indexName, 
> blobFactory);
>         try {
>             return input.length();
>         } finally {
>             input.close();
>         }
>     }
> {noformat}
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to