public RemoteEditLogManifest getEditLogManifest ( long firstTxId ) throws IOException { File currentDir = sd . getCurrentDir ( ) ; List < EditLogFile > allLogFiles = matchEditLogs ( FileUtil . listFiles ( currentDir ) ) ; if ( LOG . isDebugEnabled ( ) ) { LOG . debug ( allLogFiles ) ; } List < RemoteEditLog > ret = new ArrayList < RemoteEditLog > ( allLogFiles . size ( ) ) ; for ( EditLogFile elf : allLogFiles ) { if ( elf . isCorrupt ( ) ) continue ; if ( elf . getFirstTxId ( ) >= firstTxId ) { ret . add ( new RemoteEditLog ( elf . firstTxId , elf . lastTxId , elf . isInProgress ) ) ; } else if ( ( firstTxId > elf . getFirstTxId ( ) ) && ( firstTxId <= elf . getLastTxId ( ) ) ) { throw new IOException ( "Asked for firstTxId " + firstTxId + " which is in the middle of file " + elf . file ) ; } } Collections . sort ( ret ) ; return new RemoteEditLogManifest ( ret ) ; }
Find all editlog segments starting at or above the given txid . Include inprogress segments . Notice that the segments do not have to be contiguous . JournalSet handles the holes between segments .