@@ -108,7 +108,7 @@ typedef struct XLogReaderData
108108
109109bool need_switch ;
110110
111- int xlogfile ;
111+ FILE * xlogfile ;
112112char xlogpath [MAXPGPATH ];
113113
114114#ifdef HAVE_LIBZ
@@ -720,20 +720,23 @@ SimpleXLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr,
720720
721721if (fileExists (reader_data -> xlogpath ,FIO_BACKUP_HOST ))
722722{
723+ int fd ;
723724elog (LOG ,"Thread [%d]: Opening WAL segment \"%s\"" ,
724725reader_data -> thread_num ,reader_data -> xlogpath );
725726
726727reader_data -> xlogexists = true;
727- reader_data -> xlogfile = fio_open (reader_data -> xlogpath ,
728+ fd = fio_open (reader_data -> xlogpath ,
728729O_RDONLY |PG_BINARY ,FIO_BACKUP_HOST );
729730
730- if (reader_data -> xlogfile < 0 )
731+ if (fd < 0 )
731732{
732733elog (WARNING ,"Thread [%d]: Could not open WAL segment \"%s\": %s" ,
733734reader_data -> thread_num ,reader_data -> xlogpath ,
734735strerror (errno ));
735736return -1 ;
736737}
738+ reader_data -> xlogfile = fio_fdopen (reader_data -> xlogpath ,fd ,"rb" ,
739+ instance_config .encryption );
737740}
738741#ifdef HAVE_LIBZ
739742/* Try to open compressed WAL segment */
@@ -748,7 +751,8 @@ SimpleXLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr,
748751
749752reader_data -> xlogexists = true;
750753reader_data -> gz_xlogfile = fio_gzopen (reader_data -> gz_xlogpath ,
751- "rb" ,-1 ,FIO_BACKUP_HOST );
754+ "rb" ,-1 ,FIO_BACKUP_HOST ,
755+ instance_config .encryption );
752756if (reader_data -> gz_xlogfile == NULL )
753757{
754758elog (WARNING ,"Thread [%d]: Could not open compressed WAL segment \"%s\": %s" ,
@@ -782,16 +786,16 @@ SimpleXLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr,
782786}
783787
784788/* Read the requested page */
785- if (reader_data -> xlogfile != -1 )
789+ if (reader_data -> xlogfile != NULL )
786790{
787- if (fio_seek (reader_data -> xlogfile , (off_t )targetPageOff )< 0 )
791+ if (fio_fseek (reader_data -> xlogfile , (off_t )targetPageOff )< 0 )
788792{
789793elog (WARNING ,"Thread [%d]: Could not seek in WAL segment \"%s\": %s" ,
790794reader_data -> thread_num ,reader_data -> xlogpath ,strerror (errno ));
791795return -1 ;
792796}
793797
794- if (fio_read (reader_data -> xlogfile ,readBuf ,XLOG_BLCKSZ )!= XLOG_BLCKSZ )
798+ if (fio_fread (reader_data -> xlogfile ,readBuf ,XLOG_BLCKSZ )!= XLOG_BLCKSZ )
795799{
796800elog (WARNING ,"Thread [%d]: Could not read from WAL segment \"%s\": %s" ,
797801reader_data -> thread_num ,reader_data -> xlogpath ,strerror (errno ));
@@ -842,7 +846,7 @@ InitXLogPageRead(XLogReaderData *reader_data, const char *archivedir,
842846
843847MemSet (reader_data ,0 ,sizeof (XLogReaderData ));
844848reader_data -> tli = tli ;
845- reader_data -> xlogfile = -1 ;
849+ reader_data -> xlogfile = NULL ;
846850
847851if (allocate_reader )
848852{
@@ -1365,10 +1369,10 @@ CleanupXLogPageRead(XLogReaderState *xlogreader)
13651369XLogReaderData * reader_data ;
13661370
13671371reader_data = (XLogReaderData * )xlogreader -> private_data ;
1368- if (reader_data -> xlogfile >= 0 )
1372+ if (reader_data -> xlogfile != NULL )
13691373{
1370- fio_close (reader_data -> xlogfile );
1371- reader_data -> xlogfile = -1 ;
1374+ fio_fclose (reader_data -> xlogfile );
1375+ reader_data -> xlogfile = NULL ;
13721376}
13731377#ifdef HAVE_LIBZ
13741378else if (reader_data -> gz_xlogfile != NULL)
@@ -1393,7 +1397,7 @@ PrintXLogCorruptionMsg(XLogReaderData *reader_data, int elevel)
13931397if (!reader_data -> xlogexists )
13941398elog (elevel ,"Thread [%d]: WAL segment \"%s\" is absent" ,
13951399reader_data -> thread_num ,reader_data -> xlogpath );
1396- else if (reader_data -> xlogfile != -1 )
1400+ else if (reader_data -> xlogfile != NULL )
13971401elog (elevel ,"Thread [%d]: Possible WAL corruption. "
13981402"Error has occured during reading WAL segment \"%s\"" ,
13991403reader_data -> thread_num ,reader_data -> xlogpath );