[Libguestfs] nbdkit test failure with new libnbd

Richard W.M. Jones rjones at redhat.com
Mon Oct 5 15:15:52 UTC 2020


-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-p2v converts physical machines to virtual machines.  Boot with a
live CD or over the network (PXE) and turn machines into KVM guests.
http://libguestfs.org/virt-v2v
-------------- next part --------------
+ requires_plugin sh
+ requires nbdkit sh --version
+ requires nbdinfo --version
+ requires_nbdsh_uri
+ requires nbdsh -c 'exit(not h.supports_uri())'
+ requires nbdsh -c 'print(h.set_full_info)'
+ requires jq --version
+ files='exportname.out exportname.sh'
+ rm -f exportname.out exportname.sh
+ cleanup_fn rm -f exportname.out exportname.sh
+ _cleanup_hook[${#_cleanup_hook[@]}]='rm -f exportname.out exportname.sh'
+ query='[ [.exports[]] | sort_by(."export-name")[] |
  [."export-name", .description, ."export-size"] ]'
+ fail=0
+ cat
+ chmod +x exportname.sh
+ nbdkit -U - sh exportname.sh --run 'nbdinfo --json --list "$uri"'
libnbd: debug: nbd1: nbd_create: opening handle
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: enter: allow=true
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: leave: ret=0
libnbd: debug: nbd1: nbd_set_opt_mode: enter: enable=true
libnbd: debug: nbd1: nbd_set_opt_mode: leave: ret=0
libnbd: debug: nbd1: nbd_set_full_info: enter: request=true
libnbd: debug: nbd1: nbd_set_full_info: leave: ret=0
libnbd: debug: nbd1: nbd_connect_uri: enter: uri="nbd+unix://?socket=/tmp/nbdkit4t6YTT/socket"
libnbd: debug: nbd1: nbd_connect_uri: event CmdConnectSockAddr: START -> CONNECT.START
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=4
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=4
libnbd: debug: nbd1: nbd_connect_uri: event NotifyWrite: CONNECT.START -> CONNECT.CONNECTING
libnbd: debug: nbd1: nbd_connect_uri: transition: CONNECT.CONNECTING -> MAGIC.START
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.START -> MAGIC.RECV_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.RECV_MAGIC -> MAGIC.CHECK_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.CHECK_MAGIC -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.START -> NEWSTYLE.RECV_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.RECV_GFLAGS -> NEWSTYLE.CHECK_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.CHECK_GFLAGS -> NEWSTYLE.SEND_CFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.SEND_CFLAGS -> NEWSTYLE.OPT_STARTTLS.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STARTTLS.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.SEND
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.SEND -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY
libnbd: debug: nbd1: nbd_connect_uri: negotiated structured replies on this connection
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_connect_uri: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list: enter: list=<fun>
libnbd: debug: nbd1: nbd_opt_list: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.START -> NEWSTYLE.OPT_LIST.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.START -> NEWSTYLE.OPT_LIST.SEND
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.SEND -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list: leave: ret=3
libnbd: debug: nbd1: nbd_get_protocol: enter:
libnbd: debug: nbd1: nbd_get_protocol: leave: ret="newstyle-fixed"
libnbd: debug: nbd1: nbd_get_tls_negotiated: enter:
libnbd: debug: nbd1: nbd_get_tls_negotiated: leave: ret=0
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="a"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 1 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=1
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="a"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="b"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 2 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=2
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="b"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="c"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 3 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=3
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="c"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_opt_abort: enter:
libnbd: debug: nbd1: nbd_opt_abort: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.START -> NEWSTYLE.PREPARE_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.PREPARE_OPT_ABORT -> NEWSTYLE.SEND_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPT_ABORT -> NEWSTYLE.SEND_OPTION_SHUTDOWN
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPTION_SHUTDOWN -> CLOSED
libnbd: debug: nbd1: nbd_opt_abort: leave: ret=0
libnbd: debug: nbd1: nbd_shutdown: enter: flags=0x0
libnbd: debug: nbd1: nbd_shutdown: leave: error="nbd_shutdown: invalid state: CLOSED: the handle must be connected with the server: Invalid argument"
libnbd: debug: nbd1: nbd_close: closing handle
+ cat exportname.out
{
"protocol": "newstyle-fixed",
"TLS": false,
"exports": [
	{
	"export-name": "a",
	"description": "x",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 1
	},
	{
	"export-name": "b",
	"description": "y",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 2
	},
	{
	"export-name": "c",
	"description": "z",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 3
	} ]
}
++ jq -c '[ [.exports[]] | sort_by(."export-name")[] |
  [."export-name", .description, ."export-size"] ]' exportname.out
+ test '[["a","x",1],["b","y",2],["c","z",3]]' = '[["a","x",1],["b","y",2],["c","z",3]]'
+ nbdkit -U - --filter=exportname sh exportname.sh default-export= --run 'nbdinfo --no-content --json "$uri"'
libnbd: debug: nbd1: nbd_create: opening handle
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: enter: allow=true
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: leave: ret=0
libnbd: debug: nbd1: nbd_set_opt_mode: enter: enable=true
libnbd: debug: nbd1: nbd_set_opt_mode: leave: ret=0
libnbd: debug: nbd1: nbd_set_full_info: enter: request=true
libnbd: debug: nbd1: nbd_set_full_info: leave: ret=0
libnbd: debug: nbd1: nbd_connect_uri: enter: uri="nbd+unix://?socket=/tmp/nbdkitJmhKcF/socket"
libnbd: debug: nbd1: nbd_connect_uri: event CmdConnectSockAddr: START -> CONNECT.START
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=4
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=4
libnbd: debug: nbd1: nbd_connect_uri: event NotifyWrite: CONNECT.START -> CONNECT.CONNECTING
libnbd: debug: nbd1: nbd_connect_uri: transition: CONNECT.CONNECTING -> MAGIC.START
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.START -> MAGIC.RECV_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.RECV_MAGIC -> MAGIC.CHECK_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.CHECK_MAGIC -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.START -> NEWSTYLE.RECV_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.RECV_GFLAGS -> NEWSTYLE.CHECK_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.CHECK_GFLAGS -> NEWSTYLE.SEND_CFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.SEND_CFLAGS -> NEWSTYLE.OPT_STARTTLS.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STARTTLS.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.SEND
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.SEND -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY
libnbd: debug: nbd1: nbd_connect_uri: negotiated structured replies on this connection
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_connect_uri: leave: ret=0
libnbd: debug: nbd1: nbd_get_protocol: enter:
libnbd: debug: nbd1: nbd_get_protocol: leave: ret="newstyle-fixed"
libnbd: debug: nbd1: nbd_get_tls_negotiated: enter:
libnbd: debug: nbd1: nbd_get_tls_negotiated: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 1 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=1
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret=""
libnbd: debug: nbd1: nbd_get_export_description: enter:
libnbd: debug: nbd1: nbd_get_export_description: leave: ret="1"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_opt_abort: enter:
libnbd: debug: nbd1: nbd_opt_abort: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.START -> NEWSTYLE.PREPARE_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.PREPARE_OPT_ABORT -> NEWSTYLE.SEND_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPT_ABORT -> NEWSTYLE.SEND_OPTION_SHUTDOWN
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPTION_SHUTDOWN -> CLOSED
libnbd: debug: nbd1: nbd_opt_abort: leave: ret=0
libnbd: debug: nbd1: nbd_shutdown: enter: flags=0x0
libnbd: debug: nbd1: nbd_shutdown: leave: error="nbd_shutdown: invalid state: CLOSED: the handle must be connected with the server: Invalid argument"
libnbd: debug: nbd1: nbd_close: closing handle
+ cat exportname.out
{
"protocol": "newstyle-fixed",
"TLS": false,
"exports": [
	{
	"export-name": "",
	"description": "1",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 1
	} ]
}
++ jq -c '[ [.exports[]] | sort_by(."export-name")[] |
  [."export-name", .description, ."export-size"] ]' exportname.out
