[Drbd-dev] syncsource -> sync completed ack lost

Petrakis, Peter Peter.Petrakis at stratus.com
Wed Jan 6 15:51:23 CET 2010


Hi,

> 8.2 is obsolete.
> it has been superseeded by 8.3

I know we're behind, such is the life of a vendor branch :)
 
> if you can reproduce with 8.3,
> we will certainly look into this.

I can re-run the tests but in general we have a difficult time
reproducing these bugs. Do you know of a way I could "stage" the
state transitions so to make it more reproducable?
 
> but I think we fix a few things that would match your symptoms in 8.3.
> 
> we are currently (well, tomorrow) at 8.3.7 rc2

That's promising.
 
> > Jan  5 14:36:18 node1 kernel: drbd5: helper command:
> > /usr/lib/spine/bin/avance_drbd_helper after-resync-target minor-5
> 
> I'd be interessted in this /usr/lib/spine/bin/avance_drbd_helper.
> what does it do, compared with drbdadm?

Sure, we wrote our own drbd management daemon which is part of our
cluster manager. The DRBD resources are constructed as a consequence 
of VM provisioning, using drbdsetup. So we already have a config to 
reference, however to make use of the fencing handler we would also
have maintain the drbd.conf file, which after much consideration it was
determined as being too fragile for our environment: Should one part of
the config file become inconsistent then all resources are affected.

avance_drbd_helper will dispatch only the events we care to handle to
our other custom handlers which will communicate to our management
daemon
directly using XML-RPC. So I have access to not only what would
be found normally in the drbd.conf to make decisions, but the entire
state
of the cluster.

$cat avance_drbd_helper

#!/usr/lib/spine/bin/ruby


$:.unshift('/usr/lib/spine')
$0 = 'avance_drbd_helper'

require 'base/extensions'
require 'syslog'

$syslog = Syslog.open($0, Syslog::LOG_NDELAY, Syslog::LOG_DAEMON)
$syslog.notice "invoking #{$0}"

usage = <<-EOF
    Description:
        This is a pass-thru helper for drbd. We execute processes on
it's
        behalf and return the exit status back to the khelper.
    Usage:
        avance_drbd_helper  <action> <arguments>
    EOF

puts usage unless ARGV.length > 0

# see drbd_khelper for argument list passed to userspace
khelper  = ARGV[0] # 'outdate-peer'
resource = ARGV[1] # 'minor-5'

# the config file is no longer necessary, add all calls to
# khelpers here instead.
if khelper == 'outdate-peer' || khelper == 'fence-peer'
    resource.match(/minor-(\d+)/)
    %x{/usr/lib/spine/bin/drbd_outdate_peer drbd#{$1}}
    exit $?.exitstatus
end

if $DEBUG
    ARGV.each_with_index do |arg, idx|
        $syslog.notice "arg[#{idx}]='#{arg}'"
    end
end

# safe default value for the rest of the handlers e.g.
before-resync-target
exit 0
##
# vim: ts=4:sw=4:ai:expandtab

Should anyone else want to use this, just remove any references to
"spine"
and "require 'base/extensions'". We override the default implementation
of
%x.

Peter

> --
> : Lars Ellenberg
> : LINBIT | Your Way to High Availability
> : DRBD/HA support and consulting http://www.linbit.com
> 
> DRBD(r) and LINBIT(r) are registered trademarks of LINBIT, Austria.
> _______________________________________________
> drbd-dev mailing list
> drbd-dev at lists.linbit.com
> http://lists.linbit.com/mailman/listinfo/drbd-dev
> 


More information about the drbd-dev mailing list