NetApp Community Update
This site will enter Read Only mode on July 23 as we prepare to move to a new platform. You will still be able to view content, but posting and replying will be temporarily disabled.
We're excited to launch our new Community experience on July 30 and more information will follow soon.
Stay connected during the transition - Join our Discord community today.

Software Development Kit (SDK) and API Discussions

cDOT: volume-get-iter API returns same set of volumes every time

nitish
6,784 Views

I tried to fetch volume info from a clustered ONTAP filer via NMSDK and I have an issue with iterate a list of volume objects.

The “volume-get-iter” element seems like most relevant to what I am looking for. However the tag I specified with from the last call, always return the same set of the volume objects.

Here is my code snip. Any ideas?

I suspect something might be wrong with the way tag I specified.

This cluster has 15 volume objects,  I should get 4 different list of volume objects each time (and the last one will be 3 volume objects).

However, i get the same set of volumes every time.


=== === === ===

my $api = create_element();

my $xo = $s->invoke_elem($api);

if ( $xo->results_status() eq 'failed' ) {

    print 'Error:\n';

    print $xo->sprintf();

    exit 1;

}

my $tag;

my $number_records;

do {

    $number_records = $xo->child_get_int("num-records");

    last if $number_records == 0;

    $tag            = $xo->child_get_string("next-tag");

    print $xo->sprintf();

    $api = create_element();

    $api->child_add_string( "tag", $tag );

    my $xo = $s->invoke_elem($api);

    if ( $xo->results_status() eq 'failed' ) {

        print 'Error:\n';

        print $xo->sprintf();

        exit 1;

    }

    sleep 5;

} while ( $number_records != 0 );

sub create_element {

    my $api = new NaElement('volume-get-iter');

    my $xi = new NaElement('desired-attributes');

    $api->child_add($xi);

    my $xi1 = new NaElement('volume-attributes');

    $xi->child_add($xi1);

    my $xi12 = new NaElement('volume-id-attributes');

    $xi1->child_add($xi12);

    $xi12->child_add_string('name');

    $xi12->child_add_string('junction-path');

    $api->child_add_string( 'max-records', '4' );

    return $api;

}

1 ACCEPTED SOLUTION

rle
NetApp Alumni
6,786 Views

Hi,

I think I ran into this problem as well.  I looked at the code I posted over a year ago, and the loop end condition was not the number of records, but the existence of next-tag.  Here is a snippet.

    # Get the tag for the next iteration and create the tag element.
    #
    $tag = $xout->child_get_string("next-tag");
    my $tag_elem = NaElement->new("tag");
    $xin->child_add($tag_elem);

    while (defined($tag)) {
            $tag_elem->set_content($tag);

            my $xout = $server->invoke_elem($xin);
            if ($xout->results_status() eq "failed") {
                    print("volume-get-iter error: " .
                            $xout->results_reason() . "\n");
                    exit(-1);
            }

            tellus(2, "Loop: " . $xout->sprintf());

            @vol_list = $xout->child_get("attributes-list")->children_get();
            foreach $vol_info (@vol_list) {
                    print_vol_info($vol_info);
            }

            $tag = $xout->child_get_string("next-tag");
    }

Regards,

   - Rick -

View solution in original post

2 REPLIES 2

rle
NetApp Alumni
6,787 Views

Hi,

I think I ran into this problem as well.  I looked at the code I posted over a year ago, and the loop end condition was not the number of records, but the existence of next-tag.  Here is a snippet.

    # Get the tag for the next iteration and create the tag element.
    #
    $tag = $xout->child_get_string("next-tag");
    my $tag_elem = NaElement->new("tag");
    $xin->child_add($tag_elem);

    while (defined($tag)) {
            $tag_elem->set_content($tag);

            my $xout = $server->invoke_elem($xin);
            if ($xout->results_status() eq "failed") {
                    print("volume-get-iter error: " .
                            $xout->results_reason() . "\n");
                    exit(-1);
            }

            tellus(2, "Loop: " . $xout->sprintf());

            @vol_list = $xout->child_get("attributes-list")->children_get();
            foreach $vol_info (@vol_list) {
                    print_vol_info($vol_info);
            }

            $tag = $xout->child_get_string("next-tag");
    }

Regards,

   - Rick -

aleex
6,483 Views

Hello,

 

I'm having some problems with "snapshot-get-iter". Seems that I'm getting the same values again and again.

  

Is the post before this your solution? The other article mentioned from you isn't only anymore.

 

Thanks for any idea and best regards,

Alex

Public