+ test '[["","1",1]]' = '[["","1",1]]'
+ nbdkit -U - --filter=exportname sh exportname.sh default-export=b --run 'nbdinfo --no-content --json "$uri"'
libnbd: debug: nbd1: nbd_create: opening handle
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: enter: allow=true
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: leave: ret=0
libnbd: debug: nbd1: nbd_set_opt_mode: enter: enable=true
libnbd: debug: nbd1: nbd_set_opt_mode: leave: ret=0
libnbd: debug: nbd1: nbd_set_full_info: enter: request=true
libnbd: debug: nbd1: nbd_set_full_info: leave: ret=0
libnbd: debug: nbd1: nbd_connect_uri: enter: uri="nbd+unix://?socket=/tmp/nbdkitONTfyH/socket"
libnbd: debug: nbd1: nbd_connect_uri: event CmdConnectSockAddr: START -> CONNECT.START
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=4
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=4
libnbd: debug: nbd1: nbd_connect_uri: event NotifyWrite: CONNECT.START -> CONNECT.CONNECTING
libnbd: debug: nbd1: nbd_connect_uri: transition: CONNECT.CONNECTING -> MAGIC.START
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.START -> MAGIC.RECV_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.RECV_MAGIC -> MAGIC.CHECK_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.CHECK_MAGIC -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.START -> NEWSTYLE.RECV_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.RECV_GFLAGS -> NEWSTYLE.CHECK_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.CHECK_GFLAGS -> NEWSTYLE.SEND_CFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.SEND_CFLAGS -> NEWSTYLE.OPT_STARTTLS.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STARTTLS.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.SEND
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.SEND -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY
libnbd: debug: nbd1: nbd_connect_uri: negotiated structured replies on this connection
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_connect_uri: leave: ret=0
libnbd: debug: nbd1: nbd_get_protocol: enter:
libnbd: debug: nbd1: nbd_get_protocol: leave: ret="newstyle-fixed"
libnbd: debug: nbd1: nbd_get_tls_negotiated: enter:
libnbd: debug: nbd1: nbd_get_tls_negotiated: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 2 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=2
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="b"
libnbd: debug: nbd1: nbd_get_export_description: enter:
libnbd: debug: nbd1: nbd_get_export_description: leave: ret="2"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_opt_abort: enter:
libnbd: debug: nbd1: nbd_opt_abort: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.START -> NEWSTYLE.PREPARE_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.PREPARE_OPT_ABORT -> NEWSTYLE.SEND_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPT_ABORT -> NEWSTYLE.SEND_OPTION_SHUTDOWN
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPTION_SHUTDOWN -> CLOSED
libnbd: debug: nbd1: nbd_opt_abort: leave: ret=0
libnbd: debug: nbd1: nbd_shutdown: enter: flags=0x0
libnbd: debug: nbd1: nbd_shutdown: leave: error="nbd_shutdown: invalid state: CLOSED: the handle must be connected with the server: Invalid argument"
libnbd: debug: nbd1: nbd_close: closing handle
+ cat exportname.out
{
"protocol": "newstyle-fixed",
"TLS": false,
"exports": [
	{
	"export-name": "b",
	"description": "2",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 2
	} ]
}
++ jq -c '[ [.exports[]] | sort_by(."export-name")[] |
  [."export-name", .description, ."export-size"] ]' exportname.out
+ test '[["b","2",2]]' = '[["b","2",2]]'
+ nbdkit -U - --filter=exportname sh exportname.sh exportname-list=keep --run 'nbdinfo --json --list "$uri"'
libnbd: debug: nbd1: nbd_create: opening handle
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: enter: allow=true
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: leave: ret=0
libnbd: debug: nbd1: nbd_set_opt_mode: enter: enable=true
libnbd: debug: nbd1: nbd_set_opt_mode: leave: ret=0
libnbd: debug: nbd1: nbd_set_full_info: enter: request=true
libnbd: debug: nbd1: nbd_set_full_info: leave: ret=0
libnbd: debug: nbd1: nbd_connect_uri: enter: uri="nbd+unix://?socket=/tmp/nbdkit7t3TYJ/socket"
libnbd: debug: nbd1: nbd_connect_uri: event CmdConnectSockAddr: START -> CONNECT.START
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=4
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=4
libnbd: debug: nbd1: nbd_connect_uri: event NotifyWrite: CONNECT.START -> CONNECT.CONNECTING
libnbd: debug: nbd1: nbd_connect_uri: transition: CONNECT.CONNECTING -> MAGIC.START
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.START -> MAGIC.RECV_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.RECV_MAGIC -> MAGIC.CHECK_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.CHECK_MAGIC -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.START -> NEWSTYLE.RECV_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.RECV_GFLAGS -> NEWSTYLE.CHECK_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.CHECK_GFLAGS -> NEWSTYLE.SEND_CFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.SEND_CFLAGS -> NEWSTYLE.OPT_STARTTLS.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STARTTLS.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.SEND
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.SEND -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY
libnbd: debug: nbd1: nbd_connect_uri: negotiated structured replies on this connection
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_connect_uri: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list: enter: list=<fun>
libnbd: debug: nbd1: nbd_opt_list: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.START -> NEWSTYLE.OPT_LIST.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.START -> NEWSTYLE.OPT_LIST.SEND
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.SEND -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list: leave: ret=3
libnbd: debug: nbd1: nbd_get_protocol: enter:
libnbd: debug: nbd1: nbd_get_protocol: leave: ret="newstyle-fixed"
libnbd: debug: nbd1: nbd_get_tls_negotiated: enter:
libnbd: debug: nbd1: nbd_get_tls_negotiated: leave: ret=0
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="a"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 1 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=1
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="a"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="b"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 2 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=2
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="b"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="c"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 3 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=3
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="c"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_opt_abort: enter:
libnbd: debug: nbd1: nbd_opt_abort: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.START -> NEWSTYLE.PREPARE_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.PREPARE_OPT_ABORT -> NEWSTYLE.SEND_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPT_ABORT -> NEWSTYLE.SEND_OPTION_SHUTDOWN
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPTION_SHUTDOWN -> CLOSED
libnbd: debug: nbd1: nbd_opt_abort: leave: ret=0
libnbd: debug: nbd1: nbd_shutdown: enter: flags=0x0
libnbd: debug: nbd1: nbd_shutdown: leave: error="nbd_shutdown: invalid state: CLOSED: the handle must be connected with the server: Invalid argument"
libnbd: debug: nbd1: nbd_close: closing handle
+ cat exportname.out
{
"protocol": "newstyle-fixed",
"TLS": false,
"exports": [
	{
	"export-name": "a",
	"description": "x",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 1
	},
	{
	"export-name": "b",
	"description": "y",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 2
	},
	{
	"export-name": "c",
	"description": "z",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 3
	} ]
}
++ jq -c '[ [.exports[]] | sort_by(."export-name")[] |
  [."export-name", .description, ."export-size"] ]' exportname.out
