Software Development Kit (SDK) and API Discussions

OnTAPI volume-get-iter returns with errors

ADRIAN_PYBUS
4,356 Views

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
4,341 Views

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
4,290 Views

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
3,514 Views

Hi,

 

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

 

Thanks

robinpeter
3,483 Views

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...

Public