mbox series

[v8,0/9] Add a tool for using the new sysfs files

Message ID 20220215192150.53811-1-Anna.Schumaker@Netapp.com (mailing list archive)
Headers show
Series Add a tool for using the new sysfs files | expand

Message

Schumaker, Anna Feb. 15, 2022, 7:21 p.m. UTC
From: Anna Schumaker <Anna.Schumaker@Netapp.com>

These patches implement a tool that can be used to read and write the
sysfs files, with subcommands!

The following subcommands are implemented:
	rpcctl client
	rpcctl client show
 	rpcctl switch
 	rpcctl switch set
 	rpcctl switch show
 	rpcctl xprt
 	rpcctl xprt remove
 	rpcctl xprt set
 	rpcctl xprt show

So you can print out information about every switch with:
	anna@client ~ % rpcctl switch
	switch-0: xprts 1, active 1, queue 0
		xprt-0: local, /var/run/gssproxy.sock [main]
	switch-1: xprts 1, active 1, queue 0
		xprt-1: local, /var/run/rpcbind.sock [main]
	switch-2: xprts 1, active 1, queue 0
		xprt-2: tcp, 192.168.111.1 [main]
	switch-3: xprts 4, active 4, queue 0
		xprt-3: tcp, 192.168.111.188 [main]
		xprt-4: tcp, 192.168.111.188
		xprt-5: tcp, 192.168.111.188
		xprt-6: tcp, 192.168.111.188

And information about each xprt:
	anna@client ~ % rpcctl xprt
	xprt-0: local, /var/run/gssproxy.sock, port 0, state <CONNECTED,BOUND>, main
		Source: (einval), port 0, Requests: 2
		Congestion: cur 0, win 256, Slots: min 2, max 65536
		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
	xprt-1: local, /var/run/rpcbind.sock, port 0, state <CONNECTED,BOUND>, main
		Source: (einval), port 0, Requests: 2
		Congestion: cur 0, win 256, Slots: min 2, max 65536
		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
	xprt-2: tcp, 192.168.111.1, port 2049, state <CONNECTED,BOUND>, main
		Source: 192.168.111.222, port 959, Requests: 2
		Congestion: cur 0, win 256, Slots: min 2, max 65536
		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
	xprt-3: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>, main
		Source: 192.168.111.222, port 921, Requests: 2
		Congestion: cur 0, win 256, Slots: min 2, max 65536
		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
	xprt-4: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>
		Source: 192.168.111.222, port 726, Requests: 2
		Congestion: cur 0, win 256, Slots: min 2, max 65536
		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
	xprt-5: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>
		Source: 192.168.111.222, port 671, Requests: 2
		Congestion: cur 0, win 256, Slots: min 2, max 65536
		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
	xprt-6: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>
		Source: 192.168.111.222, port 934, Requests: 2
		Congestion: cur 0, win 256, Slots: min 2, max 65536
		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0

You can use the `set` subcommand to change the dstaddr of individual xprts:
	anna@client ~ % sudo rpcctl xprt show xprt-4 
	xprt-4: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>
		Source: 192.168.111.222, port 726, Requests: 2
		Congestion: cur 0, win 256, Slots: min 2, max 65536
		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0

	anna@client ~ % sudo rpcctl xprt set xprt-4 dstaddr server2.nowheycreamery.com
	xprt-4: tcp, 192.168.111.186, port 2049, state <CONNECTED,BOUND>
		Source: 192.168.111.222, port 726, Requests: 2
		Congestion: cur 0, win 256, Slots: min 2, max 65536
		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0

Or for changing the dstaddr of all xprts attached to a switch:
	anna@client % rpcctl switch show switch-3
	switch-3: xprts 4, active 4, queue 0
		xprt 3: tcp, 192.168.111.188 [main]
		xprt 4: tcp, 192.168.111.188
		xprt 5: tcp, 192.168.111.188
		xprt 6: tcp, 192.168.111.188

	anna@client % sudo rpcctl switch set switch-3 dstaddr server2.nowheycreamery.vm
	switch-3: xprts 4, active 4, queue 0
		xprt 2: tcp, 192.168.111.186 [main]
		xprt 3: tcp, 192.168.111.186
		xprt 5: tcp, 192.168.111.186
		xprt 6: tcp, 192.168.111.186

