[pve-devel] r5460 - pve-cluster/trunk/data/perl

svn-commits at proxmox.com svn-commits at proxmox.com
Fri Jan 28 10:21:52 CET 2011


Author: dietmar
Date: 2011-01-28 10:21:52 +0100 (Fri, 28 Jan 2011)
New Revision: 5460

Modified:
   pve-cluster/trunk/data/perl/Cluster.pm
Log:
mplement cache for qemu-server configs


Modified: pve-cluster/trunk/data/perl/Cluster.pm
===================================================================
--- pve-cluster/trunk/data/perl/Cluster.pm	2011-01-28 08:58:52 UTC (rev 5459)
+++ pve-cluster/trunk/data/perl/Cluster.pm	2011-01-28 09:21:52 UTC (rev 5460)
@@ -42,6 +42,7 @@
     'user.cfg' => 1,
     'priv/domains.cfg' => 1,
     'priv/shadow.cfg' => 1,
+    '/qemu-server/' => 1,
 };
 
 sub check_cfs_is_mounted {
@@ -429,28 +430,48 @@
     };
 }
 
-sub cfs_read_file {
-    my ($filename) = @_;
+my $ccache_read = sub {
+    my ($filename, $parser, $version) = @_;
 
-    my $info = $file_info->{$filename} || die "unknown file '$filename'";
-
-    my $parser = $info->{parser};
-
     $ccache->{$filename} = {} if !$ccache->{$filename};
 
     my $ci = $ccache->{$filename};
 
-    if (!$ci->{version} || $ci->{version} != $versions->{$filename}) {
+    if (!$ci->{version} || $ci->{version} != $version) {
 
 	my $data = get_config($filename);
 
 	$ci->{data} = &$parser("/etc/pve/$filename", $data);
-	$ci->{version} = $versions->{$filename};
+	$ci->{version} = $version;
     }
 
     my $res = ref($ci->{data}) ? dclone($ci->{data}) : $ci->{data};
 
     return $res;
+};
+
+sub cfs_read_file {
+    my ($filename) = @_;
+
+    my $version;
+    my $infotag;
+    if ($filename =~ m|^nodes/[^/]+/qemu-server/(\d+)\.conf$|) {
+	my $vmid = $1;
+	if ($vmlist && $vmlist->{ids} && $vmlist->{ids}->{$vmid}) {
+	    $version = $vmlist->{ids}->{$vmid}->{version};
+	}
+	$infotag = "/qemu-server/";
+    } else {
+	$infotag = $filename;
+	$version = $versions->{$filename};
+    }
+
+    my $info = $file_info->{$infotag} || 
+	die "unknown file type '$filename' (no parser registered)\n";
+
+    my $parser = $info->{parser};
+
+    return &$ccache_read($filename, $parser, $version);
 }
 
 sub cfs_write_file {




More information about the pve-devel mailing list