mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2024-12-14 10:13:05 +02:00
4815752ccc
Maintaining the storage layer/drivers in two languages is burdensome. Since the integration tests require the Perl storage layer/drivers we'll need them even after the core code is migrated to C. Create an interface layer so the Perl code can be removed and new storage drivers/features introduced without adding Perl equivalents. The goal is to move the integration tests to C so this interface will eventually be removed. That being the case, the interface was designed for maximum compatibility to ease the transition. The result looks a bit hacky but we'll improve it as needed until it can be retired.
164 lines
4.8 KiB
Perl
164 lines
4.8 KiB
Perl
####################################################################################################################################
|
|
# C Storage Write Interface
|
|
####################################################################################################################################
|
|
package pgBackRest::Storage::StorageWrite;
|
|
|
|
use strict;
|
|
use warnings FATAL => qw(all);
|
|
use Carp qw(confess);
|
|
use English '-no_match_vars';
|
|
|
|
use File::Basename qw(dirname);
|
|
use Fcntl qw(:mode);
|
|
use File::stat qw{lstat};
|
|
use JSON::PP;
|
|
|
|
use pgBackRest::Common::Exception;
|
|
use pgBackRest::Common::Log;
|
|
use pgBackRest::Storage::Base;
|
|
|
|
####################################################################################################################################
|
|
# new
|
|
####################################################################################################################################
|
|
sub new
|
|
{
|
|
my $class = shift;
|
|
|
|
# Create the class hash
|
|
my $self = {};
|
|
bless $self, $class;
|
|
|
|
# Assign function parameters, defaults, and log debug info
|
|
(
|
|
my $strOperation,
|
|
$self->{oStorage},
|
|
$self->{oStorageCWrite},
|
|
) =
|
|
logDebugParam
|
|
(
|
|
__PACKAGE__ . '->new', \@_,
|
|
{name => 'oStorage'},
|
|
{name => 'oStorageCWrite'},
|
|
);
|
|
|
|
# Return from function and log return values if any
|
|
return logDebugReturn
|
|
(
|
|
$strOperation,
|
|
{name => 'self', value => $self}
|
|
);
|
|
}
|
|
|
|
####################################################################################################################################
|
|
# Open the file
|
|
####################################################################################################################################
|
|
sub open
|
|
{
|
|
my $self = shift;
|
|
|
|
# Assign function parameters, defaults, and log debug info
|
|
my ($strOperation) = logDebugParam(__PACKAGE__ . '->open');
|
|
|
|
$self->{oStorageCWrite}->open();
|
|
|
|
return logDebugReturn
|
|
(
|
|
$strOperation,
|
|
{name => 'bResult', value => true, trace => true},
|
|
);
|
|
}
|
|
|
|
####################################################################################################################################
|
|
# Write data
|
|
####################################################################################################################################
|
|
sub write
|
|
{
|
|
my $self = shift;
|
|
|
|
# Assign function parameters, defaults, and log debug info
|
|
my (
|
|
$strOperation,
|
|
$rtBuffer,
|
|
) =
|
|
logDebugParam
|
|
(
|
|
__PACKAGE__ . '->write', \@_,
|
|
{name => 'rtBuffer'},
|
|
);
|
|
|
|
# Return from function and log return values if any
|
|
return logDebugReturn
|
|
(
|
|
$strOperation,
|
|
{name => 'iActualSize', value => $self->{oStorageCWrite}->write($$rtBuffer)}
|
|
);
|
|
}
|
|
|
|
####################################################################################################################################
|
|
# Close the file
|
|
####################################################################################################################################
|
|
sub close
|
|
{
|
|
my $self = shift;
|
|
|
|
# Assign function parameters, defaults, and log debug info
|
|
my ($strOperation) = logDebugParam(__PACKAGE__ . '->close');
|
|
|
|
$self->{oStorageCWrite}->close();
|
|
|
|
return logDebugReturn
|
|
(
|
|
$strOperation,
|
|
{name => 'bResult', value => true, trace => true},
|
|
);
|
|
}
|
|
|
|
####################################################################################################################################
|
|
# Get a filter result
|
|
####################################################################################################################################
|
|
sub result
|
|
{
|
|
my $self = shift;
|
|
|
|
# Assign function parameters, defaults, and log debug info
|
|
my
|
|
(
|
|
$strOperation,
|
|
$strClass,
|
|
) =
|
|
logDebugParam
|
|
(
|
|
__PACKAGE__ . '->result', \@_,
|
|
{name => 'strClass'},
|
|
);
|
|
|
|
my $xResult = $self->{oStorage}->{oJSON}->decode($self->{oStorageCWrite}->result($strClass));
|
|
|
|
return logDebugReturn
|
|
(
|
|
$strOperation,
|
|
{name => 'xResult', value => $xResult, trace => true},
|
|
);
|
|
}
|
|
|
|
####################################################################################################################################
|
|
# Get all filter results
|
|
####################################################################################################################################
|
|
sub resultAll
|
|
{
|
|
my $self = shift;
|
|
|
|
# Assign function parameters, defaults, and log debug info
|
|
my ($strOperation) = logDebugParam(__PACKAGE__ . '->resultAll');
|
|
|
|
my $xResult = $self->{oStorage}->{oJSON}->decode($self->{oStorageCWrite}->resultAll());
|
|
|
|
return logDebugReturn
|
|
(
|
|
$strOperation,
|
|
{name => 'xResultAll', value => $xResult, trace => true},
|
|
);
|
|
}
|
|
|
|
1;
|