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.
191 lines
5.7 KiB
Perl
191 lines
5.7 KiB
Perl
####################################################################################################################################
|
|
# C Storage Read Interface
|
|
####################################################################################################################################
|
|
package pgBackRest::Storage::StorageRead;
|
|
|
|
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->{oStorageCRead},
|
|
) =
|
|
logDebugParam
|
|
(
|
|
__PACKAGE__ . '->new', \@_,
|
|
{name => 'oStorage'},
|
|
{name => 'oStorageCRead'},
|
|
);
|
|
|
|
# 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');
|
|
|
|
return logDebugReturn
|
|
(
|
|
$strOperation,
|
|
{name => 'bResult', value => $self->{oStorageCRead}->open() ? true : false, trace => true},
|
|
);
|
|
}
|
|
|
|
####################################################################################################################################
|
|
# Read data
|
|
####################################################################################################################################
|
|
sub read
|
|
{
|
|
my $self = shift;
|
|
|
|
# Assign function parameters, defaults, and log debug info
|
|
my (
|
|
$strOperation,
|
|
$rtBuffer,
|
|
$iSize,
|
|
) =
|
|
logDebugParam
|
|
(
|
|
__PACKAGE__ . '->read', \@_,
|
|
{name => 'rtBuffer'},
|
|
{name => 'iSize'},
|
|
);
|
|
|
|
# Read if not eof
|
|
my $iActualSize = 0;
|
|
|
|
if (!$self->eof())
|
|
{
|
|
my $tBuffer = $self->{oStorageCRead}->read($iSize);
|
|
$iActualSize = length($tBuffer);
|
|
$$rtBuffer .= $tBuffer;
|
|
}
|
|
|
|
# Return from function and log return values if any
|
|
return logDebugReturn
|
|
(
|
|
$strOperation,
|
|
{name => 'iActualSize', value => $iActualSize}
|
|
);
|
|
}
|
|
|
|
####################################################################################################################################
|
|
# Is the file at eof?
|
|
####################################################################################################################################
|
|
sub eof
|
|
{
|
|
my $self = shift;
|
|
|
|
# Assign function parameters, defaults, and log debug info
|
|
my ($strOperation) = logDebugParam(__PACKAGE__ . '->eof');
|
|
|
|
return logDebugReturn
|
|
(
|
|
$strOperation,
|
|
{name => 'bResult', value => $self->{oStorageCRead}->eof() ? true : false, trace => true},
|
|
);
|
|
}
|
|
|
|
####################################################################################################################################
|
|
# Close the file
|
|
####################################################################################################################################
|
|
sub close
|
|
{
|
|
my $self = shift;
|
|
|
|
# Assign function parameters, defaults, and log debug info
|
|
my ($strOperation) = logDebugParam(__PACKAGE__ . '->close');
|
|
|
|
$self->{oStorageCRead}->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->{oStorageCRead}->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->{oStorageCRead}->resultAll());
|
|
|
|
return logDebugReturn
|
|
(
|
|
$strOperation,
|
|
{name => 'xResultAll', value => $xResult, trace => true},
|
|
);
|
|
}
|
|
|
|
1;
|