Failing to test the NVMf driver in a kubernetes cluster

Hello :)
I tried to test the NVMf driver in a kubernetes cluster by following https://github.com/kubernetes-csi/csi-driver-nvmf#test-nvmf-driver-in-kubernetes-cluster and failed to successfully bring up the nginx pod.
The test node is running Debian 11 with kernel 5.19.0-rc4+ and was setup with kubeadm v1.25.2.
First I wanted to setup a nvmf target like described in https://github.com/kubernetes-csi/csi-driver-nvmf/blob/master/doc/setup_kernel_nvmf_target.md (I used a file as the storage backend device and adjusted the addr_traddr accordingly). However, I go the following error:
sudo ln -s /sys/kernel/config/nvmet/subsystems/nqn.2022-08.org.test-nvmf.example/namespaces/ /sys/kernel/config/nvmet/ports/1/subsystems/nqn.2022-08.org.test-nvmf.example
ln: failed to create symbolic link '/sys/kernel/config/nvmet/ports/1/subsystems/nqn.2022-08.org.test-nvmf.example': Invalid argument

So instead I used the nvmetcli tool git://git.infradead.org/users/hch/nvmetcli.git and modified the tcp.json to point to /tmp/nvmet_test.img (removed nquid and uuid), use port 49153, use the nodes IP, and set the subsytems and nqn field to 'nqn.2022-08.org.test-nvmf.example'.
To setup the nvmf target I ran:
sudo nvme disconnect-all
sudo python3 nvmetcli clear
sudo python3 nvmetcli restore conv-test-tcp.json

Running sudo nvme discover -t tcp -a <IP_ADDRESS> -s 49153 gave me:
Discovery Log Number of Records 2, Generation counter 3
=====Discovery Log Entry 0======
trtype:  tcp
adrfam:  ipv4
subtype: unrecognized
treq:    not specified, sq flow control disable supported
portid:  1
trsvcid: 49153
subnqn:  nqn.2014-08.org.nvmexpress.discovery
traddr:  <IP_ADDRESS>
sectype: none
=====Discovery Log Entry 1======
trtype:  tcp
adrfam:  ipv4
subtype: nvme subsystem
treq:    not specified, sq flow control disable supported
portid:  1
trsvcid: 49153
subnqn:  nqn.2022-08.org.test-nvmf.example
traddr:  <IP_ADDRESS>
sectype: none

Because I am using podman instead of docker I replaced the docker commands in release-tools/build.make like that sed -i 's/docker /podman /g' release-tools/build.make.
I then adjusted pv.yaml with my targetTrAddr and the deviceUUID from cat  /sys/kernel/config/nvmet/subsystems/nqn.2022-08.org.test-nvmf.example/namespaces/1/device_uuid.
Form there on I followed the instructions of https://github.com/kubernetes-csi/csi-driver-nvmf#test-nvmf-driver-in-kubernetes-cluster
The nginx pod is not starting and running kubectl describe pods gives me:
Name:             nginx-block-test1-55f6f8ff94-jfwd7
Namespace:        default
Priority:         0
Service Account:  default
Node:             <none>
Labels:           app=nginx
                  pod-template-hash=55f6f8ff94
Annotations:      <none>
Status:           Pending
IP:
IPs:              <none>
Controlled By:    ReplicaSet/nginx-block-test1-55f6f8ff94
Containers:
  nginx:
    Image:        nginx
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:
      /dev/nvmf from nvmf-volume (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-c6mdn (ro)
Conditions:
  Type           Status
  PodScheduled   False
Volumes:
  nvmf-volume:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  csi-nvmf-pvc
    ReadOnly:   false
  kube-api-access-c6mdn:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason            Age   From               Message
  ----     ------            ----  ----               -------
  Warning  FailedScheduling  16s   default-scheduler  0/3 nodes are available: 3 pod has unbound immediate PersistentVolumeClaims. preemption: 0/3 nodes are available: 3 Preemption is not helpful for scheduling.

And kubectl describe pvc outputs:
Name:          csi-nvmf-pvc
Namespace:     default
StorageClass:  csi-nvmf-sc
Status:        Pending
Volume:
Labels:        <none>
Annotations:   volume.beta.kubernetes.io/storage-provisioner: csi.nvmf.com
               volume.kubernetes.io/storage-provisioner: csi.nvmf.com
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
VolumeMode:    Filesystem
Used By:       nginx-block-test1-55f6f8ff94-jfwd7
Events:
  Type    Reason                Age                   From                         Message
  ----    ------                ----                  ----                         -------
  Normal  ExternalProvisioning  3m36s (x82 over 23m)  persistentvolume-controller  waiting for a volume to be created, either by external provisioner "csi.nvmf.com" or manually created by system administrator

What am I missing or doing wrong? :)

Hi @MaisenbacherD,

There is something wrong with the last command in setup_kernel_nvmf_target.md, it should be like

// remove "/namespaces"
ln -s /sys/kernel/config/nvmet/subsystems/nqn.2022-08.org.test-nvmf.example /sys/kernel/config/nvmet/ports/1/subsystems/nqn.2022-08.org.test-nvmf.example

I will fix this right away.

nvme discover will only send Get Log Page requests to a Discovery Controller, maybe the nvmf target is not available at this time. You can use nvmetcli ls to see if the nvmf target port is available. (it will be marked in green)

The error description of nginx is "scheduling failure", it seems that your scheduling node is unavailable. Can you show me your node status and pv/pvc list?

Hi @MeinhardZhou,
Thanks for your help and explanation :) !
With nvmetcli ls I could see that the nvmf target port was available.
I now tried the setup_kernel_nvmf_target.md with your suggested fix. The nvmf target can now be created but the "scheduling failure" persists when redeploying the example (as expected). :)
Here the node status:
Name:               master-node
Roles:              control-plane
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=master-node
                    kubernetes.io/os=linux
                    node-role.kubernetes.io/control-plane=
                    node.kubernetes.io/exclude-from-external-load-balancers=
Annotations:        kubeadm.alpha.kubernetes.io/cri-socket: unix:///var/run/containerd/containerd.sock
                    node.alpha.kubernetes.io/ttl: 0
                    projectcalico.org/IPv4Address: <IP_ADDRESS>/24
                    projectcalico.org/IPv4IPIPTunnelAddr: xxx
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Thu, 22 Sep 2022 09:04:05 +0000
Taints:             <none>
Unschedulable:      false
Lease:
  HolderIdentity:  master-node
  AcquireTime:     <unset>
  RenewTime:       Fri, 23 Sep 2022 11:29:21 +0000
Conditions:
  Type                 Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----                 ------  -----------------                 ------------------                ------                       -------
  NetworkUnavailable   False   Thu, 22 Sep 2022 09:06:43 +0000   Thu, 22 Sep 2022 09:06:43 +0000   CalicoIsUp                   Calico is running on this node
  MemoryPressure       False   Fri, 23 Sep 2022 11:29:11 +0000   Thu, 22 Sep 2022 09:04:05 +0000   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure         False   Fri, 23 Sep 2022 11:29:11 +0000   Thu, 22 Sep 2022 09:04:05 +0000   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure          False   Fri, 23 Sep 2022 11:29:11 +0000   Thu, 22 Sep 2022 09:04:05 +0000   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready                True    Fri, 23 Sep 2022 11:29:11 +0000   Thu, 22 Sep 2022 09:04:06 +0000   KubeletReady                 kubelet is posting ready status. AppArmor enabled
Addresses:
  InternalIP:  <IP_ADDRESS>
  Hostname:    master-node
Capacity:
  cpu:                8
  ephemeral-storage:  129064092Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      2Gi
  memory:             82382996Ki
  pods:               110
Allocatable:
  cpu:                8
  ephemeral-storage:<PHONE_NUMBER>91
  hugepages-1Gi:      0
  hugepages-2Mi:      2Gi
  memory:             80183444Ki
  pods:               110
System Info:
  Machine ID:                 5d43e51649654584b9150975667ce527
  System UUID:                751b7e4d-14b1-4dc7-b3c6-5fd392dcbad2
  Boot ID:                    d1ac1764-b623-4715-b1ae-9017891667f0
  Kernel Version:             5.19.0-rc4+
  OS Image:                   Debian GNU/Linux 11 (bullseye)
  Operating System:           linux
  Architecture:               amd64
  Container Runtime Version:  containerd://1.4.13
  Kubelet Version:            v1.25.2
  Kube-Proxy Version:         v1.25.2
