From b5dc9fd640caafca12de7240d0eabd939879603d Mon Sep 17 00:00:00 2001 From: Leon Riesebos Date: Tue, 5 Apr 2022 23:44:01 -0400 Subject: [PATCH 1/5] browser: cleanup datasets panel for empty h5 files this fix makes sure the datasets panel is cleared if an h5 file is empty or the datasets and archive groups are empty --- artiq/browser/files.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/artiq/browser/files.py b/artiq/browser/files.py index e03f26483..b29ad1ccb 100644 --- a/artiq/browser/files.py +++ b/artiq/browser/files.py @@ -197,8 +197,9 @@ class FilesDock(QtWidgets.QDockWidget): logger.warning("dataset '%s' is both in archive and " "outputs", k) rd[k] = (True, v[()]) - if rd: - self.datasets.init(rd) + + self.datasets.init(rd) + self.dataset_changed.emit(info.filePath()) def list_activated(self, idx): From 386391e3f9500fc62b594f0a52f80f2daac73e36 Mon Sep 17 00:00:00 2001 From: Leon Riesebos Date: Tue, 5 Apr 2022 23:47:49 -0400 Subject: [PATCH 2/5] browser: support datasets that use h5 group notation Signed-off-by: Leon Riesebos --- artiq/browser/files.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/artiq/browser/files.py b/artiq/browser/files.py index b29ad1ccb..339c12d34 100644 --- a/artiq/browser/files.py +++ b/artiq/browser/files.py @@ -188,15 +188,24 @@ class FilesDock(QtWidgets.QDockWidget): except: logger.warning("unable to read metadata from %s", info.filePath(), exc_info=True) - rd = dict() + + rd = {} if "archive" in f: - rd = {k: (True, v[()]) for k, v in f["archive"].items()} + def visitor(k, v): + if isinstance(v, h5py.Dataset): + rd[k] = (True, v[()]) + + f["archive"].visititems(visitor) + if "datasets" in f: - for k, v in f["datasets"].items(): - if k in rd: - logger.warning("dataset '%s' is both in archive and " - "outputs", k) - rd[k] = (True, v[()]) + def visitor(k, v): + if isinstance(v, h5py.Dataset): + if k in rd: + logger.warning("dataset '%s' is both in archive " + "and outputs", k) + rd[k] = (True, v[()]) + + f["datasets"].visititems(visitor) self.datasets.init(rd) From 0a029748eedb0778ba5a9598ec230458f921cf1a Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Sat, 9 Apr 2022 17:24:44 +0800 Subject: [PATCH 3/5] flake: update dependencies --- flake.lock | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/flake.lock b/flake.lock index 4071f8abb..c68cc1352 100644 --- a/flake.lock +++ b/flake.lock @@ -10,11 +10,11 @@ ] }, "locked": { - "lastModified": 1647688999, - "narHash": "sha256-K99rYlmfCZmfam4m07hLZVg7m2zT5ul62wVGdpmjciA=", + "lastModified": 1649124276, + "narHash": "sha256-l1+vk7cvj4cjl83wRx/y1Jwdds4e8xAzpxHrXusEZ5A=", "owner": "m-labs", "repo": "artiq-comtools", - "rev": "7eb367b2df7510dd4fa7ccba3682b2ff64a5d982", + "rev": "e2d85f2e51ecdac463da752ef754e59572f9e119", "type": "github" }, "original": { @@ -41,11 +41,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1647490331, - "narHash": "sha256-Jcc+vHNDN3KDWuzGNTl3A24ICGovPneJDejiN2t57QI=", + "lastModified": 1649313840, + "narHash": "sha256-d23rAnhL08BCc88PxWAhEs/D+Kz3fMW2OTGDXWZSFMI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2c66a7a6e036971c4847cca424125f55b9eb0b0b", + "rev": "e387bb3a4d0d63446086abbfbe2117e80fe3522a", "type": "github" }, "original": { @@ -73,11 +73,11 @@ ] }, "locked": { - "lastModified": 1647688038, - "narHash": "sha256-IceTSKu1sQB8sFmDTzvmurlEHWL1cV29N0mUY5F7vUY=", + "lastModified": 1649151322, + "narHash": "sha256-CwTpGx2Vx/m3bMbeWMculOSsvGmg+OD/hd69dxBwU48=", "owner": "m-labs", "repo": "sipyco", - "rev": "1a9a3062451f5c5b125b006d1b9bee997f986abd", + "rev": "4a4a04988206db8821c3c8fa33dca478c738677c", "type": "github" }, "original": { @@ -105,11 +105,11 @@ "src-misoc": { "flake": false, "locked": { - "lastModified": 1641889368, - "narHash": "sha256-0Ai25lry9ju1HxFmfMRNKG8mamBqvw+kvDfpuK8Dtjo=", + "lastModified": 1649324486, + "narHash": "sha256-Mw/fQS3lHFvCm7L1k63joRkz5uyijQfywcOq+X2+o2s=", "ref": "master", - "rev": "7242dc5a41732135425acc4871487461dfae6c66", - "revCount": 2419, + "rev": "f1dc58d2b8c222ba41c25cee4301626625f46e43", + "revCount": 2420, "submodules": true, "type": "git", "url": "https://github.com/m-labs/misoc.git" From cab9d90d0102c2b0cecdd8010565362da2d4f07a Mon Sep 17 00:00:00 2001 From: Michael Birtwell Date: Mon, 11 Apr 2022 16:41:38 +0100 Subject: [PATCH 4/5] Use sipyco.keepalive Remove the implementation of setting keepalive settings on sockets and use the implementation from sipyco instead. Signed-off-by: Michael Birtwell --- artiq/coredevice/comm.py | 28 ---------------------------- artiq/coredevice/comm_kernel.py | 5 ++--- artiq/coredevice/comm_mgmt.py | 5 ++--- artiq/coredevice/comm_moninj.py | 12 +++++++++--- 4 files changed, 13 insertions(+), 37 deletions(-) delete mode 100644 artiq/coredevice/comm.py diff --git a/artiq/coredevice/comm.py b/artiq/coredevice/comm.py deleted file mode 100644 index fb70a59b5..000000000 --- a/artiq/coredevice/comm.py +++ /dev/null @@ -1,28 +0,0 @@ -import sys -import socket -import logging - -logger = logging.getLogger(__name__) - - -def set_keepalive(sock, after_idle, interval, max_fails): - if sys.platform.startswith("linux"): - sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) - sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, after_idle) - sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, interval) - sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, max_fails) - elif sys.platform.startswith("win") or sys.platform.startswith("cygwin"): - # setting max_fails is not supported, typically ends up being 5 or 10 - # depending on Windows version - sock.ioctl(socket.SIO_KEEPALIVE_VALS, - (1, after_idle * 1000, interval * 1000)) - else: - logger.warning("TCP keepalive not supported on platform '%s', ignored", - sys.platform) - - -def initialize_connection(host, port): - sock = socket.create_connection((host, port)) - set_keepalive(sock, 10, 10, 3) - logger.debug("connected to %s:%d", host, port) - return sock diff --git a/artiq/coredevice/comm_kernel.py b/artiq/coredevice/comm_kernel.py index 0b5dd84b7..2d529b6f9 100644 --- a/artiq/coredevice/comm_kernel.py +++ b/artiq/coredevice/comm_kernel.py @@ -8,9 +8,8 @@ from fractions import Fraction from collections import namedtuple from artiq.coredevice import exceptions -from artiq.coredevice.comm import initialize_connection from artiq import __version__ as software_version - +from sipyco.keepalive import create_connection logger = logging.getLogger(__name__) @@ -195,7 +194,7 @@ class CommKernel: def open(self): if hasattr(self, "socket"): return - self.socket = initialize_connection(self.host, self.port) + self.socket = create_connection(self.host, self.port) self.socket.sendall(b"ARTIQ coredev\n") endian = self._read(1) if endian == b"e": diff --git a/artiq/coredevice/comm_mgmt.py b/artiq/coredevice/comm_mgmt.py index 793b44a75..539643751 100644 --- a/artiq/coredevice/comm_mgmt.py +++ b/artiq/coredevice/comm_mgmt.py @@ -2,8 +2,7 @@ from enum import Enum import logging import struct -from artiq.coredevice.comm import initialize_connection - +from sipyco.keepalive import create_connection logger = logging.getLogger(__name__) @@ -54,7 +53,7 @@ class CommMgmt: def open(self): if hasattr(self, "socket"): return - self.socket = initialize_connection(self.host, self.port) + self.socket = create_connection(self.host, self.port) self.socket.sendall(b"ARTIQ management\n") endian = self._read(1) if endian == b"e": diff --git a/artiq/coredevice/comm_moninj.py b/artiq/coredevice/comm_moninj.py index a6b95983e..b5c2ee40d 100644 --- a/artiq/coredevice/comm_moninj.py +++ b/artiq/coredevice/comm_moninj.py @@ -2,7 +2,8 @@ import asyncio import logging import struct from enum import Enum -from .comm import set_keepalive + +from sipyco.keepalive import async_open_connection __all__ = ["TTLProbe", "TTLOverride", "CommMonInj"] @@ -28,8 +29,13 @@ class CommMonInj: self.disconnect_cb = disconnect_cb async def connect(self, host, port=1383): - self._reader, self._writer = await asyncio.open_connection(host, port) - set_keepalive(self._writer.transport.get_extra_info('socket'), 1, 1, 3) + self._reader, self._writer = await async_open_connection( + host, + port, + after_idle=1, + interval=1, + max_fails=3, + ) try: self._writer.write(b"ARTIQ moninj\n") From fa3ee8ad23051846bb4d0e7e3b6a8713d20d2f60 Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Tue, 12 Apr 2022 08:54:58 +0800 Subject: [PATCH 5/5] flake: update sipyco --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index c68cc1352..cd9228e88 100644 --- a/flake.lock +++ b/flake.lock @@ -73,11 +73,11 @@ ] }, "locked": { - "lastModified": 1649151322, - "narHash": "sha256-CwTpGx2Vx/m3bMbeWMculOSsvGmg+OD/hd69dxBwU48=", + "lastModified": 1649724535, + "narHash": "sha256-15Nun4EY35j+6SPZkjzZtyH/ncxLS60KuGJjFh5kSTc=", "owner": "m-labs", "repo": "sipyco", - "rev": "4a4a04988206db8821c3c8fa33dca478c738677c", + "rev": "939f84f9b5eef7efbf7423c735d1834783b6140e", "type": "github" }, "original": {