diff options
author | tony-zfs <[email protected]> | 2020-07-23 20:44:03 -0400 |
---|---|---|
committer | GitHub <[email protected]> | 2020-07-23 17:44:03 -0700 |
commit | 02fced3067798cbc5472f180e4c6d36f4c441a77 (patch) | |
tree | ef7bcd0c11adb5a7084679e46d1d385a5fc90cec /cmd | |
parent | bfafe1780a61a1be0a84273c7155708de003033e (diff) |
Add support to decode a resume token
Adding a new subcommand to zstream called token. This
now allows users to decode a resume token to retrieve the toname
field. This can be useful for tools that need this information.
The syntax works as follows zstream token <resume_token>.
Reviewed-by: Matt Ahrens <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed-by: Paul Zuchowski <[email protected]>
Signed-off-by: Tony Perkins <[email protected]>
Closes #10558
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/zstream/Makefile.am | 3 | ||||
-rw-r--r-- | cmd/zstream/zstream.c | 5 | ||||
-rw-r--r-- | cmd/zstream/zstream.h | 1 | ||||
-rw-r--r-- | cmd/zstream/zstream_token.c | 78 |
4 files changed, 86 insertions, 1 deletions
diff --git a/cmd/zstream/Makefile.am b/cmd/zstream/Makefile.am index 5e0312f23..5e2ac5d69 100644 --- a/cmd/zstream/Makefile.am +++ b/cmd/zstream/Makefile.am @@ -6,7 +6,8 @@ zstream_SOURCES = \ zstream.c \ zstream.h \ zstream_dump.c \ - zstream_redup.c + zstream_redup.c \ + zstream_token.c zstream_LDADD = \ $(abs_top_builddir)/lib/libzfs/libzfs.la \ diff --git a/cmd/zstream/zstream.c b/cmd/zstream/zstream.c index 95578c97c..cbcb560a8 100644 --- a/cmd/zstream/zstream.c +++ b/cmd/zstream/zstream.c @@ -15,6 +15,7 @@ /* * Copyright (c) 2020 by Delphix. All rights reserved. + * Copyright (c) 2020 by Datto Inc. All rights reserved. */ #include <sys/types.h> #include <sys/stat.h> @@ -39,6 +40,8 @@ zstream_usage(void) "\tzstream dump [-vCd] FILE\n" "\t... | zstream dump [-vCd]\n" "\n" + "\tzstream token resume_token\n" + "\n" "\tzstream redup [-v] FILE | ...\n"); exit(1); } @@ -53,6 +56,8 @@ main(int argc, char *argv[]) if (strcmp(subcommand, "dump") == 0) { return (zstream_do_dump(argc - 1, argv + 1)); + } else if (strcmp(subcommand, "token") == 0) { + return (zstream_do_token(argc - 1, argv + 1)); } else if (strcmp(subcommand, "redup") == 0) { return (zstream_do_redup(argc - 1, argv + 1)); } else { diff --git a/cmd/zstream/zstream.h b/cmd/zstream/zstream.h index 5a7f4bce9..319fecb28 100644 --- a/cmd/zstream/zstream.h +++ b/cmd/zstream/zstream.h @@ -26,6 +26,7 @@ extern "C" { extern int zstream_do_redup(int, char *[]); extern int zstream_do_dump(int, char *[]); +extern int zstream_do_token(int, char *[]); extern void zstream_usage(void); #ifdef __cplusplus diff --git a/cmd/zstream/zstream_token.c b/cmd/zstream/zstream_token.c new file mode 100644 index 000000000..36a76a4bb --- /dev/null +++ b/cmd/zstream/zstream_token.c @@ -0,0 +1,78 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + * + * Portions Copyright 2012 Martin Matuska <[email protected]> + */ + +/* + * Copyright (c) 2020 by Datto Inc. All rights reserved. + */ + +#include <ctype.h> +#include <libnvpair.h> +#include <stdio.h> +#include <stdlib.h> +#include <strings.h> +#include <unistd.h> +#include <stddef.h> + +#include <libzfs.h> +#include <libzfs_core.h> + +#include <sys/dmu.h> +#include <sys/zfs_ioctl.h> +#include "zstream.h" + +int +zstream_do_token(int argc, char *argv[]) +{ + char *resume_token = NULL; + + if (argc < 2) { + (void) fprintf(stderr, "Need to pass the resume token\n"); + zstream_usage(); + } + + resume_token = argv[1]; + + libzfs_handle_t *hdl = libzfs_init(); + + nvlist_t *resume_nvl = + zfs_send_resume_token_to_nvlist(hdl, resume_token); + + if (resume_nvl == NULL) { + (void) fprintf(stderr, + "Unable to parse resume token: %s\n", + libzfs_error_description(hdl)); + libzfs_fini(hdl); + return (1); + } + + dump_nvlist(resume_nvl, 5); + nvlist_free(resume_nvl); + + libzfs_fini(hdl); + return (0); +} |