From a781396fa32e443b90bb7f340afed54c06a1f445 Mon Sep 17 00:00:00 2001 From: Rene Krenn Date: Wed, 31 Aug 2016 17:36:01 +0200 Subject: [PATCH] MT#20837 handle unique lnp numbers properly +importing lnp numbers now requires unique numbers, it required unique prefix+number before +ngcp billing.lnp_number records are considered as unique per number (before it was unique per prefix+number) Change-Id: I5a6f9ed4235a1ee0edecd58ec3b04ad393839dbb --- .../Dao/Trunk/billing/lnp_numbers.pm | 12 ++++--- .../Migration/IPGallery/Dao/import/Lnp.pm | 2 +- .../Projects/Migration/IPGallery/Lnp.pm | 31 ++++++++++--------- lib/NGCP/BulkProcessor/RestConnector.pm | 21 +++++++++++-- 4 files changed, 44 insertions(+), 22 deletions(-) diff --git a/lib/NGCP/BulkProcessor/Dao/Trunk/billing/lnp_numbers.pm b/lib/NGCP/BulkProcessor/Dao/Trunk/billing/lnp_numbers.pm index d5787ce..3b70ebf 100644 --- a/lib/NGCP/BulkProcessor/Dao/Trunk/billing/lnp_numbers.pm +++ b/lib/NGCP/BulkProcessor/Dao/Trunk/billing/lnp_numbers.pm @@ -72,12 +72,16 @@ sub findby_lnpproviderid_number { my $table = $db->tableidentifier($tablename); my $stmt = 'SELECT * FROM ' . $table . ' WHERE ' . - $db->columnidentifier('lnp_provider_id') . ' = ?' . - ' AND ' . $db->columnidentifier('number') . ' = ?'; - my @params = ($lnp_provider_id,$number); + $db->columnidentifier('number') . ' = ?'; + my @params = ($number); + if (defined $lnp_provider_id) { + $stmt .= ' AND ' . $db->columnidentifier('lnp_provider_id') . ' = ?'; + push(@params,$lnp_provider_id); + } + my $rows = $xa_db->db_get_all_arrayref($stmt,@params); - return buildrecords_fromrows($rows,$load_recursive)->[0]; + return buildrecords_fromrows($rows,$load_recursive); } diff --git a/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Dao/import/Lnp.pm b/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Dao/import/Lnp.pm index fce010e..a31faa0 100644 --- a/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Dao/import/Lnp.pm +++ b/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Dao/import/Lnp.pm @@ -63,7 +63,7 @@ my $expected_fieldnames = [ ]; # table creation: -my $primarykey_fieldnames = [ 'lrn_code', 'ported_number' ]; +my $primarykey_fieldnames = [ 'ported_number' ]; my $indexes = { $tablename . '_delta' => [ 'delta(7)' ]}; #my $fixtable_statements = []; diff --git a/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Lnp.pm b/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Lnp.pm index e3c29fb..b2fc535 100644 --- a/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Lnp.pm +++ b/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Lnp.pm @@ -143,25 +143,27 @@ sub _create_lnp { # $context->{db}->db_begin(); #_warn($context,'AutoCommit is on') if $context->{db}->{drh}->{AutoCommit}; - my $existing_lnp_number = NGCP::BulkProcessor::Dao::Trunk::billing::lnp_numbers::findby_lnpproviderid_number($context->{db}, - $context->{lnp_provider}->{id}, $context->{number}); - if (defined $existing_lnp_number) { - $context->{lnp_number_id} = $existing_lnp_number->{id}; - if ($context->{delta} eq - $NGCP::BulkProcessor::Projects::Migration::IPGallery::Dao::import::Lnp::deleted_delta) { - _info($context,"($context->{rownum}) " . 'lnp ' . $context->{number} . ' is deleted, but lnp_number found'); - _delete_lnp_number($context); - } else { - _info($context,"($context->{rownum}) " . 'lnp_number for lnp ' . $context->{number} . ' exists',1); - #_update_lnp_number($context); - } - } else { + my $existing_lnp_numbers = NGCP::BulkProcessor::Dao::Trunk::billing::lnp_numbers::findby_lnpproviderid_number($context->{db}, + undef, $context->{number}); + if ((scalar @$existing_lnp_numbers) == 0) { if ($context->{delta} eq $NGCP::BulkProcessor::Projects::Migration::IPGallery::Dao::import::Lnp::deleted_delta) { _info($context,"($context->{rownum}) " . 'lnp ' . $context->{number} . ' is deleted, and no lnp_number found'); } else { _create_lnp_number($context); - _info($context,"($context->{rownum}) " . 'lnp_number ' . $context->{number} . ' created',1); + } + } elsif ((scalar @$existing_lnp_numbers) >= 1) { + _warn($context,"($context->{rownum}) " . 'multiple (' . (scalar @$existing_lnp_numbers) . ') existing lnp\'s ' . $context->{number} . ' found, processing each') if ((scalar @$existing_lnp_numbers) > 1); + foreach my $existing_lnp_number (@$existing_lnp_numbers) { + $context->{lnp_number_id} = $existing_lnp_number->{id}; + if ($context->{delta} eq + $NGCP::BulkProcessor::Projects::Migration::IPGallery::Dao::import::Lnp::deleted_delta) { + _info($context,"($context->{rownum}) " . 'lnp ' . $context->{number} . ' is deleted, but lnp_number found'); + _delete_lnp_number($context); + } else { + _info($context,"($context->{rownum}) " . 'lnp_number for lnp ' . $context->{number} . ' exists',1); + _update_lnp_number($context); + } } } @@ -237,6 +239,7 @@ sub _create_lnp_number { number => $context->{number}, lnp_provider_id => $context->{lnp_provider}->{id}, ); + _info($context,"($context->{rownum}) " . 'lnp_number ' . $context->{number} . ' created',1); return 1; diff --git a/lib/NGCP/BulkProcessor/RestConnector.pm b/lib/NGCP/BulkProcessor/RestConnector.pm index ffaf4df..5e55334 100644 --- a/lib/NGCP/BulkProcessor/RestConnector.pm +++ b/lib/NGCP/BulkProcessor/RestConnector.pm @@ -39,6 +39,7 @@ sub new { $self->{tid} = threadid(); $self->{uri} = undef; + $self->{path} = undef; $self->{netloc} = undef; $self->{ua} = undef; @@ -67,9 +68,15 @@ sub baseuri { my $uri = shift; undef $self->{ua}; undef $self->{uri}; + undef $self->{path}; undef $self->{netloc}; - if (($self->{netloc}) = ($uri =~ m!^https?://(.*)/?.*$!)) { + if ($uri =~ m!^https?://([^/]+)/?.*$!) { + $self->{netloc} = $1; $self->{uri} = URI->new($uri); + $self->{path} = $self->{uri}->path(); + if (defined $self->{path} and length($self->{path}) > 0) { + $self->{path} .= '/' if $self->{path} !~ m!/$!; + } $self->{uri}->path_query(''); $self->{uri}->fragment(undef); restdebug($self,"base URL set to '" . $self->{uri} . "'",getlogger(__PACKAGE__)); @@ -178,8 +185,16 @@ sub _get_request_uri { if (!defined $self->{uri}) { resterror($self,'base URL not set',getlogger(__PACKAGE__)); } - if (blessed($path_query) and $path_query->isa('URI')) { - $path_query = $path_query->path_query(); + if (defined $path_query) { + if (blessed($path_query) and $path_query->isa('URI')) { + $path_query = $path_query->path_query(); + } + } else { + $path_query = ''; + } + if (defined $self->{path} and length($self->{path}) > 0) { + $path_query =~ s!^/!!; + $path_query = $self->{path} . $path_query; } my $uri = $self->{uri}->clone(); $uri->path_query($path_query);