Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 11 additions & 3 deletions .github/workflows/run_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,21 @@ on:
required: false
type: string
default: ""
citus_libdir:
required: false
type: string
default: ""
citus_libdir_label:
required: false
type: string
default: ""
secrets:
codecov_token:
required: false

jobs:
test:
name: PG${{ matrix.pg_version.major }} - ${{ matrix.make }}${{ inputs.citus_version && format(' - {0}', inputs.citus_version) || '' }}
name: PG${{ matrix.pg_version.major }} - ${{ matrix.make }}${{ inputs.citus_version && format(' - {0}', inputs.citus_version) || '' }}${{ inputs.citus_libdir_label && format(' - lib-{0}', inputs.citus_libdir_label) || '' }}
strategy:
fail-fast: false
matrix:
Expand All @@ -46,12 +54,12 @@ jobs:
- uses: actions/checkout@v4
- uses: "./.github/actions/setup_extension"
- name: Run Test
run: CITUSVERSION=${{ inputs.citus_version }} gosu circleci make -C src/test/${{ inputs.suite }} ${{ matrix.make }}
run: CITUSVERSION=${{ inputs.citus_version }} CITUSLIBDIR=${{ inputs.citus_libdir }} gosu circleci make -C src/test/${{ inputs.suite }} ${{ matrix.make }}
timeout-minutes: 20
- uses: "./.github/actions/save_logs_and_results"
if: always()
with:
folder: ${{ matrix.pg_version.major }}_${{ matrix.make }}${{ inputs.citus_version && format('_{0}', inputs.citus_version) || '' }}
folder: ${{ matrix.pg_version.major }}_${{ matrix.make }}${{ inputs.citus_version && format('_{0}', inputs.citus_version) || '' }}${{ inputs.citus_libdir_label && format('_{0}', inputs.citus_libdir_label) || '' }}
- uses: "./.github/actions/upload_coverage"
if: always()
with:
Expand Down
6 changes: 5 additions & 1 deletion src/test/regress/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ endif
ifndef CITUSVERSION
CITUSVERSION := ""
endif

ifndef CITUSLIBDIR
CITUSLIBDIR := ""
endif
# Add ./bin to $PATH so we use our custom diff instead of the default diff tool.
# We do this to be able to mask shard Ids, placement Ids, node ports, etc.
MAKEFILE_DIR := $(dir $(realpath $(firstword $(MAKEFILE_LIST))))
Expand All @@ -31,7 +35,7 @@ export PGISOLATIONTIMEOUT = 60
## Citus regression support
##
MULTI_INSTALLDIR=$(CURDIR)/tmp_check/install
pg_regress_multi_check = $(PERL) $(citus_abs_srcdir)/pg_regress_multi.pl --pgxsdir="$(pgxsdir)" --bindir="$(bindir)" --libdir="$(libdir)" --majorversion="$(MAJORVERSION)" --postgres-builddir="$(postgres_abs_builddir)" --postgres-srcdir="$(postgres_abs_srcdir)" --citus_abs_srcdir="$(citus_abs_srcdir)" --citus-version=$(CITUSVERSION)
pg_regress_multi_check = $(PERL) $(citus_abs_srcdir)/pg_regress_multi.pl --pgxsdir="$(pgxsdir)" --bindir="$(bindir)" --libdir="$(libdir)" --majorversion="$(MAJORVERSION)" --postgres-builddir="$(postgres_abs_builddir)" --postgres-srcdir="$(postgres_abs_srcdir)" --citus_abs_srcdir="$(citus_abs_srcdir)" --citus-version=$(CITUSVERSION) --citus-libdir="$(CITUSLIBDIR)"
MULTI_REGRESS_OPTS = --inputdir=$(citus_abs_srcdir) $(pg_regress_locale_flags) --launcher="$(citus_abs_srcdir)/log_test_times"

