49
|
1 use strict;
|
|
2 package Deployment::Batch;
|
|
3 our @history;
|
|
4
|
|
5 package Deployment::Batch::Generic;
|
|
6 use Common;
|
|
7 use Time::HiRes;
|
|
8 our @ISA = qw(Object);
|
|
9
|
|
10 BEGIN {
|
|
11 DeclareProperty isProcessed => ACCESS_READ;
|
|
12 DeclareProperty LastError => ACCESS_READ;
|
|
13 DeclareProperty LocalHistory => ACCESS_NONE;
|
|
14 }
|
|
15
|
|
16 sub _Run {
|
|
17 my ($this) = @_;
|
|
18
|
|
19 undef $@;
|
|
20 local @history = ();
|
|
21 my $t0 = [Time::HiRes::gettimeofday];
|
|
22 eval {
|
|
23 $this->Run;
|
|
24 };
|
|
25 $this->Log("completed in ",Time::HiRes::tv_interval($t0)," s");
|
|
26
|
|
27 if ($@) {
|
|
28 $this->{$LastError} = $@;
|
|
29 Deployment::Batch::Rollback(); # rallback nested actions
|
|
30 return 0;
|
|
31 }
|
|
32
|
|
33 $this->{$LocalHistory} = \@history;
|
|
34 $this->{$isProcessed} = 1;
|
|
35
|
|
36 return 1;
|
|
37 }
|
|
38
|
|
39 sub Name {
|
|
40 my $this = shift;
|
|
41 (my $mod = ref $this) =~ s/^(?:\w+\:\:)*(\w+)$/$1/;
|
|
42 return $mod;
|
|
43 }
|
|
44
|
|
45 sub _Rollback {
|
|
46 my ($this) = @_;
|
|
47
|
|
48 undef $@;
|
|
49 eval {
|
|
50 $this->Rollback;
|
|
51 };
|
|
52
|
|
53 if ($@) {
|
|
54 $this->{$LastError} = $@;
|
|
55 }
|
|
56
|
|
57 $this->{$isProcessed} = 0;
|
|
58
|
|
59 if ($this->{$LocalHistory}) {
|
|
60 local @history = @{$this->{$LocalHistory}};
|
|
61 Deployment::Batch::Rollback();
|
|
62 }
|
|
63
|
|
64 return 1;
|
|
65 }
|
|
66
|
|
67 sub Context {
|
|
68 my $this = shift;
|
|
69
|
|
70 return \%Deployment::Batch::Context;
|
|
71 }
|
|
72
|
|
73 sub Log {
|
|
74 my $this = shift @_;
|
|
75 if ($this->Context->{LogOutput}) {
|
|
76 my $out = $this->Context->{LogOutput};
|
|
77 print $out $this->Name,": ",@_,"\n";
|
|
78 }
|
|
79 }
|
|
80
|
|
81 sub Run {
|
|
82 }
|
|
83
|
|
84 sub Rollback {
|
|
85 }
|
|
86
|
|
87 1;
|