mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-10 15:02:56 +00:00
Fix decoding WAL segment header
This commit is contained in:
committed by
Stas Kelvich
parent
e7694a1d5a
commit
1c1812df05
@@ -8,6 +8,8 @@ use bytes::{Buf, BufMut, Bytes, BytesMut};
|
||||
|
||||
use std::cmp::min;
|
||||
|
||||
use log::*;
|
||||
|
||||
const XLOG_BLCKSZ: u32 = 8192;
|
||||
|
||||
// FIXME: this is configurable in PostgreSQL, 16 MB is the default
|
||||
@@ -17,6 +19,7 @@ const WAL_SEGMENT_SIZE: u64 = 16*1024*1024;
|
||||
// From PostgreSQL headers
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Debug)]
|
||||
struct XLogPageHeaderData
|
||||
{
|
||||
xlp_magic: u16, /* magic value for correctness checks */
|
||||
@@ -31,6 +34,7 @@ struct XLogPageHeaderData
|
||||
const SizeOfXLogShortPHD: usize = 2+2+4+8+4 + 4;
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Debug)]
|
||||
struct XLogLongPageHeaderData
|
||||
{
|
||||
std: XLogPageHeaderData, /* standard header fields */
|
||||
@@ -209,9 +213,9 @@ impl WalStreamDecoder {
|
||||
|
||||
let hdr : XLogLongPageHeaderData = XLogLongPageHeaderData {
|
||||
std: self.decode_XLogPageHeaderData(),
|
||||
xlp_sysid: self.recordbuf.get_u64_le(),
|
||||
xlp_seg_size: self.recordbuf.get_u32_le(),
|
||||
xlp_xlog_blcksz: self.recordbuf.get_u32_le(),
|
||||
xlp_sysid: self.inputbuf.get_u64_le(),
|
||||
xlp_seg_size: self.inputbuf.get_u32_le(),
|
||||
xlp_xlog_blcksz: self.inputbuf.get_u32_le(),
|
||||
};
|
||||
|
||||
return hdr;
|
||||
@@ -289,6 +293,8 @@ pub struct DecodedWALRecord {
|
||||
//
|
||||
pub fn decode_wal_record(lsn: u64, rec: Bytes) -> DecodedWALRecord {
|
||||
|
||||
trace!("decoding record at {:08X}/{:08X} ({} bytes)", lsn >> 32, lsn & 0xffff_ffff, rec.remaining());
|
||||
|
||||
let mut buf = rec.clone();
|
||||
|
||||
// FIXME: assume little-endian here
|
||||
|
||||
Reference in New Issue
Block a user