+ test '[["a","x",1],["b","y",2],["c","z",3]]' = '[["a","x",1],["b","y",2],["c","z",3]]'
+ nbdkit -U - --filter=exportname sh exportname.sh exportname-list=error --run 'nbdinfo --json --list "$uri"'
libnbd: debug: nbd1: nbd_create: opening handle
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: enter: allow=true
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: leave: ret=0
libnbd: debug: nbd1: nbd_set_opt_mode: enter: enable=true
libnbd: debug: nbd1: nbd_set_opt_mode: leave: ret=0
libnbd: debug: nbd1: nbd_set_full_info: enter: request=true
libnbd: debug: nbd1: nbd_set_full_info: leave: ret=0
libnbd: debug: nbd1: nbd_connect_uri: enter: uri="nbd+unix://?socket=/tmp/nbdkit81alNj/socket"
libnbd: debug: nbd1: nbd_connect_uri: event CmdConnectSockAddr: START -> CONNECT.START
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=4
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=4
libnbd: debug: nbd1: nbd_connect_uri: event NotifyWrite: CONNECT.START -> CONNECT.CONNECTING
libnbd: debug: nbd1: nbd_connect_uri: transition: CONNECT.CONNECTING -> MAGIC.START
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.START -> MAGIC.RECV_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.RECV_MAGIC -> MAGIC.CHECK_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.CHECK_MAGIC -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.START -> NEWSTYLE.RECV_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.RECV_GFLAGS -> NEWSTYLE.CHECK_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.CHECK_GFLAGS -> NEWSTYLE.SEND_CFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.SEND_CFLAGS -> NEWSTYLE.OPT_STARTTLS.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STARTTLS.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.SEND
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.SEND -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY
libnbd: debug: nbd1: nbd_connect_uri: negotiated structured replies on this connection
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_connect_uri: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list: enter: list=<fun>
libnbd: debug: nbd1: nbd_opt_list: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.START -> NEWSTYLE.OPT_LIST.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.START -> NEWSTYLE.OPT_LIST.SEND
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.SEND -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: poll start: events=1
nbdkit: sh[1]: error: export list restricted by policy
libnbd: debug: nbd1: nbd_opt_list: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list: leave: error="nbd_opt_list: server replied with error to list request: Operation not supported"
nbd_opt_list: server replied with error to list request: Operation not supported
+ :
+ test '!' -s exportname.out
+ nbdkit -U - --filter=exportname sh exportname.sh exportname-list=empty --run 'nbdinfo --json --list "$uri"'
libnbd: debug: nbd1: nbd_create: opening handle
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: enter: allow=true
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: leave: ret=0
libnbd: debug: nbd1: nbd_set_opt_mode: enter: enable=true
libnbd: debug: nbd1: nbd_set_opt_mode: leave: ret=0
libnbd: debug: nbd1: nbd_set_full_info: enter: request=true
libnbd: debug: nbd1: nbd_set_full_info: leave: ret=0
libnbd: debug: nbd1: nbd_connect_uri: enter: uri="nbd+unix://?socket=/tmp/nbdkitmbxQX5/socket"
libnbd: debug: nbd1: nbd_connect_uri: event CmdConnectSockAddr: START -> CONNECT.START
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=4
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=4
libnbd: debug: nbd1: nbd_connect_uri: event NotifyWrite: CONNECT.START -> CONNECT.CONNECTING
libnbd: debug: nbd1: nbd_connect_uri: transition: CONNECT.CONNECTING -> MAGIC.START
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.START -> MAGIC.RECV_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.RECV_MAGIC -> MAGIC.CHECK_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.CHECK_MAGIC -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.START -> NEWSTYLE.RECV_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.RECV_GFLAGS -> NEWSTYLE.CHECK_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.CHECK_GFLAGS -> NEWSTYLE.SEND_CFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.SEND_CFLAGS -> NEWSTYLE.OPT_STARTTLS.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STARTTLS.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.SEND
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.SEND -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY
libnbd: debug: nbd1: nbd_connect_uri: negotiated structured replies on this connection
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_connect_uri: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list: enter: list=<fun>
libnbd: debug: nbd1: nbd_opt_list: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.START -> NEWSTYLE.OPT_LIST.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.START -> NEWSTYLE.OPT_LIST.SEND
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.SEND -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list: leave: ret=0
libnbd: debug: nbd1: nbd_get_protocol: enter:
libnbd: debug: nbd1: nbd_get_protocol: leave: ret="newstyle-fixed"
libnbd: debug: nbd1: nbd_get_tls_negotiated: enter:
libnbd: debug: nbd1: nbd_get_tls_negotiated: leave: ret=0
libnbd: debug: nbd1: nbd_opt_abort: enter:
libnbd: debug: nbd1: nbd_opt_abort: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.START -> NEWSTYLE.PREPARE_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.PREPARE_OPT_ABORT -> NEWSTYLE.SEND_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPT_ABORT -> NEWSTYLE.SEND_OPTION_SHUTDOWN
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPTION_SHUTDOWN -> CLOSED
libnbd: debug: nbd1: nbd_opt_abort: leave: ret=0
libnbd: debug: nbd1: nbd_shutdown: enter: flags=0x0
libnbd: debug: nbd1: nbd_shutdown: leave: error="nbd_shutdown: invalid state: CLOSED: the handle must be connected with the server: Invalid argument"
libnbd: debug: nbd1: nbd_close: closing handle
+ cat exportname.out
{
"protocol": "newstyle-fixed",
"TLS": false,
"exports": []
}
++ jq -c '[ [.exports[]] | sort_by(."export-name")[] |
  [."export-name", .description, ."export-size"] ]' exportname.out
+ test '[]' = '[]'
+ nbdkit -U - --filter=exportname sh exportname.sh exportname-list=defaultonly --run 'nbdinfo --json --list "$uri"'
libnbd: debug: nbd1: nbd_create: opening handle
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: enter: allow=true
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: leave: ret=0
libnbd: debug: nbd1: nbd_set_opt_mode: enter: enable=true
libnbd: debug: nbd1: nbd_set_opt_mode: leave: ret=0
libnbd: debug: nbd1: nbd_set_full_info: enter: request=true
libnbd: debug: nbd1: nbd_set_full_info: leave: ret=0
libnbd: debug: nbd1: nbd_connect_uri: enter: uri="nbd+unix://?socket=/tmp/nbdkit1mQ90O/socket"
libnbd: debug: nbd1: nbd_connect_uri: event CmdConnectSockAddr: START -> CONNECT.START
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=4
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=4
libnbd: debug: nbd1: nbd_connect_uri: event NotifyWrite: CONNECT.START -> CONNECT.CONNECTING
libnbd: debug: nbd1: nbd_connect_uri: transition: CONNECT.CONNECTING -> MAGIC.START
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.START -> MAGIC.RECV_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.RECV_MAGIC -> MAGIC.CHECK_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.CHECK_MAGIC -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.START -> NEWSTYLE.RECV_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.RECV_GFLAGS -> NEWSTYLE.CHECK_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.CHECK_GFLAGS -> NEWSTYLE.SEND_CFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.SEND_CFLAGS -> NEWSTYLE.OPT_STARTTLS.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STARTTLS.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.SEND
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.SEND -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY
libnbd: debug: nbd1: nbd_connect_uri: negotiated structured replies on this connection
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_connect_uri: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list: enter: list=<fun>
libnbd: debug: nbd1: nbd_opt_list: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.START -> NEWSTYLE.OPT_LIST.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.START -> NEWSTYLE.OPT_LIST.SEND
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.SEND -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list: leave: ret=1
libnbd: debug: nbd1: nbd_get_protocol: enter:
libnbd: debug: nbd1: nbd_get_protocol: leave: ret="newstyle-fixed"
libnbd: debug: nbd1: nbd_get_tls_negotiated: enter:
libnbd: debug: nbd1: nbd_get_tls_negotiated: leave: ret=0
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="a"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 1 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=1
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="a"
libnbd: debug: nbd1: nbd_get_export_description: enter:
libnbd: debug: nbd1: nbd_get_export_description: leave: ret="1"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_opt_abort: enter:
libnbd: debug: nbd1: nbd_opt_abort: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.START -> NEWSTYLE.PREPARE_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.PREPARE_OPT_ABORT -> NEWSTYLE.SEND_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPT_ABORT -> NEWSTYLE.SEND_OPTION_SHUTDOWN
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPTION_SHUTDOWN -> CLOSED
libnbd: debug: nbd1: nbd_opt_abort: leave: ret=0
libnbd: debug: nbd1: nbd_shutdown: enter: flags=0x0
libnbd: debug: nbd1: nbd_shutdown: leave: error="nbd_shutdown: invalid state: CLOSED: the handle must be connected with the server: Invalid argument"
libnbd: debug: nbd1: nbd_close: closing handle
+ cat exportname.out
{
"protocol": "newstyle-fixed",
"TLS": false,
"exports": [
	{
	"export-name": "a",
	"description": "1",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 1
	} ]
}
++ jq -c '[ [.exports[]] | sort_by(."export-name")[] |
  [."export-name", .description, ."export-size"] ]' exportname.out