Changes in v8:
- Improved exception handling when running commands
- Completely rework argument and command parsing to be more like ip-link
- Completely rewrite the man page to reflect the new argument scheme and
  add examples
- Only call socket.gethostbyname() once when changing the dstaddr of an
  RPC switch

Thoughts?
Anna


Anna Schumaker (9):
  rpcctl: Add a rpcctl.py tool
  rpcctl: Add a command for printing xprt switch information
  rpcctl: Add a command for printing individual xprts
  rpcctl: Add a command for printing rpc client information
  rpcctl: Add a command for changing xprt dstaddr
  rpcctl: Add a command for changing xprt switch dstaddrs
  rpcctl: Add a command for changing xprt state
  rpcctl: Add a man page
  rpcctl: Add installation to the Makefile

 configure.ac             |   1 +
 tools/Makefile.am        |   2 +-
 tools/rpcctl/Makefile.am |  13 ++
 tools/rpcctl/rpcctl.man  |  67 ++++++++++
 tools/rpcctl/rpcctl.py   | 255 +++++++++++++++++++++++++++++++++++++++
 5 files changed, 337 insertions(+), 1 deletion(-)
 create mode 100644 tools/rpcctl/Makefile.am
 create mode 100644 tools/rpcctl/rpcctl.man
 create mode 100755 tools/rpcctl/rpcctl.py

Comments

