@@ -46,9 +46,7 @@ class Xprt:
self.info = read_info_file(path / "xprt_info")
self.dstaddr = read_addr_file(path / "dstaddr")
self.srcaddr = read_addr_file(path / "srcaddr")
-
- with open(path / "xprt_state") as f:
- self.state = ','.join(f.readline().split()[1:])
+ self.read_state()
def __lt__(self, rhs):
return self.id < rhs.id
@@ -72,9 +70,16 @@ class Xprt:
f"backlog {self.info['backlog_q_len']}, tasks {self.info['tasks_queuelen']}"
def __str__(self):
+ if not self.path.exists():
+ return f"xprt {self.id}: has been removed"
return "\n".join([self._xprt(), self._src_reqs(),
self._cong_slots(), self._queues() ])
+ def read_state(self):
+ if self.path.exists():
+ with open(self.path / "xprt_state") as f:
+ self.state = ','.join(f.readline().split()[1:])
+
def small_str(self):
main = " [main]" if self.info.get("main_xprt") else ""
return f"xprt {self.id}: {self.type}, {self.dstaddr}{main}"
@@ -83,6 +88,11 @@ class Xprt:
resolved = socket.gethostbyname(newaddr)
self.dstaddr = write_addr_file(self.path / "dstaddr", resolved)
+ def set_state(self, state):
+ with open(self.path / "xprt_state", 'w') as f:
+ f.write(state)
+ self.read_state()
+
def add_command(subparser):
parser = subparser.add_parser("xprt", help="Commands for individual xprts")
parser.add_argument("--id", metavar="ID", nargs=1, type=int, help="Id of a specific xprt to show")
@@ -92,6 +102,10 @@ class Xprt:
parser = subparser.add_parser("set", help="Set an xprt property")
parser.add_argument("--id", metavar="ID", nargs=1, type=int, required=True, help="Id of a specific xprt to modify")
parser.add_argument("--dstaddr", metavar="dstaddr", nargs=1, type=str, help="New dstaddr to set")
+ parser.add_argument("--offline", action="store_true", help="Set an xprt offline")
+ parser.add_argument("--online", action="store_true", help="Set an offline xprt back online")
+ parser.add_argument("--remove", action="store_true", help="Remove an xprt")
+
parser.set_defaults(func=Xprt.set_property)
def list_all(args):
@@ -112,6 +126,13 @@ class Xprt:
try:
if args.dstaddr != None:
xprt.set_dstaddr(args.dstaddr[0])
+ if args.offline:
+ xprt.set_state("offline")
+ elif args.online:
+ xprt.set_state("online")
+ elif args.remove:
+ xprt.set_state("offline")
+ xprt.set_state("remove")
print(xprt)
except Exception as e:
print(e)