+ got='[["a","1",1]]'
+ test '[["a","1",1]]' = '[["a",null,1]]'
+ test '[["a","1",1]]' = '[["a","1",1]]'
+ nbdkit -U - --filter=exportname sh exportname.sh default-export=b exportname-list=defaultonly exportname=a exportname=b --run 'nbdinfo --json --list "$uri"'
libnbd: debug: nbd1: nbd_create: opening handle
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: enter: allow=true
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: leave: ret=0
libnbd: debug: nbd1: nbd_set_opt_mode: enter: enable=true
libnbd: debug: nbd1: nbd_set_opt_mode: leave: ret=0
libnbd: debug: nbd1: nbd_set_full_info: enter: request=true
libnbd: debug: nbd1: nbd_set_full_info: leave: ret=0
libnbd: debug: nbd1: nbd_connect_uri: enter: uri="nbd+unix://?socket=/tmp/nbdkitsfI9oO/socket"
libnbd: debug: nbd1: nbd_connect_uri: event CmdConnectSockAddr: START -> CONNECT.START
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=4
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=4
libnbd: debug: nbd1: nbd_connect_uri: event NotifyWrite: CONNECT.START -> CONNECT.CONNECTING
libnbd: debug: nbd1: nbd_connect_uri: transition: CONNECT.CONNECTING -> MAGIC.START
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.START -> MAGIC.RECV_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.RECV_MAGIC -> MAGIC.CHECK_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.CHECK_MAGIC -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.START -> NEWSTYLE.RECV_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.RECV_GFLAGS -> NEWSTYLE.CHECK_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.CHECK_GFLAGS -> NEWSTYLE.SEND_CFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.SEND_CFLAGS -> NEWSTYLE.OPT_STARTTLS.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STARTTLS.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.SEND
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.SEND -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY
libnbd: debug: nbd1: nbd_connect_uri: negotiated structured replies on this connection
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_connect_uri: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list: enter: list=<fun>
libnbd: debug: nbd1: nbd_opt_list: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.START -> NEWSTYLE.OPT_LIST.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.START -> NEWSTYLE.OPT_LIST.SEND
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.SEND -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list: leave: ret=1
libnbd: debug: nbd1: nbd_get_protocol: enter:
libnbd: debug: nbd1: nbd_get_protocol: leave: ret="newstyle-fixed"
libnbd: debug: nbd1: nbd_get_tls_negotiated: enter:
libnbd: debug: nbd1: nbd_get_tls_negotiated: leave: ret=0
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="b"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 2 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=2
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="b"
libnbd: debug: nbd1: nbd_get_export_description: enter:
libnbd: debug: nbd1: nbd_get_export_description: leave: ret="2"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_opt_abort: enter:
libnbd: debug: nbd1: nbd_opt_abort: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.START -> NEWSTYLE.PREPARE_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.PREPARE_OPT_ABORT -> NEWSTYLE.SEND_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPT_ABORT -> NEWSTYLE.SEND_OPTION_SHUTDOWN
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPTION_SHUTDOWN -> CLOSED
libnbd: debug: nbd1: nbd_opt_abort: leave: ret=0
libnbd: debug: nbd1: nbd_shutdown: enter: flags=0x0
libnbd: debug: nbd1: nbd_shutdown: leave: error="nbd_shutdown: invalid state: CLOSED: the handle must be connected with the server: Invalid argument"
libnbd: debug: nbd1: nbd_close: closing handle
+ cat exportname.out
{
"protocol": "newstyle-fixed",
"TLS": false,
"exports": [
	{
	"export-name": "b",
	"description": "2",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 2
	} ]
}
++ jq -c '[ [.exports[]] | sort_by(."export-name")[] |
  [."export-name", .description, ."export-size"] ]' exportname.out
+ got='[["b","2",2]]'
+ test '[["b","2",2]]' = '[["b",null,2]]'
+ test '[["b","2",2]]' = '[["b","2",2]]'
+ nbdkit -U - --filter=exportname sh exportname.sh exportname-list=explicit exportname=b exportname=a --run 'nbdinfo --json --list "$uri"'
libnbd: debug: nbd1: nbd_create: opening handle
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: enter: allow=true
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: leave: ret=0
libnbd: debug: nbd1: nbd_set_opt_mode: enter: enable=true
libnbd: debug: nbd1: nbd_set_opt_mode: leave: ret=0
libnbd: debug: nbd1: nbd_set_full_info: enter: request=true
libnbd: debug: nbd1: nbd_set_full_info: leave: ret=0
libnbd: debug: nbd1: nbd_connect_uri: enter: uri="nbd+unix://?socket=/tmp/nbdkitf1S3L2/socket"
libnbd: debug: nbd1: nbd_connect_uri: event CmdConnectSockAddr: START -> CONNECT.START
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=4
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=4
libnbd: debug: nbd1: nbd_connect_uri: event NotifyWrite: CONNECT.START -> CONNECT.CONNECTING
libnbd: debug: nbd1: nbd_connect_uri: transition: CONNECT.CONNECTING -> MAGIC.START
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.START -> MAGIC.RECV_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.RECV_MAGIC -> MAGIC.CHECK_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.CHECK_MAGIC -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.START -> NEWSTYLE.RECV_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.RECV_GFLAGS -> NEWSTYLE.CHECK_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.CHECK_GFLAGS -> NEWSTYLE.SEND_CFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.SEND_CFLAGS -> NEWSTYLE.OPT_STARTTLS.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STARTTLS.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.SEND
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.SEND -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY
libnbd: debug: nbd1: nbd_connect_uri: negotiated structured replies on this connection
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_connect_uri: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list: enter: list=<fun>
libnbd: debug: nbd1: nbd_opt_list: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.START -> NEWSTYLE.OPT_LIST.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.START -> NEWSTYLE.OPT_LIST.SEND
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.SEND -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list: leave: ret=2
libnbd: debug: nbd1: nbd_get_protocol: enter:
libnbd: debug: nbd1: nbd_get_protocol: leave: ret="newstyle-fixed"
libnbd: debug: nbd1: nbd_get_tls_negotiated: enter:
libnbd: debug: nbd1: nbd_get_tls_negotiated: leave: ret=0
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="b"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 2 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=2
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="b"
libnbd: debug: nbd1: nbd_get_export_description: enter:
libnbd: debug: nbd1: nbd_get_export_description: leave: ret="2"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="a"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 1 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=1
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="a"
libnbd: debug: nbd1: nbd_get_export_description: enter:
libnbd: debug: nbd1: nbd_get_export_description: leave: ret="1"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_opt_abort: enter:
libnbd: debug: nbd1: nbd_opt_abort: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.START -> NEWSTYLE.PREPARE_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.PREPARE_OPT_ABORT -> NEWSTYLE.SEND_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPT_ABORT -> NEWSTYLE.SEND_OPTION_SHUTDOWN
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPTION_SHUTDOWN -> CLOSED
libnbd: debug: nbd1: nbd_opt_abort: leave: ret=0
libnbd: debug: nbd1: nbd_shutdown: enter: flags=0x0
libnbd: debug: nbd1: nbd_shutdown: leave: error="nbd_shutdown: invalid state: CLOSED: the handle must be connected with the server: Invalid argument"
libnbd: debug: nbd1: nbd_close: closing handle
+ cat exportname.out
{
"protocol": "newstyle-fixed",
"TLS": false,
"exports": [
	{
	"export-name": "b",
	"description": "2",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 2
	},
	{
	"export-name": "a",
	"description": "1",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 1
	} ]
}
++ jq -c '[ [.exports[]] | sort_by(."export-name")[] |
  [."export-name", .description, ."export-size"] ]' exportname.out
