interface leak on initial Request cancel

Interface can be leaked if the initial Request's context gets cancelled before the connection could be established.
The problem might occur in kernelTap if the context gets cancelled during the vppConn tapCreate call. In which case the call returns with an error, hence the interface won't get saved into the ifindex storage.
Therefore, even though the Request should initiate a Close due to the failed kernelTap create (e.g. in kernelTapServer), del won't be able to lookup the interface from the storage.
NSM version: v1.13.2-rc.1
Logs:
Follow the following request:
Jul  5 14:59:32.903 [TRAC] [id:9a29a6db-aed2-48d4-b5fa-c75f7337328e] [type:networkService] (1.1)   request={"connection":{"id":"9a29a6db-aed2-48d4-b5fa-c75f7337328e","network_service":"load-balancer-a1.trench-a.default","context":{"ip_context":{"src_ip_addrs":["<IP_ADDRESS>/24","fd00::1f/64"],"dst_ip_addrs":["<IP_ADDRESS>/24","fd00::1e/64"],"excluded_prefixes":["<IP_ADDRESS>/16","<IP_ADDRESS>/16"]},"MTU":1500},"labels":{"nodeName":"kind-worker3"},"path":{"index":1,"path_segments":[{"name":"proxy-load-balancer-a1-xvq6h","id":"f161b4b1-2ffa-4095-ace0-9d2027f4e356-proxy-load-balancer-a1-xvq6h-load-balancer-a1.trench-a.default-stateless-lb-frontend-attr-a1-f5864fc94-59nlh","token":"eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJzcGlmZmU6Ly9leGFtcGxlLm9yZy9ucy9kZWZhdWx0L3NhL2RlZmF1bHQiLCJhdWQiOlsic3BpZmZlOi8vZXhhbXBsZS5vcmcvbnMvbnNtL3NhL25zbWdyLXNhIl0sImV4cCI6MTcyMDE5MjE3Mn0.Xz6pp29LEzAhDBFG4KBhQBMZ5BuL-GNQOP5e3l4NHPwEYRuLTg-FWlhAW2PO3SqQB67TLO6LRXzJ5rXlhV3dwA","expires":{"seconds":1720192172,"nanos":876126486},"metrics":{"client_interface":"KERNEL/unknown"}},{"name":"nsmgr-pbj2f","id":"9a29a6db-aed2-48d4-b5fa-c75f7337328e","token":"eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJzcGlmZmU6Ly9leGFtcGxlLm9yZy9ucy9uc20vc2EvbnNtZ3Itc2EiLCJhdWQiOlsic3BpZmZlOi8vZXhhbXBsZS5vcmcvbnMvZGVmYXVsdC9zYS9kZWZhdWx0Il0sImV4cCI6MTcyMDE5MjE3Mn0.QamUnYKNhPziEGeN2hbFpNpKq2W8rtm0gZBiLaZ05lp0HSH9oVLsy54-vRblf5cUV5GK7gWlrbJdIc63sLDFaw","expires":{"seconds":1720192172,"nanos":877054244}}]},"network_service_endpoint_name":"stateless-lb-frontend-attr-a1-f5864fc94-59nlh","payload":"ETHERNET"},"mechanism_preferences":[{"cls":"LOCAL","type":"KERNEL","parameters":{"inodeURL":"inode://4/4026535834","name":"load-balan-2ezO"}}]}

Use filter string:
load-balan-2ezO|9a29a6db-aed2-48d4-b5fa-c75f7337328e|95b833d9-10fc-43d4-9c30-54f2ad7f1c2b|load-balan-tZer
NSC side load-balan-2ezO interface will not be removed.
nsm_forwarder-vpp-mwbc2_forwarder-vpp.log

nsm_forwarder-vpp-mwbc2_describe.log

Another example where the NSE side interface load-balan-t6nu got stuck.
Jul  5 14:59:33.372 [TRAC] [id:9a5ea784-40f2-4788-b286-c27f28eb9747] [type:networkService] (1.1)   request={"connection":{"id":"9a5ea784-40f2-4788-b286-c27f28eb9747","network_service":"load-balancer-a1.trench-a.default","context":{"ip_context":{"src_ip_addrs":["<IP_ADDRESS>/24","fd00:0:0:2::21/64"],"dst_ip_addrs":["<IP_ADDRESS>/24","fd00:0:0:2::20/64"],"excluded_prefixes":["<IP_ADDRESS>/16","<IP_ADDRESS>/16"]},"MTU":1500},"labels":{"nodeName":"kind-worker2"},"path":{"index":3,"path_segments":[{"name":"proxy-load-balancer-a1-77zlr","id":"991fe339-7d91-49d4-ba7f-2d4c1d7a01bd-proxy-load-balancer-a1-77zlr-load-balancer-a1.trench-a.default-stateless-lb-frontend-attr-a1-f5864fc94-59nlh","token":"eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJzcGlmZmU6Ly9leGFtcGxlLm9yZy9ucy9kZWZhdWx0L3NhL2RlZmF1bHQiLCJhdWQiOlsic3BpZmZlOi8vZXhhbXBsZS5vcmcvbnMvbnNtL3NhL25zbWdyLXNhIl0sImV4cCI6MTcyMDE5MjE3Mn0.UUxJKoSOP-ee0Du3DstHxgecmKYzmpEnieVEBOdZiex8eUOpmA5P-KNr45hxsw-8PccGVUnNWcduISetmnQTNA","expires":{"seconds":1720192172,"nanos":880397227},"metrics":{"client_interface":"KERNEL/unknown"}},{"name":"nsmgr-pfss7","id":"a9211a4f-500d-4d7d-8a3b-ed44a173762e","token":"eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJzcGlmZmU6Ly9leGFtcGxlLm9yZy9ucy9uc20vc2EvbnNtZ3Itc2EiLCJhdWQiOlsic3BpZmZlOi8vZXhhbXBsZS5vcmcvbnMvbnNtL3NhL2RlZmF1bHQiXSwiZXhwIjoxNzIwMTkyMTczfQ.9GqG4MtdzWz_F157_V0AF6CiCsl0rZxwNIEtattssADqMzl-An7EGGZV-WPqzZ5NqijLH0uq_-zmp1YZ9ii6nw","expires":{"seconds":1720192173,"nanos":76868291}},{"name":"forwarder-vpp-772b9","id":"789260f9-be2e-401a-b601-40b3a913c067","token":"eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJzcGlmZmU6Ly9leGFtcGxlLm9yZy9ucy9uc20vc2EvZGVmYXVsdCIsImF1ZCI6WyJzcGlmZmU6Ly9leGFtcGxlLm9yZy9ucy9uc20vc2EvbnNtZ3Itc2EiXSwiZXhwIjoxNzIwMTkyMTczfQ.KA1890RkZBfrFcYBiytD6HLZp-DctqnJ27yJY-eOVqVE4bjsX-VPQ44Vn5mRnbos85sXxngjec2sxFtoUwbStQ","expires":{"seconds":1720192173,"nanos":183239052}},{"name":"nsmgr-pbj2f","id":"9a5ea784-40f2-4788-b286-c27f28eb9747","token":"eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJzcGlmZmU6Ly9leGFtcGxlLm9yZy9ucy9uc20vc2EvbnNtZ3Itc2EiLCJhdWQiOlsic3BpZmZlOi8vZXhhbXBsZS5vcmcvbnMvbnNtL3NhL2RlZmF1bHQiXSwiZXhwIjoxNzIwMTkyMTczfQ.cqMK_9_P-J9tkEkCATe0-lZgej5FO7OJg-918c_MRaj70aB1SFK86sWvb1VQW_5fbbpFxfl9jjUA-rkrF2svOQ","expires":{"seconds":1720192173,"nanos":184038754}}]},"network_service_endpoint_name":"stateless-lb-frontend-attr-a1-f5864fc94-59nlh","payload":"ETHERNET"},"mechanism_preferences":[{"cls":"REMOTE","type":"VXLAN","parameters":{"MTU":"1446","src_ip":"<IP_ADDRESS>","src_port":"4789"}},{"cls":"REMOTE","type":"VLAN"}]}

filter string:
load-balan-t6nu|667aa022-1a1a-49ec-a938-37b9dddb2da6|9a5ea784-40f2-4788-b286-c27f28eb9747
(same forwarder logs)

I was able to reproduce it on a 4 node KIND cluster relying on basic deployment with kernel-nse and kernel-nsc by tweaking NSM_REQUEST_TIMEOUT parameter.
Double checked that in nsc the requests kept failing due to context timeout, and left the system running for a couple minutes and was monitoring forwarder logs for "vppapi TapCreateV3 returned error" printouts.
cat <<EOF | kubectl apply -f -
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nsc-kernel
  labels:
    app: nsc-kernel
spec:
  selector:
    matchLabels:
      app: nsc-kernel
  template:
    metadata:
      labels:
        app: nsc-kernel
        "spiffe.io/spiffe-id": "true"
    spec:
      initContainers:
        - name: sysctl-init
          image: registry.nordix.org/cloud-native/meridio/busybox:1.29
          securityContext:
            privileged: true
          command: ["/bin/sh"]
          args:
            - -c
            - sysctl -w net.ipv4.ping_group_range='0 1' ;
      containers:
        - name: nsc
          image: ghcr.io/networkservicemesh/cmd-nsc:v1.13.2-rc.1
          imagePullPolicy: Always
          env:
            - name: SPIFFE_ENDPOINT_SOCKET
              value: unix:///run/spire/sockets/agent.sock
            - name: NSM_LOG_LEVEL
              value: TRACE
            - name: NSM_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: NSM_NETWORK_SERVICES
              value: kernel://icmp-responder
            - name: NSM_LIVENESSCHECKENABLED
              value: "false"
            - name: NSM_REQUEST_TIMEOUT
              value: "180ms"
          volumeMounts:
            - name: spire-agent-socket
              mountPath: /run/spire/sockets
              readOnly: true
            - name: nsm-socket
              mountPath: /var/lib/networkservicemesh
              readOnly: true
          resources:
            requests:
              cpu: 100m
              memory: 40Mi
            limits:
              memory: 80Mi
              cpu: 200m
      volumes:
        - name: spire-agent-socket
          hostPath:
            path: /run/spire/sockets
            type: Directory
        - name: nsm-socket
          hostPath:
            path: /var/lib/networkservicemesh
            type: DirectoryOrCreate
EOF

cat <<EOF | kubectl apply -f -
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nse-kernel
  labels:
    app: nse-kernel
