[PATCH pve-storage 2/2] iscsidirect plugin: do not use cache in list_images()
Dmitry Petrov
dpetrov67 at gmail.com
Thu Feb 6 16:02:37 CET 2025
A static cache key 'directiscsi' was used to cache storeid-specific
information. This was causing issues in case of multiple instances.
Drop $cache usage instead of fixing the issue as there is no caller
using it and the same portal/storeid multiple times.
Remove $storeid from iscsi_ls() and its callers.
Signed-off-by: Dmitry Petrov <dpetrov67 at gmail.com>
---
src/PVE/Storage/ISCSIDirectPlugin.pm | 71 ++++++++++++----------------
1 file changed, 30 insertions(+), 41 deletions(-)
diff --git a/src/PVE/Storage/ISCSIDirectPlugin.pm b/src/PVE/Storage/ISCSIDirectPlugin.pm
index 0aca4b6..60bc94e 100644
--- a/src/PVE/Storage/ISCSIDirectPlugin.pm
+++ b/src/PVE/Storage/ISCSIDirectPlugin.pm
@@ -15,7 +15,7 @@ use PVE::JSONSchema qw(get_standard_option);
use base qw(PVE::Storage::Plugin);
sub iscsi_ls {
- my ($scfg, $storeid) = @_;
+ my ($scfg) = @_;
my $portal = $scfg->{portal};
my $cmd = ['/usr/bin/iscsi-ls', '-s', 'iscsi://'.$portal ];
@@ -27,29 +27,27 @@ sub iscsi_ls {
"T" => 1024*1024*1024*1024
);
eval {
-
run_command($cmd, errmsg => "iscsi error", errfunc => sub {}, outfunc => sub {
- my $line = shift;
- $line = trim($line);
- if( $line =~ /Lun:(\d+)\s+([A-Za-z0-9\-\_\.\:]*)\s+\(Size:([0-9\.]*)(k|M|G|T)\)/ ) {
- my $image = "lun".$1;
- my $size = $3;
- my $unit = $4;
-
- $list->{$storeid}->{$image} = {
- name => $image,
- size => $size * $unittobytes{$unit},
+ my $line = shift;
+ $line = trim($line);
+ if( $line =~ /Lun:(\d+)\s+([A-Za-z0-9\-\_\.\:]*)\s+\(Size:([0-9\.]*)(k|M|G|T)\)/ ) {
+ my $image = "lun".$1;
+ my $size = $3;
+ my $unit = $4;
+
+ $list->{$image} = {
+ name => $image,
+ size => $size * $unittobytes{$unit},
format => 'raw',
- };
- }
+ };
+ }
});
};
my $err = $@;
- die $err if $err && $err !~ m/TESTUNITREADY failed with SENSE KEY/ ;
+ die $err if $err && $err !~ m/TESTUNITREADY failed with SENSE KEY/;
return $list;
-
}
# Configuration
@@ -130,43 +128,34 @@ sub free_image {
die "can't free space in iscsi storage\n";
}
-
sub list_images {
my ($class, $storeid, $scfg, $vmid, $vollist, $cache) = @_;
my $res = [];
- $cache->{directiscsi} = iscsi_ls($scfg,$storeid) if !$cache->{directiscsi};
-
# we have no owner for iscsi devices
- my $target = $scfg->{target};
-
- if (my $dat = $cache->{directiscsi}->{$storeid}) {
-
- foreach my $volname (keys %$dat) {
-
- my $volid = "$storeid:$volname";
+ my $dat = iscsi_ls($scfg);
+ foreach my $volname (keys %$dat) {
+ my $volid = "$storeid:$volname";
- if ($vollist) {
- my $found = grep { $_ eq $volid } @$vollist;
- next if !$found;
- } else {
- # we have no owner for iscsi devices
- next if defined($vmid);
- }
+ if ($vollist) {
+ my $found = grep { $_ eq $volid } @$vollist;
+ next if !$found;
+ } else {
+ # we have no owner for iscsi devices
+ next if defined($vmid);
+ }
- my $info = $dat->{$volname};
- $info->{volid} = $volid;
+ my $info = $dat->{$volname};
+ $info->{volid} = $volid;
- push @$res, $info;
- }
+ push @$res, $info;
}
return $res;
}
-
sub status {
my ($class, $storeid, $scfg, $cache) = @_;
@@ -208,8 +197,8 @@ sub deactivate_volume {
sub volume_size_info {
my ($class, $scfg, $storeid, $volname, $timeout) = @_;
- my $vollist = iscsi_ls($scfg,$storeid);
- my $info = $vollist->{$storeid}->{$volname};
+ my $vollist = iscsi_ls($scfg);
+ my $info = $vollist->{$volname};
return wantarray ? ($info->{size}, 'raw', 0, undef) : $info->{size};
}
@@ -236,7 +225,7 @@ sub volume_snapshot_delete {
sub volume_has_feature {
my ($class, $scfg, $feature, $storeid, $volname, $snapname, $running) = @_;
-
+
my $features = {
copy => { current => 1},
};
--
2.39.5
More information about the pve-devel
mailing list