]> git.proxmox.com Git - pve-ha-manager.git/commitdiff
implement helper to return quorum info
authorDietmar Maurer <dietmar@proxmox.com>
Sun, 30 Nov 2014 09:13:37 +0000 (10:13 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Sun, 30 Nov 2014 09:13:37 +0000 (10:13 +0100)
PVE/HA/Env.pm
PVE/HA/SimEnv.pm
pve-ha-manager

index 55f74efe8887d09a07d95a2c0f8947ae5f0a7dcf..736f445a62ba1d0e92ae12074d1f39c7cbaae355 100644 (file)
@@ -54,6 +54,13 @@ sub get_ha_manager_lock {
     die "implement me";
 }
 
+# return true when cluster is quorate
+sub quorate {
+    my ($self) = @_;
+
+    die "implement me";
+}
+
 # return current time
 # overwrite that if you want to simulate
 sub get_time {
index ecf43fa2436a507de9a741a1ec9319a2f0280691..7fad9d1023fdad226680c2af28a7763bcf64c8d8 100644 (file)
@@ -83,23 +83,45 @@ sub sleep {
    $cur_time += $delay;
 }
 
-sub get_ha_manager_lock {
+my $lookup_quorum_info = sub {
     my ($self) = @_;
 
     foreach my $entry (reverse @$quorum_setup) {
        my ($time, $members) = @$entry;
 
        if ($cur_time >= $time) {
-           ++$cur_time;
-           return 1 if $members->[0] eq $self->{nodename};
-           return 0;
+           return $members;
        }
     }
+    
+    return undef;
+};
+
+sub get_ha_manager_lock {
+    my ($self) = @_;
+
+    if (my $members = &$lookup_quorum_info($self)) {
+       ++$cur_time;
+       return $members->[0] eq $self->{nodename} ? 1 : 0;
+    }
 
     ++$cur_time;
     return 0;
 }
 
+# return true when cluster is quorate
+sub quorate {
+    my ($self) = @_;
+
+    if (my $members = &$lookup_quorum_info($self)) {
+       foreach my $node (@$members) {
+           return 1 if $node eq $self->{nodename};
+       }
+    }
+
+    return 0;
+}
+
 sub get_node_info {
     my ($self) = @_;
 
index 205acb5e9e152bfb2a346f6b9064c2732a1fdbd5..23317c215490a5a85a791c6a3984c3e806247b76 100755 (executable)
@@ -63,7 +63,7 @@ sub sleep_until {
 $status = get_manager_status();
 
 # can happen after crash?
-if ($status eq 'quorate') {
+if ($status eq 'master') {
     set_manager_status('recover');
 } else {
     set_manager_status('startup');   
@@ -85,9 +85,9 @@ eval {
            set_manager_status('startup');
        } elsif ($status eq 'startup') {
            if (get_manager_lock()) {
-               set_manager_status('quorate');
+               set_manager_status('master');
            }
-       } elsif ($status eq 'quorate') {
+       } elsif ($status eq 'master') {
 
            my $startime = $haenv->get_time();