spec:
  selector:
    matchLabels:
      app: nse-kernel
  template:
    metadata:
      labels:
        app: nse-kernel
        "spiffe.io/spiffe-id": "true"
    spec:
      containers:
        - name: nse
          image: ghcr.io/networkservicemesh/cmd-nse-icmp-responder:v1.13.2-rc.1
          imagePullPolicy: IfNotPresent
          env:
            - name: SPIFFE_ENDPOINT_SOCKET
              value: unix:///run/spire/sockets/agent.sock
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: NSM_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: NSM_LOG_LEVEL
              value: TRACE
            - name: NSM_CONNECT_TO
              value: unix:///var/lib/networkservicemesh/nsm.io.sock
            - name: NSM_CIDR_PREFIX
              value: <IP_ADDRESS>/16
            - name: NSM_SERVICE_NAMES
              value: "icmp-responder"
          volumeMounts:
            - name: spire-agent-socket
              mountPath: /run/spire/sockets
              readOnly: true
            - name: nsm-socket
              mountPath: /var/lib/networkservicemesh
              readOnly: true
          resources:
            requests:
              cpu: 100m
              memory: 40Mi
            limits:
              memory: 80Mi
              cpu: 200m
      volumes:
        - name: spire-agent-socket
          hostPath:
            path: /run/spire/sockets
            type: Directory
        - name: nsm-socket
          hostPath:
            path: /var/lib/networkservicemesh
            type: DirectoryOrCreate
EOF

NAME                          READY   STATUS    RESTARTS   AGE   IP            NODE           NOMINATED NODE   READINESS GATES
nsc-kernel-7cc77f58c8-ftl7f   1/1     Running   0          30m   <IP_ADDRESS>   kind-worker2   <none>           <none>
nse-kernel-85fbcffb44-ghz5s   1/1     Running   0          30m   <IP_ADDRESS>    kind-worker    <none>           <none>

kubectl get pods -l app=nsc-kernel -o=jsonpath='{.items[*].metadata.name}'| tr ' ' '\n' | xargs -I{} sh -c 'echo === {} === && kubectl exec -t {}  -- ip a';kubectl get pods -l app=nse-kernel -o=jsonpath='{.items[*].metadata.name}'| tr ' ' '\n' | xargs -I{} sh -c 'echo === {} === && kubectl exec -t {}  -- ip a'
=== nsc-kernel-7cc77f58c8-ftl7f ===
Defaulted container "nsc" out of: nsc, sysctl-init (init)
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet <IP_ADDRESS>/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0@if15: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
    link/ether 1e:5f:01:00:e9:70 brd ff:ff:ff:ff:ff:ff
    inet <IP_ADDRESS>/24 brd <IP_ADDRESS> scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::1c5f:1ff:fe00:e970/64 scope link
       valid_lft forever preferred_lft forever
=== nse-kernel-85fbcffb44-ghz5s ===
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet <IP_ADDRESS>/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0@icmp-respo-Rw5D: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
    link/ether 9a:ea:0c:ea:b3:2e brd ff:ff:ff:ff:ff:ff
    inet <IP_ADDRESS>/24 brd <IP_ADDRESS> scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::98ea:cff:feea:b32e/64 scope link
       valid_lft forever preferred_lft forever
3: icmp-respo-CTW4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:03:96:b0:a1 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:3ff:fe96:b0a1/64 scope link
       valid_lft forever preferred_lft forever
4: icmp-respo-SSwm: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:5b:6a:f2:04 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:5bff:fe6a:f204/64 scope link
       valid_lft forever preferred_lft forever
5: icmp-respo-ePzm: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:11:74:cb:fa brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:11ff:fe74:cbfa/64 scope link
       valid_lft forever preferred_lft forever
6: icmp-respo-yJZR: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:6b:54:49:71 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:6bff:fe54:4971/64 scope link
       valid_lft forever preferred_lft forever
7: icmp-respo-QShs: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:57:ae:f2:13 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:57ff:feae:f213/64 scope link
       valid_lft forever preferred_lft forever
8: icmp-respo-rFaQ: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:19:d3:7a:09 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:19ff:fed3:7a09/64 scope link
       valid_lft forever preferred_lft forever
9: icmp-respo-rg7S: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:f3:44:29:86 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:f3ff:fe44:2986/64 scope link
       valid_lft forever preferred_lft forever
10: icmp-respo-A6cp: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:fb:2f:3e:1a brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:fbff:fe2f:3e1a/64 scope link
       valid_lft forever preferred_lft forever
11: icmp-respo-Rw5D: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:01:11:de:76 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:1ff:fe11:de76/64 scope link
       valid_lft forever preferred_lft forever
12: icmp-respo-r4Db: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:97:4a:57:2f brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:97ff:fe4a:572f/64 scope link
       valid_lft forever preferred_lft forever
13: icmp-respo-KvCJ: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:29:d6:43:50 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:29ff:fed6:4350/64 scope link
       valid_lft forever preferred_lft forever
14: icmp-respo-z0kO: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:3d:95:f7:58 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:3dff:fe95:f758/64 scope link
       valid_lft forever preferred_lft forever
15: icmp-respo-V3EG: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:bd:60:0b:8e brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:bdff:fe60:b8e/64 scope link
       valid_lft forever preferred_lft forever
16: icmp-respo-CRvI: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:21:ad:cc:f0 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:21ff:fead:ccf0/64 scope link
       valid_lft forever preferred_lft forever
17: icmp-respo-ipuI: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:f9:e7:d9:db brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:f9ff:fee7:d9db/64 scope link
       valid_lft forever preferred_lft forever
18: icmp-respo-3zFH: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:b9:f8:db:d7 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:b9ff:fef8:dbd7/64 scope link
       valid_lft forever preferred_lft forever
19: icmp-respo-sDW0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:e7:d7:c3:17 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:e7ff:fed7:c317/64 scope link
       valid_lft forever preferred_lft forever
20: icmp-respo-GLAw: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:49:d9:c5:99 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:49ff:fed9:c599/64 scope link
       valid_lft forever preferred_lft forever
21: icmp-respo-shCm: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:2f:2f:e2:d3 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:2fff:fe2f:e2d3/64 scope link
       valid_lft forever preferred_lft forever
22: icmp-respo-erCg: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:d1:20:9a:a2 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:d1ff:fe20:9aa2/64 scope link
       valid_lft forever preferred_lft forever
23: icmp-respo-AztN: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:e7:69:12:57 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:e7ff:fe69:1257/64 scope link
       valid_lft forever preferred_lft forever
24: icmp-respo-u8VJ: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:f1:49:85:66 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:f1ff:fe49:8566/64 scope link
       valid_lft forever preferred_lft forever
25: icmp-respo-xviy: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:b1:fa:1b:ca brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:b1ff:fefa:1bca/64 scope link
       valid_lft forever preferred_lft forever
26: icmp-respo-MCO7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:19:b2:6d:09 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:19ff:feb2:6d09/64 scope link
       valid_lft forever preferred_lft forever
27: icmp-respo-wqOy: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:9f:8f:eb:19 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:9fff:fe8f:eb19/64 scope link
       valid_lft forever preferred_lft forever
28: icmp-respo-DalE: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:3f:d4:d8:b1 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:3fff:fed4:d8b1/64 scope link
       valid_lft forever preferred_lft forever
29: icmp-respo-iryd: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:73:72:8d:3b brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:73ff:fe72:8d3b/64 scope link
       valid_lft forever preferred_lft forever
30: icmp-respo-GNxN: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:b7:97:05:0d brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:b7ff:fe97:50d/64 scope link
       valid_lft forever preferred_lft forever
31: icmp-respo-c957: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:6b:05:d8:ad brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:6bff:fe05:d8ad/64 scope link
       valid_lft forever preferred_lft forever
32: icmp-respo-uxJE: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:7f:55:07:47 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:7fff:fe55:747/64 scope link
       valid_lft forever preferred_lft forever
33: icmp-respo-jXu5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:3f:85:51:95 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:3fff:fe85:5195/64 scope link
       valid_lft forever preferred_lft forever
34: icmp-respo-uX9z: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:ed:17:52:30 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:edff:fe17:5230/64 scope link
       valid_lft forever preferred_lft forever
35: icmp-respo-ctZo: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:79:82:1b:3f brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:79ff:fe82:1b3f/64 scope link
       valid_lft forever preferred_lft forever
36: icmp-respo-x7yM: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:47:c8:fe:7b brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:47ff:fec8:fe7b/64 scope link
       valid_lft forever preferred_lft forever
37: icmp-respo-bW5f: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:1b:99:19:32 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:1bff:fe99:1932/64 scope link
       valid_lft forever preferred_lft forever
38: icmp-respo-oO3g: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:f7:81:66:7a brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:f7ff:fe81:667a/64 scope link
       valid_lft forever preferred_lft forever
39: icmp-respo-NPQR: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:01:07:78:69 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:1ff:fe07:7869/64 scope link
       valid_lft forever preferred_lft forever
40: icmp-respo-qrmC: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:17:89:31:f0 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:17ff:fe89:31f0/64 scope link
       valid_lft forever preferred_lft forever
41: icmp-respo-CRCU: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:4b:51:7a:13 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:4bff:fe51:7a13/64 scope link
       valid_lft forever preferred_lft forever
42: icmp-respo-GdjO: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:43:56:de:1a brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:43ff:fe56:de1a/64 scope link
       valid_lft forever preferred_lft forever
43: icmp-respo-uNRG: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:bf:22:a5:e5 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:bfff:fe22:a5e5/64 scope link
       valid_lft forever preferred_lft forever
44: icmp-respo-U7wo: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:c3:80:c3:b1 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:c3ff:fe80:c3b1/64 scope link
       valid_lft forever preferred_lft forever
45: icmp-respo-k3p8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ether 02:fe:ad:ee:8c:db brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fe:adff:feee:8cdb/64 scope link tentative
       valid_lft forever preferred_lft forever

I checked two ideas to handle the interface cleanup:
1/ fetch the interfaces by SwInterfaceDump govpp API call and compare the interface index lists before and after the TAP interface creation. When creation fails by context cancel error remove the added interfaces (diff of the swIfIndex list) - this approach can impact other timing problems.
2/ try to remove the interface by name in Close. This should work if we generate and store the names of TAP interfaces in NSM.
Other possibilities to check:

The response of API call should be returned in case of context cancel error
Add rollback callback function to vpp API to handle the cleanup.