pg_upgrade_check = $(citus_abs_srcdir)/citus_tests/upgrade/pg_upgrade_test.py
Expand Down
57 changes: 56 additions & 1 deletion src/test/regress/pg_regress_multi.pl
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ ()
print " --mitmproxy Start a mitmproxy for one of the workers\n";
print " --worker-count Number of workers in Citus cluster (default: 2)\n";
print " --citus-version Citus version being tested (used for during extension create)\n";
print " --citus-libdir Absolute path to alternative Citus library directory\n";
exit 1;
}

Expand Down Expand Up @@ -89,6 +90,7 @@ ()
my $publicWorker2Host = "localhost";
my $workerCount = 2;
my $citusversion = "";
my $citusLibdir = "";

my $serversAreShutdown = "TRUE";
my $usingWindows = 0;
Expand Down Expand Up @@ -124,6 +126,7 @@ ()
'worker-2-public-hostname=s' => \$publicWorker2Host,
'worker-count=i' => \$workerCount,
'citus-version=s' => \$citusversion,
'citus-libdir=s' => \$citusLibdir,
'help' => sub { Usage() });

my $fixopen = "$bindir/postgres.fixopen";
Expand Down Expand Up @@ -310,6 +313,39 @@ sub generate_hba
close $fh;
}

sub setup_symlink
{
my ($originalfile, $targetfile) = @_;

# Only proceed if not on Windows and both files are defined and non-empty
return if $usingWindows;
return unless (defined $originalfile && $originalfile ne "");
return unless (defined $targetfile && $targetfile ne "");

-e $targetfile or die "Target is not found at $targetfile";
my $backup = $originalfile . ".bak";
rename($originalfile, $backup) or die "Failed to copy $originalfile to $backup: $!";

symlink($targetfile, $originalfile) or die "Failed to create symlink $originalfile -> $targetfile: $!";
}

sub restore_original
{
my ($originalfile) = @_;

# Only proceed if not on Windows and file is defined and non-empty
return if $usingWindows;
return unless (defined $originalfile && $originalfile ne "");

my $backup = $originalfile . ".bak";

# Return silently if backup doesn't exist
return unless -e $backup;

unlink($originalfile) or die "Failed to remove symlink at $originalfile: $!";
rename($backup, $originalfile) or die "Failed to restore original file from $backup to $originalfile: $!";
}

# always want to call initdb under normal postgres, so revert from a
# partial run, even if we're now not using valgrind.
revert_replace_postgres();
Expand Down Expand Up @@ -593,7 +629,7 @@ sub generate_hba
push(@pgOptions, "citus.background_task_queue_interval=-1");
}

if($citusversion)
if($citusversion || $citusLibdir)
{
push(@pgOptions, "citus.enable_version_checks=off");
push(@pgOptions, "columnar.enable_version_checks=off");
Expand Down Expand Up @@ -783,6 +819,13 @@ sub generate_hba
# Routine to shutdown servers at failure/exit
sub ShutdownServers()
{
# Determine the actual PostgreSQL library directory for cleanup
my $psqlLibdir =`$pgConfig --pkglibdir`;
chomp $psqlLibdir;

restore_original(catfile($psqlLibdir, "citus.so")) if defined $psqlLibdir;
restore_original(catfile($psqlLibdir, "citus_columnar.so")) if defined $psqlLibdir;

if (!$conninfo && $serversAreShutdown eq "FALSE")
{
system(catfile("$bindir", "pg_ctl"),
Expand Down Expand Up @@ -908,6 +951,18 @@ END
$synchronousReplication = "-c synchronous_standby_names='FIRST 1 (*)' -c synchronous_commit=remote_apply";
}

# Ensure citus.so points to alternative library if provided
if ($citusLibdir)
{
print "Setting up symlinks to load citus extension libraries from alternative directory: $citusLibdir\n";
# Determine the actual PostgreSQL library directory
my $psqlLibdir =`$pgConfig --pkglibdir`;
chomp $psqlLibdir;

setup_symlink(catfile($psqlLibdir, "citus.so"), catfile($citusLibdir, "citus.so"));
setup_symlink(catfile($psqlLibdir, "citus_columnar.so"), catfile($citusLibdir, "citus_columnar.so"));
}

# Start servers
if (!$conninfo)
{
Expand Down