+ got='[["a","1",1],["b","2",2]]'
+ test '[["a","1",1],["b","2",2]]' = '[["a",null,1],["b",null,2]]'
+ test '[["a","1",1],["b","2",2]]' = '[["a","1",1],["b","2",2]]'
+ nbdkit -U - --filter=exportname sh exportname.sh exportname-list=explicit --run 'nbdinfo --json --list "$uri"'
libnbd: debug: nbd1: nbd_create: opening handle
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: enter: allow=true
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: leave: ret=0
libnbd: debug: nbd1: nbd_set_opt_mode: enter: enable=true
libnbd: debug: nbd1: nbd_set_opt_mode: leave: ret=0
libnbd: debug: nbd1: nbd_set_full_info: enter: request=true
libnbd: debug: nbd1: nbd_set_full_info: leave: ret=0
libnbd: debug: nbd1: nbd_connect_uri: enter: uri="nbd+unix://?socket=/tmp/nbdkitrQcHGf/socket"
libnbd: debug: nbd1: nbd_connect_uri: event CmdConnectSockAddr: START -> CONNECT.START
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=4
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=4
libnbd: debug: nbd1: nbd_connect_uri: event NotifyWrite: CONNECT.START -> CONNECT.CONNECTING
libnbd: debug: nbd1: nbd_connect_uri: transition: CONNECT.CONNECTING -> MAGIC.START
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.START -> MAGIC.RECV_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.RECV_MAGIC -> MAGIC.CHECK_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.CHECK_MAGIC -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.START -> NEWSTYLE.RECV_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.RECV_GFLAGS -> NEWSTYLE.CHECK_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.CHECK_GFLAGS -> NEWSTYLE.SEND_CFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.SEND_CFLAGS -> NEWSTYLE.OPT_STARTTLS.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STARTTLS.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.SEND
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.SEND -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY
libnbd: debug: nbd1: nbd_connect_uri: negotiated structured replies on this connection
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_connect_uri: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list: enter: list=<fun>
libnbd: debug: nbd1: nbd_opt_list: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.START -> NEWSTYLE.OPT_LIST.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.START -> NEWSTYLE.OPT_LIST.SEND
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.SEND -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list: leave: ret=0
libnbd: debug: nbd1: nbd_get_protocol: enter:
libnbd: debug: nbd1: nbd_get_protocol: leave: ret="newstyle-fixed"
libnbd: debug: nbd1: nbd_get_tls_negotiated: enter:
libnbd: debug: nbd1: nbd_get_tls_negotiated: leave: ret=0
libnbd: debug: nbd1: nbd_opt_abort: enter:
libnbd: debug: nbd1: nbd_opt_abort: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.START -> NEWSTYLE.PREPARE_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.PREPARE_OPT_ABORT -> NEWSTYLE.SEND_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPT_ABORT -> NEWSTYLE.SEND_OPTION_SHUTDOWN
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPTION_SHUTDOWN -> CLOSED
libnbd: debug: nbd1: nbd_opt_abort: leave: ret=0
libnbd: debug: nbd1: nbd_shutdown: enter: flags=0x0
libnbd: debug: nbd1: nbd_shutdown: leave: error="nbd_shutdown: invalid state: CLOSED: the handle must be connected with the server: Invalid argument"
libnbd: debug: nbd1: nbd_close: closing handle
+ cat exportname.out
{
"protocol": "newstyle-fixed",
"TLS": false,
"exports": []
}
++ jq -c '[ [.exports[]] | sort_by(."export-name")[] |
  [."export-name", .description, ."export-size"] ]' exportname.out
+ test '[]' = '[]'
+ nbdkit -U - --filter=exportname sh exportname.sh exportdesc=keep --run 'nbdinfo --json --list "$uri"'
libnbd: debug: nbd1: nbd_create: opening handle
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: enter: allow=true
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: leave: ret=0
libnbd: debug: nbd1: nbd_set_opt_mode: enter: enable=true
libnbd: debug: nbd1: nbd_set_opt_mode: leave: ret=0
libnbd: debug: nbd1: nbd_set_full_info: enter: request=true
libnbd: debug: nbd1: nbd_set_full_info: leave: ret=0
libnbd: debug: nbd1: nbd_connect_uri: enter: uri="nbd+unix://?socket=/tmp/nbdkit9AnQpB/socket"
libnbd: debug: nbd1: nbd_connect_uri: event CmdConnectSockAddr: START -> CONNECT.START
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=4
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=4
libnbd: debug: nbd1: nbd_connect_uri: event NotifyWrite: CONNECT.START -> CONNECT.CONNECTING
libnbd: debug: nbd1: nbd_connect_uri: transition: CONNECT.CONNECTING -> MAGIC.START
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.START -> MAGIC.RECV_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.RECV_MAGIC -> MAGIC.CHECK_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.CHECK_MAGIC -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.START -> NEWSTYLE.RECV_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.RECV_GFLAGS -> NEWSTYLE.CHECK_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.CHECK_GFLAGS -> NEWSTYLE.SEND_CFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.SEND_CFLAGS -> NEWSTYLE.OPT_STARTTLS.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STARTTLS.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.SEND
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.SEND -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY
libnbd: debug: nbd1: nbd_connect_uri: negotiated structured replies on this connection
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_connect_uri: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list: enter: list=<fun>
libnbd: debug: nbd1: nbd_opt_list: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.START -> NEWSTYLE.OPT_LIST.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.START -> NEWSTYLE.OPT_LIST.SEND
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.SEND -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list: leave: ret=3
libnbd: debug: nbd1: nbd_get_protocol: enter:
libnbd: debug: nbd1: nbd_get_protocol: leave: ret="newstyle-fixed"
libnbd: debug: nbd1: nbd_get_tls_negotiated: enter:
libnbd: debug: nbd1: nbd_get_tls_negotiated: leave: ret=0
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="a"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 1 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=1
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="a"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="b"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 2 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=2
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="b"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="c"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 3 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=3
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="c"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_opt_abort: enter:
libnbd: debug: nbd1: nbd_opt_abort: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.START -> NEWSTYLE.PREPARE_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.PREPARE_OPT_ABORT -> NEWSTYLE.SEND_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPT_ABORT -> NEWSTYLE.SEND_OPTION_SHUTDOWN
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPTION_SHUTDOWN -> CLOSED
libnbd: debug: nbd1: nbd_opt_abort: leave: ret=0
libnbd: debug: nbd1: nbd_shutdown: enter: flags=0x0
libnbd: debug: nbd1: nbd_shutdown: leave: error="nbd_shutdown: invalid state: CLOSED: the handle must be connected with the server: Invalid argument"
libnbd: debug: nbd1: nbd_close: closing handle
+ cat exportname.out
{
"protocol": "newstyle-fixed",
"TLS": false,
"exports": [
	{
	"export-name": "a",
	"description": "x",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 1
	},
	{
	"export-name": "b",
	"description": "y",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 2
	},
	{
	"export-name": "c",
	"description": "z",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 3
	} ]
}
++ jq -c '[ [.exports[]] | sort_by(."export-name")[] |
  [."export-name", .description, ."export-size"] ]' exportname.out
+ test '[["a","x",1],["b","y",2],["c","z",3]]' = '[["a","x",1],["b","y",2],["c","z",3]]'
+ nbdkit -U - --filter=exportname sh exportname.sh exportdesc=none --run 'nbdinfo --json --list "$uri"'
libnbd: debug: nbd1: nbd_create: opening handle
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: enter: allow=true
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: leave: ret=0
libnbd: debug: nbd1: nbd_set_opt_mode: enter: enable=true
libnbd: debug: nbd1: nbd_set_opt_mode: leave: ret=0
libnbd: debug: nbd1: nbd_set_full_info: enter: request=true
libnbd: debug: nbd1: nbd_set_full_info: leave: ret=0
libnbd: debug: nbd1: nbd_connect_uri: enter: uri="nbd+unix://?socket=/tmp/nbdkit6Z6Z1B/socket"
libnbd: debug: nbd1: nbd_connect_uri: event CmdConnectSockAddr: START -> CONNECT.START
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=4
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=4
libnbd: debug: nbd1: nbd_connect_uri: event NotifyWrite: CONNECT.START -> CONNECT.CONNECTING
libnbd: debug: nbd1: nbd_connect_uri: transition: CONNECT.CONNECTING -> MAGIC.START
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.START -> MAGIC.RECV_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.RECV_MAGIC -> MAGIC.CHECK_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.CHECK_MAGIC -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.START -> NEWSTYLE.RECV_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.RECV_GFLAGS -> NEWSTYLE.CHECK_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.CHECK_GFLAGS -> NEWSTYLE.SEND_CFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.SEND_CFLAGS -> NEWSTYLE.OPT_STARTTLS.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STARTTLS.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.SEND
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.SEND -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY
libnbd: debug: nbd1: nbd_connect_uri: negotiated structured replies on this connection
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_connect_uri: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list: enter: list=<fun>
libnbd: debug: nbd1: nbd_opt_list: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.START -> NEWSTYLE.OPT_LIST.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.START -> NEWSTYLE.OPT_LIST.SEND
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.SEND -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list: leave: ret=3
libnbd: debug: nbd1: nbd_get_protocol: enter:
libnbd: debug: nbd1: nbd_get_protocol: leave: ret="newstyle-fixed"
libnbd: debug: nbd1: nbd_get_tls_negotiated: enter:
libnbd: debug: nbd1: nbd_get_tls_negotiated: leave: ret=0
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="a"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 1 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=1
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="a"
libnbd: debug: nbd1: nbd_get_export_description: enter:
libnbd: debug: nbd1: nbd_get_export_description: leave: error="nbd_get_export_description: server did not advertise a description: Operation not supported"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="b"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 2 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=2
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="b"
libnbd: debug: nbd1: nbd_get_export_description: enter:
libnbd: debug: nbd1: nbd_get_export_description: leave: error="nbd_get_export_description: server did not advertise a description: Operation not supported"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="c"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 3 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=3
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="c"
libnbd: debug: nbd1: nbd_get_export_description: enter:
libnbd: debug: nbd1: nbd_get_export_description: leave: error="nbd_get_export_description: server did not advertise a description: Operation not supported"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_opt_abort: enter:
libnbd: debug: nbd1: nbd_opt_abort: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.START -> NEWSTYLE.PREPARE_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.PREPARE_OPT_ABORT -> NEWSTYLE.SEND_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPT_ABORT -> NEWSTYLE.SEND_OPTION_SHUTDOWN
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPTION_SHUTDOWN -> CLOSED
libnbd: debug: nbd1: nbd_opt_abort: leave: ret=0
libnbd: debug: nbd1: nbd_shutdown: enter: flags=0x0
libnbd: debug: nbd1: nbd_shutdown: leave: error="nbd_shutdown: invalid state: CLOSED: the handle must be connected with the server: Invalid argument"
libnbd: debug: nbd1: nbd_close: closing handle
+ cat exportname.out
{
"protocol": "newstyle-fixed",
"TLS": false,
"exports": [
	{
	"export-name": "a",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 1
	},
	{
	"export-name": "b",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 2
	},
	{
	"export-name": "c",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 3
	} ]
}
++ jq -c '[ [.exports[]] | sort_by(."export-name")[] |
  [."export-name", .description, ."export-size"] ]' exportname.out
