@@ -250,6 +250,10 @@ $ nsdb-resolve-fsn -e o=fedfs \\
.sp
For FSN UUID 8e246ddc-7b46-11e0-8252-000c297fd679
.br
+ FSN TTL 600
+.sp
+------------------------------------------------------
+.br
dn: fedfsFslUuid=323c5068-7c11-11e0-8d38-000c297fd679,
.br
fedfsFsnUuid=8e246ddc-7b46-11e0-8252-000c297fd679,o=fedfs
@@ -267,8 +267,10 @@ nfsref_lookup_resolve_fsn(const char *fsn_uuid, nsdb_t host)
{
int status = EXIT_FAILURE;
struct fedfs_fsl *fsls;
+ struct fedfs_fsn *fsn;
unsigned int ldap_err;
FedFsStatus retval;
+ int fsn_ttl;
xlog(D_GENERAL, "%s: resolving FSN UUID %s with NSDB %s:%u",
__func__, fsn_uuid, nsdb_hostname(host), nsdb_port(host));
@@ -276,11 +278,36 @@ nfsref_lookup_resolve_fsn(const char *fsn_uuid, nsdb_t host)
if (nsdb_open_nsdb(host, NULL, NULL, &ldap_err) != FEDFS_OK)
return status;
+ retval = nsdb_get_fsn_s(host, NULL, fsn_uuid, &fsn, &ldap_err);
+ switch (retval) {
+ case FEDFS_OK:
+ fsn_ttl = fsn->fn_fsnttl;
+ nsdb_free_fedfs_fsn(fsn);
+ break;
+ case FEDFS_ERR_NSDB_NOFSN:
+ xlog(L_ERROR, "%s: No FSN %s found",
+ __func__, fsn_uuid);
+ goto out_close;
+ case FEDFS_ERR_NSDB_LDAP_VAL:
+ xlog(L_ERROR, "%s: NSDB operation failed with %s",
+ __func__, ldap_err2string(ldap_err));
+ goto out_close;
+ default:
+ xlog(L_ERROR, "%s: Failed to retrieve FSN %s: %s",
+ __func__, fsn_uuid, nsdb_display_fedfsstatus(status));
+ goto out_close;
+ }
+
retval = nsdb_resolve_fsn_s(host, NULL, fsn_uuid, &fsls, &ldap_err);
switch (retval) {
case FEDFS_OK:
+ printf("fedfsFsnUuid:\t%s\n", fsn_uuid);
+ printf("NSDB:\t\t%s:%u\n", nsdb_hostname(host), nsdb_port(host));
+ printf("fedfsFsnTTL:\t%d\n", fsn_ttl);
+
nfsref_lookup_display_fedfs_fsls(fsls);
nsdb_free_fedfs_fsls(fsls);
+
status = EXIT_SUCCESS;
break;
case FEDFS_ERR_NSDB_NOFSL:
@@ -300,6 +327,7 @@ nfsref_lookup_resolve_fsn(const char *fsn_uuid, nsdb_t host)
__func__, fsn_uuid, nsdb_display_fedfsstatus(status));
}
+out_close:
nsdb_close_nsdb(host);
return status;
}
@@ -147,6 +147,7 @@ nsdb_resolve_fsn_display_fsl(struct fedfs_fsl *fsl)
{
int i;
+ printf("------------------------------------------------------\n");
printf("dn: %s\n\n", fsl->fl_dn);
printf(" FSN UUID:\t\t%s\n", fsl->fl_fsnuuid);
@@ -197,11 +198,12 @@ main(int argc, char **argv)
char *progname, *nsdbname;
unsigned short nsdbport;
struct fedfs_fsl *fsls;
+ struct fedfs_fsn *fsn;
unsigned int ldap_err;
char *nce, *fsn_uuid;
FedFsStatus retval;
+ int fsn_ttl, arg;
nsdb_t host;
- int arg;
(void)umask(S_IRWXO);
@@ -309,10 +311,38 @@ main(int argc, char **argv)
goto out_free;
}
+ retval = nsdb_get_fsn_s(host, nce, fsn_uuid, &fsn, &ldap_err);
+ switch (retval) {
+ case FEDFS_OK:
+ fsn_ttl = fsn->fn_fsnttl;
+ nsdb_free_fedfs_fsn(fsn);
+ break;
+ case FEDFS_ERR_NSDB_NONCE:
+ if (nce == NULL)
+ fprintf(stderr, "NSDB %s:%u has no NCE\n",
+ nsdbname, nsdbport);
+ else
+ fprintf(stderr, "NCE %s does not exist\n", nce);
+ goto out_close;
+ case FEDFS_ERR_NSDB_NOFSN:
+ fprintf(stderr, "Failed to find FSN %s\n", fsn_uuid);
+ goto out_close;
+ case FEDFS_ERR_NSDB_LDAP_VAL:
+ fprintf(stderr, "NSDB LDAP error: %s\n",
+ ldap_err2string(ldap_err));
+ goto out_close;
+ default:
+ fprintf(stderr, "FedFsStatus code "
+ "while retrieving FSN UUID %s: %s\n",
+ fsn_uuid, nsdb_display_fedfsstatus(retval));
+ goto out_close;
+ }
+
retval = nsdb_resolve_fsn_s(host, nce, fsn_uuid, &fsls, &ldap_err);
switch (retval) {
case FEDFS_OK:
- printf("For FSN UUID %s:\n\n", fsn_uuid);
+ printf("For FSN UUID: %s\n", fsn_uuid);
+ printf(" FSN TTL: %d\n\n", fsn_ttl);
nsdb_resolve_fsn_display_fsls(fsls);
nsdb_free_fedfs_fsls(fsls);
break;
@@ -324,8 +354,9 @@ main(int argc, char **argv)
fprintf(stderr, "NCE %s does not exist\n", nce);
break;
case FEDFS_ERR_NSDB_NOFSL:
- fprintf(stderr, "Failed to find FSL entries for FSN %s\n",
- fsn_uuid);
+ printf("For FSN UUID: %s\n", fsn_uuid);
+ printf(" FSN TTL: %d\n", fsn_ttl);
+ printf(" No FSL entries found\n");
break;
case FEDFS_ERR_NSDB_NOFSN:
fprintf(stderr, "Failed to find FSN %s\n", fsn_uuid);
@@ -340,6 +371,7 @@ main(int argc, char **argv)
fsn_uuid, nsdb_display_fedfsstatus(retval));
}
+out_close:
nsdb_close_nsdb(host);
out_free:
Now that nsdb_resolve_fsn_s() returns a TTL, various tools are altered to display it. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> --- doc/man/nsdb-resolve-fsn.8 | 4 ++++ src/nfsref/lookup.c | 28 ++++++++++++++++++++++++++++ src/nsdbc/nsdb-resolve-fsn.c | 40 ++++++++++++++++++++++++++++++++++++---- 3 files changed, 68 insertions(+), 4 deletions(-)