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

Dmitriy Govorukhin updated IGNITE-8661:
---------------------------------------
    Description: 

RecordV1Serializer.readWithCrc
{code:java}
static WALRecord readWithCrc(.....) throws EOFException, IgniteCheckedException 
{
  
    try (FileInput.Crc32CheckingFileInput in = in0.startRead(skipCrc)) {
      ..... 
    }
    catch (EOFException | SegmentEofException | WalSegmentTailReachedException 
e) {
        throw e;
    }
    catch (Exception e) {
        throw new IgniteCheckedException("Failed to read WAL record at 
position: " + startPos, e);
    }
}
{code}

Any runtime error will be remapped to IgniteCheckedException 

AbstractWalRecordsIterator.advanceRecord

{code}
   try {
         ......
        }
        catch (IOException | IgniteCheckedException e) {
            if (e instanceof WalSegmentTailReachedException)
                throw (WalSegmentTailReachedException)e;

            if (!(e instanceof SegmentEofException))
                handleRecordException(e, actualFilePtr);

            return null;
        }
{code}

Any IgniteCheckedException will be ignored and iterator goes ahead to the next 
segment. 
1) It is unexpected behavior, need to fix it.
2) Also, need to provide ability skip records by type or some pointer for the 
StandaloneWalRecordsIterator
Create new factory method which will accept filter predicate as parameter for 
creation skipped iterator.

  was:
RecordV1Serializer.readWithCrc
{code:java}
static WALRecord readWithCrc(.....) throws EOFException, IgniteCheckedException 
{
  
    try (FileInput.Crc32CheckingFileInput in = in0.startRead(skipCrc)) {
      ..... 
    }
    catch (EOFException | SegmentEofException | WalSegmentTailReachedException 
e) {
        throw e;
    }
    catch (Exception e) {
        throw new IgniteCheckedException("Failed to read WAL record at 
position: " + startPos, e);
    }
}
{code}

Any runtime error will be remapped to IgniteCheckedException 

AbstractWalRecordsIterator.advanceRecord

{code}
   try {
         ......
        }
        catch (IOException | IgniteCheckedException e) {
            if (e instanceof WalSegmentTailReachedException)
                throw (WalSegmentTailReachedException)e;

            if (!(e instanceof SegmentEofException))
                handleRecordException(e, actualFilePtr);

            return null;
        }
{code}

Any IgniteCheckedException will be ignored and iterator goes ahead to the next 
segment. 
1) It is unexpected behavior, need to fix it.
2) Also, need to provide ability skip records by type or some pointer for the 
StandaloneWalRecordsIterator
Create new factory method which will accept filter predicate as parameter for 
creation skipped iterator.


> WALItreater is not stopped if can not deserialize record 
> ---------------------------------------------------------
>
>                 Key: IGNITE-8661
>                 URL: https://issues.apache.org/jira/browse/IGNITE-8661
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Dmitriy Govorukhin
>            Priority: Major
>             Fix For: 2.6
>
>
> RecordV1Serializer.readWithCrc
> {code:java}
> static WALRecord readWithCrc(.....) throws EOFException, 
> IgniteCheckedException {
>   
>     try (FileInput.Crc32CheckingFileInput in = in0.startRead(skipCrc)) {
>       ..... 
>     }
>     catch (EOFException | SegmentEofException | 
> WalSegmentTailReachedException e) {
>         throw e;
>     }
>     catch (Exception e) {
>         throw new IgniteCheckedException("Failed to read WAL record at 
> position: " + startPos, e);
>     }
> }
> {code}
> Any runtime error will be remapped to IgniteCheckedException 
> AbstractWalRecordsIterator.advanceRecord
> {code}
>    try {
>          ......
>         }
>         catch (IOException | IgniteCheckedException e) {
>             if (e instanceof WalSegmentTailReachedException)
>                 throw (WalSegmentTailReachedException)e;
>             if (!(e instanceof SegmentEofException))
>                 handleRecordException(e, actualFilePtr);
>             return null;
>         }
> {code}
> Any IgniteCheckedException will be ignored and iterator goes ahead to the 
> next segment. 
> 1) It is unexpected behavior, need to fix it.
> 2) Also, need to provide ability skip records by type or some pointer for the 
> StandaloneWalRecordsIterator
> Create new factory method which will accept filter predicate as parameter for 
> creation skipped iterator.



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

Reply via email to