+ test '[["a",null,1],["b",null,2],["c",null,3]]' = '[["a",null,1],["b",null,2],["c",null,3]]'
+ nbdkit -U - --filter=exportname sh exportname.sh exportdesc=fixed:hi --run 'nbdinfo --json --list "$uri"'
libnbd: debug: nbd1: nbd_create: opening handle
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: enter: allow=true
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: leave: ret=0
libnbd: debug: nbd1: nbd_set_opt_mode: enter: enable=true
libnbd: debug: nbd1: nbd_set_opt_mode: leave: ret=0
libnbd: debug: nbd1: nbd_set_full_info: enter: request=true
libnbd: debug: nbd1: nbd_set_full_info: leave: ret=0
libnbd: debug: nbd1: nbd_connect_uri: enter: uri="nbd+unix://?socket=/tmp/nbdkitdx2u5x/socket"
libnbd: debug: nbd1: nbd_connect_uri: event CmdConnectSockAddr: START -> CONNECT.START
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=4
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=4
libnbd: debug: nbd1: nbd_connect_uri: event NotifyWrite: CONNECT.START -> CONNECT.CONNECTING
libnbd: debug: nbd1: nbd_connect_uri: transition: CONNECT.CONNECTING -> MAGIC.START
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.START -> MAGIC.RECV_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.RECV_MAGIC -> MAGIC.CHECK_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.CHECK_MAGIC -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.START -> NEWSTYLE.RECV_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.RECV_GFLAGS -> NEWSTYLE.CHECK_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.CHECK_GFLAGS -> NEWSTYLE.SEND_CFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.SEND_CFLAGS -> NEWSTYLE.OPT_STARTTLS.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STARTTLS.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.SEND
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.SEND -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY
libnbd: debug: nbd1: nbd_connect_uri: negotiated structured replies on this connection
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_connect_uri: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list: enter: list=<fun>
libnbd: debug: nbd1: nbd_opt_list: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.START -> NEWSTYLE.OPT_LIST.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.START -> NEWSTYLE.OPT_LIST.SEND
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.SEND -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list: leave: ret=3
libnbd: debug: nbd1: nbd_get_protocol: enter:
libnbd: debug: nbd1: nbd_get_protocol: leave: ret="newstyle-fixed"
libnbd: debug: nbd1: nbd_get_tls_negotiated: enter:
libnbd: debug: nbd1: nbd_get_tls_negotiated: leave: ret=0
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="a"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 1 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=1
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="a"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="b"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 2 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=2
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="b"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="c"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 3 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=3
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="c"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_opt_abort: enter:
libnbd: debug: nbd1: nbd_opt_abort: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.START -> NEWSTYLE.PREPARE_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.PREPARE_OPT_ABORT -> NEWSTYLE.SEND_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPT_ABORT -> NEWSTYLE.SEND_OPTION_SHUTDOWN
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPTION_SHUTDOWN -> CLOSED
libnbd: debug: nbd1: nbd_opt_abort: leave: ret=0
libnbd: debug: nbd1: nbd_shutdown: enter: flags=0x0
libnbd: debug: nbd1: nbd_shutdown: leave: error="nbd_shutdown: invalid state: CLOSED: the handle must be connected with the server: Invalid argument"
libnbd: debug: nbd1: nbd_close: closing handle
+ cat exportname.out
{
"protocol": "newstyle-fixed",
"TLS": false,
"exports": [
	{
	"export-name": "a",
	"description": "hi",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 1
	},
	{
	"export-name": "b",
	"description": "hi",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 2
	},
	{
	"export-name": "c",
	"description": "hi",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 3
	} ]
}
++ jq -c '[ [.exports[]] | sort_by(."export-name")[] |
  [."export-name", .description, ."export-size"] ]' exportname.out
+ test '[["a","hi",1],["b","hi",2],["c","hi",3]]' = '[["a","hi",1],["b","hi",2],["c","hi",3]]'
+ nbdkit -U - --filter=exportname sh exportname.sh 'exportdesc=script:echo $name$name' --run 'nbdinfo --json --list "$uri"'
libnbd: debug: nbd1: nbd_create: opening handle
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: enter: allow=true
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: leave: ret=0
libnbd: debug: nbd1: nbd_set_opt_mode: enter: enable=true
libnbd: debug: nbd1: nbd_set_opt_mode: leave: ret=0
libnbd: debug: nbd1: nbd_set_full_info: enter: request=true
libnbd: debug: nbd1: nbd_set_full_info: leave: ret=0
libnbd: debug: nbd1: nbd_connect_uri: enter: uri="nbd+unix://?socket=/tmp/nbdkitiLuMKc/socket"
libnbd: debug: nbd1: nbd_connect_uri: event CmdConnectSockAddr: START -> CONNECT.START
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=4
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=4
libnbd: debug: nbd1: nbd_connect_uri: event NotifyWrite: CONNECT.START -> CONNECT.CONNECTING
libnbd: debug: nbd1: nbd_connect_uri: transition: CONNECT.CONNECTING -> MAGIC.START
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.START -> MAGIC.RECV_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.RECV_MAGIC -> MAGIC.CHECK_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.CHECK_MAGIC -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.START -> NEWSTYLE.RECV_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.RECV_GFLAGS -> NEWSTYLE.CHECK_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.CHECK_GFLAGS -> NEWSTYLE.SEND_CFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.SEND_CFLAGS -> NEWSTYLE.OPT_STARTTLS.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STARTTLS.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.SEND
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.SEND -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY
libnbd: debug: nbd1: nbd_connect_uri: negotiated structured replies on this connection
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_connect_uri: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list: enter: list=<fun>
libnbd: debug: nbd1: nbd_opt_list: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.START -> NEWSTYLE.OPT_LIST.START
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.START -> NEWSTYLE.OPT_LIST.SEND
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.SEND -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY -> NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_LIST.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list: transition: NEWSTYLE.OPT_LIST.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list: leave: ret=3
libnbd: debug: nbd1: nbd_get_protocol: enter:
libnbd: debug: nbd1: nbd_get_protocol: leave: ret="newstyle-fixed"
libnbd: debug: nbd1: nbd_get_tls_negotiated: enter:
libnbd: debug: nbd1: nbd_get_tls_negotiated: leave: ret=0
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="a"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 1 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=1
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="a"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="b"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 2 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=2
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="b"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_set_export_name: enter: export_name="c"
libnbd: debug: nbd1: nbd_set_export_name: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 3 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=3
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="c"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_opt_abort: enter:
libnbd: debug: nbd1: nbd_opt_abort: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.START -> NEWSTYLE.PREPARE_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.PREPARE_OPT_ABORT -> NEWSTYLE.SEND_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPT_ABORT -> NEWSTYLE.SEND_OPTION_SHUTDOWN
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPTION_SHUTDOWN -> CLOSED
libnbd: debug: nbd1: nbd_opt_abort: leave: ret=0
libnbd: debug: nbd1: nbd_shutdown: enter: flags=0x0
libnbd: debug: nbd1: nbd_shutdown: leave: error="nbd_shutdown: invalid state: CLOSED: the handle must be connected with the server: Invalid argument"
libnbd: debug: nbd1: nbd_close: closing handle
+ cat exportname.out
{
"protocol": "newstyle-fixed",
"TLS": false,
"exports": [
	{
	"export-name": "a",
	"description": "aa",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 1
	},
	{
	"export-name": "b",
	"description": "bb",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 2
	},
	{
	"export-name": "c",
	"description": "cc",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 3
	} ]
}
++ jq -c '[ [.exports[]] | sort_by(."export-name")[] |
  [."export-name", .description, ."export-size"] ]' exportname.out
