[otrs-cvs] otrs/Kernel/System XML.pm,1.48,1.49

cvs-log at otrs.org cvs-log at otrs.org
Mon Apr 2 07:39:04 GMT 2007


Comments:
Update of /home/cvs/otrs/Kernel/System
In directory lancelot:/tmp/cvs-serv29338/Kernel/System

Modified Files:
	XML.pm 
Log Message:
Added file system cache machanism.

Author: martin

Index: XML.pm
===================================================================
RCS file: /home/cvs/otrs/Kernel/System/XML.pm,v
retrieving revision 1.48
retrieving revision 1.49
diff -C2 -d -r1.48 -r1.49
*** XML.pm	1 Apr 2007 13:13:55 -0000	1.48
--- XML.pm	2 Apr 2007 07:38:59 -0000	1.49
***************
*** 14,17 ****
--- 14,18 ----
  use strict;
  use Kernel::System::Encode;
+ use Data::Dumper;
  
  use vars qw($VERSION $S);
***************
*** 78,81 ****
--- 79,87 ----
      $Self->{EncodeObject} = Kernel::System::Encode->new(%Param);
  
+     # mild pretty print
+     $Data::Dumper::Indent = 1;
+     # cache directory
+     $Self->{CacheDirectory} = $Self->{ConfigObject}->Get('Home')."/var/tmp/";
+ 
      $S = $Self;
  
***************
*** 126,131 ****
              }
          }
!         my $Key = $Param{Key};
          # db quote
          foreach (keys %Param) {
              $Param{$_} = $Self->{DBObject}->Quote($Param{$_});
--- 132,150 ----
              }
          }
!         # write cache file
!         my $FileCache = quotemeta("$Param{Type}-$Param{Key}");
!         $FileCache = $Self->{CacheDirectory}."xml-storage-$FileCache.cache";
!         my $Dump = Data::Dumper::Dumper($Param{XMLHash});
!         $Dump =~ s/\$VAR1/\$XMLHashRef/;
!         if (open (OUT, "> $FileCache")) {
!             binmode(OUT);
!             print OUT $Dump."\n1;";
!             close (OUT);
!         }
!         else {
!             $Self->{LogObject}->Log(Priority => 'error', Message => "Can't write cache file $FileCache: $!");
!         }
          # db quote
+         my $Key = $Param{Key};
          foreach (keys %Param) {
              $Param{$_} = $Self->{DBObject}->Quote($Param{$_});
***************
*** 215,218 ****
--- 234,250 ----
      my %ValueHASH = $Self->XMLHash2D(XMLHash => $Param{XMLHash});
      if (%ValueHASH) {
+         # write cache file
+         my $FileCache = quotemeta("$Param{Type}-$Param{Key}");
+         $FileCache = $Self->{CacheDirectory}."xml-storage-$FileCache.cache";
+         my $Dump = Data::Dumper::Dumper($Param{XMLHash});
+         $Dump =~ s/\$VAR1/\$XMLHashRef/;
+         if (open (OUT, "> $FileCache")) {
+             binmode(OUT);
+             print OUT $Dump."\n1;";
+             close (OUT);
+         }
+         else {
+             $Self->{LogObject}->Log(Priority => 'error', Message => "Can't write cache file $FileCache: $!");
+         }
          # db quote
          foreach (keys %Param) {
***************
*** 246,249 ****
--- 278,287 ----
      );
  
+     my @XMLHash = $XMLObject->XMLHashGet(
+         Type => 'SomeType',
+         Key => '123',
+         Cache => 0, # do not use the file system cache
+     );
+ 
  =cut
  
***************
*** 260,263 ****
--- 298,326 ----
          }
      }
+     if (!defined($Param{Cache})) {
+         $Param{Cache} = 1;
+     }
+     # read cache file
+     my $FileCache = quotemeta("$Param{Type}-$Param{Key}");
+     $FileCache = $Self->{CacheDirectory}."xml-storage-$FileCache.cache";
+     if (-e $FileCache && !$Param{Cache}) {
+         if (open (IN, "< $FileCache")) {
+             my $XMLHashRef;
+             my $Content = '';
+             while (<IN>) {
+                 $Content .= $_;
+             }
+             close (IN);
+             if ($Content && !eval $Content) {
+                 print STDERR "ERROR: $FileCache: $@\n";
+             }
+             @XMLHash = @{$XMLHashRef};
+             return @XMLHash;
+         }
+         else {
+             $Self->{LogObject}->Log(Priority => 'error', Message => "Can't read cache file $FileCache: $!");
+             return;
+         }
+     }
      # db quote
      foreach (keys %Param) {
***************
*** 310,313 ****
--- 373,384 ----
          }
      }
+     # remove cache file
+     my $FileCache = quotemeta("$Param{Type}-$Param{Key}");
+     $FileCache = $Self->{CacheDirectory}."xml-storage-$FileCache.cache";
+     if (-e $FileCache) {
+         if (!unlink $FileCache) {
+             $Self->{LogObject}->Log(Priority => 'error', Message => "Can't remove $FileCache: $!");
+         }
+     }
      # db quote
      foreach (keys %Param) {
***************
*** 342,345 ****
--- 413,429 ----
          }
      }
+     # rename cache file
+     my $FileCacheOld = quotemeta("$Param{OldType}-$Param{OldKey}");
+     my $FileCacheNew = quotemeta("$Param{NewType}-$Param{NewKey}");
+     $FileCacheOld = $Self->{CacheDirectory}."xml-storage-$FileCacheOld.cache";
+     $FileCacheNew = $Self->{CacheDirectory}."xml-storage-$FileCacheNew.cache";
+     if (-e $FileCacheOld) {
+         if (!rename($FileCacheOld, $FileCacheNew)) {
+             $Self->{LogObject}->Log(
+                 Priority => 'error',
+                 Message => "Can't rename $FileCacheOld to $FileCacheNew: $!",
+             );
+         }
+     }
      # db quote
      foreach (qw(OldType OldKey NewType NewKey)) {


More information about the cvs-log mailing list