So, in another thread there was a discussion of using cibadmin to
mitigate possible concurrency issue of crm shell.  I have written a test
program to test that theory and unfortunately cibadmin falls down in the
face of heavy concurrency also with errors such as:

Signon to CIB failed: connection failed
Init failed, could not perform requested operations
Signon to CIB failed: connection failed
Init failed, could not perform requested operations
Signon to CIB failed: connection failed
Init failed, could not perform requested operations

Effectively my test runs:

for x in $(seq 1 50); do
    cibadmin -o resources -C -x resource-$x.xml &
done

My complete test program is attached for review/experimentation if you wish.

Am I doing something wrong or is this a bug?  I'm using pacemaker
1.0.10-1.4.el5 for what it's worth.

Cheers,
b.
#!/bin/bash

set -e

trap 'echo "got an error"' ERR

add_resource() {
    local num="$1"
    local add_constraints=${2:-false}
    local use_crm=${3:-false}
    
    cat <<EOF > /tmp/resource-$num.xml
<primitive class="ocf" provider="foo" type="Target" id="resource-$num">
  <meta_attributes id="resource-$num-meta_attributes">
    <nvpair name="target-role" id="resource-$num-meta_attributes-target-role" 
value="Stopped"/>
  </meta_attributes>
  <operations id="resource-$num-operations">
    <op id="resource-$num-monitor-120" interval="120" name="monitor" 
timeout="60"/>
    <op id="resource-$num-start-0" interval="0" name="start" timeout="300"/>
    <op id="resource-$num-stop-0" interval="0" name="stop" timeout="300"/>
  </operations>
  <instance_attributes id="resource-$num-instance_attributes">
    <nvpair id="resource-$num-instance_attributes-target" name="target" 
value="resource-$num"/>
  </instance_attributes>
</primitive>
EOF

    if ! $use_crm; then
        cibadmin -o resources -C -x /tmp/resource-$num.xml
        if $add_constraints; then
            cibadmin -o constraints -C -X "<rsc_location 
id=\"resource-$num-primary\" node=\"$(uname -n)\" rsc=\"resource-$num\" 
score=\"10\"/>"
        fi
    else
        crm configure primitive resource-$num ocf:foo:Target meta \
            target-role="stopped" operations \$id="resource-$num-operations" \
            op monitor interval="120" timeout="60" op start interval="0" \
            timeout="300" op stop interval="0" timeout="300" params \
            target="resource-$num"
    fi

}

remove_resource() {
    local num="$1"

    cibadmin -D -X "<rsc_location id=\"resource-$num-primary\">"
    cibadmin -D -X "<primitive id=\"resource-$num\">"

}

CLEAN=${CLEAN:-false}
USE_CRM=${USE_CRM:-false}
ADD_CONSTRAINTS=${ADD_CONSTRAINTS:-false}
CONCURRENT=${CONCURRENT:-false}

# not interested in conncurrent cleaning at this time
if $CLEAN; then
    CONCURRENT=false
fi

for x in $(seq 1 50); do
    if $CLEAN; then
        remove_resource $x $AMP
    else
        if $CONCURRENT; then
            add_resource $x $USE_CRM $ADD_CONSTRAINTS &
        else
            add_resource $x $USE_CRM $ADD_CONSTRAINTS 
        fi
    fi
done
if $CONCURRENT; then
    echo "waiting: $(date)"
    wait
    echo "done: $(date)"
fi

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Pacemaker mailing list: Pacemaker@oss.clusterlabs.org
http://oss.clusterlabs.org/mailman/listinfo/pacemaker

Project Home: http://www.clusterlabs.org
Getting started: http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf
Bugs: http://developerbugs.linux-foundation.org/enter_bug.cgi?product=Pacemaker

Reply via email to