mirror of
https://github.com/postgres/postgres.git
synced 2025-07-03 00:02:01 -04:00
Compare commits
3 Commits
c6d0ef160e
...
445bd37b19
Author | SHA1 | Date | |
---|---|---|---|
|
445bd37b19 | ||
|
792238c8b4 | ||
|
0740034318 |
@ -235,7 +235,7 @@ static void find_next_unskippable_block(LVRelState *vacrel, bool *skipsallvis);
|
|||||||
static bool lazy_scan_new_or_empty(LVRelState *vacrel, Buffer buf,
|
static bool lazy_scan_new_or_empty(LVRelState *vacrel, Buffer buf,
|
||||||
BlockNumber blkno, Page page,
|
BlockNumber blkno, Page page,
|
||||||
bool sharelock, Buffer vmbuffer);
|
bool sharelock, Buffer vmbuffer);
|
||||||
static void lazy_scan_prune(LVRelState *vacrel, Buffer buf,
|
static int lazy_scan_prune(LVRelState *vacrel, Buffer buf,
|
||||||
BlockNumber blkno, Page page,
|
BlockNumber blkno, Page page,
|
||||||
Buffer vmbuffer, bool all_visible_according_to_vm,
|
Buffer vmbuffer, bool all_visible_according_to_vm,
|
||||||
bool *has_lpdead_items);
|
bool *has_lpdead_items);
|
||||||
@ -844,6 +844,7 @@ lazy_scan_heap(LVRelState *vacrel)
|
|||||||
{
|
{
|
||||||
Buffer buf;
|
Buffer buf;
|
||||||
Page page;
|
Page page;
|
||||||
|
int ndeleted = 0;
|
||||||
bool has_lpdead_items;
|
bool has_lpdead_items;
|
||||||
bool got_cleanup_lock = false;
|
bool got_cleanup_lock = false;
|
||||||
|
|
||||||
@ -973,7 +974,7 @@ lazy_scan_heap(LVRelState *vacrel)
|
|||||||
* line pointers previously marked LP_DEAD.
|
* line pointers previously marked LP_DEAD.
|
||||||
*/
|
*/
|
||||||
if (got_cleanup_lock)
|
if (got_cleanup_lock)
|
||||||
lazy_scan_prune(vacrel, buf, blkno, page,
|
ndeleted = lazy_scan_prune(vacrel, buf, blkno, page,
|
||||||
vmbuffer, all_visible_according_to_vm,
|
vmbuffer, all_visible_according_to_vm,
|
||||||
&has_lpdead_items);
|
&has_lpdead_items);
|
||||||
|
|
||||||
@ -1011,7 +1012,7 @@ lazy_scan_heap(LVRelState *vacrel)
|
|||||||
* table has indexes. There will only be newly-freed space if we
|
* table has indexes. There will only be newly-freed space if we
|
||||||
* held the cleanup lock and lazy_scan_prune() was called.
|
* held the cleanup lock and lazy_scan_prune() was called.
|
||||||
*/
|
*/
|
||||||
if (got_cleanup_lock && vacrel->nindexes == 0 && has_lpdead_items &&
|
if (got_cleanup_lock && vacrel->nindexes == 0 && ndeleted > 0 &&
|
||||||
blkno - next_fsm_block_to_vacuum >= VACUUM_FSM_EVERY_PAGES)
|
blkno - next_fsm_block_to_vacuum >= VACUUM_FSM_EVERY_PAGES)
|
||||||
{
|
{
|
||||||
FreeSpaceMapVacuumRange(vacrel->rel, next_fsm_block_to_vacuum,
|
FreeSpaceMapVacuumRange(vacrel->rel, next_fsm_block_to_vacuum,
|
||||||
@ -1402,8 +1403,10 @@ cmpOffsetNumbers(const void *a, const void *b)
|
|||||||
*
|
*
|
||||||
* *has_lpdead_items is set to true or false depending on whether, upon return
|
* *has_lpdead_items is set to true or false depending on whether, upon return
|
||||||
* from this function, any LP_DEAD items are still present on the page.
|
* from this function, any LP_DEAD items are still present on the page.
|
||||||
|
*
|
||||||
|
* Returns the number of tuples deleted from the page during HOT pruning.
|
||||||
*/
|
*/
|
||||||
static void
|
static int
|
||||||
lazy_scan_prune(LVRelState *vacrel,
|
lazy_scan_prune(LVRelState *vacrel,
|
||||||
Buffer buf,
|
Buffer buf,
|
||||||
BlockNumber blkno,
|
BlockNumber blkno,
|
||||||
@ -1623,6 +1626,8 @@ lazy_scan_prune(LVRelState *vacrel,
|
|||||||
VISIBILITYMAP_ALL_VISIBLE |
|
VISIBILITYMAP_ALL_VISIBLE |
|
||||||
VISIBILITYMAP_ALL_FROZEN);
|
VISIBILITYMAP_ALL_FROZEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return presult.ndeleted;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -320,9 +320,9 @@ bbstreamer_lz4_decompressor_content(bbstreamer *streamer,
|
|||||||
|
|
||||||
mystreamer = (bbstreamer_lz4_frame *) streamer;
|
mystreamer = (bbstreamer_lz4_frame *) streamer;
|
||||||
next_in = (uint8 *) data;
|
next_in = (uint8 *) data;
|
||||||
next_out = (uint8 *) mystreamer->base.bbs_buffer.data;
|
next_out = (uint8 *) mystreamer->base.bbs_buffer.data + mystreamer->bytes_written;
|
||||||
avail_in = len;
|
avail_in = len;
|
||||||
avail_out = mystreamer->base.bbs_buffer.maxlen;
|
avail_out = mystreamer->base.bbs_buffer.maxlen - mystreamer->bytes_written;
|
||||||
|
|
||||||
while (avail_in > 0)
|
while (avail_in > 0)
|
||||||
{
|
{
|
||||||
|
@ -16,6 +16,22 @@ my $primary = PostgreSQL::Test::Cluster->new('primary');
|
|||||||
$primary->init(allows_streaming => 1);
|
$primary->init(allows_streaming => 1);
|
||||||
$primary->start;
|
$primary->start;
|
||||||
|
|
||||||
|
# Create file with some random data and an arbitrary size, useful to check
|
||||||
|
# the solidity of the compression and decompression logic. The size of the
|
||||||
|
# file is chosen to be around 640kB. This has proven to be large enough to
|
||||||
|
# detect some issues related to LZ4, and low enough to not impact the runtime
|
||||||
|
# of the test significantly.
|
||||||
|
my $junk_data = $primary->safe_psql(
|
||||||
|
'postgres', qq(
|
||||||
|
SELECT string_agg(encode(sha256(i::text::bytea), 'hex'), '')
|
||||||
|
FROM generate_series(1, 10240) s(i);));
|
||||||
|
my $data_dir = $primary->data_dir;
|
||||||
|
my $junk_file = "$data_dir/junk";
|
||||||
|
open my $jf, '>', $junk_file
|
||||||
|
or die "Could not create junk file: $!";
|
||||||
|
print $jf $junk_data;
|
||||||
|
close $jf;
|
||||||
|
|
||||||
my $backup_path = $primary->backup_dir . '/server-backup';
|
my $backup_path = $primary->backup_dir . '/server-backup';
|
||||||
my $extract_path = $primary->backup_dir . '/extracted-backup';
|
my $extract_path = $primary->backup_dir . '/extracted-backup';
|
||||||
|
|
||||||
@ -42,6 +58,14 @@ my @test_configuration = (
|
|||||||
'decompress_flags' => [ '-d', '-m' ],
|
'decompress_flags' => [ '-d', '-m' ],
|
||||||
'enabled' => check_pg_config("#define USE_LZ4 1")
|
'enabled' => check_pg_config("#define USE_LZ4 1")
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
'compression_method' => 'lz4',
|
||||||
|
'backup_flags' => [ '--compress', 'server-lz4:5' ],
|
||||||
|
'backup_archive' => 'base.tar.lz4',
|
||||||
|
'decompress_program' => $ENV{'LZ4'},
|
||||||
|
'decompress_flags' => [ '-d', '-m' ],
|
||||||
|
'enabled' => check_pg_config("#define USE_LZ4 1")
|
||||||
|
},
|
||||||
{
|
{
|
||||||
'compression_method' => 'zstd',
|
'compression_method' => 'zstd',
|
||||||
'backup_flags' => [ '--compress', 'server-zstd' ],
|
'backup_flags' => [ '--compress', 'server-zstd' ],
|
||||||
|
@ -15,6 +15,22 @@ my $primary = PostgreSQL::Test::Cluster->new('primary');
|
|||||||
$primary->init(allows_streaming => 1);
|
$primary->init(allows_streaming => 1);
|
||||||
$primary->start;
|
$primary->start;
|
||||||
|
|
||||||
|
# Create file with some random data and an arbitrary size, useful to check
|
||||||
|
# the solidity of the compression and decompression logic. The size of the
|
||||||
|
# file is chosen to be around 640kB. This has proven to be large enough to
|
||||||
|
# detect some issues related to LZ4, and low enough to not impact the runtime
|
||||||
|
# of the test significantly.
|
||||||
|
my $junk_data = $primary->safe_psql(
|
||||||
|
'postgres', qq(
|
||||||
|
SELECT string_agg(encode(sha256(i::text::bytea), 'hex'), '')
|
||||||
|
FROM generate_series(1, 10240) s(i);));
|
||||||
|
my $data_dir = $primary->data_dir;
|
||||||
|
my $junk_file = "$data_dir/junk";
|
||||||
|
open my $jf, '>', $junk_file
|
||||||
|
or die "Could not create junk file: $!";
|
||||||
|
print $jf $junk_data;
|
||||||
|
close $jf;
|
||||||
|
|
||||||
my $backup_path = $primary->backup_dir . '/client-backup';
|
my $backup_path = $primary->backup_dir . '/client-backup';
|
||||||
my $extract_path = $primary->backup_dir . '/extracted-backup';
|
my $extract_path = $primary->backup_dir . '/extracted-backup';
|
||||||
|
|
||||||
@ -42,6 +58,15 @@ my @test_configuration = (
|
|||||||
'output_file' => 'base.tar',
|
'output_file' => 'base.tar',
|
||||||
'enabled' => check_pg_config("#define USE_LZ4 1")
|
'enabled' => check_pg_config("#define USE_LZ4 1")
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
'compression_method' => 'lz4',
|
||||||
|
'backup_flags' => [ '--compress', 'client-lz4:1' ],
|
||||||
|
'backup_archive' => 'base.tar.lz4',
|
||||||
|
'decompress_program' => $ENV{'LZ4'},
|
||||||
|
'decompress_flags' => ['-d'],
|
||||||
|
'output_file' => 'base.tar',
|
||||||
|
'enabled' => check_pg_config("#define USE_LZ4 1")
|
||||||
|
},
|
||||||
{
|
{
|
||||||
'compression_method' => 'zstd',
|
'compression_method' => 'zstd',
|
||||||
'backup_flags' => [ '--compress', 'client-zstd:5' ],
|
'backup_flags' => [ '--compress', 'client-zstd:5' ],
|
||||||
|
@ -119,6 +119,7 @@ PQcancelCreate(PGconn *conn)
|
|||||||
goto oom_error;
|
goto oom_error;
|
||||||
|
|
||||||
originalHost = conn->connhost[conn->whichhost];
|
originalHost = conn->connhost[conn->whichhost];
|
||||||
|
cancelConn->connhost[0].type = originalHost.type;
|
||||||
if (originalHost.host)
|
if (originalHost.host)
|
||||||
{
|
{
|
||||||
cancelConn->connhost[0].host = strdup(originalHost.host);
|
cancelConn->connhost[0].host = strdup(originalHost.host);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user