Steve Dickson Feb. 23, 2022, 4:49 p.m. UTC | #1
On 2/15/22 2:21 PM, Anna.Schumaker@Netapp.com wrote:
> From: Anna Schumaker <Anna.Schumaker@Netapp.com>
> 
> These patches implement a tool that can be used to read and write the
> sysfs files, with subcommands!
> 
> The following subcommands are implemented:
> 	rpcctl client
> 	rpcctl client show
>   	rpcctl switch
>   	rpcctl switch set
>   	rpcctl switch show
>   	rpcctl xprt
>   	rpcctl xprt remove
>   	rpcctl xprt set
>   	rpcctl xprt show
> 
> So you can print out information about every switch with:
> 	anna@client ~ % rpcctl switch
> 	switch-0: xprts 1, active 1, queue 0
> 		xprt-0: local, /var/run/gssproxy.sock [main]
> 	switch-1: xprts 1, active 1, queue 0
> 		xprt-1: local, /var/run/rpcbind.sock [main]
> 	switch-2: xprts 1, active 1, queue 0
> 		xprt-2: tcp, 192.168.111.1 [main]
> 	switch-3: xprts 4, active 4, queue 0
> 		xprt-3: tcp, 192.168.111.188 [main]
> 		xprt-4: tcp, 192.168.111.188
> 		xprt-5: tcp, 192.168.111.188
> 		xprt-6: tcp, 192.168.111.188
> 
> And information about each xprt:
> 	anna@client ~ % rpcctl xprt
> 	xprt-0: local, /var/run/gssproxy.sock, port 0, state <CONNECTED,BOUND>, main
> 		Source: (einval), port 0, Requests: 2
> 		Congestion: cur 0, win 256, Slots: min 2, max 65536
> 		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> 	xprt-1: local, /var/run/rpcbind.sock, port 0, state <CONNECTED,BOUND>, main
> 		Source: (einval), port 0, Requests: 2
> 		Congestion: cur 0, win 256, Slots: min 2, max 65536
> 		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> 	xprt-2: tcp, 192.168.111.1, port 2049, state <CONNECTED,BOUND>, main
> 		Source: 192.168.111.222, port 959, Requests: 2
> 		Congestion: cur 0, win 256, Slots: min 2, max 65536
> 		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> 	xprt-3: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>, main
> 		Source: 192.168.111.222, port 921, Requests: 2
> 		Congestion: cur 0, win 256, Slots: min 2, max 65536
> 		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> 	xprt-4: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>
> 		Source: 192.168.111.222, port 726, Requests: 2
> 		Congestion: cur 0, win 256, Slots: min 2, max 65536
> 		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> 	xprt-5: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>
> 		Source: 192.168.111.222, port 671, Requests: 2
> 		Congestion: cur 0, win 256, Slots: min 2, max 65536
> 		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> 	xprt-6: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>
> 		Source: 192.168.111.222, port 934, Requests: 2
> 		Congestion: cur 0, win 256, Slots: min 2, max 65536
> 		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> 
> You can use the `set` subcommand to change the dstaddr of individual xprts:
> 	anna@client ~ % sudo rpcctl xprt show xprt-4
> 	xprt-4: tcp, 192.168.111.188, port 2049, state <CONNECTED,BOUND>
> 		Source: 192.168.111.222, port 726, Requests: 2
> 		Congestion: cur 0, win 256, Slots: min 2, max 65536
> 		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> 
> 	anna@client ~ % sudo rpcctl xprt set xprt-4 dstaddr server2.nowheycreamery.com
> 	xprt-4: tcp, 192.168.111.186, port 2049, state <CONNECTED,BOUND>
> 		Source: 192.168.111.222, port 726, Requests: 2
> 		Congestion: cur 0, win 256, Slots: min 2, max 65536
> 		Queues: binding 0, sending 0, pending 0, backlog 0, tasks 0
> 
> Or for changing the dstaddr of all xprts attached to a switch:
> 	anna@client % rpcctl switch show switch-3
> 	switch-3: xprts 4, active 4, queue 0
> 		xprt 3: tcp, 192.168.111.188 [main]
> 		xprt 4: tcp, 192.168.111.188
> 		xprt 5: tcp, 192.168.111.188
> 		xprt 6: tcp, 192.168.111.188
> 
> 	anna@client % sudo rpcctl switch set switch-3 dstaddr server2.nowheycreamery.vm
> 	switch-3: xprts 4, active 4, queue 0
> 		xprt 2: tcp, 192.168.111.186 [main]
> 		xprt 3: tcp, 192.168.111.186
> 		xprt 5: tcp, 192.168.111.186
> 		xprt 6: tcp, 192.168.111.186
> 
> Changes in v8:
> - Improved exception handling when running commands
> - Completely rework argument and command parsing to be more like ip-link
> - Completely rewrite the man page to reflect the new argument scheme and
>    add examples
> - Only call socket.gethostbyname() once when changing the dstaddr of an
>    RPC switch
> 
> Thoughts?
> Anna
> 
> 
> Anna Schumaker (9):
>    rpcctl: Add a rpcctl.py tool
>    rpcctl: Add a command for printing xprt switch information
>    rpcctl: Add a command for printing individual xprts
>    rpcctl: Add a command for printing rpc client information
>    rpcctl: Add a command for changing xprt dstaddr
>    rpcctl: Add a command for changing xprt switch dstaddrs
>    rpcctl: Add a command for changing xprt state
>    rpcctl: Add a man page
>    rpcctl: Add installation to the Makefile
> 
>   configure.ac             |   1 +
>   tools/Makefile.am        |   2 +-
>   tools/rpcctl/Makefile.am |  13 ++
>   tools/rpcctl/rpcctl.man  |  67 ++++++++++
>   tools/rpcctl/rpcctl.py   | 255 +++++++++++++++++++++++++++++++++++++++
>   5 files changed, 337 insertions(+), 1 deletion(-)
>   create mode 100644 tools/rpcctl/Makefile.am
>   create mode 100644 tools/rpcctl/rpcctl.man
>   create mode 100755 tools/rpcctl/rpcctl.py
> 
Committed... (tag: nfs-utils-2-6-2-rc2)

steved.