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,
|
||||
BlockNumber blkno, Page page,
|
||||
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,
|
||||
Buffer vmbuffer, bool all_visible_according_to_vm,
|
||||
bool *has_lpdead_items);
|
||||
@ -844,6 +844,7 @@ lazy_scan_heap(LVRelState *vacrel)
|
||||
{
|
||||
Buffer buf;
|
||||
Page page;
|
||||
int ndeleted = 0;
|
||||
bool has_lpdead_items;
|
||||
bool got_cleanup_lock = false;
|
||||
|
||||
@ -973,7 +974,7 @@ lazy_scan_heap(LVRelState *vacrel)
|
||||
* line pointers previously marked LP_DEAD.
|
||||
*/
|
||||
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,
|
||||
&has_lpdead_items);
|
||||
|
||||
@ -1011,7 +1012,7 @@ lazy_scan_heap(LVRelState *vacrel)
|
||||
* table has indexes. There will only be newly-freed space if we
|
||||
* 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)
|
||||
{
|
||||
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
|
||||
* 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,
|
||||
Buffer buf,
|
||||
BlockNumber blkno,
|
||||
@ -1623,6 +1626,8 @@ lazy_scan_prune(LVRelState *vacrel,
|
||||
VISIBILITYMAP_ALL_VISIBLE |
|
||||
VISIBILITYMAP_ALL_FROZEN);
|
||||
}
|
||||
|
||||
return presult.ndeleted;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -320,9 +320,9 @@ bbstreamer_lz4_decompressor_content(bbstreamer *streamer,
|
||||
|
||||
mystreamer = (bbstreamer_lz4_frame *) streamer;
|
||||
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_out = mystreamer->base.bbs_buffer.maxlen;
|
||||
avail_out = mystreamer->base.bbs_buffer.maxlen - mystreamer->bytes_written;
|
||||
|
||||
while (avail_in > 0)
|
||||
{
|
||||
|
@ -16,6 +16,22 @@ my $primary = PostgreSQL::Test::Cluster->new('primary');
|
||||
$primary->init(allows_streaming => 1);
|
||||
$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 $extract_path = $primary->backup_dir . '/extracted-backup';
|
||||
|
||||
@ -42,6 +58,14 @@ my @test_configuration = (
|
||||
'decompress_flags' => [ '-d', '-m' ],
|
||||
'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',
|
||||
'backup_flags' => [ '--compress', 'server-zstd' ],
|
||||
|
@ -15,6 +15,22 @@ my $primary = PostgreSQL::Test::Cluster->new('primary');
|
||||
$primary->init(allows_streaming => 1);
|
||||
$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 $extract_path = $primary->backup_dir . '/extracted-backup';
|
||||
|
||||
@ -42,6 +58,15 @@ my @test_configuration = (
|
||||
'output_file' => 'base.tar',
|
||||
'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',
|
||||
'backup_flags' => [ '--compress', 'client-zstd:5' ],
|
||||
|
@ -119,6 +119,7 @@ PQcancelCreate(PGconn *conn)
|
||||
goto oom_error;
|
||||
|
||||
originalHost = conn->connhost[conn->whichhost];
|
||||
cancelConn->connhost[0].type = originalHost.type;
|
||||
if (originalHost.host)
|
||||
{
|
||||
cancelConn->connhost[0].host = strdup(originalHost.host);
|
||||
|
Loading…
x
Reference in New Issue
Block a user