Non-terminated Pods:          (11 in total)
  Namespace                   Name                                        CPU Requests  CPU Limits  Memory Requests  Memory Limits  Age
  ---------                   ----                                        ------------  ----------  ---------------  -------------  ---
  kube-system                 calico-kube-controllers-58dbc876ff-89k8m    0 (0%)        0 (0%)      0 (0%)           0 (0%)         26h
  kube-system                 calico-node-wl4dt                           250m (3%)     0 (0%)      0 (0%)           0 (0%)         26h
  kube-system                 coredns-565d847f94-6xvjp                    100m (1%)     0 (0%)      70Mi (0%)        170Mi (0%)     26h
  kube-system                 coredns-565d847f94-qpphp                    100m (1%)     0 (0%)      70Mi (0%)        170Mi (0%)     26h
  kube-system                 csi-nvmf-controller-c946b65f8-9mdp7         0 (0%)        0 (0%)      0 (0%)           0 (0%)         25h
  kube-system                 csi-nvmf-node-g85kf                         0 (0%)        0 (0%)      0 (0%)           0 (0%)         25h
  kube-system                 etcd-master-node                            100m (1%)     0 (0%)      100Mi (0%)       0 (0%)         26h
  kube-system                 kube-apiserver-master-node                  250m (3%)     0 (0%)      0 (0%)           0 (0%)         26h
  kube-system                 kube-controller-manager-master-node         200m (2%)     0 (0%)      0 (0%)           0 (0%)         26h
  kube-system                 kube-proxy-kr722                            0 (0%)        0 (0%)      0 (0%)           0 (0%)         26h
  kube-system                 kube-scheduler-master-node                  100m (1%)     0 (0%)      0 (0%)           0 (0%)         26h
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests     Limits
  --------           --------     ------
  cpu                1100m (13%)  0 (0%)
  memory             240Mi (0%)   340Mi (0%)
  ephemeral-storage  0 (0%)       0 (0%)
  hugepages-1Gi      0 (0%)       0 (0%)
  hugepages-2Mi      0 (0%)       0 (0%)
Events:              <none>

Name:               worker-node01
Roles:              <none>
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=worker-node01
                    kubernetes.io/os=linux
Annotations:        kubeadm.alpha.kubernetes.io/cri-socket: unix:///var/run/containerd/containerd.sock
                    node.alpha.kubernetes.io/ttl: 0
                    projectcalico.org/IPv4Address: <IP_ADDRESS>/24
                    projectcalico.org/IPv4IPIPTunnelAddr: xxx
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Thu, 22 Sep 2022 09:07:26 +0000
Taints:             <none>
Unschedulable:      false
Lease:
  HolderIdentity:  worker-node01
  AcquireTime:     <unset>
  RenewTime:       Fri, 23 Sep 2022 11:29:14 +0000
Conditions:
  Type                 Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----                 ------  -----------------                 ------------------                ------                       -------
  NetworkUnavailable   False   Thu, 22 Sep 2022 09:07:48 +0000   Thu, 22 Sep 2022 09:07:48 +0000   CalicoIsUp                   Calico is running on this node
  MemoryPressure       False   Fri, 23 Sep 2022 11:29:00 +0000   Thu, 22 Sep 2022 09:07:25 +0000   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure         False   Fri, 23 Sep 2022 11:29:00 +0000   Thu, 22 Sep 2022 09:07:25 +0000   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure          False   Fri, 23 Sep 2022 11:29:00 +0000   Thu, 22 Sep 2022 09:07:25 +0000   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready                True    Fri, 23 Sep 2022 11:29:00 +0000   Thu, 22 Sep 2022 09:07:36 +0000   KubeletReady                 kubelet is posting ready status. AppArmor enabled
Addresses:
  InternalIP:  <IP_ADDRESS>
  Hostname:    worker-node01
Capacity:
  cpu:                3
  ephemeral-storage:  129064092Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      2Gi
  memory:             8152324Ki
  pods:               110
Allocatable:
  cpu:                3
  ephemeral-storage:<PHONE_NUMBER>91
  hugepages-1Gi:      0
  hugepages-2Mi:      2Gi
  memory:             5952772Ki
  pods:               110
System Info:
  Machine ID:                 5d43e51649654584b9150975667ce527
  System UUID:                621cf269-23cf-4e76-8d0d-64f5bff6e9ca
  Boot ID:                    67b15c49-3304-47dc-a88e-a4bdd26aaab0
  Kernel Version:             5.19.0-rc4+
  OS Image:                   Debian GNU/Linux 11 (bullseye)
  Operating System:           linux
  Architecture:               amd64
  Container Runtime Version:  containerd://1.4.13
  Kubelet Version:            v1.25.2
  Kube-Proxy Version:         v1.25.2
Non-terminated Pods:          (3 in total)
  Namespace                   Name                   CPU Requests  CPU Limits  Memory Requests  Memory Limits  Age
  ---------                   ----                   ------------  ----------  ---------------  -------------  ---
  kube-system                 calico-node-5g5hq      250m (8%)     0 (0%)      0 (0%)           0 (0%)         26h
  kube-system                 csi-nvmf-node-xm8qp    0 (0%)        0 (0%)      0 (0%)           0 (0%)         25h
  kube-system                 kube-proxy-kwm9g       0 (0%)        0 (0%)      0 (0%)           0 (0%)         26h
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests   Limits
  --------           --------   ------
  cpu                250m (8%)  0 (0%)
  memory             0 (0%)     0 (0%)
  ephemeral-storage  0 (0%)     0 (0%)
  hugepages-1Gi      0 (0%)     0 (0%)
  hugepages-2Mi      0 (0%)     0 (0%)
Events:              <none>

Name:               worker-node02
Roles:              <none>
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=worker-node02
                    kubernetes.io/os=linux
Annotations:        kubeadm.alpha.kubernetes.io/cri-socket: unix:///var/run/containerd/containerd.sock
                    node.alpha.kubernetes.io/ttl: 0
                    projectcalico.org/IPv4Address: <IP_ADDRESS>/24
                    projectcalico.org/IPv4IPIPTunnelAddr: xxx
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Thu, 22 Sep 2022 09:07:40 +0000
Taints:             <none>
Unschedulable:      false
Lease:
  HolderIdentity:  worker-node02
  AcquireTime:     <unset>
  RenewTime:       Fri, 23 Sep 2022 11:29:22 +0000
Conditions:
  Type                 Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----                 ------  -----------------                 ------------------                ------                       -------
  NetworkUnavailable   False   Thu, 22 Sep 2022 09:08:02 +0000   Thu, 22 Sep 2022 09:08:02 +0000   CalicoIsUp                   Calico is running on this node
  MemoryPressure       False   Fri, 23 Sep 2022 11:24:25 +0000   Thu, 22 Sep 2022 09:07:40 +0000   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure         False   Fri, 23 Sep 2022 11:24:25 +0000   Thu, 22 Sep 2022 09:07:40 +0000   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure          False   Fri, 23 Sep 2022 11:24:25 +0000   Thu, 22 Sep 2022 09:07:40 +0000   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready                True    Fri, 23 Sep 2022 11:24:25 +0000   Thu, 22 Sep 2022 09:07:50 +0000   KubeletReady                 kubelet is posting ready status. AppArmor enabled
Addresses:
  InternalIP:  <IP_ADDRESS>
  Hostname:    worker-node02
Capacity:
  cpu:                3
  ephemeral-storage:  129064092Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      2Gi
  memory:             8152332Ki
  pods:               110
Allocatable:
  cpu:                3
  ephemeral-storage:<PHONE_NUMBER>91
  hugepages-1Gi:      0
  hugepages-2Mi:      2Gi
  memory:             5952780Ki
  pods:               110
System Info:
  Machine ID:                 5d43e51649654584b9150975667ce527
  System UUID:                7a29101f-0713-4f0d-b5ab-0e0f6f100d9f
  Boot ID:                    b58dd26d-2edc-41eb-baab-e5670372ad21
  Kernel Version:             5.19.0-rc4+
  OS Image:                   Debian GNU/Linux 11 (bullseye)
  Operating System:           linux
  Architecture:               amd64
  Container Runtime Version:  containerd://1.4.13
  Kubelet Version:            v1.25.2
  Kube-Proxy Version:         v1.25.2
Non-terminated Pods:          (3 in total)
  Namespace                   Name                   CPU Requests  CPU Limits  Memory Requests  Memory Limits  Age
  ---------                   ----                   ------------  ----------  ---------------  -------------  ---
  kube-system                 calico-node-sr55r      250m (8%)     0 (0%)      0 (0%)           0 (0%)         26h
  kube-system                 csi-nvmf-node-jcps6    0 (0%)        0 (0%)      0 (0%)           0 (0%)         25h
  kube-system                 kube-proxy-l2vdm       0 (0%)        0 (0%)      0 (0%)           0 (0%)         26h
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests   Limits
  --------           --------   ------
  cpu                250m (8%)  0 (0%)
  memory             0 (0%)     0 (0%)
  ephemeral-storage  0 (0%)     0 (0%)
  hugepages-1Gi      0 (0%)     0 (0%)
  hugepages-2Mi      0 (0%)     0 (0%)
Events:              <none>

