Revert "TT#158252 API GET subscriberpreferences - fix DBI timeout"

This reverts commit a6b5ac98c0.

Change-Id: Ie9c70a0821db61cb2bc1634d54ae0f6d3a096a92
mr10.4
Kirill Solomko 3 years ago
parent 26c868bcb3
commit d7c7391644

@ -87,23 +87,30 @@ sub GET :Allow {
my ($self, $c) = @_; my ($self, $c) = @_;
my $page = $c->request->params->{page} // 1; my $page = $c->request->params->{page} // 1;
my $rows = $c->request->params->{rows} // 10; my $rows = $c->request->params->{rows} // 10;
$c->model('DB')->set_transaction_isolation('READ COMMITTED');
my $guard = $c->model('DB')->txn_scope_guard;
{
my $subscribers_rs = $self->item_rs($c, "subscribers"); my $subscribers_rs = $self->item_rs($c, "subscribers");
(my $total_count, $subscribers_rs, my $subscribers_rows) = $self->paginate_order_collection($c, $subscribers_rs); (my $total_count, $subscribers_rs, my $subscribers_rows) = $self->paginate_order_collection($c, $subscribers_rs);
my $subscribers = NGCP::Panel::Utils::Contract::acquire_contract_rowlocks(c => $c, my $subscribers = NGCP::Panel::Utils::Contract::acquire_contract_rowlocks(c => $c,
rs => $subscribers_rs, rs => $subscribers_rs,
contract_id_field => 'contract_id'); contract_id_field => 'contract_id');
my $now = NGCP::Panel::Utils::DateTime::current_local; my $now = NGCP::Panel::Utils::DateTime::current_local;
my (@embedded, @links); my (@embedded, @links, %contract_map);
for my $subscriber (@$subscribers) { for my $subscriber (@$subscribers) {
next unless($subscriber->provisioning_voip_subscriber); next unless($subscriber->provisioning_voip_subscriber);
my $contract = $subscriber->contract;
my $balance; $balance = NGCP::Panel::Utils::ProfilePackages::get_contract_balance(c => $c,
contract => $contract,
now => $now) if !exists $contract_map{$contract->id}; #apply underrun lock level
$contract_map{$contract->id} = 1;
push @embedded, $self->hal_from_item($c, $subscriber, "subscribers"); push @embedded, $self->hal_from_item($c, $subscriber, "subscribers");
push @links, Data::HAL::Link->new( push @links, Data::HAL::Link->new(
relation => 'ngcp:'.$self->resource_name, relation => 'ngcp:'.$self->resource_name,
href => sprintf('%s%d', $self->dispatch_path, $subscriber->id), href => sprintf('%s%d', $self->dispatch_path, $subscriber->id),
); );
} }
$self->delay_commit($c,$guard);
push @links, push @links,
Data::HAL::Link->new( Data::HAL::Link->new(
relation => 'curies', relation => 'curies',
@ -126,6 +133,8 @@ sub GET :Allow {
$c->response->headers($response->headers); $c->response->headers($response->headers);
$c->response->body($response->content); $c->response->body($response->content);
return; return;
}
return;
} }
1; 1;

@ -49,12 +49,18 @@ sub journal_query_params {
sub GET :Allow { sub GET :Allow {
my ($self, $c, $id) = @_; my ($self, $c, $id) = @_;
$c->model('DB')->set_transaction_isolation('READ COMMITTED');
return unless $self->valid_id($c, $id); my $guard = $c->model('DB')->txn_scope_guard;
{
last unless $self->valid_id($c, $id);
my $subscriber = $self->item_by_id($c, $id, "subscribers"); my $subscriber = $self->item_by_id($c, $id, "subscribers");
return unless $self->resource_exists($c, subscriberpreference => $subscriber); last unless $self->resource_exists($c, subscriberpreference => $subscriber);
my $balance = NGCP::Panel::Utils::ProfilePackages::get_contract_balance(c => $c,
contract => $subscriber->contract,
); #apply underrun lock level
my $hal = $self->hal_from_item($c, $subscriber, "subscribers"); my $hal = $self->hal_from_item($c, $subscriber, "subscribers");
$guard->commit; #potential db write ops in hal_from
my $response = HTTP::Response->new(HTTP_OK, undef, HTTP::Headers->new( my $response = HTTP::Response->new(HTTP_OK, undef, HTTP::Headers->new(
(map { # XXX Data::HAL must be able to generate links with multiple relations (map { # XXX Data::HAL must be able to generate links with multiple relations
@ -65,6 +71,8 @@ sub GET :Allow {
$c->response->headers($response->headers); $c->response->headers($response->headers);
$c->response->body($response->content); $c->response->body($response->content);
return; return;
}
return;
} }
sub PATCH :Allow { sub PATCH :Allow {

@ -329,6 +329,11 @@ sub GET :Allow {
my (@embedded, @links, %contract_map); my (@embedded, @links, %contract_map);
my ($form) = $self->get_form($c); my ($form) = $self->get_form($c);
for my $subscriber (@$subscribers) { for my $subscriber (@$subscribers) {
my $contract = $subscriber->contract;
NGCP::Panel::Utils::ProfilePackages::get_contract_balance(c => $c,
contract => $contract,
now => $now) if !exists $contract_map{$contract->id}; #apply underrun lock level
$contract_map{$contract->id} = 1;
my $resource = $self->resource_from_item($c, $subscriber, $form); my $resource = $self->resource_from_item($c, $subscriber, $form);
push @embedded, $self->hal_from_item($c, $subscriber, $resource, $form); push @embedded, $self->hal_from_item($c, $subscriber, $resource, $form);
push @links, Data::HAL::Link->new( push @links, Data::HAL::Link->new(

@ -163,11 +163,10 @@ sub prepare_resource {
$prefs = $sub_prefs->union($ct_prefs->search({attribute_id => {-not_in => [map {$_->get_column('attribute_id')} $sub_prefs->all]}})); $prefs = $sub_prefs->union($ct_prefs->search({attribute_id => {-not_in => [map {$_->get_column('attribute_id')} $sub_prefs->all]}}));
$prefs = $prefs->union($dom_prefs->search({attribute_id => {-not_in => [map {$_->get_column('attribute_id')} $prefs->all]}})); $prefs = $prefs->union($dom_prefs->search({attribute_id => {-not_in => [map {$_->get_column('attribute_id')} $prefs->all]}}));
} }
$prefs = $prefs->search({ $prefs = $prefs->search({
}, { }, {
prefetch => 'attribute', join => 'attribute',
order_by => { '-asc' => 'me.id' }, order_by => { '-asc' => 'id' },
}); });
my $resource; my $resource;

Loading…
Cancel
Save