Software Development Kit (SDK) and API Discussions

OnTAPI volume-get-iter returns with errors

ADRIAN_PYBUS

At customer site:

When iterating through the tags for volume-get-iter we get strange errors.

E.g. returned by na_results_errno and na_results_reason after na_server_invoke:

Error:13001, PCDATA invalid Char value 18 .

Error:1, Extra content at the end of the document .

 

We asked the customer to run the ApiTest pgm with volume-get-iter to see if there was something strange in their settings.

There was:

<results status="passed">
<attributes-list>
<volume-attributes>

... (20 volumes elided)

</volume-attributes>
</attributes-list>
<next-tag>&lt;volume-get-iter-key-td&gt;
&lt;key-0&gt;CIFS&lt;/key-0&gt;
&lt;key-1&gt;veeam_repo1&lt;/key-1&gt;
&lt;/volume-get-iter-key-td&gt;
</next-tag>
<num-records>20</num-records>
</results>

 

The text in bold seems to be garabage. I have not been able to reproduce this behavior in our lab.

 

Does anyone have any input on this?

 

Adrian

 

 

 

 

4 REPLIES 4

wh_slayer

The <next-tag> data is certainly not garbage, although it's not designed for human consumption.  You requested 20 records in your query (default, see max-records if you want to request more) but there are more than 20 records that match your query so the output has been "paged".  <next-tag> is the pointer to the next page of results, which you can feed back into another volume-get-iter as the "tag" input.  As long as you have a <next-tag> returned, you still have more results to process.  If there is no <next-tag>, you have fetched all your records.  All *-iter APIs should support max-records and tag/next-tag.

 

So that doesn't solve your real issue but hopefully you understand what <next-tag> is now.

ADRIAN_PYBUS

OK. I knew about the next-tag but was just surprised by getting unprocessed xml entities from ApiTest.

I found the bug in my code, wrong scoping for the return value from na_server_invoke.

Thanks.

 

 

 

dsever

Hi,

 

Same here by calling luns, have you resolvd this issue?

 

Thanks

robinpeter

Here it something i wrote a while back (lil more than 4 years..) in perl.

 

#Collecting CDOT Volume Information and Storing in perl hash %volinfo:
    my $volapi = new NaElement('volume-get-iter');
    $volapi->child_add_string('max-records','999');
        my $xi = new NaElement('query');
        $volapi->child_add($xi);
        my $xi1 = new NaElement('volume-attributes');
        $xi->child_add($xi1);
        my $xi3 = new NaElement('desired-attributes');
        $volapi->child_add($xi3);
            my $xi4 = new NaElement('volume-attributes');
            $xi3->child_add($xi4);
            my $xi5 = new NaElement('volume-id-attributes');
            $xi4->child_add($xi5);
            my $xi6 = new NaElement('volume-state-attributes');
            $xi4->child_add($xi6);
            my $xi7 = new NaElement('volume-space-attributes');
            $xi4->child_add($xi7);
            my $xi8 = new NaElement('volume-inode-attributes');
            $xi4->child_add($xi8);
    my $outv = $ss->invoke_elem($volapi);
    if ($outv->results_status() eq 'failed') {
        print ((caller(0))[3], $filer, $outv->results_reason(), "\n");
    } else {
        my $nor = $outv->child_get_string("num-records");
        if ($nor > 0 ) {
            my @volattr     = $outv->child_get("attributes-list")->children_get("volume-attributes");
            foreach my $vol (@volattr) {
                my $volidattr                           = $vol->child_get("volume-id-attributes");
                my $volspattr                           = $vol->child_get("volume-space-attributes");
                my $volstattr                           = $vol->child_get("volume-state-attributes");
                my $volinattr                           = $vol->child_get("volume-inode-attributes");
                if ($volidattr and $volstattr and $volspattr and $volinattr) {
                    my $volname                         = $volidattr->child_get_string("name");
                    my $volid                           = join (":", $na, $volname);
                    $volinfo{$volid}{'volid'}           = $volid;
                    $volinfo{$volid}{'uuid'}            = $volidattr->child_get_string("uuid");
                    $volinfo{$volid}{'name'}            = $volidattr->child_get_string("name");
                    $volinfo{$volid}{'type'}            = $volidattr->child_get_string("type");
                    $volinfo{$volid}{'containingAggr'}  = $volidattr->child_get_string("containing-aggregate-name");
                    $volinfo{$volid}{'junctionPath'}    = $volidattr->child_get_string("junction-path");
                    $volinfo{$volid}{'state'}           = $volstattr->child_get_string("state");
                    $volinfo{$volid}{'sizeTotal'}       = $volspattr->child_get_int("size-total");
                    $volinfo{$volid}{'sizeUsed'}        = $volspattr->child_get_int("size-used");
                    $volinfo{$volid}{'sizeAvailable'}   = $volspattr->child_get_int("size-available");
                    $volinfo{$volid}{'percentageUsed'}  = $volspattr->child_get_int("percentage-size-used");
                    $volinfo{$volid}{'filesTotal'}      = $volinattr->child_get_int("files-total");
                    $volinfo{$volid}{'filesUsed'}       = $volinattr->child_get_int("files-used");
                    $volinfo{$volid}{'filer'}           = $filer;
                }
            }
        }
    }

hope this helps...

Announcements
NetApp on Discord Image

We're on Discord, are you?

Live Chat, Watch Parties, and More!

Explore Banner

Meet Explore, NetApp’s digital sales platform

Engage digitally throughout the sales process, from product discovery to configuration, and handle all your post-purchase needs.

NetApp Insights to Action
I2A Banner
Public