All 3 nodes are available and the master-node is scheduleable because I called kubectl taint nodes --all node-role.kubernetes.io/master- and kubectl taint nodes --all node-role.kubernetes.io/control-plane-.
A hello world deployment is successfully scheduled and running on the master-node:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ubuntu-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ubuntu-test
  template:
    metadata:
      labels:
        app: ubuntu-test
    spec:
      containers:
      - name: ubuntu
        image: ubuntu:22.10
        command: ["/bin/sleep", "3650d"]
        imagePullPolicy: IfNotPresent

Here the kubectl get pv list:
NAME          CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
csi-nvmf-pv   20Gi       RWO            Retain           Available           cs-nvmf-sc              12m

And here kubectl get pvc list:
NAME           STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
csi-nvmf-pvc   Pending                                      csi-nvmf-sc    13m

@MaisenbacherD
It seems like pv's STORAGECLASS is "cs-nvmf-sc" but pvc's STORAGECLASS is "csi-nvmf-sc".
it's my fault :(
I will consider building a CI system in the future to ensure the correct deployment of the example.

Thank you @MeinhardZhou , I should have also caught the mismatching storageclass identifiers. :)
However, now I run in the following error where the nginx container can not be created kubectl describe pods:
Name:             nginx-block-test1-55f6f8ff94-zgmq7
Namespace:        default
Priority:         0
Service Account:  default
Node:             master-node/<IP_ADDRESS>
Start Time:       Mon, 26 Sep 2022 07:21:52 +0000
Labels:           app=nginx
                  pod-template-hash=55f6f8ff94