I`m not in favor of option 1, since IMHO parallel actions could alter the interface index list in the meantime.
What if create would employ an independent (background) context to execute the VPP API call TapCreateV3?
I hard deadline of let's say 10 seconds could be also set just in case. Otherwise, IMHO the API call itself is not costly. It might be mostly bad luck and timing (input context is closed to its expiration) why it might fail due to context expired.
An independent context would significantly lower the probability of leaked interfaces due to context timeout. Considering that a proper solution seems to be rather complex to implement.

Hi,
Regarding this one: https://github.com/networkservicemesh/cmd-forwarder-vpp/issues/1133#issuecomment-2217495511
Using NSM v1.14.0-rc.3 did not resolve the problem. I still saw numerous excess interfaces in the nsc and nse in no time. Moreover forwarder collocated with nsc or nse encountered frequent OOM kills (memory limit and request both set to 500Mi). (The nse got OOM killed as well occasionally.)
It did not matter whether nsc and nse were using sdk 1.13.2 or 1.14.0-rc.3.

Hi, @zolug. Could you please also test v1.14.0-rc.2?

Hi,
In case of https://github.com/networkservicemesh/cmd-forwarder-vpp/issues/1133#issuecomment-2217495511:
Some interfaces also piled up when running with v1.14.0-rc.2 using a small enough request timeout in the NSC. However, in my tests the NSC did manage to establish a connection eventually. Then, after 10 minutes the excess interfaces were gone from both the NSC and NSE.
When running Meridio where the LB NSE was removed by a script continuously, thus was only available intermittently for a short period of time the excess interfaces were not cleaned-up after stopping the script that interfered with the availability of the NSE.
while [ 1 ]; do kubectl delete nses -n nsm stateless-lb-frontend-attr-a1-f5864fc94-9r7mb; sleep 1; done
What I observed in the second case was, that despite the request context's timeout/cancel the begin let the "connect" to continue. Thus from the perspective of nsmgr and forwarder a connection including interfaces was established. Thus the NSC upon a subsequent NSC was able to recover a connection via Monitor Connection via nsmgr. But as soon as part of one of the "reconnect" the nsmgr got failure response from the forwarder due to the NSE not being around, the connection state was changed to Down. Which in the NSC triggered a reconnect with reselect, promting the nsmgr to close the "old connection first" Now, this also failed in my case despite the 1 minute timeout in the beginServer (due to NSE not being found), yet the cleanup could not remove the interface because the context was already expired.

Sep 17 12:02:29.517 [ERRO] [type:registry] (25.1)                           Error returned from sdk/pkg/registry/common/connect/connectNSEClient.Recv: rpc error: code = DeadlineExceede
d desc = context deadline exceeded
Sep 17 12:02:29.517 [ERRO] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [discoverCandidatesServer:Close] [type:networkService] (11.1)             endpoint is not found: stateless-lb-front
end-attr-a1-f5864fc94-9r7mb: network service endpoint stateless-lb-frontend-attr-a1-f5864fc94-9r7mb not found
Sep 17 12:02:29.517 [TRAC] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (12)            ⎆ sdk/pkg/networkservice/common/roundrobin/selectEndpointServer.Close()
Sep 17 12:02:29.517 [TRAC] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (13)             ⎆ sdk/pkg/networkservice/core/next/nextServer.Close()
Sep 17 12:02:29.517 [TRAC] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (14)              ⎆ sdk-vpp/pkg/networkservice/metrics/stats/statsServer.Close()
Sep 17 12:02:29.518 [TRAC] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (15)               ⎆ sdk-vpp/pkg/networkservice/metrics/ifacename/ifaceNamesServer.Close()
Sep 17 12:02:29.518 [TRAC] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (16)                ⎆ sdk-vpp/pkg/networkservice/up/upServer.Close()
Sep 17 12:02:29.518 [TRAC] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (17)                 ⎆ sdk/pkg/networkservice/core/next/nextServer.Close()
Sep 17 12:02:29.518 [TRAC] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (18)                  ⎆ sdk-vpp/pkg/networkservice/xconnect/l2xconnect/l2XconnectServer.Close
()
Sep 17 12:02:29.518 [TRAC] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (19)                   ⎆ sdk-vpp/pkg/networkservice/xconnect/l3xconnect/l3XconnectServer.Close()
time="2024-09-17T12:02:29Z" level=error msg="Channel ID not known, ignoring the message." channel=404 msg_id=851
Sep 17 12:02:29.518 [TRAC] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (20)                    ⎆ sdk-vpp/pkg/networkservice/xconnect/l2bridgedomain/l2BridgeDomainServer.Close()
Sep 17 12:02:29.519 [TRAC] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (21)                     ⎆ sdk/pkg/networkservice/core/next/nextServer.Close()
Sep 17 12:02:29.519 [TRAC] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (22)                      ⎆ sdk-kernel/pkg/kernel/networkservice/connectioncontextkernel/mtu/mtuServer.Close()
Sep 17 12:02:29.519 [TRAC] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (23)                       ⎆ sdk-kernel/pkg/kernel/networkservice/connectioncontextkernel/ipcontext/ipneighbors/ipNeighborsServer.Close()
Sep 17 12:02:29.519 [TRAC] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (24)                        ⎆ sdk-kernel/pkg/kernel/networkservice/connectioncontextkernel/ipcontext/iprule/ipruleServer.Close()
Sep 17 12:02:29.520 [TRAC] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (25)                         ⎆ sdk-kernel/pkg/kernel/networkservice/connectioncontextkernel/ipcontext/routes/routesServer.Close()
Sep 17 12:02:29.520 [TRAC] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (26)                          ⎆ sdk-kernel/pkg/kernel/networkservice/connectioncontextkernel/ipcontext/ipaddress/ipaddressServer.Close()
Sep 17 12:02:29.520 [TRAC] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (27)                           ⎆ sdk-kernel/pkg/kernel/networkservice/connectioncontextkernel/pinggrouprange/pinggrouprangeServer.Close()
Sep 17 12:02:29.520 [TRAC] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (28)                            ⎆ sdk-kernel/pkg/kernel/networkservice/ethernetcontext/vfEthernetContextServer.Close()
Sep 17 12:02:29.520 [TRAC] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (29)                             ⎆ sdk-vpp/pkg/networkservice/tag/tagServer.Close()
Sep 17 12:02:29.521 [TRAC] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (30)                              ⎆ sdk-vpp/pkg/networkservice/connectioncontext/mtu/mtuServer.Close()
Sep 17 12:02:29.521 [TRAC] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (31)                               ⎆ sdk/pkg/networkservice/common/mechanisms/mechanismsServer.Close()
Sep 17 12:02:29.521 [TRAC] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (32)                                ⎆ sdk-vpp/pkg/networkservice/mechanisms/kernel/kerneltap/kernelTapServer.Close()
Sep 17 12:02:29.521 [ERRO] [id:3de28dd1-3e5c-4196-8b04-98fbb2ed795a] [type:networkService] (32.1)                                  unable to delete connection with SwIfIndex 11: context deadline exceeded
...

IMHO, it would be preferable to have separate context for tap cleanup (and probably for create as well).

Hi, @zolug! The problem is related to small context timeout before any create call in sdk-vpp. We've decided to use separate contexts with good timeouts for all create operations.

@denis-tingaikin Currently we have tried some draft solution to override contexts, where vpp operations are being used - https://github.com/networkservicemesh/sdk-vpp/pull/867. But we decided to use another solution: to override vpp connection instead of overriding create/delete function contexts in general. It will help to cover and make safe all vpp operations.
Decomposition and plan:

Investigate interface behaviour with short request timeout (recreation) - 1h
Try to override less vpp connection functions, test - 3h
Investigate important operations in the create/del functions with safe context, test - 4h
Investigate new solution if previous steps do not help, testing - 4h
Final testings - 4h

This problem is looking resolved.
@zolug if you get a chance, could you check this image ghcr.io/networkservicemesh/ci/cmd-forwarder-vpp:4d41019?

This problem is looking resolved.
@zolug if you get a chance, could you check this image ghcr.io/networkservicemesh/ci/cmd-forwarder-vpp:4d41019?

Unfortunately, I can still see the problem.
That's because IMHO it's not just about whether the input context has a timeout (or low timeout), rather that the context might get cancelled independently (prematurely before the deadline). This might not be applicable to the example network service clients in nsm repos, but e.g. some of our clients might need to cancel connection requests depending on the availability (or more like unavailability) of the nse instance it wants to connect to.
Meaning that from the perspective of the vpp-forwarder the context can have plenty of time until its deadline, yet can get cancelled prematurely from the client side, in which case the original problem can still arise.
I have attached a forwarder log file where the problem is visible. Check id: 8142320f-733e-4f99-915e-631d5516b6eb
The interface load-balan-adRC got stuck in my client POD.
nsm_forwarder-vpp-jw4fp_forwarder-vpp.log

@NikitaSkrynnik It looks like we missed branches when the incoming request had enough time for the request, but it was cancelled. At this moment we are just returning the same context, so it can be cancelled.
I think these lines should be covered:

https://github.com/networkservicemesh/vpphelper/blob/main/extendtimeout/connection.go#L60
https://github.com/networkservicemesh/vpphelper/blob/main/extendtimeout/connection.go#L65

@zolug We've managed signals context case, so please check  ghcr.io/networkservicemesh/cmd-forwarder-vpp:v1.14.2-rc.1 when you get a chance.

In our local tests its looking fixed. Feel free to reopen otherwise.


LogWarning shows as Information on AppInsights

Calling LogWarning from Microsoft.Extensions.Logging.ILogger object submits as Information on AppInsights.
It works fine if I take out Serilog and use Microsoft.Extensions.Logging instead.
_logger.LogWarning("Warning message!");

Hi! 👋 Thanks for getting in touch, and sorry we were unable to respond to your request. We're in the process of bringing new maintainers onto this project, and need to close stale tickets so that we can identify which items are still important to users of the sink.
If this issue still affects you:

Please consider whether it's a question that can be asked on Stack Overflow; if so, the serilog tag will get your question in front of many more people who can help you
Please consider whether you can research or investigate the issue and propose a solution for other users to benefit from
Feel free to comment here, letting us know it's still a problem

Thanks again!


Sniper issues

First off, let me say the new Sniper is excellent in concept, but I'm encountering a few difficulties getting it working properly as follows:

If using social, everything works great so YAY :)
If using url mode, I get a bot crash with error [ERROR] [u'IndexError: list index out of range. I can work around this by changing line 383 in sniper.py to pokemon_name = pokemon['pokemon_name'] but that's just a bandaid.
Once I've done that, if using url with Pokemongo-Map (localhost:5000/raw_data), I get error (Source 'http://localhost:5000/raw_data' contains errors. Details: The following params dont exist: iv.) Could be my pokemongo-map config? Or something else?
If using http://pokesnipers.com/api/v1/pokemon.json, it teleports there and back, but everything gives me a does not exist error. Not sure if issue is with bot or pokesnipers.

I haven't bothered including my full config etc as everything else is fine. Here's my current "Sniper" config, which I'm running with modified line 383 as mentioned in 2 above.
		"type": "Sniper",
		"config": {
			"enabled": true,
			"mode": "url",
			"bullets": 3,
			"homing_shots": true,
			"special_iv": 100,
			"order": ["missing", "iv", "priority", "vip", "expiration_timestamp_ms"],
			"sources": [
				{
					"url": "http://localhost:5000/raw_data",
					"key": "pokemons",
					"mappings": {
						"iv": { "param": "iv" },
						"id": { "param": "pokemon_id" },
						"name": { "param": "pokemon_name" },
						"latitude": { "param": "latitude" },
						"longitude": { "param": "longitude" },
						"expiration": { "param": "disappear_time", "format": "milliseconds" }
					},
                    "url": "http://pokesnipers.com/api/v1/pokemon.json",
					"key": "results",
					"mappings": {
						"iv": { "param": "iv" },
						"id": { "param": "id" },
						"name": { "param": "name" },
						"latitude": { "param": "coords" },
						"longitude": { "param": "coords" },
						"expiration": { "param": "until", "format": "utc" }
					}
				}
			],
			"catch": {
				"Snorlax": 1000,
				"Dragonite": 1000,
				"Growlithe": 600,
				"Kabuto": 500,
				"Dratini": 500,
				"Dragonair": 500,
				"Mr. Mime": 500,
				"Magmar": 500,
				"Electabuzz": 500,
				"Tauros": 500,
				"Mankey": 500,
				"Primeape": 500,
				"Chansey": 500,
				"Farfetch'd": 500
            }
		}
      },

Result from this is
[2016-09-20 08:43:16] [    Sniper] [INFO] Teleporting to meet Dratini (40.765892; -73.974508)...
[2016-09-20 08:43:21] [    Sniper] [INFO] Damn! Its not here. Reasons: too far, caught, expired or fake data. Skipping...
[2016-09-20 08:43:21] [    Sniper] [INFO] Teleporting back to the old position (-37.8181876802;<PHONE_NUMBER>18)...

OK, spoke to @YvesHenri and issues 2 and 4 are caused by the "id" parameter in the pokesnipers.com config. Remove and it works correctly.
Issue 3 is caused by lack of 'iv' property in localhost:5000/raw_data. Remove iv param in config, and it works.
Nothing to see here :)


Grouping of entries

I have a lot of entries in my Google Authenticator App.
From my point of view it gets messy/chaotic the more entries I add.
Is there a way to somehow group the entries or label and make the entries searchable f.e. into business, private, client 1, client 2, etc. ... ?

Dup of https://github.com/google/google-authenticator/issues/455


Allow orientation lock for browsers in fullscreen mode

Some browsers can lock/unlock orientation when in fullscreen mode only - this simple change allows your API to still work in browsers as long as the needed functions are available and an element is currently fullscreen. I'd like to be able to handle this case without having to go around the plugin API and I don't see why anyone would object to having the option.

Apologies - as it written now this method will still log the message even for successful unlocks as the function always returns undefined, but not a big deal and an easy fix

This function setOrientation is not called when android/ios/windows is available, it is replaced by the functions in the .ios.js, .android.js files etc.

@FuzzyRhombus I'm trying to understand the use case you want to support with this PR.

I know that Meteor lets you write apps that run in both non-mobile browser and in Cordova.
Is this PR intended to help the full screen non-mobile browser case for a Meteor app?
If this PR were added as part of a browser platform polyfill, would that make sense for Meteor?

@gbenvenuti Right, but when running deploying and running in a standard desktop/mobile browser, the base files will be used unless there are transformations for the browser platform as well. Orientation lock in browsers currently has quite limited support and in most cases a user should be using an app version on a device that supports this - I also understand some do not intend to use Cordova at all when building for browsers, but its is a small change that does not interfere with other platforms nor does any other harm if used in browser. An alternative would be to add the browser platform and provide an override that supports this case if you prefer to leave the base file as is. I only wrote it this way knowing the other available platforms are overriding it.

@tony-- I've only used Meteor for a short time and have taken a hiatus from it, so I can't really comment on that atm. My use case for this right now is actually for light gamedev. I will be deploying to browser as well as native apps all using Cordova, so it allows the use of a single API call that always works if the underlying tech is supported instead of checking for different use cases (browser vs app) and handling them respectively.

@FuzzyRhombus thanks for explaining.  It sounds like for what you want (and based on your other comment), it would work for this functionality to be provided via browser platform support.

@FuzzyRhombus - Just wanted to give you an update - we are currently migrating this plugin to a new repo and moving issue tracking to Apache JIRA.  I intend to close your PR and open a Feature Request JIRA for "support browser platform" referencing your PR.

Migrated to Apache Cordova JIRA CB-11362


How to validate the id_token?

I still can't get my head round it.
When does the id_token expire on the client application with this configurations
Startup.cs
public class Startup
   {
       public Startup(ILoggerFactory loggerFactory, IHostingEnvironment environment)
       {
           #if DEBUG
   			....
   			enable logging here
   			....
           #endif
       }

       public void ConfigureServices(IServiceCollection services)
       {
           services.AddMvc();
           var idservice = services.AddIdentityServer()
           .AddTemporarySigningCredential()
           .AddInMemoryIdentityResources(Config.GetIdentityResources())
           .AddInMemoryApiResources(Config.GetApiResources())
           .AddInMemoryClients(Config.GetClients())
           .AddAuthorizeInteractionResponseGenerator<MyAuthorizeInteractionResponseGenerator>();

           idservice.Services.AddTransient<IProfileService, CustomProfileService>();
       }

       public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
       {
           loggerFactory.AddConsole();

           if (env.IsDevelopment())
           {
               app.UseDeveloperExceptionPage();
           }

           app.UseIdentityServer();

           app.UseStaticFiles();
           app.UseMvcWithDefaultRoute();
       }
   }

Config.cs
public class Config
    {
        public static IEnumerable<IdentityResource> GetIdentityResources()
        {
            return new List<IdentityResource>
            {
                new IdentityResources.OpenId(),
                new IdentityResources.Profile(),
                new IdentityResource {
                    Name = "role",
                    DisplayName ="Role",
                    Required = true
                }
            };
        }

        public static IEnumerable<ApiResource> GetApiResources()
        {
            return new List<ApiResource>
            {
                new ApiResource("adRom.Suite.API", "adRom Suite API") {
                    ApiSecrets = { new Secret("WY8s3YE_cturQVhd%vWm+DAEg$82TU".Sha256()) },
                    UserClaims = new List<string>() { "role" }
                }
            };
        }

        public static IEnumerable<Client> GetClients()
        {
            return new List<Client>
            {
                new Client
                {
                    AccessTokenType = AccessTokenType.Reference,
                    ClientId = "some.name",
                    ClientName = "some.name",
                    AllowedGrantTypes = GrantTypes.Implicit,
                    RequireConsent = false,
                    AllowRememberConsent = true,
                    RedirectUris = {
                        "https://localhost:44341/views/tokenHandler/callback.html",
                        "https://localhost:44341/views/tokenHandler/silent.html",
                    },
                    PostLogoutRedirectUris = {
                        "https://localhost:44341/#/loggedOut",
                        "https://localhost:44341/loggedout.html"
                    },
                    AllowedCorsOrigins = {
                        "https://localhost:44341"
                    },
                    AllowedScopes =
                    {
                        IdentityServerConstants.StandardScopes.OpenId,
                        IdentityServerConstants.StandardScopes.Profile,
                        "some.name.API",
                        "role",
                    },
                    AllowAccessTokensViaBrowser = true,

                    UpdateAccessTokenClaimsOnRefresh = true,
                    //IdentityTokenLifetime = 28800, //8h
                    //AccessTokenLifetime = 3600,//1h

                    IdentityTokenLifetime = 301,
                    AccessTokenLifetime = 28800,
                }

            };
        }

    }

The oidc-client config

let config = {
                authority: authority,
                client_id: "some.name",
                response_type: "id_token token",
                scope: "openid role profile some.name.API",
                redirect_uri: window.location.origin + "/views/tokenHandler/callback.html",
                post_logout_redirect_uri: window.location.origin + "/#/loggedOut",
                loadUserInfo: true,
                silent_redirect_uri: window.location.origin + "/views/tokenHandler/silent.html",
                automaticSilentRenew: true,
                accessTokenExpiringNotificationTime: 5,
                revokeAccessTokenOnSignout: true,
                userStore: new Oidc.WebStorageStateStore({ store: window.localStorage }),
            };

So when i am logged in everything works, even the access_token gets renewed after the time i defined with AccessTokenLifetime, but i will never get logged out.

So i guess the big question is:
Do i have to validate the id_token by my self?
Like in this Video explained @ 23:40 (26:25)
("Extract" the content of id_token, to check all that stuff inside [is it expired, etc, etc] )

I did not find an implementation in oidc-client-js, but there is token validation in the angular client from @damienbod :
https://github.com/damienbod/angular-auth-oidc-client/blob/master/src/services/oidc.security.validation.ts

oidc-client does validate the id_token. The expiration of the id_token is sort of moot once validation has been completed. I think what you really care about is the expiration of the access token, and oidc-client provides help and management APIs for that.

so does that mean that this code
mgr.getUser().then(function (user) {
    if (user) {
        log("User logged in", user.profile);
    }
    else {
        log("User not logged in");
    }
});

does check if the id_token is also expired?
The validation of the access_token does indeed work.

Each request to the OP that requests id_token does validate it on the response.


store-sqlite: a consumer.Store backed by SQLite

See doc.go for design discussion.
Issue #212

This change is

Testing:

Stream-sum soak test now mixes RocksDB and SQLite embedded stores.
Confirmed integration tests pass through 10 rounds of the crash/partition test runner.


merge MONDO_0018065 isolated trigonocephaly' with parent

there is a comment on this class to consider merging MONDO_0018065 'isolated trigonocephaly' with it's parent. There are multiple parents, but I think the proposed merge is with MONDO_0015337 'isolated craniosynostosis'.
The text def of MONDO_0018065 'isolated trigonocephaly' is 'Isolated trigonocephaly is a nonsyndromic form of craniosynostosis characterized by the premature fusion of the metopic suture.'

From Peter:
Trigonocephaly is a subtype of craniosyostosis but not a synonym.
Action item:

[ ] remove comment, do not merge

there is no longer a comment here. Closing.


How to input commands after os.dupterm(scr) ?

How to input commands after os.dupterm(scr) ?
Just like the gif show in readme
Now I have a keyboard to input letters,how can I do to run the commands for keyboard input?

FBConsole could only be used for output. You still need the serial port to input.

Thanks,I use another esp32 to send uart commands,it works.
Is there a way to send uart0 commands by esp32 self?
I init uart1 to send commands to uart0,it only show strs,but don't run commands by add b'\r'

You can give your object for the input stream as the named parameter readobj of FBConsole() like this:
scr = FBConsole(oled, readobj=mykeyboard)

mykeyboard object must have readinto(self, buf, nbytes=0) method. (Actually, I have not tested this by myself :-)
Please refer to the manual page of dupterm() for details.
https://docs.micropython.org/en/latest/library/os.html#terminal-redirection-and-duplication

Yes,you have got what I mean to do.
I tried readinto method but not work.
def readinto(self, buf, nbytes=0):
I don't understand how to use 'buf' for input.
So if you have free time,can you give me an easy example?Like push a button to input letter 'a' to the repl.


Autocompletion menu breaks auto indent correction

I mainly encountered this problem in editing .tex files with vimtex loaded.
Assume we want to enter the following texts:
\begin{itemize}
  \item one
  \item two
\end{itemize}

Without autocompletion (no drop down menu), hit enter at the end of line \item one to enter a new line and start typing \item, the editor will look like (using | to indicate the cursor location)
\begin{itemize}
 \item one
   \item|
\end{itemize}

As soon as I hit space after the keyword \item, vimtex autocorrects the indentation to
\begin{itemize}
  \item one
  \item |
\end{itemize}

With nvim-cmp enabled with either buffer or spell source (only tested these two), when typing the keyword item, a drop down menu will pop up since it is a normal word. Despite whether I select an item from the list or abort to finish typing item on my own, after hitting space after item, the new line will no longer auto correct the indentation, so it will remain as:
\begin{itemize}
  \item one
    \item |
\end{itemize}

I've fixed it but it is a experimental solution if other people report an issue for it, I will revert it maybe.


Prep changelog for 1.0.0-beta.3 release

What does this PR do?
See title
Review checklist
Please check relevant items below:

[ ] This PR includes all newly recorded cassettes for any modified tests.

[ ] This PR does not rely on API client schema changes.

[ ] The CI should be fully passing.

[ ] Or, this PR relies on API schema changes and this is a Draft PR that includes tests.

Note: CI shouldn't be run on this Draft PR, as its expected to fail without the corresponding schema changes.

/azp run

/azp run

/azp run


allow app.asar files

This allows building installers for apps that use the app.asar format rather than the app/ directory.

Is this waiting on the AppVeyor build before merging?  That's been 'Queued' for 4 days now; and I'm rapidly losing confidence it will ever complete.  Is there an alternate testing strategy we could use?

Yeah, not sure what is up with appveyor, the builds there for all the atom projects using it seem to be stalled.

Thanks for adding support for this, published in 0.17.0


App Service settings not exposed as environment variables inside Docker container

Hello,
I've been having this issue for a while where App Settings that I set within my App Service on the Azure Portal are not injected within the docker container itself on build and push or deploy. I followed this guide, but it did not work.
More specifically, we've got a React application that requires some environment secrets... and typically these are exposed as environment variables of the form REACT_APP_*. I have a few set in the app service configurations, but when you console.log out the process.env object (where these variables are stored)... they are not present:

Even though they can be seen at the /Env url for our application:

This is what the workflow configuration looks like for our GitHub action during the docker build and push stage:
    - run: |
        docker build "$GITHUB_WORKSPACE/client" -f  "client/Dockerfile" -t sdmmappingacr.azurecr.io/${{ secrets.AzureAppService_ContainerUsername_a28fca83064349029b23350b348e3409 }}/sdmmappingui-img:${{ github.sha }}
        docker push sdmmappingacr.azurecr.io/${{ secrets.AzureAppService_ContainerUsername_a28fca83064349029b23350b348e3409 }}/sdmmappingui-img:${{ github.sha }}

I attempted to generate a .env file during the workflow using a custom shell script and the Dockerfile would copy it over manually, but I believe that the contents of printenv during this are just the env variables of the actual runner used to build the docker containers prior to push.
Am I missing something? Or misunderstanding something? I'd love to be able to use environment variables in our projects... Any help is appreciated!

Solved. I'm using GitHub actions and was able to employ the azure/CLI@v1 action. I'm just manually extracting App Settings from the Azure CLI and then piping that output to a custom python script and piping that to a .env file that gets pulled into the Docker container on build and thus, exposes all variables in that file with a REACT_APP_ prefix.
Workflow file:
    - name: Extract App Settings
      uses: azure/CLI@v1
      with:
        azcliversion: 2.0.72
        inlineScript: |
          chmod +x $GITHUB_WORKSPACE/scripts/az_to_env.py
          echo "-----> Copying settings to .env file."
          az webapp config appsettings list --name <app-name> --resource-group <resource-group> --subscription <subscription> | $GITHUB_WORKSPACE/scripts/az_to_env.py > $GITHUB_WORKSPACE/client/.env

Python script:
#!/usr/bin/env python3
import sys
import json

# read json from standard in
json_data = sys.stdin.read()
keys_list = json.loads(json_data)

for key in keys_list:
    print(f"{key['name']}={key['value']}")

A limitation is that you must rebuild your application to reflect app setting changes, but this was simple and intuitive to me and more secure.


Feat: #176 test on deploy

Fixes #176 .

I couldn't see any tests relating to this area, but feel free to point me in the right direction if these are needed.
Currently the tests run by default, personally I think this is the best option but in the original issue it was up for debate.
No test_args (cargo::ops::run_tests) are implemented currently,  I'm unsure if this is required or how that would work if it is.

New here, to Rust, and to Opensource so feedback or any corrections/suggestion with anything at all is welcomed. The more I can learn the better, so fire away!

@chesedo should now be good to go 🙂🎉

Thanks for this @jmwill86 :partying_face:


Add a setting to define how the initial first window should size

We have window.newWindowDimensions to control how windows open after one has already been opened. People confuse this with also having an impact on the initial first window. We should either align this setting or introduce another one for the first window.

I have updated the description of the window.newWindowDimensions setting. The naming is a bit unfortunate because people might expect it also applies to the initial window that opens. There is currently not setting to define how the initial window is opened, it will always restore the size and location from the previous session.
If we want to allow to control this for the initial window, I fear it needs to be a separate setting.


MSID: 93429 Version: 1 DOI: 2<IP_ADDRESS>0483

"msas": "Genetics and Genomics"
"msid": "93429"
"preprintDoi": "10.1101/2<IP_ADDRESS>0483"
"Reviewed Preprint posted": "2023-12-15"
"Sent for peer review": "2023-10-18"
"Posted to bioRxiv": "2023-10-31" (link: "Go to bioRxiv": "https://www.biorxiv.org/content/10.1101/2<IP_ADDRESS>0483v2/")
[PLACE PDF URL HERE WHEN AVAILABLE] See step 7
Step 1. Inform bioRxiv
Who can help: @QueenKraken, @nlisgo, @scottaubrey

[x] Manuscript is in data hub index (https://data-hub-api.elifesciences.org/enhanced-preprints/docmaps/v2/by-publisher/elife/get-by-manuscript-id?manuscript_id=93429)

Step 2. Create preview of manuscript
Who can help: @fred-atherden, @nlisgo, @scottaubrey

[ ] Manuscript is available for preview (https://prod--epp.elifesciences.org/preview/93429/v1)

[ ] Trigger import for staging: https://prod--epp.elifesciences.org/import
[ ] Sync data folder with s3://prod-elife-epp-data/data
[ ] Trigger import for staging: https://staging--epp.elifesciences.org/import
[ ] Sync data folder with s3://staging-elife-epp-data/data
[ ] Pull request created to enhanced-preprint-data
[ ] Post link to pull request below

Pull request: [PLACE LINK TO PULL REQUEST HERE]
Detailed instructions: https://github.com/elifesciences/enhanced-preprints-data#add-a-manuscript
Step 3: Awaiting public reviews and QC
Who can help: Production team

[ ] QC passed or QC not needed

Who can help: Editorial team

[x] Public reviews available on sciety (https://sciety.org/articles/activity/10.1101/2<IP_ADDRESS>0483)
[x] Manuscript and editor details at the top of this issue (Supplied by Editorial team)
[ ] Reviews returned by EPP - https://prod--epp.elifesciences.org/api/reviewed-preprints/93429/v1/reviews

Example
"msas": "Genetics and Genomics", "Neuroscience"
"msid": "84628"
"version": "1"
"preprintDoi": "10.1101/2<IP_ADDRESS>4241"
"articleType": "Reviewed Preprint"
"status": "Published from the original preprint after peer review and assessment by eLife."

"Reviewed Preprint posted": "2023-01-02"
"Sent for peer review": "2022-10-28"
"Posted to bioRxiv": "2022-11-21" (link: "Go to bioRxiv": "https://www.biorxiv.org/content/10.1101/2<IP_ADDRESS>4241v1")

Editors:
Reviewing Editor
Michael B Eisen
University of California, Berkeley, United States
Senior Editor
Michael B Eisen
University of California, Berkeley, United States

Step 4: Modify manuscripts.json (no PDF)

[ ] Reviewed preprint is published to EPP (https://elifesciences.org/reviewed-preprints/93429)

[ ] Pull request created to enhanced-preprint-client
[ ] Pull request switched to "Ready for review"
[ ] Post link to pull request below

[ ] Request that a doi be registered

[ ] Post link to #enhanced-preprint comment below

Pull request: [PLACE LINK TO PULL REQUEST HERE]
#enhanced-preprint comment thread: [PLACE LINK TO COMMENT HERE]

Instructions to modify manuscripts.json

Visit: https://github.com/elifesciences/enhanced-preprints-client/actions/workflows/publish-manuscript.yaml
Click: Run workflow
Complete the form and click "Run workflow"
A successful run should result in a new pull request at https://github.com/elifesciences/enhanced-preprints-client/pulls
Open the pull request and click the "Ready for review" button to trigger tests
Once the tests pass and you are happy with the changes the PR can be merged

Example pull request: https://github.com/elifesciences/enhanced-preprints-client/pull/334/files
Once the pull request is merged in it should be available a few minutes later.

Request that a doi
Post the following in #enhanced-preprint:
@Fred can you register a doi for https://elifesciences.org/reviewed-preprints/93429

Step 5: Awaiting search reindex

[ ] Reviewed preprint is avaliable on journal homepage (https://elifesciences.org)

The search reindex is triggered once an hour. We need the reviewed preprint to be indexed as the search application serves the journal homepage.

Additional info
If needed, the jenkins pipeline to reindex search can be triggered sooner.
https://alfred.elifesciences.org/job/process/job/process-reindex-reviewed-preprints/

Step 6: Published! Request PDF generation

[ ] Post the link to the PDF url at the top of the issue

[ ] Post link to #enhanced-preprint comment below

#enhanced-preprint comment thread: [PLACE LINK TO COMMENT HERE]
Post the following to the #enhanced-preprint on slack:
@Ryan Dix-Peek please can you generate a PDF for https://elifesciences.org/reviewed-preprints/93429

Step 7: Introduce PDF to data folder and git repo

[ ] PDF is avaliable at https://github.com/elifesciences/enhanced-preprints-data/raw/master/data/93429/v1/93429-v1.pdf

Detailed instructions: https://github.com/elifesciences/enhanced-preprints-data#add-a-pdf
Step 8: Add PDF url to manuscripts.json

[ ] Reviewed preprint PDF is available for download (https://prod--epp.elifesciences.org/reviewed-preprints/93429)

[ ] Pull request created to enhanced-preprint-client
[ ] Pull request switched to "Ready for review"
[ ] Post link to pull request below

[PLACE LINK TO PULL REQUEST HERE]

Instructions to add PDF url to manuscripts.json

Visit: https://github.com/elifesciences/enhanced-preprints-client/actions/workflows/add-pdf-url-to-manuscript.yaml
Click: Run workflow
Complete the form and click "Run workflow"
A successful run should result in a new pull request at https://github.com/elifesciences/enhanced-preprints-client/pulls
Open the pull request and click the "Ready for review" button to trigger tests
Once the tests pass and you are happy with the changes the PR can be merged

Example pull request: https://github.com/elifesciences/enhanced-preprints-client/pull/397/files
Once the pull request is merged in it should be available a few minutes later.

Step 9: Done!

[ ] Kettle is on!

The figure quality is poor, but not poor enough to stop publication IMO.
Lots of missing information from the references, but this is down to various factors (weird source content from the authors, issues in either Encoda or EPP)


Add BootsFaces autoconfiguration

Hi Marcelo,
since you've left an announcement to your project on my blog, I'd like to encourage you to add autoconfigurations for BootsFaces and AngularFaces :). BootsFaces, in particular, has become a major player in the JSF world recently. Currently (May 2016), we see more than 2000 downloads per months, and the figures are rising quickly. So it may be worth the pain!
Best regards,
Stephan

I'll be a pleasure Stephan.
Could you:

give some advice about BootsFaces and AngularFaces compatibility with current versions of PrimeFaces, OmniFaces, Mojarra, MyFaces, Tomcat, Jetty and Undertow?

point some documentation about specific BootsFaces and AngularFaces context-param?

explain any important configuration tip to be known?

Sincerely,
Marcelo

Dear @stephanrauh ,
I've implemented autoconfigurations for BootsFaces and AngularFaces at master branch.
I've tested these libraries at JSF Spring Boot Starter Example, but they broke helloWorld page a little. I could not see any bootsfaces component also.
Could you give me some help? To make tests, you could:

download both JSF Spring Boot Starter and JSF Spring Boot Starter Example;

change jsf-spring-boot-starter.version to 1.5.2-SNAPSHOT at example pom.xml

change src/main/resources/META-INF/resources/helloWorld.xhtml to test butterfaces and angularfaces components

Current example setup uses mojarra 2.2.13, primefaces 6.0, primefaces-extensions 6.0.0, omnifaces 1.13, spring boot 1.3.5 and tomcat 8.0.33.
I look forward you answer.

Hi again @stephanrauh
I run the JSF Spring Boot Starter Example again with MyFaces instead of Mojarra using jsf-myfaces-spring-boot-starter.
Now, I see ButterFaces components, but helloWorld page seems different.
For example, If I don't include any buttefaces components, text font size are shorter.
Current example setup uses bootsfaces 0.8.6, angularFaces-core 2.1.11, myfaces-bundle 2.2.10, primefaces 6.0, primefaces-extensions 6.0.0, omnifaces 1.13, spring boot 1.3.5 and tomcat 8.0.33.
I look forward you answer.

I've migrated two BootsFaces projects from forked BootsFaces Examples: PrimeFacesLayoutJSBS and ResponsiveDesignJSBS.
Using MyFaces I think they are ok. Both projects use PrimeFaces also.
If we don't solve issues between BootsFaces/AngularFaces and jsf-spring-boot-starter (1- they don't work with Mojarra, 2- JSF Spring Boot Starter Example incompatibility), I think I'll create three new starters specific to BootsFaces/AngularFaces (using MyFaces with Tomcat, Jetty or Undertow) instead of adding it to existing ones.

Please excuse my silence. We're currently preparing the 0.9 release of BootsFaces, and that's always a very busy time!
In theory, Mojarra 2.2.13 should work with Spring Boot (see http://www.beyondjava.net/blog/updating-to-mojarra-2-2-11-may-break-your-spring-boot-application/). However, I've been talking with the core JSF developers recently, and they seem to be serious about integrating JSF with the rest of JavaEE. In particular, there's a strategy that makes CDI a required library in the near future. I guess in 2.3 it's mostly optional, but even so, @ManagedBean already is deprecated. I don't know whether Spring is able to build a bridge between the Spring container and the CDI container.
If AngularFaces troubles you - don't bother. It's a nice project, but it's far from being popular, and it's incompatible with Angular2. One day or another I'll have to create a new version running on Angular2, but until then, AngularFaces is sort of deprecated. On the other hand, I don't think AngularFaces causes problems.
I'll try to come back and have a look at your project after releasing the new version of BootsFaces.
Best regards
Stephan

I've tested jsf-spring-boot-starter with Mojarra 2.2.10 and it works with BootsFaces. However, I've already implemented JSF annotation scanning because of issue #66 . Do you know which BootsFaces classes are not loaded for example?
I see you point about a bridge between Spring container and CDI container. I usually use only Spring container with SpringBeanFacesELResolver, but Jsf Spring Boot Starter convert classes annotated with JSF and CDI scopes  like @ViewScoped, @SessionScoped, @ApplicationScoped to equivalent Spring Scope.
I've migrated more two BootsFaces projects from forked BootsFaces Examples: AJAXJSBS and AddingPrimeFaces5.3JSBS. Four projects works well with MyFaces.
I think I could wait 0.9 release of BootsFaces because of PrimeFaces 6.0 compatibility issue before releasing next jsf-spring-boot-starter.
If AngularFaces really does not cause problems, we could use it.
Sincerely,
Marcelo

Yes, it's high time to update the SpringBeanFacesELResolver. I don't think it's difficult to add the view scope, but for some reason nobody but me seems to miss it. I also suspect that sooner or later the JSF team will start to use an internal API of CDI. When that happens, it's become very difficult to make Spring compatible with JSF.
BTW, the PF 6.0 bug seems to be a nasty one. We'll probably tackle it after releasing 0.9.0.

I've just improved the way jsf-spring-boot-starter scans classes and now BootsFaces and Mojarra work at BootsFacesExamples. Thanks for help :)
I've tested BootsFaces at Jsf Spring Boot Starter Example again and I have the following issues now at helloWorld.xhtml: (I tested both primefaces 5.3 and 6.0, mojarra and myfaces with the same result.)

BootsFaces: text font size smaller.
ArgularFaces: break p:panelGrid for input nickname.

More, imagine I'll create new jsf spring boot starters for BootsFaces. Would you:

include AngularFaces ?
include PrimeFaces? Version 5.3 or 6.0?
wait BootsFaces 0.9 release?

I look forward you answer.

Like I've said, if AngularFaces breaks PrimeFaces compatibility, drop it. It's a pity, but it's not the end of the world.
PrimeFaces 6.0: currently there's an incompatibility to PF 6.0. So I'd opt for 5.3 until we've fixed the bug. I'm afraid it's a difficult bug, so we won't solve it before BF 0.9.1.
BootsFaces 0.9.0: well, we're going to release the version this weekend, unless there's a last-minute change of plan. In the meantime, you can experiment with our snapshot version (see https://github.com/TheCoder4eu/BootsFaces-OSP/issues/369).

I've just pushed six new starters for BootsFaces, using all combinations between servlet containers (tomcat, jetty, undertow) and jsf implementation (mojarra, myfaces). I've converted six projects from forked BootsFacesExamples to use all of them.
All bootsfaces starters include bootsfaces 0.8.6, omnifaces 1.13, primefaces 5.3 and angularfaces 2.1.11.
I'm going to experiment BootsFaces 0.9.0 snapshot with BootsFacesExamples this week.
I'll release jsf-spring-boot-starter next wednesday. If 0.9.0 is available, I'll use it. Otherwise, I'll release again when it is available.

@stephanrauh , I've tested BootsFaces 0.9.0 snapshot with no side effect with primefaces. This version seems better than 0.8.6.
I saw PrimeFaces 6.0 bug was fixed by Omnifaces 2.4. Do you think PF 6.0 is compatible with BootsFaces now?

Yes, I believe PF 6.0 to be compatible to BootsFaces. The problem was caused by a third-party library. The OmniFaces bugfix is really clever, but it doesn't solve the supposed incompatibility to BootsFaces. That was caused by accessing a JavaScript file that was removed between PF 5.3 and 6.0.

Hum, I think we don't have any issues now.
I've discovered that there is no problem with AngularFaces. It addLabels and addMessages by default. It is not an error, it is a feature :)
I'll release BootsFaces starters using PF 6.0 next thursday. These starters use AngularFaces also. I'll release again when 0.9.0 is available.
I think we could close this issue.

We've just released BootsFaces 0.9.0.

Great news @stephanrauh
Let's use it right now.
Congratulations.


got a UnsatisfiedLinkError while running on Android 5.1 devices.

compiled and running is fine on device Android 9.0, but failed on android device 5.1, here is the error message:

java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "av_audio_fifo_peek_at" referenced by "libavfilter.so"...
at java.lang.Runtime.loadLibrary(Runtime.java:371)
at java.lang.System.loadLibrary(System.java:988)
at com.joygames.joyplayer.MainActivity.(MainActivity.java:30)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.Class.newInstance(Class.java:1606)
at android.app.Instrumentation.newActivity(Instrumentation.java:1066)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2226)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:893)
06-08 11:32:29.482 5336-5336/? I/Process: Sending signal. PID: 5336 SIG: 9

Its really wired for me. cause it all working fine on high version devices. and the abi using is v7a.

@wolfheros
Hello and sorry for such a long gap.
Is this issue still relevant to you?

I think this is already an outdated issue.
Just to leave a hint of a direction to consider: the failure occurs on native library loading rather than on a native method invocation, so it is either (1) the native libraries (*.so) are imported in a wrong order (a library-dependency is imported later than a dependant library) or (2) the respective library where the av_audio_fifo_peek_at function usually resides now doesn't have it for a reason (like because of stripping).


What's the verdict on mjs support?

Is this a bug report?
No, It's a question on the release conventions of the project. I was wondering how fixes for the current release are ported to the next branch?
I was depending on this bug fix https://github.com/facebook/create-react-app/pull/4085/files, from 1.1.2 but then needed some updated dependencies, so started using react-scripts@next but found that that fix is not present.
I'd expect all of master/current release to be merged into next is that not the case? or is it a manual process?
Thanks in advance! :+1:

I believe it was cherry picked to next but we haven’t cut a new next version yet. Plan to in a few days.

Okay, thanks for the clarification @gaearon will wait for the next next release :ok_hand:

This was intentionally not cherry-picked because it's a sub-optimal bugfix.

@Timer oh thanks for pointing that out, read the full thread now and agree it's suboptimal. Shall I close the PR and keep the issue open so we can track the mjs plan?

You can leave the PR open; if we don't figure out proper support we'll probably roll with it.
Would you like to help with ensuring proper support? The heat feature request would be a great start.

Jest and then we need to make sure that webpack resolves starting with js or mjs properly from main when module is missing.

3 months later -- where are with with this?

I see in the latest webpack.config.dev.js for react-scripts that we have .mjs before .js in the extensions list

We're dropping mjs support in 2.0 until Jest supports it, please follow https://github.com/facebook/jest/issues/4842.


Text fields are limited to 20 characters

When creating a provider with the wizard, it complains that the username is longer than 20 characters and keeps the Add button greyed out.

Given that the default VMware user is<EMAIL_ADDRESS>is longer than 20 characters, it doesn't sound as a reasonable limit. Even more as it won't be displayed in any table where it could break the alignment. A lot of users will have connected their vCenter to Active Directory and will use domain based names, such as<EMAIL_ADDRESS>hence more than 20 characters.
Would it be possible to extend the limit to 256 characters?

Ah, yep, we need to fix the validation criteria for all our forms. This was added just to test that validation was working. I intended to fix it as part of #60 but we missed it.
@fdupont-redhat I can open a PR for this specific example, but can you and/or @jortel help me identify what the actual field validation criteria should be for a lot of these CR properties? I know there are also specific limitations to what kinds of characters can be used in names, etc.

For now I'm removing all the character limits on these fields in #158 to resolve this, but I also opened #157 so we remember to add real accurate validations here.

Name: 32 characters should be enough for a short description. It depends on the size of the column in the table, no?
Hostname: 255 characters according to RFC 1035.
Username: 320 characters according to RFC 3696, 64 before @, 255 after.
Password: 256 characters for paranoids.

As far as sizes of columns, IMO we should allow whatever length the backend requires and have the UI flexible enough to make space for it, and if it has to wrap the name to multiple lines (while not ideal) it should be able to. @vconzola may disagree though.
For names of CRs, do you know what characters are and are not allowed? I think I saw some errors when I was trying to make a name with symbols in it.

@mturley, here is the naming convention followed by Kubernetes: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/. I think that CR names follow the DNS Label Names convention, i.e:

contain at most 63 characters
contain only lowercase alphanumeric characters or -
start with an alphanumeric character
end with an alphanumeric character

Perfect, thanks @fdupont-redhat ! I'll write a validation helper for that and apply it to all the relevant fields.

If it doesn't already exists, it might be worth contributing the validator to Patternfly for other projects in OpenShift.

Yeah, that's not a bad idea. We're specifically using a library called yup for validation, so I'll likely make it a yup schema object, but that might be useful anyway for those who want to use that library. Maybe I'll just make it a plain JS function and plug that into yup so it's more reusable.

@mturley I don't ever want to wrap text in a table cell. I'd rather use ellipses with a tooltip to show the entire name of something. Depending on what the content of the field is the ellipses can be trailing or centered.

@vconzola ah, right, sorry. Ellipses it is. Do you have an opinion on whether we artificially limit the length of plan/mapping names as well, or should they just be allowed to be as long as the API allows?

@mturley I've seen too many times over the years when the UI limited something like this and it came back to bite us. I think we should just support what the API allows.

Sounds good to me.


zsh completion is semi-broken

I have this in my .zshrc
eval "$(hub alias -s)"

hub is installed via homebrew
zsh completion is installed to /usr/local/share/zsh/site-functions

the hub commands like pull-request, browse etc doesn't get completed
Ideas @mislav ?

I'm an oh-my-zsh user, but the above mentioned fix to add the hub oh-my-zsh plugin didn't work for me.  I was able to resolve this by adding fpath=('/usr/local/share/zsh/site-functions' $fpath) to my .zshrc above ZSH=....


Update README.DOC

Corrected some spelling mistakes.

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.:x: mohitgauniyal19a sign nowYou have signed the CLA already but the status is still pending? Let us recheck it.


Probably pysam error

Hi @kcleal,
I hope you're doing well. I'm encountering some errors while using the latest version of Dysgu within a Conda environment. I have attached the log.txt file for your reference. Could you please take a look when you have a moment?
Thank you in advance for your help!

command used

dysgu run -x -p 16 --min-support 5 --mq 5 GRCh38_GIABv3_no_alt_analysis_set_maskedGRC_decoys_MAP2K3_KMT2C_KCNJ18.fasta  $temp1  UD_AN001_F.sorted.uniq.bam --regions $exones_padded_50bp_sorted.bed | bgzip -c > dysgu_output.vcf.gz
log.txt
process_bams_dysgu_732982_1.txt

Hi @poddarharsh15,
It looks like the posA and posB coordinates are the wrong way around. This should be straight forward to fix. Thanks for raising the issue

Thanks for the fast response :)

Hi @poddarharsh15,
It looks like the posA and posB coordinates are the wrong way around. This should be straight forward to fix. Thanks for raising the issue

Hi @kcleal,
I wanted to follow up and ask if the issue has been resolved, as I'm still a bit unclear on the current status. Could you please provide an update when you have a moment?
Thank you very much for your help.

great thanks for clarifying I will run some test with newer version :)

Hi @kcleal,
Thank you again for the update. I wanted to share two scenarios I’ve tested with the same sample set. Please see the details below:
Using the --regions parameter to exclude certain regions in my WES data
I ran test samples using the --regions parameter to exclude specific exons, but unfortunately, I am still encountering the same errors. Please refer to the attached log files for detailed error descriptions. I am not 100% sure but I think there is some problem with .bed files I am using with my WES data and I think I can ignore the regions parameters.
with_region_param.txt
Without including the --regions parameter
When I omit the --regions parameter, the pipeline runs successfully and completes without any errors.
no_regions.txt
Conda installs a new version of dysgu, but shows version 1.6.6
Even though I installed the latest version of dysgu via Conda, it still reports version 1.6.6 when checked.

Please let me know if you have any suggestions or insights into these issues.
Many thanks again for your help.

Oh that's unexpected. Sometimes if you install via pip, then install using conda, the pip version still gets used. Perhaps this is the reason? You might need to run pip uninstall dysgu a few times.

Hi @kcleal,
I’ve tried several times to uninstall (through pip) the old version of dysgu and reinstall it using Conda. Unfortunately, I still end up with version 1.6.6 after the installation.
However, I have decided not to use the --regions parameter anymore, as I do not have accurate BED files for the regions I intended to exclude.
Many thanks again for your help!

Ok no problem. Sorry, I dont know why you are seeing v1.6.6, I seem to have no issues downloading 1.6.7


A deserialization bug when class has 'quick' access property for list

Source/destination types
    public class Parent
    {
        public List<Child> Children { get; set; } = new List<Child>();

        public Child FirstChild => Children.First();
    }

    public class Child
    {
        public List<GrandChild> Children { get; set; } = new List<GrandChild>();
    }

    public class GrandChild
    {
        public string Value { get; set; }
    }

Expected behavior
deserializedParent.Children[0].Children.Count is one
Actual behavior
deserializedParent.Children[0].Children.Count is two
Steps to reproduce
            var parent = new Parent
            {
                Children = new List<Child>
                {
                    new Child
                    {
                        Children = new List<GrandChild>
                        {
                            new GrandChild { Value = "I am a grand child" },
                        }
                    },
                    new Child(),
                }
            };

            var serializedParent = JsonConvert.SerializeObject(parent);
            var deserializedParent = JsonConvert.DeserializeObject<Parent>(serializedParent);

This is intentional behavior.
You have to pay utmost attention to Newtonsoft.Json's default (de)serialization settings, some of which are unfortunately not what many would expect them to be. For a more detailed explanation of what's going on here, see this comment: https://github.com/JamesNK/Newtonsoft.Json/issues/2706#issuecomment-1183252408
To get the desired outcome, you will have to set Newtonsoft.Json's ObjectCreationHandling setting to ObjectCreationHandling.Replace.


Add pre-commit-hooks-django

###Description of the Tech Debt###
We couldn't set up this pre-commit hook initially because of the following reasons. However, this hook has some useful checks that would be beneficial when we have more migration files:

It takes a lot of time to troubleshoot.
Implementing it was a bit tricky due to issues with the poetry virtual environment.

Link to hook: https://github.com/ecugol/pre-commit-hooks-django
NOTE: Due to the issue with the virtual environment (Hook is not aware of poetry env), I've implemented this as a standalone command to check django migrations.

This is not needed, we always run the migrate command when we run the backend image so no need to check this in the CI.


Question about shading

Dear eladrich,
Thanks for your great repo! I tried to add a start_shading_iter. However I find that the result of adding "lambertian" shading is kinda strange. I just wanna ask what may cause this problem? And also I find that if finetune the training epoch from 5000 to 10000, sometimes it will a produce a result which whole color is black? Has anybody faced the same problem before?

Shading in latent space is strange.


Game not opening on WiiU

So after following the tutorial exactly and everything the game says "not a valid game/ update/ or DLC file" when I try to open it with SCM or Wup Installer.

Sorry for this late response.
It is strange.
What's you Wii U OS version ?


Bug_Report: Age Calculator Project

Describe the bug

The reset button in the site does not work. It does not do anything when it is pressed.
The calculated age entered doesn't show the units in the results.

Expected behavior

The reset button must reset the date in the input field as well as clear the result field.
There must be units after the result according to the ones entered by the user.

Screenshots (Mandatory)

Additional context (Mandatory )
Are you contributing under any open-source program ?
Yes, under KOSS - KWOC 2023
Please assign me on the above issue so that I can fix the above problems.

@agrawal-yash Welcome to METAVERSE!!!!!!
Please go through contributing.md before contributing.


Add support for individual transaction id links on transactions page list

Problem
The transactions page does a great job of listing transactions, however when presented with many transactions a user may want to explore multiple transactions whiles preserving the original list of transactions presented e.g. https://hashscan.io/mainnet/transactions?type=ethereumtransaction.
For this they'd look to open a single transaction in a new tab or window.
Right clicking on a transaction currently does now provide this option due to the type of hyperlink employed.
Solution
Update individual transaction list items to support open in new tab/window
e.g. make transactionId a hyperlink to https://hashscan.io/<env>/transaction/transactionId
Alternatives
No response

Cmd-click (on a mac) and Ctrl-click (or wheel-click, on a PC) will open the details page in a different tab -- and this should work from any table.


Add aggregateSeriesLists() and aliases for diffSeriesLists(), sumSeriesLists(), multiplySeriesLists()

Closes: #2645  see for more information.
Decided to use aggregate() as base function when implementing diffSeriesLists(), sumSeriesLists(), multiplySeriesLists() as aliases using aggregateSeriesLists().
Side effect of course is that other functions that are supported by aggregate() are also supported by aggregateSeriesLists().

Cool! Good work, @alikhtag !

Can this be merged in near future, would like to use master branch for our images :relaxed:

Thanks for quick merge @piotr1212 ! Will probably try to add these functions to grafana tooltip hint, since even old divideSeriesLists() is missing.

Thanks for quick merge @piotr1212 ! Will probably try to add these functions to grafana tooltip hint, since even old divideSeriesLists() is missing.

Hi @piotr1212 and/or @deniszh , can docs be deployed with latest version of master please?

Hi @alikhtag ,
Docs built on https://github.com/graphite-project/graphite-web/commit/cc51437d4aa987a6e9128783472375b17a9f0bd8, but functions are sill not visible :(

Ah no, it's there, looks like I hit cached version.

Thanks a lot / Большое Спасибо))) :) @deniszh!


Make CodeWriterDeclaration multi scope aware

Fixes https://github.com/microsoft/typespec/issues/3853

API change check
APIView has identified API level changes in this PR and created following API reviews.
Microsoft.Generator.CSharp


Q: How to access Pulseaudio server configuration

I have a multi-channel audio interface and for audio research I would like to bridge WSL2 with WSLg with the ability to have control to multiple audio inputs and outputs.
The pacmd command is not accessible from user space. Is there a way to configure pulse audio server?
I was able to select only one input and one output channel by manually changing the default playback and recording device using the Sound device manager from Control Panel. For a basic thing is OK, but I do really need more flexibility and if possible independent of this default playback and recording device selection.
Someone can point to some documentation, source code, or just write some hints?

Experimenting earlier, I found that I could access pacmd by entering the WSLg system distro with wsl --system -u wslg. Might be a workaround you could use?
(Although as far as I understand it, any changes you make this way will be automatically discarded when your distro terminates, so if you need your reconfiguration to stick, that would be an issue.)

Thank you, that was what I am looking for. For me it's enough to be able to login in system distro.


github.com/tj/front dependency is maybe unnecessary

Hi @chrisallenlane,
I'm making new rpm package of cheat and everything goes well except one thing. In your new version of cheat written in go you use go package tj/front, which is not packaged in Fedora. I would not ask you to remove it and simply package it into Fedora but it seems a little overkill for a package, which contains 1 function. It does not even have properly referenced license which is a requirement for a rpm package. So i ask you, could you please implement this function yourself in cheat?

Hi, @TomasKorbar
As always, thanks for your help "upstream". I just have a few questions:

In your new version of cheat written in go you use go package tj/front, which is not packaged in Fedora.

Will you explain what you mean by "packaged in Fedora" here? To my knowledge, the Github repository is canonical. I don't believe there is a more "official" repository elsewhere, as may be the case with npm for example.

It does not even have properly referenced license which is a requirement for a rpm package.

The README displays an "MIT" badge, though I see that the project does not actually include a LICENSE.txt file (or a working hyperlink to the full text of the MIT license).
Does the presence of the badge satisfy Fedora's concerns, or must the project include a LICENSE file?
You're right in that re-implementing this would not be a large undertaking, so I'm not strongly averse to doing it. If the presence of the "MIT" badge solves the licensing concern, however, I'm happy to leave cheat as-is.
Thanks.

Will you explain what you mean by "packaged in Fedora" here? To my knowledge, the Github repository is canonical. I don't believe there is a more "official" repository elsewhere, as may be the case with npm, for example.

Sure. Packaged in Fedora means that some software has it's own repository at [0] where is stored it's specfile, patches and whatever is needed for downstream build. You can look at the specfile which i used for building cheat 2 here [1]. According to this specfile is then built rpm package which is uploaded to fedora's repositories (for example [2]). Fedora package manager dnf uses files stored in "/etc/yum.repos.d" to find those repositories. And all this in the endgame results in that you can execute $sudo dnf install cheat and cheat will be installed on your fedora system. This is what it means for a software to be packaged in Fedora. But before it can be included in those repositories it has to meet conditions described in [3] and another maintainer has to review your specfile.
Hope the answer is not too long:)

The README displays an "MIT" badge, though I see that the project does not actually include a LICENSE.txt file (or a working hyperlink to the full text of the MIT license).
Does the presence of the badge satisfy Fedora's concerns, or must the project include a LICENSE file?

Yeah i noticed the badge. To be honest i never had to find this out but you too must feel that if we are asking ourselves this question then something is not right. IMHO it does not satisfy license requirements.

or must the project include a LICENSE file?

[4]. Tldr it is strongly encouraged.
Feel free to ask anything else. I'm happy to help.
[0] - https://src.fedoraproject.org
[1] - https://src.fedoraproject.org/rpms/cheat/blob/master/f/cheat.spec
[2] - https://archives.fedoraproject.org/pub/fedora/linux/releases/31/Everything/x86_64/os/Packages/
[3] - https://docs.fedoraproject.org/en-US/packaging-guidelines/
[4] - https://docs.fedoraproject.org/en-US/packaging-guidelines/LicensingGuidelines/#_license_text

@TomasKorbar, thanks very much for the detailed explanation. I don't have any "upstream" experience, so it's always interesting to hear how those processes work.
Removing this dependency shouldn't be a problem. I'll try to make the change in the next few days, and will update this ticket once I have published the new release.
Thanks!

@TomasKorbar, I've removed the dependency in version 3.0.5. Please try it out. Thanks :slightly_smiling_face:

Actually, skip 3.0.5 and go to 3.0.6, please :smile:

@TomasKorbar now that this is resolved, may I ask if you plan to package cheat v3 any time soon? Or is there still an issue somewhere?

Yes, it is in my todo list. Unfortunately i'm busy with a different work now, which along with my study consumes all of my time. Hopefully this or next week i will be able to finish new package but i do not want to promise anything. Sorry for the delay.

@exploide @chrisallenlane
New package is ready at https://copr.fedorainfracloud.org/coprs/tkorbar/cheat/
If anyone is using fedora 31 or higher then i would be glad to have some feedback.
I tested it and it seems to work fine. I will leave it a few days in copr and then i will submit update to fedora 31 and rawhide.

@TomasKorbar thank you a lot!
I had a look on the package and the spec file. To be honest, I have a few concerns regarding the "default" cheatsheets (this could also be an answer to #517):
With cheat v3, the community maintained cheatsheets have been broken out into a separate repository. I think this happened for a reason. For example in my case, I really appreciate this, since I do not use them. I use cheat exclusively for my personal cheatsheets. The package you built now contains the community cheatsheets again.
Personally, it wouldn't package them at all and let users fetch them from GitHub. But I might be a bit opinionated about this. Alternatively, they should at least be contained in a separate package that one needs to install explicitly.
Regarding the config file, #501 is related. I would prefer to have cheat create a working default config in the home directory on first run (for an empty cheatsheets dir) as described there. This could also partially address the issues described in #517, because users need to configure cheat manually when using community provided cheatsheets. But I see that opinions might differ on this :/ In any case, I think that installing the cheat tool should do nothing with community cheatsheets (hence, do not create a config file pointing to them). I would expect a installation that is the most clean possible. And currently it contains files from a different, optional repository.
Concerning the autocompletion files, I see it the other way around. It does not harm if you install a few autocompletion files directly from the main cheat package (instead of the -bash, -fish and eventually -zsh subpackages). Users would have working autocompletion out of the box. But it is of course up to you how you package this project, just wanted to explain what I would expect :)

I'm not sure if I should post this in #501, #517 or in this issue here, but I want to note down my idea for a first run experience of cheat :sweat_smile:  :
$ cheat
It appears you have run cheat for the first time.
I created a config file for you at ~/.config/cheat/conf.yml and a directory to store cheatsheets at ~/.cheat.

Go ahead and note down all the stuff you frequently fail to remember.
Run "cheat -e <sheetname>" to create and edit your first cheatsheet.

If you would like to use a community maintained collection of cheatsheets, you can find one at https://github.com/cheat/cheatsheets.

Then, the README of cheat/cheatsheets could better explain how to add this collection to the config file.

@TomasKorbar, thanks for your hard work :tada:
@TomasKorbar, @exploide: thanks for your remarks here. Let's close this ticket and move the remaining discussion over to #517 so we can keep the conversation in one place. I'll reply with some thoughts there now.


Push decoded values independently in codec rle

Seems to have much better performance when number of values is quite large.

Pulished in 0.11.9


[SPARK-12961][CORE][FOLLOW-UP] Remove wrapper code for SnappyOutputStream

What changes were proposed in this pull request?
This pr removed the wrapper code (commit: https://github.com/apache/spark/commit/f2cc6b5bccc3a70fd7d69183b1a068800831fe19) to avoid the bug in SnappyOutputStream.close() because the corresponding bug has been fixed in snappy-java-<IP_ADDRESS> that Spark currently uses. This fix has been merged in snappy-java-1.1.2 and see https://github.com/xerial/snappy-java/issues/107#issuecomment-102936930.
How was this patch tested?
Checked UnsafeShuffleWriterSuite passed.

Probably, we forgot to remove this when upgrading snappy-java to <IP_ADDRESS>. cc: @srowen @JoshRosen

Test build #80673 has started for PR 18949 at commit c3f2470.

Also, we could safely remove the code (commit: https://github.com/apache/spark/commit/5936bf9fa85ccf7f0216145356140161c2801682) to avoid memory leak in snappy-java? cc: @viirya This fix has been merged in snappy-java-<IP_ADDRESS> (See: https://github.com/xerial/snappy-java/issues/131#issuecomment-173865944)

Test build #80673 has finished for PR 18949 at commit c3f2470.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/80673/
Test PASSed.

Merged build finished. Test PASSed.

LGTM

@maropu There is another reason we leave the workaround in place: https://github.com/apache/spark/pull/11524#issuecomment-192409933

LGTM

@viirya aha, ok. thanks. (btw, since the comment is still important, we better keep it in code comment, maybe).

ping

If I understand the previous comment https://github.com/apache/spark/pull/11524#issuecomment-192409933 correctly, seems it is happened before snappy-java get downgraded by user code when the user classpath takes precedence.
I am not sure where the snappy-java comes from, I don't know if it is Hadoop, maybe other? If we don't shade this dep, maybe we still keep it for safety?

Hm, if the risk is only that the user classpath might have an older version, then at some point that's an acceptable risk. There are many problems like that, and this version has been out for over a year.
Still, if it's not causing us problems except for a bit of extra code, we could also just err on the side of caution and push this out another 6-12 months or something.

Ok. It sounds reasonable to me.

Sounds good to me ,too.


Query Plan loses details

Issue Type: Bug
If I run a query plan it displays correctly, but if I switch to a different tab and then back to the plan all the arrows disappear.
Azure Data Studio version: azuredatastudio 1.30.0 (59c4b8e90cf2d3a24bed72623197f10f8d090fdc, 2021-06-16T19:04:08.858Z)
OS version: Windows_NT x64 10.0.19042

System Info

Item
Value

CPUs
Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz (8 x 2304)

GPU Status
2d_canvas: enabledgpu_compositing: enabledmultiple_raster_threads: enabled_onoop_rasterization: enabledopengl: enabled_onprotected_video_decode: enabledrasterization: enabledskia_renderer: enabled_onvideo_decode: enabledvulkan: disabled_offwebgl: enabledwebgl2: enabled

Load (avg)
undefined

Memory (System)
15.76GB (0.77GB free)

Process Argv

Screen Reader
no

VM
0%

Extensions: none

@peterox could please add some screenshots?

I am able to reproduce this with 1.30 release, but don't see such issue with the latest insider release and the 1.31 release candidate. Assuming it has been fixed, I will verify this on the 1.31 final build when it is available.

I can repro the issue in 1.31 stable build, will take a look.

Closing as a duplicate of https://github.com/microsoft/azuredatastudio/issues/4755.  Thanks for reporting this issue!


Parsing should fail when day-of-week is inconsistent with date

The documentation on momentjs.com claims:
"The parser also confirms that the day-of-week (when included) is consistent with the date."
Perhaps I'm misinterpreting this, but it does not seem to be the case.
Example
Parsing the date Wed 08-10-2017 (which is actually a Thursday). See JSFiddle.
Expected behavior
Moment should fail to parse the date.
Observed behavior
Moment parses the date, ingoring the provided day of the week. Subsequently calling .toDate() will use the true day of the week.

Yeah, this must have broken and sadly not had a test for it. I guess it's possible that we changed the behavior on purpose but didn't change the docs, but that seems less likely. IMO, the docs reflect the desired behavior and we should isValid() //=> false

Hello! I have submitted a PR that addresses this. If there are any issues, please let me know!