From: Lai Siyao Date: Wed, 18 Jan 2023 00:23:05 +0000 (-0500) Subject: LU-16615 utils: add messages in l_getidentity X-Git-Tag: 2.15.55~33 X-Git-Url: https://git.whamcloud.com/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F13%2F50213%2F3;p=fs%2Flustre-release.git LU-16615 utils: add messages in l_getidentity Add time related messages in l_getidentity to help debug upon timeout, which may cause -EACCES error in user applications. Test-Parameters: trivial Signed-off-by: Lai Siyao Change-Id: I87ebfb85d05e19886d8becc6b14ed0233eaed42d Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/50213 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Olaf Faaland Reviewed-by: Oleg Drokin --- diff --git a/lustre/utils/l_getidentity.c b/lustre/utils/l_getidentity.c index 52fd150..ec57922 100644 --- a/lustre/utils/l_getidentity.c +++ b/lustre/utils/l_getidentity.c @@ -43,6 +43,7 @@ #include #include #include +#include #include #include @@ -401,12 +402,17 @@ static void show_result(struct identity_downcall_data *data) printf("\n"); } +#define difftime(a, b) \ + ((a).tv_sec - (b).tv_sec + \ + ((a).tv_usec - (b).tv_usec) / 1000000.0) + int main(int argc, char **argv) { char *end; struct identity_downcall_data *data = NULL; glob_t path; unsigned long uid; + struct timeval start, idgot, fini; int fd, rc = -EINVAL, size, maxgroups; bool alreadyfailed = false; @@ -421,6 +427,7 @@ int main(int argc, char **argv) errlog("%s: invalid uid '%s'\n", progname, argv[2]); goto out; } + gettimeofday(&start, NULL); maxgroups = sysconf(_SC_NGROUPS_MAX); if (maxgroups > NGROUPS_MAX) @@ -456,6 +463,7 @@ retry: /* read permission database */ rc = get_perms(data); + gettimeofday(&idgot, NULL); downcall: if (strcmp(argv[1], "-d") == 0 || getenv("L_GETIDENTITY_TEST")) { show_result(data); @@ -478,6 +486,7 @@ downcall: } rc = write(fd, data, size); + gettimeofday(&fini, NULL); close(fd); if (rc != size) { errlog("partial write ret %d: %s\n", rc, strerror(errno)); @@ -492,6 +501,11 @@ downcall: } else { rc = 0; } + /* log if it takes more than 20 second to avoid rate limite */ + if (rc || difftime(fini, start) > 20) + errlog("get identity for uid %lu start time %ld.%06ld got time %ld.%06ld end time %ld.%06ld: rc = %d\n", + uid, start.tv_sec, start.tv_usec, idgot.tv_sec, + idgot.tv_usec, fini.tv_sec, fini.tv_usec, rc); out_params: cfs_free_param_data(&path);