+ test '[["a","aa",1],["b","bb",2],["c","cc",3]]' = '[["a","aa",1],["b","bb",2],["c","cc",3]]'
+ nbdkit -U - -e c --filter=exportname sh exportname.sh exportdesc=fixed:hi --run 'nbdinfo --no-content --json "$uri"'
libnbd: debug: nbd1: nbd_create: opening handle
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: enter: allow=true
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: leave: ret=0
libnbd: debug: nbd1: nbd_set_opt_mode: enter: enable=true
libnbd: debug: nbd1: nbd_set_opt_mode: leave: ret=0
libnbd: debug: nbd1: nbd_set_full_info: enter: request=true
libnbd: debug: nbd1: nbd_set_full_info: leave: ret=0
libnbd: debug: nbd1: nbd_connect_uri: enter: uri="nbd+unix:///c?socket=/tmp/nbdkit2Oyg4O/socket"
libnbd: debug: nbd1: nbd_connect_uri: event CmdConnectSockAddr: START -> CONNECT.START
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=4
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=4
libnbd: debug: nbd1: nbd_connect_uri: event NotifyWrite: CONNECT.START -> CONNECT.CONNECTING
libnbd: debug: nbd1: nbd_connect_uri: transition: CONNECT.CONNECTING -> MAGIC.START
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.START -> MAGIC.RECV_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.RECV_MAGIC -> MAGIC.CHECK_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.CHECK_MAGIC -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.START -> NEWSTYLE.RECV_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.RECV_GFLAGS -> NEWSTYLE.CHECK_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.CHECK_GFLAGS -> NEWSTYLE.SEND_CFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.SEND_CFLAGS -> NEWSTYLE.OPT_STARTTLS.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STARTTLS.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.SEND
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.SEND -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY
libnbd: debug: nbd1: nbd_connect_uri: negotiated structured replies on this connection
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_connect_uri: leave: ret=0
libnbd: debug: nbd1: nbd_get_protocol: enter:
libnbd: debug: nbd1: nbd_get_protocol: leave: ret="newstyle-fixed"
libnbd: debug: nbd1: nbd_get_tls_negotiated: enter:
libnbd: debug: nbd1: nbd_get_tls_negotiated: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 3 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=3
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="c"
libnbd: debug: nbd1: nbd_get_export_description: enter:
libnbd: debug: nbd1: nbd_get_export_description: leave: ret="hi"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_opt_abort: enter:
libnbd: debug: nbd1: nbd_opt_abort: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.START -> NEWSTYLE.PREPARE_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.PREPARE_OPT_ABORT -> NEWSTYLE.SEND_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPT_ABORT -> NEWSTYLE.SEND_OPTION_SHUTDOWN
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPTION_SHUTDOWN -> CLOSED
libnbd: debug: nbd1: nbd_opt_abort: leave: ret=0
libnbd: debug: nbd1: nbd_shutdown: enter: flags=0x0
libnbd: debug: nbd1: nbd_shutdown: leave: error="nbd_shutdown: invalid state: CLOSED: the handle must be connected with the server: Invalid argument"
libnbd: debug: nbd1: nbd_close: closing handle
+ cat exportname.out
{
"protocol": "newstyle-fixed",
"TLS": false,
"exports": [
	{
	"export-name": "c",
	"description": "hi",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 3
	} ]
}
++ jq -c '[ [.exports[]] | sort_by(."export-name")[] |
  [."export-name", .description, ."export-size"] ]' exportname.out
+ test '[["c","hi",3]]' = '[["c","hi",3]]'
+ nbdkit -U - -e c --filter=exportname sh exportname.sh 'exportdesc=script:echo $name$name' --run 'nbdinfo --no-content --json "$uri"'
libnbd: debug: nbd1: nbd_create: opening handle
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: enter: allow=true
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: leave: ret=0
libnbd: debug: nbd1: nbd_set_opt_mode: enter: enable=true
libnbd: debug: nbd1: nbd_set_opt_mode: leave: ret=0
libnbd: debug: nbd1: nbd_set_full_info: enter: request=true
libnbd: debug: nbd1: nbd_set_full_info: leave: ret=0
libnbd: debug: nbd1: nbd_connect_uri: enter: uri="nbd+unix:///c?socket=/tmp/nbdkitlWewaq/socket"
libnbd: debug: nbd1: nbd_connect_uri: event CmdConnectSockAddr: START -> CONNECT.START
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=4
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=4
libnbd: debug: nbd1: nbd_connect_uri: event NotifyWrite: CONNECT.START -> CONNECT.CONNECTING
libnbd: debug: nbd1: nbd_connect_uri: transition: CONNECT.CONNECTING -> MAGIC.START
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.START -> MAGIC.RECV_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.RECV_MAGIC -> MAGIC.CHECK_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.CHECK_MAGIC -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.START -> NEWSTYLE.RECV_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.RECV_GFLAGS -> NEWSTYLE.CHECK_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.CHECK_GFLAGS -> NEWSTYLE.SEND_CFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.SEND_CFLAGS -> NEWSTYLE.OPT_STARTTLS.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STARTTLS.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.SEND
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.SEND -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY
libnbd: debug: nbd1: nbd_connect_uri: negotiated structured replies on this connection
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_connect_uri: leave: ret=0
libnbd: debug: nbd1: nbd_get_protocol: enter:
libnbd: debug: nbd1: nbd_get_protocol: leave: ret="newstyle-fixed"
libnbd: debug: nbd1: nbd_get_tls_negotiated: enter:
libnbd: debug: nbd1: nbd_get_tls_negotiated: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: exportsize: 3 eflags: 0x83
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: ret=0
libnbd: debug: nbd1: nbd_get_size: enter:
libnbd: debug: nbd1: nbd_get_size: leave: ret=3
libnbd: debug: nbd1: nbd_get_canonical_export_name: enter:
libnbd: debug: nbd1: nbd_get_canonical_export_name: leave: ret="c"
libnbd: debug: nbd1: nbd_get_export_description: enter:
libnbd: debug: nbd1: nbd_get_export_description: leave: ret="cc"
libnbd: debug: nbd1: nbd_is_rotational: enter:
libnbd: debug: nbd1: nbd_is_rotational: leave: ret=0
libnbd: debug: nbd1: nbd_is_read_only: enter:
libnbd: debug: nbd1: nbd_is_read_only: leave: ret=1
libnbd: debug: nbd1: nbd_can_cache: enter:
libnbd: debug: nbd1: nbd_can_cache: leave: ret=0
libnbd: debug: nbd1: nbd_can_df: enter:
libnbd: debug: nbd1: nbd_can_df: leave: ret=1
libnbd: debug: nbd1: nbd_can_fast_zero: enter:
libnbd: debug: nbd1: nbd_can_fast_zero: leave: ret=0
libnbd: debug: nbd1: nbd_can_flush: enter:
libnbd: debug: nbd1: nbd_can_flush: leave: ret=0
libnbd: debug: nbd1: nbd_can_fua: enter:
libnbd: debug: nbd1: nbd_can_fua: leave: ret=0
libnbd: debug: nbd1: nbd_can_multi_conn: enter:
libnbd: debug: nbd1: nbd_can_multi_conn: leave: ret=0
libnbd: debug: nbd1: nbd_can_trim: enter:
libnbd: debug: nbd1: nbd_can_trim: leave: ret=0
libnbd: debug: nbd1: nbd_can_zero: enter:
libnbd: debug: nbd1: nbd_can_zero: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=0
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=1
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_get_block_size: enter: size_type=2
libnbd: debug: nbd1: nbd_get_block_size: leave: ret=0
libnbd: debug: nbd1: nbd_opt_list_meta_context: enter: context=<fun>
libnbd: debug: nbd1: nbd_opt_list_meta_context: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_META_CONTEXT.SEND
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_EXPORTNAME -> NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.SEND_NRQUERIES -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_NEXT_QUERY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll start: events=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: negotiated base:allocation with context ID 0
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.PREPARE_FOR_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY -> NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_list_meta_context: transition: NEWSTYLE.OPT_META_CONTEXT.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_list_meta_context: leave: ret=1
libnbd: debug: nbd1: nbd_opt_abort: enter:
libnbd: debug: nbd1: nbd_opt_abort: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.START -> NEWSTYLE.PREPARE_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.PREPARE_OPT_ABORT -> NEWSTYLE.SEND_OPT_ABORT
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPT_ABORT -> NEWSTYLE.SEND_OPTION_SHUTDOWN
libnbd: debug: nbd1: nbd_opt_abort: transition: NEWSTYLE.SEND_OPTION_SHUTDOWN -> CLOSED
libnbd: debug: nbd1: nbd_opt_abort: leave: ret=0
libnbd: debug: nbd1: nbd_shutdown: enter: flags=0x0
libnbd: debug: nbd1: nbd_shutdown: leave: error="nbd_shutdown: invalid state: CLOSED: the handle must be connected with the server: Invalid argument"
libnbd: debug: nbd1: nbd_close: closing handle
+ cat exportname.out
{
"protocol": "newstyle-fixed",
"TLS": false,
"exports": [
	{
	"export-name": "c",
	"description": "cc",
	"contexts": [
		"base:allocation"
	],
	"is_rotational": false,
	"is_read_only": true,
	"can_cache": false,
	"can_df": true,
	"can_fast_zero": false,
	"can_flush": false,
	"can_fua": false,
	"can_multi_conn": false,
	"can_trim": false,
	"can_zero": false,
	"export-size": 3
	} ]
}
++ jq -c '[ [.exports[]] | sort_by(."export-name")[] |
  [."export-name", .description, ."export-size"] ]' exportname.out