Annotations:      <none>
Status:           Pending
IP:
IPs:              <none>
Controlled By:    ReplicaSet/nginx-block-test1-55f6f8ff94
Containers:
  nginx:
    Container ID:
    Image:          nginx
    Image ID:
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Waiting
      Reason:       ContainerCreating
    Ready:          False
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /dev/nvmf from nvmf-volume (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-9l8wv (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  nvmf-volume:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  csi-nvmf-pvc
    ReadOnly:   false
  kube-api-access-9l8wv:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason              Age                   From                     Message
  ----     ------              ----                  ----                     -------
  Normal   Scheduled           8m18s                 default-scheduler        Successfully assigned default/nginx-block-test1-55f6f8ff94-zgmq7 to master-node
  Warning  FailedMount         101s (x3 over 6m16s)  kubelet                  Unable to attach or mount volumes: unmounted volumes=[nvmf-volume], unattached volumes=[nvmf-volume kube-api-access-9l8wv]: timed out waiting for the condition
  Warning  FailedAttachVolume  16s (x4 over 6m19s)   attachdetach-controller  AttachVolume.Attach failed for volume "csi-nvmf-pv" : timed out waiting for external-attacher of csi.nvmf.com CSI driver to attach volume nvmf-data-id

I can connect sudo nvme connect -t tcp -n nqn.2022-08.org.test-nvmf.example -a <IP_ADDRESS> -s 49153 and run sudo fio --name=test --rw=rw --bs=4k --time_based=1 --runtime=5 --filename=/dev/nvme2n1 on the connected target.

@MaisenbacherD Can you show me the output of kubectl get pods --all-namespaces to see if the csi-nvmf-driver is up?

@MeinhardZhou With kubectl get pods --all-namespaces (and kubectl describe) you can see that the csi-nvmf deployments fail to pull the container image that was build with make container:
NAMESPACE     NAME                                       READY   STATUS              RESTARTS      AGE
default       nginx-block-test1-55f6f8ff94-n5c2n         0/1     ContainerCreating   0             32s
kube-system   calico-kube-controllers-58dbc876ff-njkz2   1/1     Running             0             25h
kube-system   calico-node-f7q6r                          1/1     Running             0             25h
kube-system   calico-node-grqkw                          1/1     Running             0             25h
kube-system   calico-node-zhqlh                          1/1     Running             0             25h
kube-system   coredns-565d847f94-27qr9                   1/1     Running             1 (25h ago)   25h
kube-system   coredns-565d847f94-cgw7g                   1/1     Running             1 (25h ago)   25h
kube-system   csi-nvmf-controller-c946b65f8-2mrvz        2/3     ImagePullBackOff    0             107s
kube-system   csi-nvmf-node-bvwfd                        1/2     ErrImagePull        0             107s
kube-system   csi-nvmf-node-f46ng                        1/2     ErrImagePull        0             107s
kube-system   csi-nvmf-node-w5mb5                        1/2     ImagePullBackOff    0             107s
kube-system   etcd-master-node                           1/1     Running             1 (25h ago)   25h
kube-system   kube-apiserver-master-node                 1/1     Running             1 (25h ago)   25h
kube-system   kube-controller-manager-master-node        1/1     Running             1 (25h ago)   25h
kube-system   kube-proxy-2lzl4                           1/1     Running             0             25h
kube-system   kube-proxy-f7zh9                           1/1     Running             1 (25h ago)   25h
kube-system   kube-proxy-lbkfg                           1/1     Running             0             25h
kube-system   kube-scheduler-master-node                 1/1     Running             1 (25h ago)   25h

podman images gave me:
REPOSITORY                TAG     IMAGE ID      CREATED        SIZE
localhost/nvmfplugin      latest  869fd86d041d  7 minutes ago  120 MB
docker.io/library/debian  9.13    662c05203bab  3 months ago   106 MB

Running podman tag localhost/nvmfplugin:latest docker.io/nvmfplugin:latest and redeploying the csi-nvmf-driver did not help.
In the event logs I am seeing then
Failed to pull image "nvmfplugin:latest": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/library/nvmfplugin:latest": failed to resolve reference "docker.io/library/nvmfplugin:latest": pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed

Do I need to deploy a local container registry and point the nvmfplugin image references of deploy/kubernetes/*.yaml to it or is there a different solution you would suggest?

@MaisenbacherD
Yes, there are two ways, either as you said, or modify the image name of csi-nvmf-plugin in deploy/kubernetes/csi-nvmf-controller.yaml and deploy/kubernetes/csi-nvmf-node.yaml, just like docker.io/nvmfplugin:latest or localhost/nvmfplugin:latest. By the way, you need to make sure that each k8s node already has a corresponding image.
I will make a cloud image in the near future for easy deployment.

@MeinhardZhou Just modifying the image name in the deployment files did not work for me.
I had to deploy a local container registry to where I pushed the nvmfplugin, csi-attacher, csi-provisioner and csi-node-driver-registrar images.
Then I had to rename the image references in csi-nvmf-controller.yaml and csi-nvmf-node.yaml to match the tags in the local container registry.
For the registry authentication I had to create a secret and specify it as a imagePullSecrets in csi-nvmf-controller.yaml and csi-nvmf-node.yaml.
I also got rid of the two worker-nodes and kept only the master-node for simplicity.
Now kubectl get pods --all-namespaces outputs:
NAMESPACE     NAME                                       READY   STATUS              RESTARTS       AGE
kube-system   calico-kube-controllers-58dbc876ff-hrn5s   1/1     Running             0              3h1m
kube-system   calico-node-qgf79                          1/1     Running             0              3h1m
kube-system   coredns-565d847f94-jq2lw                   1/1     Running             1 (179m ago)   3h1m
kube-system   coredns-565d847f94-kzs52                   1/1     Running             1 (179m ago)   3h1m
kube-system   csi-nvmf-controller-77fd5477f8-kwwmh       3/3     Running             0              44m
kube-system   csi-nvmf-node-zpwcl                        2/2     Running             0              44m
kube-system   etcd-master-node                           1/1     Running             1 (179m ago)   3h1m
kube-system   kube-apiserver-master-node                 1/1     Running             1 (179m ago)   3h1m
kube-system   kube-controller-manager-master-node        1/1     Running             1 (179m ago)   3h1m
kube-system   kube-proxy-p79sj                           1/1     Running             1 (179m ago)   3h1m
kube-system   kube-scheduler-master-node                 1/1     Running             1 (179m ago)   3h1m

I am suspecting that the csi-nvmf-driver is still not properly up as the nginx pod is unable to attach the volume?
kubectl describe pods:
Name:             nginx-block-test1-55f6f8ff94-nrrvj
Namespace:        default
Priority:         0
Service Account:  default
Node:             master-node/<IP_ADDRESS>
Start Time:       Wed, 28 Sep 2022 10:58:53 +0000
Labels:           app=nginx
                  pod-template-hash=55f6f8ff94
Annotations:      <none>
Status:           Pending
IP:
IPs:              <none>
Controlled By:    ReplicaSet/nginx-block-test1-55f6f8ff94
Containers:
  nginx:
    Container ID:
    Image:          nginx
    Image ID:
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Waiting
      Reason:       ContainerCreating
    Ready:          False
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /dev/nvmf from nvmf-volume (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-9gcsk (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  nvmf-volume:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  csi-nvmf-pvc
    ReadOnly:   false
  kube-api-access-9gcsk:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason              Age                  From                     Message
  ----     ------              ----                 ----                     -------
  Normal   Scheduled           34m                  default-scheduler        Successfully assigned default/nginx-block-test1-55f6f8ff94-nrrvj to master-node
  Warning  FailedMount         4m46s (x5 over 31m)  kubelet                  Unable to attach or mount volumes: unmounted volumes=[nvmf-volume], unattached volumes=[kube-api-access-9gcsk nvmf-volume]: timed out waiting for the condition
  Warning  FailedAttachVolume  108s (x12 over 32m)  attachdetach-controller  AttachVolume.Attach failed for volume "csi-nvmf-pv" : timed out waiting for external-attacher of csi.nvmf.com CSI driver to attach volume nvmf-data-id
  Warning  FailedMount         13s (x10 over 27m)   kubelet                  Unable to attach or mount volumes: unmounted volumes=[nvmf-volume], unattached volumes=[nvmf-volume kube-api-access-9gcsk]: timed out waiting for the condition

Connecting to the target and running fio by hand was successful again.

@MaisenbacherD
Now csi-driver-nvmf is up!
Can you show me your target information with nvmtcli ls and pv.yaml?

@MeinhardZhou Sure :)
Here the output of sudo python3 nvmetcli ls:
o- / ......................................................................................................................... [...]
  o- hosts ................................................................................................................... [...]
  o- ports ................................................................................................................... [...]
  | o- 1 ................................................ [trtype=tcp, traddr=<IP_ADDRESS>, trsvcid=49153, inline_data_size=16384]
  |   o- ana_groups .......................................................................................................... [...]
  |   | o- 1 ..................................................................................................... [state=optimized]
  |   o- referrals ........................................................................................................... [...]
  |   o- subsystems .......................................................................................................... [...]
  |     o- nqn.2022-08.org.test-nvmf.example ................................................................................. [...]
  o- subsystems .............................................................................................................. [...]
    o- nqn.2022-08.org.test-nvmf.example ....................................... [version=1.3, allow_any=1, serial=0123456789abcdef]
      o- allowed_hosts ....................................................................................................... [...]
      o- namespaces .......................................................................................................... [...]
        o- 1 ............................... [path=/tmp/nvmet_test.img, uuid=8599a88a-a226-4338-bcc0-812d56a5537b, grpid=1, enabled]

And here cat pv.yaml:
apiVersion: v1
kind: PersistentVolume
metadata:
  name: csi-nvmf-pv
spec:
  storageClassName: csi-nvmf-sc
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 20Gi
  csi:
    driver: csi.nvmf.com
    volumeHandle: nvmf-data-id
    volumeAttributes:
      targetTrAddr: "<IP_ADDRESS>"
      targetTrPort: "49153"
      targetTrType: "tcp"
      deviceUUID: "8599a88a-a226-4338-bcc0-812d56a5537b"
      nqn: "nqn.2022-08.org.test-nvmf.example"

@MaisenbacherD
Sorry to contact you now for some personal reasons.
I'm not quite sure what effect calling kubectl taint nodes will have.
I found that your master and nvmf target are on the same node. In my own test environment, there are three nodes, a master and a worker node, and a nvmf target node, try the following method:

Do not use the taint command.
Separate master and nvmf target.

@MaisenbacherD
It's wired.
Can you try to setup the nvmf target on a separate virtual machine instead of coexisting with the kubernetes node?

@MeinhardZhou
Same issue when I spin up a separate virtual machine that is not part of the kubernetes cluster.
If it helps I can post the instructions on how I setup my kubernetes virtual machine (vagrant libvirt) cluster through a script, for replicating my issue. :)

@MaisenbacherD
That might be useful, I will try to build it according to your script.

@MaisenbacherD
Hi, I still haven't reproduced this problem. You can use this repository to redeploy (add more granular logs). If you use kubectl describe pod nginx does not find the corresponding RPC error, it is possible that the request has not been sent to the csi-driver-nvmf at all

@MeinhardZhou
You are successful with the setup I described? 🤔
I deployed your commit with the more granular logs. This is what I am getting from kubectl describe pod nginx now:
Name:             nginx-block-test1-55f6f8ff94-rzcng
Namespace:        default
Priority:         0
Service Account:  default
Node:             worker-node01/<IP_ADDRESS>
Start Time:       Fri, 21 Oct 2022 09:39:01 +0000
Labels:           app=nginx
                  pod-template-hash=55f6f8ff94
Annotations:      <none>
Status:           Pending
IP:
IPs:              <none>
Controlled By:    ReplicaSet/nginx-block-test1-55f6f8ff94
Containers:
  nginx:
    Container ID:
    Image:          nginx
    Image ID:
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Waiting
      Reason:       ContainerCreating
    Ready:          False
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /dev/nvmf from nvmf-volume (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-7m8lf (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  nvmf-volume:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  csi-nvmf-pvc
    ReadOnly:   false
  kube-api-access-7m8lf:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason              Age                  From                     Message
  ----     ------              ----                 ----                     -------
  Normal   Scheduled           7m24s                default-scheduler        Successfully assigned default/nginx-block-test1-55f6f8ff94-rzcng to worker-node01
  Warning  FailedAttachVolume  83s (x3 over 5m24s)  attachdetach-controller  AttachVolume.Attach failed for volume "csi-nvmf-pv" : timed out waiting for external-attacher of csi.nvmf.com CSI driver to attach volume nvmf-data-id
  Warning  FailedMount         51s (x3 over 5m21s)  kubelet                  Unable to attach or mount volumes: unmounted volumes=[nvmf-volume], unattached volumes=[nvmf-volume kube-api-access-7m8lf]: timed out waiting for the condition

Or do you need some additional logs?

@MaisenbacherD
Can you show me kube-controller-manager log like kubectl logs -n kube-system kube-controller-manager-master

@MeinhardZhou
I am running kubernetes version 1.25.3
When I am trying to enable the ReadWriteOncePod accessModes I am getting the following error (because it is still an alpha feature):
The PersistentVolumeClaim "csi-nvmf-pvc" is invalid: spec.accessModes: Unsupported value: "ReadWriteOncePod": supported values: "ReadOnlyMany", "ReadWriteMany", "ReadWriteOnce"

I then tried to enable the feature gate with sudo kubeadm init --feature-gates=ReadWriteOncePod=true where I get the follwoing error:
unrecognized feature-gate key: ReadWriteOncePod

Downgrading to kubernetes version 1.20.2 caused some other issues for me, which I did not have time yet to reslove.

/remove-lifecycle stale

@MaisenbacherD

Thanks @MeinhardZhou I will come back to you when I tried that :)

Thanks @MeinhardZhou https://github.com/kubernetes-csi/csi-driver-nvmf/pull/16 fixes my issue :)


Specifies so path to @external_resource

What kind of change does this PR introduce?
Development experience improvement.
What is the current behaviour?
When using IEX when we use `recompile/0', the nif is not reloaded.
What is the new behaviour?
We explicitly specify that the module depends on an external SO file.
Does this PR introduce a breaking change?
No.

This will lead to recompiling the module when not necessary…
The proper way is to re-load the module rather than recompiling it in iex.

@NobbZ I see what you mean but as a module that host a Nif is usually very light, I don't see any big  problem. Specifying the So/DLL to an external resource will help to trigger the @on_load annotation automatically, considering that the developper should not be aware of the internal __init__ function.
From the developer's point of view, the fact that the mix compile' command compiles Erlang, Elixir and Rust code. We should expect kind of same behaviour when using the recompile` command.

Well, its not even given, that the so/dll has even changed, unless you compiled manually before that. Since you already have recompiled manually, just reloading should be enough.
Also it just feels semantically wrong.
Although I admit, you are totally correct on "they are usually small", but we never know how other modules might compile-time depend on those NIFs, which might trigger much more recompilation (but probably in a good way as well).
So at the end, yes, I think the change is worth it.

Oh yes, you're right, it seems a little semantically wrong.
So to continue debugging without leaving IEX, we should just call the MyNif.__init__() to manually reload the nif.


fix(ledger): fuzz testing

TODO

[ ] seems when a high iteration count is used, like 2_000_000 some of the operation takes too long to exit.

$ zig build fuzz -- ledger_rocksdb 10 1_000_000 > output.txt 2>&1
$ grep -c 'Put actions' output.txt
890
$ grep -c 'Delete actions' output.txt
889
$ grep -c 'Delete Files in Range actions' output.txt
925
$ grep -c 'getBytes actions' output.txt
10
$ grep -c 'get actions' output.txt
11
$ grep -c 'count actions' output.txt
997
$ grep -c 'contains actions' output.txt
11
$ grep -c 'Batch actions' output.txt
904

get, getBytes and contains are order of magnitude slower. Need to investigate


The data file is lost!

The house.obj and camera position files are then stored in a data folder, however, the link of the data is missing.

Hey,
I am confused by the statement: the link of the data is missing.
Do you mean the link to the SUNCG dataset?
Best,
Max

yes，the link https://github.com/DLRRM/SingleViewReconstruction/blob/main/SUNCG/data is not available

Hey,
are you referring to this README.md: https://github.com/DLR-RM/SingleViewReconstruction/edit/main/SUNCG/README.md
With this sentence: The house.obj and camera position files are then stored in a data folder, which is automatically generated. With the following structure:
As it says there the folder is generated by executing the script or you could you explain yourself a bit more in detail.
Best,
Max

I misunderstood the meaning before, thanks, it is ok now


[Feature] In-App Notification API for plugins

Describe the feature you'd like

see InAppNotifications / XenoLib notifications for an example of how they could look
other than toasts they have the ability to take in another icon, image, like a profile image, or another visual indicator related to whatever the notification is about
the API would probably similar to those used for Toasts and Notices
ability to change the position of the Notification via a BD setting, similar to XenoLib
ability to bind click event handlers, probably passed as onClick in the options object with a close function passed as the parameter
preferably a small x in the corner to quickly dismiss them
maybe return the notification DOM node or something else useful?
unlike PowerCord's absolutely hideous notifications I say there shouldn't be an option to buttons onto the notification

Example API inspired by the existing Toast api in TS style pseudocode:
BdApi.showNotification(text: string|Node, options?: {
    type?: "success"|"info"|"warn"|"error",
    icon?: Node,
    timeout?: number,
    onClick?: (closeFn: ()=>void) => void
})

Some plugins implement notifications themselves, such as In-App Notifications, XenoLib (even if it's not officially support), and I think BDFDB also has something similar. They are a nicer alternative to toasts in a lot of cases as they can be actively dismissed so they are better suited for longer texts than toasts. They can receive click events and are designed to also be able to display another icon.
The advantage of having it in BD itself would be a unified look and setting for the notification position, notifications from different sources not running the risk of overlapping each other, and of course not every dev wanting to display notifications like this having to implement it themself.
XenoLib notification + position setting as an example:

Might as well throw in my two cents - I think that most of these can be thrown in as improvements to the existing toasts API rather than as a new notification system. Comparing to Powercord's current Notifications API, they primarily serve as a method of user input designed to be explicitly dismissed by the user (which we have Notices and showConfirmationModal for). The other plugins that you mentioned could be pretty easily replaced to just use the current Toasts API, save for maybe custom icons which wouldn't be too difficult to add. Full-on overlay notifications that require user interaction to dismiss but don't accept user input is rather intrusive in my opinion.

 [Example task]

Since InAppNotifications is no longer being supported, I think this feature request is more relevant now.


chore: bdd-gh-1584427591 to 0.0.1

chore: Promote bdd-gh-1584427591 to version 0.0.1

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by:
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approvers:
If they are not already assigned, you can assign the PR to them by writing /assign  in a comment when ready.
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment


[Question] Masking/Encrypting  data for password entry

Hi ,
In bot we have to authenticate the user with user id and password.  Can someone please let me know how to mask the password data while entering the details.
Thanks.

@ne00346536 are you using .NET or Node SDK for BotBuilder?

@nwhitmont   I am using Node SDK bot builder.
Thanks

@ne00346536 What is your sign-in scenario exactly? Are you using WebChat? Or a specific channel? Can you explain the intended user experience you are looking for?

One way to approach this scenario: Integrate your bot with a web browser. For example, if you want to direct users to a secure website to complete a task, then direct them back to the bot.
Alternately, you could embed your bot in a website and require users to login to the site before they can access the bot.

As for executing user logins inside the bot, it's not currently a feature as Bot Framework is still in preview phase, but definitely open a Feature Request at https://botframework.uservoice.com/ if you're interested in this type of capability.


client auth cannot read org shared items

get_layer() and get_all_layers() are failing on a non-public feature service - maybe the token isn't being passed to these functions?
Repro:

When sharing level is set to Organization (or Owner) for feature layer in ArcGIS Online:

library(arcgis)

# set token
Sys.setenv("ARCGIS_TOKEN" = auth_client()[["access_token"]])

# access FeatureServer (shared to Org)
fsurl <- "https://services1.arcgis.com/hLJbHVT9ZrDIzK0I/arcgis/rest/services/Madagascar_points/FeatureServer"
ft_srv <- feature_server(fsurl)
ft_srv

# option to retrieve all layers
fs_list <- get_all_layers(ft_srv)
fs_list$layers
fs_list$tables

# define FeatureLayer
fl <- get_layer(ft_srv, 0)
fl

get_all_layers() and get_layer() both fail and raise this error:

If the sharing level is changed from Organization to Public, this same repro works cleanly:

Confirmed that client auth is not expected to be able to publish.


is rosflight.org  down?

I am unable to reach rosflight.org from home or from work.  I have tried clearing my DNS cache, but I'm unable to reach the site.
Could something in the new website be misconfigured in some way?

Are you still having this issue?
It works for me on all the computers I've tried it on. What error are you getting, just that the server won't connect?


Error with ML

I keep getting this error on a 2-3 hours ML job:
Error in invoke_method.spark_shell_connection(spark_connection(jobj),  :
  No status is returned. Spark R backend might have failed.

Spark UI is still on and the job have completed.
Any hints on how to get back the session and respective results?
Eliano

Are you running with RStudio Server? I wonder if the issue here is that the R session is suspending / resuming, and the Spark connection is lost during that suspend / resume?

I'm leveraging RStudio Server indeed. I can try to run in a shell to see if the behaviour changes.
Eliano
Sent from my iPhone

On 30 Aug 2016, at 22:58, Kevin Ushey<EMAIL_ADDRESS>wrote:
Are you running with RStudio Server? I wonder if the issue here is that the R session is suspending / resuming, and the Spark connection is lost during that suspend / resume?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or mute the thread.

Same error in shell:
Error in invoke_method.spark_shell_connection(spark_connection(jobj),  :
  No status is returned. Spark R backend might have failed.
Calls: ML_train_test_save_store ... invoke_method -> invoke_method.spark_shell_connection
Execution halted

Thanks. My best guess so far -- we've seen some similar errors when the Spark runs out of memory, so perhaps the job is very memory-hungry?

Spark continues to run normally. Sometimes it finishes the job, sometimes doesn't but when this message appears it's clearly running. This message shows around 2 hours after a job starts.

We might have to investigate if there's something in the Spark R backend that just times out on long-running jobs :/

thanks @kevinushey, that would be great. On a separate note, how do you add parameters missing in the ml models? e.g.
model = ml_logistic_regression(train_df, alpha = 0, lambda = 0.01, iter.max = 5, response = "label",features=featvars)

There is no variable for Standardization and/ or GLM the regularization parameters are also not there. I see the ml.options, is that the way to other those things?
Eliano

@ElianoMarques and @kevinushey I'm opening this previous request as a new issue: https://github.com/rstudio/sparklyr/issues/207
@ElianoMarques fyi - the ml.options is currently used as an interface to control the resulting column names (id, response, and features) after the input data frame is prepared for the ml model via ml_prepare_dataframe. This is important if you wish to save the model and use it another language (ie pyspark). See ?ml.options for more info.

Thanks for the note. I have looked inside the function further and realized the ml.options was being used in the pre-modelling process.

I receive the same error as @ElianoMarques for long time ML operations.
My whole clustering takes about 2-3 hours, in the Spark UI I see the job is running but in the RStudio Server I receive:
> system.time({
+   do_clustering %>%
+     ml_kmeans(centers = 8, compute.cost = TRUE) -> model_kmeans_8
+ }) -> klastrowanie_time8

 Error in invoke_method.spark_shell_connection(spark_connection(jobj),  :
  No status is returned. Spark R backend might have failed.

Timing stopped at: 9.696 11.724 6059.916

but what's weird that the Spark havent finished yet

@MarcinKosinski Looks like we could be hitting a timeout here: https://github.com/rstudio/sparklyr/blob/299fba7da57a6f11c99a545a4ccd67b6877d3c9f/R/spark_shell.R#L188-L193
We inherited this timeout from sparkR and was set to 6000 or about ~1.6 hours but I can't think of a good reason why this would be set to this arbitrary number. Therefore, increased the timeout significantly with this commit: https://github.com/rstudio/sparklyr/commit/a492d23f004cbd336af473d732f2626b693c83bb
Could you retry using the latest version of sparklyr in master?

great that you found the issue and i also you add this as a config. Thanks @javierluraschi

Thanks @javierluraschi . I think this issue can be closed (if maybe previously renamed).

K! Closing.

Having a similar issue, will devtools:::install_github(‘rstudio/sparklyr’) fix this issue or do I need to actually fork the repo?  Thanks!

Running devtools::install_github('rstudio/sparklyr') will install the latest version of sparklyr, and that should ensure that you get the fixes recently added by @javierluraschi here.
If you're still having problems with the latest development version of sparklyr, please let us know!

Thanks, will do!


Chapter 12: Wrong line highlighted (Updating an Invoice)

https://nextjs.org/learn/dashboard-app/mutating-data#updating-an-invoice
Instead of the 9th line

line 11 should rather be highlighted

Thank you!


Envoy as a generic CONNECT (http tunnel/explicit) proxy

Title: When using Envoy as a generic CONNECT proxy it leads upstream connection failures (UpstreamConnectionFailure/UF) under minimal load
Description:
I have a configuration whereby Envoy acts as a generic CONNECT proxy to domains (i.e. similar to how some use Squid). This will allow it to run locally and set the HTTP/HTTPS proxy settings (i.e. sometimes done by environment variables HTTP_PROXY/http_proxy, HTTPS_PROXY/http_proxy... and sometimes simply done in system settings of the underlying OS). The idea is that requests like the following will leverage the proxy for HTTP/HTTPS requests leaving the host. Here are some example curl requests to illustrate:

http_proxy=http://<IP_ADDRESS>:10080 https_proxy=http://<IP_ADDRESS>:10080 curl -I -X GET https://www.cnn.com
curl -I -X GET https://www.cnn.com --proxy http://<IP_ADDRESS>:10080
curl -I -X GET https://api.github.com --proxy http://<IP_ADDRESS>:10080

I have a config (attached) which works with curl as illustrated below:
curl -I -X GET https://api.github.com --proxy http://<IP_ADDRESS>:10080
HTTP/1.1 200 OK
date: Tue, 02 Apr 2024 13:48:56 GMT
server: envoy

HTTP/2 200
server: GitHub.com
date: Tue, 02 Apr 2024 13:48:53 GMT
content-type: application/json; charset=utf-8
cache-control: public, max-age=60, s-maxage=60
vary: Accept, Accept-Encoding, Accept, X-Requested-With
etag: W/"4f825cc84e1c733059d46e76e6df9db557ae5254f9625dfe8e1b09499c449438"
x-github-media-type: github.v3; format=json
x-github-api-version-selected: 2022-11-28
access-control-expose-headers: ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset
access-control-allow-origin: *
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: origin-when-cross-origin, strict-origin-when-cross-origin
content-security-policy: default-src 'none'
x-ratelimit-limit: 60
x-ratelimit-remaining: 52
x-ratelimit-reset:<PHONE_NUMBER>
x-ratelimit-resource: core
x-ratelimit-used: 8
accept-ranges: bytes
content-length: 2262
x-github-request-id: D0CC:3419:24ACC60:3C24383:660C0CC8

curl shows you that the CONNECT was a 200 and then it is able to send the actual request over the TCP connection (and negotiate TLS) with a status of 200. This is what the expected outcome is.
But when I increase the traffic level by pointing my web browser at the proxy or by writing a script to increase load the result is a high number of 503 status codes with the response flag of UF which is also known as UpstreamConnectionFailure. The essence of my setup involves matching requests for HTTP and then having a CONNECT matcher which sends it to a dynamic forward proxy which uses DNS resolution to establish a TCP connection with the correct upstream.
I can't see any issues with the configuration and have looked through all the references (i.e. see the relevant links) for example configurations. Probably the most relevant one is https://github.com/envoyproxy/envoy/blob/main/configs/terminate_http3_connect_udp_dns_resolution.yaml since it uses DNS resolution (although it is geared towards HTTP/3 and I'm really targeting HTTP/1.1).
I have attached the current running config dump in the hopes that someone can direct me towards what might be causing the issue. As I understand, Envoy will keep connections open the upstreams and will reuse these as part of connection pooling. In many cases one gets a DC/DownstreamConnectionTermination  response flag which is what is expected for CONNECT termination but there are far more UF (for many times the same IP:port combination). I have also included logging in the configuration so that the method, response flag...among other things are logged.
config_dump.json
Relevant Links:

https://github.com/envoyproxy/envoy/blob/main/configs/terminate_http1_connect.yaml
https://github.com/envoyproxy/envoy/blob/main/configs/terminate_http2_connect.yaml
https://github.com/envoyproxy/envoy/blob/main/configs/terminate_http3_connect_udp_dns_resolution.yaml

@marc-barry do you have envoy log? It can be get by adding parameter "-l debug" to cmd

@soulxu I ran it with debug info and it created a massive volume of logs which took some time to understand. In the end the issues seemed to point to a networking problem. We had been having some networking problems with our development setup under our Docker container environment and so I decided to test if that was the causing factor. I tested the above configuration with a few Docker setups but you can reproduce my issue using the following type of container setup:

Run the Docker container with Envoy inside and the configuration I provided using https://orbstack.dev/ on a macOS device (i.e. a MacBook). I is worth noting that my development machine is Apple silicon based (i.e. M1).
Start the container with something like docker run -p 10080:80 -p 10443:443 -p 18443:8443 -p 9901:9901 to expose the ports on the MacBook.
Follow the instructions under https://support.apple.com/en-ca/guide/mac-help/mchlp2591/14.0/mac/14.0 for changing your "Secure web proxy (HTTPS)" setup to something like http://<IP_ADDRESS>:10080.

It is at the point of changing the proxy settings when a flurry of logs and upstream connection failures happen. I was suspicious that this was a container routing problem on my local host due to some unknown network configuration reason.
In order to rule out the network issues I decided to leverage https://lima-vm.io/ which is something that I tend to use when developing code targeting specific kernels or kernel features. I started a VM which supports containers and then tested the same thing as above with the Lima setup and Envoy works exactly as expected.
Thus, I inadvertently thought this was an Envoy issue when it was actually a network stack issue that I had misidentified. I thought that the connection failures where the result of Envoys dynamic forward proxy implementation and the scale of requests I was sending to Envoy.
Is there something you would like me to do in regards to collecting more information about the problematic setup or updating some documentation to help others who may hit this in the future?

I'm closing as this is not an issue was the result of https://github.com/envoyproxy/envoy/issues/33263#issuecomment-2037116232.


Add TicTacToe game to Java Folder

@all-contributors please add @jakebolam for infrastructure, tests and code


[AIRFLOW-967] Wrap strings in native for py2 ldap compatibility

ldap3 has issues with newstr being passed. This wraps any call
that goes over the wire to the ldap server in native() to ensure
the native string type is used.
Please accept this PR that addresses the following issues:

https://issues.apache.org/jira/browse/AIRFLOW-967

Testing Done:

Tests pass again

@saguziel

lgtm

lgtm, too... not that it matters ;)


Rename 1.x branch to master

The 1.x branch name is obsolete and can be renamed to the common master branch, since 2.x is already 1.x by now, and all development is going to be linear from now on.
I would have normally done this directly without issue, but I'm not sure whether there are any further dependencies on the current 1.x branch name in (external) build scripts?

Dreditor is being decommissioned due to the lack of availability of current maintainers and the fact that Drupal.org is becoming more feature rich at a much faster rate than Dreditor itself now.
This decision was also partially made due to the amount of work (complete rewrite) it would take to create an "official" Firefox extension (#256).
If you already have the extension installed, it should continue working for a while until, inevitably,  the markup on Drupal.org changes. It will no longer be updated.
We understand that many of you love this extension, as do we. This isn't the end, in fact, it's a much brighter beginning. All the things we love about Dreditor can, and should, be moved into Drupal.org natively.
For more information, please follow: https://www.drupal.org/node/2779729

This issue was moved to dreditor/dreditor#33


2022/4/29放送分

[x] 募集サイトをconnpassに作る
[ ] URLを貼る
[ ] 放送開始

Inside the making of the Azure SDK management libraries

Microsoft/IonQ challenge at iQuHack 2022: Recap

C# 11 Preview Updates - Raw string literals, UTF-8 and more!

Java on Visual Studio Code Update -  April 2022

API Definitions as Developer Contracts

Updated preview of SharePoint Framework 1.15 - New release of the upcoming features

Larger document size, unique index improvements, $expr support in Azure Cosmos DB API for MongoDB

Introducing a New Way to Search Your Code and Visual Studio Features

App Container Apps

Opt-in to Auditing on Azure DevOps

What’s new for C++ Debugging in Visual Studio Code

Tutorial: Build gRPC & OData in ASP.NET Core

View .NET collections with the new IEnumerable Debugger Visualizer

vcpkg April 2022 Release is Now Available

Introducing the latest beta versions of the Azure SDK for Go management modules

[Pure Virtual C++ 2022 Pre-Conference Sessions Available](https://devblogs.microsoft.com/cppblog/pure-virtual-cpp-2022-pre-conference-sessions-available/ ?WT.mc_id=DT-MVP-4039781)

Customizing GitHub Codespaces for C++ Projects

Exciting additions to your Auto HDR experience on PC

.NET Framework April 2022 Cumulative Update Preview

What color is deception? A 5-step experiment.

Azure Cosmos DB Cassandra API: A true differentiator with Autoscale

Pure Virtual C++ 2022 is Today

OpenMP Task Support for C++ in Visual Studio

Visual Studio 2022 for Mac Release Candidate

.NET MAUI Release Candidate 2 - With 100% More Tizen

Hybrid Model for GitHub and zure DevOps - Enjoy the best of both worlds

Announcing General Availability of Change Data Capture(CDC) on Azure SQL Database

Agility SDK 1.602.0

CoreWCF 1.0 has been Released, WCF for .NET Core and .NET 5+

Develop with Windows Subsystem for Android

OfficeMath


Some questions after a crash..

http://logs.uaventure.com/view/gTQjyURYX6LvADB7KcYYYV
Firmware: 1.5.5 Stable
Crash review

Arming the quadrotor. (in POSCTL mode)
Push the throttle forward for a little, then four rotors began to spin, everything is fine.
Disarming the quadrotor.
Next arming again without a power off. (also in POSCTL mode)
Then when I push the throttle, the 1st rotor did not spin, my quadrotor crashed and then rollover.
I tried to disarm it but nothing happened.

Questions
1.  PX4 does not respond to my disarming operation if the pitch angle is not zero with POSCTL mode, why? (Is there a bug in px4 firmware?)
In Pitch Angle diagram, my quadrotor crashed and then rollover.
In Raw Radio Control Inputs diagram, I tried to disarm it but nothing happened.. Then I had to cut off the power.
2. Is px4flow in use with ekf2 estimator?
I installed a px4flow to my quadrotor, but there's nothing in Distance Sensor diagram, does this sonar work in ekf2 estimator or is there any param like SONAR_EN?
3. Why could not Land in POSCTL Mode?
It is read that "Do not Land in POSCTL Mode, use Manual Mode to Land." in User Guide, I am really puzzled about this, why?
4. Is there a param used for disarming quickly?
5. Something really strange in version 1.5.5, after some disarming and arming
Something really strange in version 1.5.5, after some disarming and arming, the control logic and pwm outputs became very strange, but after a reboot (after first arming), everything become good? Is that because of my wrong operation?

Here is what happened: Your ESCs are incorrectly calibrated, which means that the first motor (http://logs.uaventure.com/view/gTQjyURYX6LvADB7KcYYYV#Actuators_PLOT) was not actually spinning when it should have.
That led to the system tipping over. You are not allowed to disarm in position control mode because lowering the altitude and yawing is a common user behaviour - however, if you do that, you would disarm the system mid-flight.
To recap: To not have this happen again, calibrate your ESCs or set the PWM_MIN parameter for the main outputs to a higher value.

@LorenzMeier Thank you for your reply, and I'm really sorry about this issue, there isn't the appropriate place for configuration fault.

@LorenzMeier And, how could you find my fault? Does any diagram show this?


Code Review

Overview
Reviewed the code, and discussions to make it even better.
Detail
discuss in thread
close condition
N/A
Other
N/A
Caution
N/A

[MUST] earth_720101_230601.bpc and pck00011.tpc are also required files. So please add them to README.md.

[IMO] The error message is indicating that the np.int method has been deprecated in NumPy, as of version 1.20. Instead, you can use the native Python int() function or specify the precision you want, e.g., np.int64 or np.int32.

[Q] When I use batch_estimator.estimate_batch_orbit_sgp4_bstar(), the bstar in estimated TLE is negative value. It is difficult to estimate bstar with short period GPS data, so do you recommend to use batch_estimator.estimate_batch_orbit_sgp4() if GPS data is limited?
Anyway, I'll try to use batch_estimator.estimate_batch_orbit_sgp4_bstar() if we get longer data.

[Q] When I use batch_estimator.estimate_batch_orbit_sgp4_bstar(), the bstar in estimated TLE is negative value. It is difficult to estimate bstar with short period GPS data, so do you recommend to use batch_estimator.estimate_batch_orbit_sgp4() if GPS data is limited?
Anyway, I'll try to use batch_estimator.estimate_batch_orbit_sgp4_bstar() if we get longer data.

Yes, I think that is the best approach. I have just made a new push using estimate_batch_orbit_sgp4() instead of estimate_batch_orbit_sgp4_bstar() if the drag term goes negative.

Thanks for the updates. It is convenient to automatically switch functions.


try support rails 5

Thank you for the submission. Although the build failed, I'm reviewing the code.


Bandarussr/interactive component for operation times

Description
Created a hours of operation picker that allows the user to add multiple time ranges for each day. The component does validation for if no times were provided, duplicate times were provided, or if invalid time ranges were provided (opening is later than closing).
Replaced the previous hours of operation section on the preliminaries form and added it to the services form.
How data is stored:
type Hours = {
    id: number,
    day: number,
    start: number,
    end: number
}[];

Day is a number from 0-6, representing days from Monday to Sunday (Sunday is not first since hours of operation is usually done with Monday first).
Start and End are a number from 0-48 (or 47.. can't remember), just multiply the value by 30 to get the number of minutes since 12:00 AM (i.e., 10 --> 300 --> 5:00 AM).
Id is just for the component to manage entries internally.

Relevant issue(s)

#79

Questions and Notes

The component currently does not handle overlapping times. It's not a hard thing to implement, rather it might be annoying for the user if they accidentlly make an overlapping entry and we overwrite a previous entry. I think it would be better if we do this in the backend when they submit the form.
useController isn't very Typescript friendly.. there are 3 errors that I've used @ts-expect-error on, I have not been able to find a solution for it, but it doesn't affect the functionality of the component.

Type of change

[x] New feature (non-breaking change which adds functionality)

Checklist:

[x] My code follows the style guidelines of this project
[x] I have performed a self-review of my code
[x] I have commented my code, particularly in hard-to-understand areas
[x] I have added tests that prove my fix is effective or that my feature works
[x] I have assigned reviewers to this PR

I think the deployment started failing after I merged main in, but that commit doesnt have any changes related to the component, so I probably messed something up when merging..

fixed issue that was causing deployment failures, but it's still having some issues with the page content moving when a clicking on the Select component


Enable key combination support

Hi,
Feature request:
I'd like to trigger an event when a key combination is pressed. It would be great to have some way to do this as part of the API, or at least a way to access the key state from within a loop:
k.action( ()=> {
        if( k.keyIsDown("shift") && k.keyIsDown("right") ) {
            …
        }
    })

Or maybe there's a way?

They actually exist, but looks like missed in doc, will add soon.


refactor(notification): move notification logic into its own class

#95
#94  👈
develop

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @libhide and the rest of your teammates on  Graphite

Merge activity

Jun 10, 12:08 PM EDT: @libhide started a stack merge that includes this pull request via Graphite.


feat: worker lib watch

Description
fix: #8172
lib mode make the worker transform https://rollupjs.org/guide/en/#shouldtransformcachedmodule

Additional context

What is the purpose of this pull request?

[ ] Bug fix
[x] New Feature
[ ] Documentation update
[ ] Other

Before submitting the PR, please make sure you do the following

[ ] Read the Contributing Guidelines.
[ ] Read the Pull Request Guidelines and follow the Commit Convention.
[ ] Check that there isn't already a PR that solves the problem the same way to avoid creating a duplicate.
[ ] Provide a description in this PR that addresses what the PR is solving, or reference the issue that it solves (e.g. fixes #123).
[ ] Ideally, include relevant tests that fail without this PR but pass with it.

Closing as #11919 is merged.


Define format for notes

The notes are written as Markdown, but we should also include metadata on each of them (title, ...)
For this, we should use an approach similar to Jekyll's front-matter (YAML block).
Here is an example:
---
title: Hello World
author: julien
preview: This is a preview that will be visible even to non-members!
---

This content is locked and will only be visible to members

Note the preview key can include large blobs of markdown as well.

I have deployed an example of note at QmRtR5UvG8J3Yc83PgBGT1vQbWWCBphPohiZT9KiXzGNXm


Support benchmark results with decimal dot

benchmarkjs may have results with decimal dot
For example:
createObjectBuffer with 200 comments x 81.61 ops/sec ±1.70% (69 runs sampled)

Tests are passing. not sure why the other checks fails.
problem with prev commits?

@Bnaya Thanks!

problem with prev commits?

This action is basically for your own branch because it modifies gh-pages branch. (Otherwise, if on: pull_request is allowed, PR branch can modify your repository's branch directly). So I check this action on: push event only. It works fine with the event, but I did not check on: pull_request event. Let me check it when I have time to look into.

This action is basically for your own branch because it modifies gh-pages branch. (Otherwise, if on: pull_request is allowed, PR branch can modify your repository's branch directly). So I check this action on: push event only. It works fine with the event, but I did not check on: pull_request event. Let me check it when I have time to look into.

I fixed this on master branch so CI would not fail on next pull request.

Thanks!


multiple search

hi, is possible to do a search with multiple key with 'and' & 'or' operators?

As per the docs that's not a current feature.

Yeah, if I'm understanding your question correctly.
You can achieve that by doing:
-s "search1 AND search2"

did   -s   "search1 OR search2" work？I find it seem does not work，anyone who knows why?

@jamestch it works in my cases, may you be more specific?


Slow sensor update

Creality Sonic Pad / Ender 5 S1
No problem with integration, all sensor give me the save value that I can see in webinterface.
The sensor update time is little bit lazy, when I move the extruder via web, web page update the value and home assistant take 30 second do to it.
There is something that I can do to get better performance?

We are looking to move this integration to push instead of pull, that will fix the delay. In the mean time we won't change anything. That being said you could manually change https://github.com/marcolivierarsenault/moonraker-home-assistant/blob/main/custom_components/moonraker/init.py#L29 on your setup to get it quicker


Disable and uncheck blank when private keys are disabled

Unify the GUI's create wallet with the RPC createwallet so that the blank flag is not set when private keys are disabled.

The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

Reviews
See the guideline for information on the review process.
A summary of reviews will appear here.

Concept ACK.

cc @furszy @ryanofsky @S3RK

Unify the GUI's create wallet with the RPC createwallet so that the blank flag is not set when private keys are disabled.

Do I understand correctly that we want to make these two flags mutually exclusive?
Let me make sure I correctly understand the rational. I guess the state when both are true is not meaningful because disable_privkeys is more restrictive than blank.  There will be no keys generated and no keys could be imported, so there is no keys for the wallet software to manage and hence blank (aka manual) is not needed.
Assuming the above is correct, do we want also to make them exclusive in RPC? If I'm not mistaken one can set both today.
Also, IIUC existing wallets that set both are not a problem, because it's just redundant information and will not lead to unexpected behaviour. Am I correct in my understanding?

Concept ACK. This change seems like an improvement, and I think it is good to make it clear that when private keys are disabled, the "blank" option is not useful and effectively meaningless.
I think these options are still confusing, though, and instead of having checkboxes it would be better if you could choose what actual behavior you want:

Generate private keys
Do not generate private keys  (blank wallet)
Do not generate private keys and disallow them (watch-only wallet)

I notice there was a similar proposal in https://github.com/bitcoin-core/gui/issues/69#issuecomment-681179436:

re: https://github.com/bitcoin-core/gui/pull/739#issuecomment-1600347050

Do I understand correctly that we want to make these two flags mutually exclusive? [...]

Yes if the disable private keys option is checked the blank option is basically useless, so it's confusing to leave it as option that can be toggled on an off but effectively doesn't do anything.

Assuming the above is correct, do we want also to make them exclusive in RPC? If I'm not mistaken one can set both today.

RPC is a lower level interface than the GUI and exposes both flags directly, so maybe it could warn when blank flag is set uselessly, but as an API I don't think it should make an error out of a configuration that makes sense but is a little redundant, or that it should break code that worked previously.
Also settings the flags independently through RPC can have some effect and may not be completely useless. For example, the blank flag was introduced in a later software release than the disable private keys flag, so setting the blank flag prevents the wallet from opening the wallet in older software. Also, IIUC, it is possible in RPC interface to disable the disable private keys option later, so maybe setting the blank flag could be useful if you anticipate doing that.

Also, IIUC existing wallets that set both are not a problem, because it's just redundant information and will not lead to unexpected behaviour. Am I correct in my understanding?

I'm nor a GUI code expert neither a UX (user experience) expert, so take all of this with a healthy skepticism.
The code changes look good to me, but I'm unsure about whether this is a better UX.
Code review ACK 9ea31eba04ff8dcb9d7d993ce28bb10731a35177
I'm unsure if it's a clear win for UX because there's no hint to the user why the checkboxes change their state. I also like the idea with radio buttons and I'd be happy to review a new PR or re-review this one though.
Maybe change the description of the PR, it seems like we actually want to keep the behaviour of RPC and GUI somewhat different, so the unification part is confusing.

@S3RK do you think the UI changes here are actually worse, or just not an improvement? I agree the changes aren't ideal and aren't a clear win, but I think they don't make it worse necessarily. This PR disables the "make blank wallet" checkbox when "disable private keys" checkbox is enabled, instead of just automatically checking it. I think disabling the checkbox makes sense because it makes it clear than once private keys are disabled, the choice of whether to have a blank wallet is moot because the wallet will necessarily be empty.
On the other hand, maybe the current UI makes it clearer that disabling private keys implies having a blank wallet, because it automatically checks blank wallet when you check disable private keys, and automatically unchecks disable private keys when you uncheck blank wallet. I guess both UI's seem reasonable to me, even if neither is ideal.
I do agree that PR description could be clearer, and could describe what the UI change is, along with mentioning that the leaving the blank flag unset when the disable private keys flag is set makes GUI behavior match default RPC behavior.

@ryanofsky no no, I don't think this change is making it worse.
From my perspective, it's a in improvement for core developers, because it provides clarity on the wallet flags usage.
UX wise it's ~0 as the flags are implementation details. Both pre- and post-PR whether blank checkbox is disabled or automatically checked is equally not explained to the users.


CommandLine should not allow having duplicated options

Program:
import Foundation

let cli = CommandLine()

let file1 = StringOption(longFlag: "file", required: true, helpMessage: "Path to the output file.")
let file2 = StringOption(longFlag: "file", required: true, helpMessage: "Path to the output file.")

cli.addOptions(file1, file2)

do {
  try cli.parse()
} catch {
  cli.printUsage(error)
  exit(EX_USAGE)
}

Result of running:
Missing required options: ["--file", "--file"]

Usage: /Users/d12frosted/Library/Developer/Xcode/DerivedData/Knittens-fsuflsjrrwdnzwaueherzytkigua/Build/Products/Debug/KnittensBot [options]
  --file:
      Path to the output file.
  --file:
      Path to the output file.
Program ended with exit code: 64

I expect from CommandLine to show an error in such case.

Thanks for the report! This should be an easy mistake to prevent :+1:

:+1: thanks for the fast PR


API Reference

README file last updated 13 months ago says API "Coming soon".  13 months is not soon.  Is this project dead?  The idea of a super-lightweight Zod is awesome, but not if I am going to be get completely stuck at some point because something won't work and there isn't a person in the world who can assist.

Unfortunately I'm no longer using OK Computer regularly, largely because Zod gained so much popularity making it a hard sell.
Although I like a lot of OK Computer's design, the main oversight from me was the lack of parsing support which Zod does well.
// zod
const data: any = { name: 'Zod         ', foo: 'true' };
const parsedData = dataSchema.parse(data);
// { name: 'Zod', foo: true }: { name: string, foo: boolean }

The downside of Zod is, if you don't need to parse, you still have to assign and duplicate the object whereas in OK Computer you can just assert an already-in-scope variable.
// ok-computer
const data: any = { name: 'zod', foo: true }
assert(data, dataValidator);
// data: { name: string, foo: boolean }

Generally though I find parsing to be necessary.
This, combined with minimal popularity, means I haven't invested the time to fully document the API.
The README does give an overview of how OK Computer works and should be used. Additionally it's got quite high test coverage so the unit tests aren't a bad place to learn the API https://github.com/richardscarrott/ok-computer/blob/master/src/ok-computer.test.ts but I appreciate this isn't ideal.
If bugs with the existing API are reported, it's likely I'll fix them. However I doubt I'll be iterating much on the design unless I find a compelling reason to do so.


Deletion of lab directory

It appears that lab content has been replaced by pinocchio-tutorials.
I suggest to delete it from the main repository of Pinocchio. @nim65s , @nmansard  What do you think?

Well, for the records, pinocchio-tutorials has been moved to https://github.com/stack-of-tasks/pinocchio/tree/devel/doc/d-labs because I had not seen this lab folder… Thanks for removing it :)


Request to add repository to Community Examples list for Embedded Swift

Hello,
I've been writing a few simple examples of using Embedded Swift on nRF52840dk using the nRF Connect SDK.
They are available at nelcea/EmbeddedSwift-nRF52-Examples: Examples of using Embedded Swift to program nRF52xxx microcontrollers.
There are also blog posts accompanying them at https://www.ericbariaux.com
And I intend to keep adding posts / code examples as time allows and I broaden my use of Embedded Swift.
Name:  EmbeddedSwift nRF52 Examples
Platform: Nordic Semiconductor nRF52840dk
Description: Collection of examples using Embedded Swift on top of nRF Connect SDK (Zephyr)
Thank you for considering this addition,
Best regards,
Eric

We'd be happy to include this link, please open a PR with a link

Thank you, see Add 2 community examples running on nRF52840 microcontroller