The latest NSDB schema removes the NSDB name attribute from the fedfsFsn object class, but adds a TTL. Update nsdb_create_fsn_s() to comply with the new schema, and allow nsdb-create-fsn to take an optional TTL argument.
Signed-off-by: Chuck Lever <[email protected]> --- doc/man/nsdb-create-fsn.8 | 8 ++++++++ src/include/nsdb.h | 4 ++-- src/libnsdb/administrator.c | 30 ++++++++++++------------------ src/nfsref/add.c | 8 ++++++-- src/nsdbc/nsdb-create-fsn.c | 33 +++++++++++++++++++++++++++------ 5 files changed, 55 insertions(+), 28 deletions(-) diff --git a/doc/man/nsdb-create-fsn.8 b/doc/man/nsdb-create-fsn.8 index 50d0785..1aef5eb 100644 --- a/doc/man/nsdb-create-fsn.8 +++ b/doc/man/nsdb-create-fsn.8 @@ -37,6 +37,8 @@ nsdb-create-fsn \- create a fileset name (FSN) record on an NSDB .IR nsdbname ] .RB [ \-r .IR nsdbport ] +.RB [ \-t +.IR ttl ] .I fsn-uuid .SH INTRODUCTION RFC 5716 introduces the Federated File System (FedFS, for short). @@ -146,6 +148,12 @@ If the option is not specified, the value of the FEDFS_NSDB_PORT environment variable is consulted. The default value if the variable is not set is 389. +.IP "\fB\-t, \-\-ttl=\fITTL\fP" +Specifies the number of seconds a file server may cache the information +in this record. If the +.B \-\-ttl +option is not specified, +a value of 300 seconds is used. .SH EXIT CODES The NSDB returns a value that reflects the success of the requested operation. .TP diff --git a/src/include/nsdb.h b/src/include/nsdb.h index 196ef0f..f5b98b7 100644 --- a/src/include/nsdb.h +++ b/src/include/nsdb.h @@ -243,8 +243,8 @@ void nsdb_env(char **nsdbname, unsigned short *nsdbport, * Create an FSN (5.1.1) */ FedFsStatus nsdb_create_fsn_s(nsdb_t host, const char *nce, - const char *fsn_uuid, const char *nsdbname, - const unsigned short nsdbport, + const char *fsn_uuid, + const unsigned int ttl, unsigned int *ldap_err); /** diff --git a/src/libnsdb/administrator.c b/src/libnsdb/administrator.c index 00bdd10..8dfa365 100644 --- a/src/libnsdb/administrator.c +++ b/src/libnsdb/administrator.c @@ -85,8 +85,7 @@ nsdb_construct_fsn_dn(const char *nce, const char *fsn_uuid) * @param ld an initialized LDAP server descriptor * @param nce a NUL-terminated C string containing DN of NSDB container entry * @param fsn_uuid a NUL-terminated C string containing FSN UUID - * @param nsdbname a NUL-terminated C string containing DNS hostname of NSDB server - * @param nsdbport port number of NSDB server + * @param ttl number of seconds fileservers may cache this FSN * @param ldap_err OUT: possibly an LDAP error code * @return a FedFsStatus code * @@ -98,18 +97,18 @@ nsdb_construct_fsn_dn(const char *nce, const char *fsn_uuid) changeType: add objectClass: fedfsFsn fedfsFsnUuid: "fsn_uuid" - fedfsNsdbName: "nsdbname" + fedfsFsnTTL: "ttl" @endverbatim */ static FedFsStatus nsdb_create_fsn_add_entry(LDAP *ld, const char *nce, - const char *fsn_uuid, const char *nsdbname, - const unsigned short nsdbport, unsigned int *ldap_err) + const char *fsn_uuid, const unsigned int ttl, + unsigned int *ldap_err) { - char *ocvals[2], *uuidvals[2], *namevals[2], *portvals[2]; + char *ocvals[2], *uuidvals[2], *ttlvals[2]; LDAPMod *attrs[5]; LDAPMod attr[4]; - char portbuf[8]; + char ttlbuf[16]; int i, rc; char *dn; @@ -121,11 +120,9 @@ nsdb_create_fsn_add_entry(LDAP *ld, const char *nce, "objectClass", ocvals, "fedfsFsn"); nsdb_init_add_attribute(attrs[i++], "fedfsFsnUuid", uuidvals, fsn_uuid); + sprintf(ttlbuf, "%u", ttl); nsdb_init_add_attribute(attrs[i++], - "fedfsNsdbName", namevals, nsdbname); - sprintf(portbuf, "%u", nsdbport); - nsdb_init_add_attribute(attrs[i++], - "fedfsNsdbPort", portvals, portbuf); + "fedfsFsnTTL", ttlvals, ttlbuf); attrs[i] = NULL; @@ -152,29 +149,26 @@ nsdb_create_fsn_add_entry(LDAP *ld, const char *nce, * @param host an initialized and bound nsdb_t object * @param nce a NUL-terminated C string containing DN of NSDB container entry * @param fsn_uuid a NUL-terminated C string containing FSN UUID - * @param nsdbname a NUL-terminated C string containing DNS hostname of NSDB server - * @param nsdbport port number of NSDB server + * @param ttl number of seconds fileservers may cache this FSN * @param ldap_err OUT: possibly an LDAP error code * @return a FedFsStatus code */ FedFsStatus nsdb_create_fsn_s(nsdb_t host, const char *nce, const char *fsn_uuid, - const char *nsdbname, const unsigned short nsdbport, - unsigned int *ldap_err) + const unsigned int ttl, unsigned int *ldap_err) { if (host->fn_ldap == NULL) { xlog(L_ERROR, "%s: NSDB not open", __func__); return FEDFS_ERR_INVAL; } - if (nce == NULL || fsn_uuid == NULL || - nsdbname == NULL || ldap_err == NULL) { + if (nce == NULL || fsn_uuid == NULL || ldap_err == NULL) { xlog(L_ERROR, "%s: Invalid parameter", __func__); return FEDFS_ERR_INVAL; } return nsdb_create_fsn_add_entry(host->fn_ldap, nce, fsn_uuid, - nsdbname, nsdbport, ldap_err); + ttl, ldap_err); } /** diff --git a/src/nfsref/add.c b/src/nfsref/add.c index e437c8b..deb894f 100644 --- a/src/nfsref/add.c +++ b/src/nfsref/add.c @@ -42,6 +42,11 @@ #include "nfsref.h" /** + * Default cache expiration for FSN information + */ +#define FSN_DEFAULT_TTL (300) + +/** * Fill in default settings for NFSv4.0 fs_locations4 * * @param new NFS location structure to fill in @@ -239,8 +244,7 @@ nfsref_add_create_fedfs_fsn(nsdb_t host, const char *nce, char **fsn_uuid) uuid_unparse(uu, fsnuuid); retval = nsdb_create_fsn_s(host, nce, fsnuuid, - nsdb_hostname(host), nsdb_port(host), - &ldap_err); + FSN_DEFAULT_TTL, &ldap_err); switch (retval) { case FEDFS_OK: xlog(D_GENERAL, "%s: Successfully created FSN record " diff --git a/src/nsdbc/nsdb-create-fsn.c b/src/nsdbc/nsdb-create-fsn.c index 2804d6d..5591516 100644 --- a/src/nsdbc/nsdb-create-fsn.c +++ b/src/nsdbc/nsdb-create-fsn.c @@ -48,9 +48,14 @@ #include "gpl-boiler.h" /** + * Default cache expiration for FSN information + */ +#define FSN_DEFAULT_TTL (300) + +/** * Short form command line options */ -static const char nsdb_create_fsn_opts[] = "?dD:e:l:r:"; +static const char nsdb_create_fsn_opts[] = "?dD:e:l:r:t:"; /** * Long form command line options @@ -62,6 +67,7 @@ static const struct option nsdb_create_fsn_longopts[] = { { "nce", 1, NULL, 'e', }, { "nsdbname", 1, NULL, 'l', }, { "nsdbport", 1, NULL, 'r', }, + { "ttl", 1, NULL, 't', }, { NULL, 0, NULL, 0, }, }; @@ -74,7 +80,7 @@ static void nsdb_create_fsn_usage(const char *progname) { fprintf(stderr, "\n%s version " VERSION "\n", progname); - fprintf(stderr, "Usage: %s [ -d ] [ -D binddn ] " + fprintf(stderr, "Usage: %s [ -d ] [ -D binddn ] [ -t ttl ] " "[ -l nsdbname ] [ -r nsdbport ] [ -e nce ] " "fsn-uuid\n\n", progname); @@ -85,6 +91,7 @@ nsdb_create_fsn_usage(const char *progname) fprintf(stderr, "\t-e, --nce DN of NSDB container entry\n"); fprintf(stderr, "\t-l, --nsdbname NSDB hostname\n"); fprintf(stderr, "\t-r, --nsdbport NSDB port\n"); + fprintf(stderr, "\t-t, --ttl FSN TTL\n"); fprintf(stderr, "%s", fedfs_gpl_boilerplate); @@ -101,11 +108,12 @@ nsdb_create_fsn_usage(const char *progname) int main(int argc, char **argv) { - char *progname, *binddn, *nsdbname; + char *progname, *binddn, *nsdbname, *endptr; unsigned short nsdbport; - unsigned int ldap_err; + unsigned int ttl, ldap_err; char *nce, *fsn_uuid; FedFsStatus retval; + unsigned long tmp; nsdb_t host; int arg; @@ -130,6 +138,7 @@ main(int argc, char **argv) xlog_open(progname); nsdb_env(&nsdbname, &nsdbport, &binddn, &nce); + ttl = FSN_DEFAULT_TTL; while ((arg = getopt_long(argc, argv, nsdb_create_fsn_opts, nsdb_create_fsn_longopts, NULL)) != -1) { @@ -153,6 +162,19 @@ main(int argc, char **argv) nsdb_create_fsn_usage(progname); } break; + case 't': + if (optarg == NULL || *optarg == '\0') { + fprintf(stderr, "Missing TTL value\n"); + nsdb_create_fsn_usage(progname); + } + errno = 0; + tmp = strtoul(optarg, &endptr, 10); + if (errno != 0 || *endptr != '\0') { + fprintf(stderr, "Bad TTL value\n"); + nsdb_create_fsn_usage(progname); + } + ttl = (unsigned int)tmp; + break; default: fprintf(stderr, "Invalid command line " "argument: %c\n", (char)arg); @@ -230,8 +252,7 @@ main(int argc, char **argv) goto out_free; } - retval = nsdb_create_fsn_s(host, nce, fsn_uuid, - nsdbname, nsdbport, &ldap_err); + retval = nsdb_create_fsn_s(host, nce, fsn_uuid, ttl, &ldap_err); switch (retval) { case FEDFS_OK: printf("Successfully created FSN record for %s under %s\n", _______________________________________________ fedfs-utils-devel mailing list [email protected] https://oss.oracle.com/mailman/listinfo/fedfs-utils-devel
