ADSM-L

API / Client compatibility

2002-02-07 18:57:17
Subject: API / Client compatibility
From: "Thomas A. La Porte" <tlaporte AT ANIM.DREAMWORKS DOT COM>
Date: Thu, 7 Feb 2002 11:55:05 -0800
We are in the process of writing an Linux archive client through
the TSM API (4.2), storing objects in an TSM 4.1 server running
on AIX. We would like to avoid writing a retrieve client, as
we're satisfied with the functionality of the TSM BA client. I
know there have been interoperability issues in the past, but the
API manual clearly addresses *some* of these issues.

What we are wondering is how file permissions need to be stored
by the API client so that the BA client can retrieve them
properly.

We attempted to pass a struct stat in the objAttrPtr.objInfo
(see below), but when we retrieve the files using the BA client,
all files are retrieved with perms set to 000 and a timestamp
that is very wrong (e.g. Dec 5, 1930 on some files :-), rather
than the perms and timestamp stored in the struct stat.

This was just a guess (which was apparently wrong), but it's
completely unclear as to what *would* be correct. Page 74 of the
API Manual states the following in reference to using
restore/retrieve commands for API objects:

  Note: Use these commands for exception situations only.

  These commands return data as bit files that are created
  using default file attributes. You can restore or retrieve API
  objects that other users own, or that are from a different
  node. The set access command determines which objects qualify.

If it were truly using "default" file attributes, I would have
expected them to be umask based. But the fact that perms are set
to 0 and the timestamps are set consistently wrong indicates that
the BA client *is* attempting to use the struct stat info in
objInfo.

Has anybody reconciled this? Has anybody successfully written an
API client for which objects can be retrieved or restored using
the BA client?

Thanks,

 -- Tom

Thomas A. La Porte
DreamWorks SKG
tlaporte AT anim.dreamworks DOT com



if ((rc = lstat(filelist[i].filename, &sb)) != 0)
{
        fprintf(stderr, "stat %s: ", filelist[i].filename);
        perror("");
        continue;
}

[...]

ObjAttrData.objInfoLength = sizeof(sb);
ObjAttrData.objInfo = (char *)&sb
<Prev in Thread] Current Thread [Next in Thread>
  • API / Client compatibility, Thomas A. La Porte <=