You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bulk-processor/lib/NGCP/BulkProcessor/NoSqlConnector.pm

131 lines
2.7 KiB

package NGCP::BulkProcessor::NoSqlConnector;
use strict;
## no critic
use threads;
use threads::shared;
use NGCP::BulkProcessor::Logging qw(
getlogger
nosqlinfo
nosqldebug);
use NGCP::BulkProcessor::LogError qw(nosqlerror notimplementederror);
use NGCP::BulkProcessor::Utils qw(threadid);
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(
_share_scalar
_share_list
);
sub new {
my $class = shift;
my $self = bless {}, $class;
my $instanceid = shift;
$self->{instanceid} = $instanceid;
$self->{tid} = threadid();
return $self;
}
sub connectidentifier {
my $self = shift;
notimplementederror((ref $self) . ': ' . (caller(0))[3] . ' not implemented',getlogger(__PACKAGE__));
return undef;
}
sub instanceidentifier {
my $self = shift;
$self->{instanceid} = shift if @_;
return $self->{instanceid};
}
sub connect {
my $self = shift;
notimplementederror((ref $self) . ': ' . (caller(0))[3] . ' not implemented',getlogger(__PACKAGE__));
}
sub disconnect {
my $self = shift;
notimplementederror((ref $self) . ': ' . (caller(0))[3] . ' not implemented',getlogger(__PACKAGE__));
}
sub is_connected {
my $self = shift;
notimplementederror((ref $self) . ': ' . (caller(0))[3] . ' not implemented',getlogger(__PACKAGE__));
}
sub ping {
my $self = shift;
notimplementederror((ref $self) . ': ' . (caller(0))[3] . ' not implemented',getlogger(__PACKAGE__));
}
sub get_defaultblockcount {
my $self = shift;
notimplementederror((ref $self) . ': ' . (caller(0))[3] . ' not implemented',getlogger(__PACKAGE__));
}
sub multithreading_supported {
my $self = shift;
return 0;
}
sub DESTROY {
my $self = shift;
# perl threads works like a fork, each thread owns a shalow? copy
# of the entire current context, at the moment it starts.
# due to this, if the thread is finished, perl gc will invoke destructors
# on the thread's scope elements, that potentially contains connectors from
# the main tread. it will actually attempt destroy them (disconnect, etc.)
# this is a problem with destructors that change object state like this one
#
# to avoid this, we perform destruction tasks only if the destructing tid
# is the same as the creating one:
if ($self->{tid} == threadid()) {
$self->disconnect();
#eval {
nosqldebug($self,(ref $self) . ' connector destroyed',getlogger(__PACKAGE__));
#};
}
}
sub _share_list {
my @args = @_;
my $result = shared_clone(\@args);
return @$result;
}
sub _share_scalar {
my $result = shared_clone(shift @_);
return $result;
}
1;