+ test '[["c","cc",3]]' = '[["c","cc",3]]'
+ nbdkit -U - --filter=exportname sh exportname.sh exportname-strict=true --run 'nbdinfo --no-content --json "$uri"'
libnbd: debug: nbd1: nbd_create: opening handle
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: enter: allow=true
libnbd: debug: nbd1: nbd_set_uri_allow_local_file: leave: ret=0
libnbd: debug: nbd1: nbd_set_opt_mode: enter: enable=true
libnbd: debug: nbd1: nbd_set_opt_mode: leave: ret=0
libnbd: debug: nbd1: nbd_set_full_info: enter: request=true
libnbd: debug: nbd1: nbd_set_full_info: leave: ret=0
libnbd: debug: nbd1: nbd_connect_uri: enter: uri="nbd+unix://?socket=/tmp/nbdkitGqxGre/socket"
libnbd: debug: nbd1: nbd_connect_uri: event CmdConnectSockAddr: START -> CONNECT.START
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=4
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=4
libnbd: debug: nbd1: nbd_connect_uri: event NotifyWrite: CONNECT.START -> CONNECT.CONNECTING
libnbd: debug: nbd1: nbd_connect_uri: transition: CONNECT.CONNECTING -> MAGIC.START
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.START -> MAGIC.RECV_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: poll start: events=1
libnbd: debug: nbd1: nbd_connect_uri: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.RECV_MAGIC -> MAGIC.CHECK_MAGIC
libnbd: debug: nbd1: nbd_connect_uri: transition: MAGIC.CHECK_MAGIC -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.START -> NEWSTYLE.RECV_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.RECV_GFLAGS -> NEWSTYLE.CHECK_GFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.CHECK_GFLAGS -> NEWSTYLE.SEND_CFLAGS
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.SEND_CFLAGS -> NEWSTYLE.OPT_STARTTLS.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STARTTLS.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.START
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.START -> NEWSTYLE.OPT_STRUCTURED_REPLY.SEND
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.SEND -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY -> NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY
libnbd: debug: nbd1: nbd_connect_uri: negotiated structured replies on this connection
libnbd: debug: nbd1: nbd_connect_uri: transition: NEWSTYLE.OPT_STRUCTURED_REPLY.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_connect_uri: leave: ret=0
libnbd: debug: nbd1: nbd_get_protocol: enter:
libnbd: debug: nbd1: nbd_get_protocol: leave: ret="newstyle-fixed"
libnbd: debug: nbd1: nbd_get_tls_negotiated: enter:
libnbd: debug: nbd1: nbd_get_tls_negotiated: leave: ret=0
libnbd: debug: nbd1: nbd_opt_info: enter:
libnbd: debug: nbd1: nbd_opt_info: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
libnbd: debug: nbd1: nbd_opt_info: poll start: events=1
nbdkit: sh[1]: error: default export ("") not permitted
libnbd: debug: nbd1: nbd_opt_info: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_info: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_info: leave: error="nbd_opt_info: server replied with error to opt_info request: No such file or directory"
libnbd: debug: nbd1: nbd_opt_go: enter:
libnbd: debug: nbd1: nbd_opt_go: event CmdIssue: NEGOTIATING -> NEWSTYLE.START
libnbd: debug: nbd1: nbd_opt_go: transition: NEWSTYLE.START -> NEWSTYLE.OPT_META_CONTEXT.START
libnbd: debug: nbd1: nbd_opt_go: transition: NEWSTYLE.OPT_META_CONTEXT.START -> NEWSTYLE.OPT_GO.START
libnbd: debug: nbd1: nbd_opt_go: transition: NEWSTYLE.OPT_GO.START -> NEWSTYLE.OPT_GO.SEND
libnbd: debug: nbd1: nbd_opt_go: transition: NEWSTYLE.OPT_GO.SEND -> NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN
libnbd: debug: nbd1: nbd_opt_go: transition: NEWSTYLE.OPT_GO.SEND_EXPORTNAMELEN -> NEWSTYLE.OPT_GO.SEND_EXPORT
libnbd: debug: nbd1: nbd_opt_go: transition: NEWSTYLE.OPT_GO.SEND_EXPORT -> NEWSTYLE.OPT_GO.SEND_NRINFOS
libnbd: debug: nbd1: nbd_opt_go: transition: NEWSTYLE.OPT_GO.SEND_NRINFOS -> NEWSTYLE.OPT_GO.SEND_INFO
libnbd: debug: nbd1: nbd_opt_go: transition: NEWSTYLE.OPT_GO.SEND_INFO -> NEWSTYLE.OPT_GO.RECV_REPLY
nbdkit: shlibnbd: debug: nbd1: nbd_opt_go: poll start: events=1
[1]: error: default export ("") not permitted
libnbd: debug: nbd1: nbd_opt_go: poll end: r=1 revents=1
libnbd: debug: nbd1: nbd_opt_go: transition: NEWSTYLE.OPT_GO.RECV_REPLY -> NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD
libnbd: debug: nbd1: nbd_opt_go: transition: NEWSTYLE.OPT_GO.RECV_REPLY_PAYLOAD -> NEWSTYLE.OPT_GO.CHECK_REPLY
libnbd: debug: nbd1: nbd_opt_go: transition: NEWSTYLE.OPT_GO.CHECK_REPLY -> NEGOTIATING
libnbd: debug: nbd1: nbd_opt_go: leave: error="nbd_opt_go: server replied with error to opt_go request: No such file or directory"
nbd_opt_go: server replied with error to opt_go request: No such file or directory
+ test '!' -s exportname.out
++ _run_cleanup_hooks
++ local _status=1 _i
++ set +e
++ trap '' INT QUIT TERM EXIT ERR
++ echo ./test-exportname.sh: run cleanup hooks: exit code 1
./test-exportname.sh: run cleanup hooks: exit code 1
++ (( _i = 0 ))
++ (( _i < 1 ))
++ rm -f exportname.out exportname.sh
++ (( ++_i  ))
++ (( _i < 1 ))
++ exit 1
FAIL test-exportname.sh (exit status: 1)


More information about the Libguestfs mailing list