Merge branch 'master' into nac3

This commit is contained in:
Sebastien Bourdeauducq 2022-04-12 09:19:59 +08:00
commit 0978cd0e35
5 changed files with 32 additions and 45 deletions

View File

@ -188,17 +188,27 @@ class FilesDock(QtWidgets.QDockWidget):
except: except:
logger.warning("unable to read metadata from %s", logger.warning("unable to read metadata from %s",
info.filePath(), exc_info=True) info.filePath(), exc_info=True)
rd = dict()
rd = {}
if "archive" in f: 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: if "datasets" in f:
for k, v in f["datasets"].items(): def visitor(k, v):
if k in rd: if isinstance(v, h5py.Dataset):
logger.warning("dataset '%s' is both in archive and " if k in rd:
"outputs", k) logger.warning("dataset '%s' is both in archive "
rd[k] = (True, v[()]) "and outputs", k)
if rd: rd[k] = (True, v[()])
self.datasets.init(rd)
f["datasets"].visititems(visitor)
self.datasets.init(rd)
self.dataset_changed.emit(info.filePath()) self.dataset_changed.emit(info.filePath())
def list_activated(self, idx): def list_activated(self, idx):

View File

@ -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

View File

@ -11,10 +11,10 @@ from fractions import Fraction
from collections import namedtuple from collections import namedtuple
from artiq.coredevice import exceptions from artiq.coredevice import exceptions
from artiq.coredevice.comm import initialize_connection
from artiq import __version__ as software_version from artiq import __version__ as software_version
from artiq import __artiq_dir__ as artiq_dir from artiq import __artiq_dir__ as artiq_dir
from sipyco.keepalive import create_connection
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -302,7 +302,7 @@ class CommKernel:
def open(self): def open(self):
if hasattr(self, "socket"): if hasattr(self, "socket"):
return return
self.socket = initialize_connection(self.host, self.port) self.socket = create_connection(self.host, self.port)
self.socket.sendall(b"ARTIQ coredev\n") self.socket.sendall(b"ARTIQ coredev\n")
endian = self._read(1) endian = self._read(1)
if endian == b"e": if endian == b"e":

View File

@ -2,8 +2,7 @@ from enum import Enum
import logging import logging
import struct import struct
from artiq.coredevice.comm import initialize_connection from sipyco.keepalive import create_connection
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -54,7 +53,7 @@ class CommMgmt:
def open(self): def open(self):
if hasattr(self, "socket"): if hasattr(self, "socket"):
return return
self.socket = initialize_connection(self.host, self.port) self.socket = create_connection(self.host, self.port)
self.socket.sendall(b"ARTIQ management\n") self.socket.sendall(b"ARTIQ management\n")
endian = self._read(1) endian = self._read(1)
if endian == b"e": if endian == b"e":

View File

@ -2,7 +2,8 @@ import asyncio
import logging import logging
import struct import struct
from enum import Enum from enum import Enum
from .comm import set_keepalive
from sipyco.keepalive import async_open_connection
__all__ = ["TTLProbe", "TTLOverride", "CommMonInj"] __all__ = ["TTLProbe", "TTLOverride", "CommMonInj"]
@ -28,8 +29,13 @@ class CommMonInj:
self.disconnect_cb = disconnect_cb self.disconnect_cb = disconnect_cb
async def connect(self, host, port=1383): async def connect(self, host, port=1383):
self._reader, self._writer = await asyncio.open_connection(host, port) self._reader, self._writer = await async_open_connection(
set_keepalive(self._writer.transport.get_extra_info('socket'), 1, 1, 3) host,
port,
after_idle=1,
interval=1,
max_fails=3,
)
try: try:
self._writer.write(b"ARTIQ moninj\n") self._writer.write(b"ARTIQ moninj\n")