kubectl logs and exec fail

On a clean VM running ubuntu 18.04, after installing microk8s 1.17 (incidentally, 1.18 showed the same behavior), I'm unable to kubectl logs <pod name> or kubectl exec <pod name>.  Other commands, like kubectl get all work just fine.  The issue arises with an application I am developing, but can be reproduced just by trying to get the logs from the registry container, which is what's shown here.
inspection-report-20200630_054324.tar.gz
Initial setup:
sudo snap install docker
sudo snap install microk8s --classic --channel=1.17/stable
sudo groupadd docker
sudo usermod -a -G microk8s,docker $USER
su - $USER
sudo iptables -P FORWARD ACCEPT
microk8s.enable storage dns registry

get all works:
microk8s.kubectl get all -A
NAMESPACE            NAME                                        READY   STATUS    RESTARTS   AGE
container-registry   pod/registry-d7d7c8bc9-8k6j8                1/1     Running   0          22s
kube-system          pod/coredns-9b8997588-sh2gg                 1/1     Running   0          40s
kube-system          pod/hostpath-provisioner-7b9cb5cdb4-lj2z7   1/1     Running   0          40s

NAMESPACE            NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
container-registry   service/registry     NodePort    <IP_ADDRESS>   <none>        5000:32000/TCP           22s
default              service/kubernetes   ClusterIP   <IP_ADDRESS>     <none>        443/TCP                  67s
kube-system          service/kube-dns     ClusterIP   <IP_ADDRESS>    <none>        53/UDP,53/TCP,9153/TCP   40s

NAMESPACE            NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
container-registry   deployment.apps/registry               1/1     1            1           23s
kube-system          deployment.apps/coredns                1/1     1            1           40s
kube-system          deployment.apps/hostpath-provisioner   1/1     1            1           41s

NAMESPACE            NAME                                              DESIRED   CURRENT   READY   AGE
container-registry   replicaset.apps/registry-d7d7c8bc9                1         1         1       23s
kube-system          replicaset.apps/coredns-9b8997588                 1         1         1       40s
kube-system          replicaset.apps/hostpath-provisioner-7b9cb5cdb4   1         1         1       41s

But logs fails:
$ microk8s kubectl logs -n container-registry registry-d7d7c8bc9-8k6j8
error: You must be logged in to the server (the server has asked for the client to provide credentials ( pods/log registry-d7d7c8bc9-8k6j8))

Verbose version of the logs command:
$ microk8s kubectl logs -n container-registry registry-d7d7c8bc9-8k6j8 -v=9
I0630 05:43:04.864564   10322 loader.go:375] Config loaded from file:  /var/snap/microk8s/1489/credentials/client.config
I0630 05:43:04.870006   10322 round_trippers.go:423] curl -k -v -XGET  -H "Authorization: Basic YWRtaW46YUhkUWFtWk9aMDlQZFUxek0yOUZRbkFyTTFoTVQxcG5kWFJNVDNBd1ZqTjVUSEZ3YlVSMlVtWjBORDBL" -H "Accept: application/json, */*" -H "User-Agent: kubectl/v1.17.7 (linux/amd64) kubernetes/b445510" 'https://<IP_ADDRESS>:16443/api/v1/namespaces/container-registry/pods/registry-d7d7c8bc9-8k6j8'
I0630 05:43:04.876268   10322 round_trippers.go:443] GET https://<IP_ADDRESS>:16443/api/v1/namespaces/container-registry/pods/registry-d7d7c8bc9-8k6j8 200 OK in 6 milliseconds
I0630 05:43:04.876312   10322 round_trippers.go:449] Response Headers:
I0630 05:43:04.876322   10322 round_trippers.go:452]     Cache-Control: no-cache, private
I0630 05:43:04.876327   10322 round_trippers.go:452]     Content-Type: application/json
I0630 05:43:04.876351   10322 round_trippers.go:452]     Content-Length: 2925
I0630 05:43:04.876869   10322 round_trippers.go:452]     Date: Tue, 30 Jun 2020 05:43:04 GMT
I0630 05:43:04.876920   10322 request.go:1017] Response Body: {"kind":"Pod","apiVersion":"v1","metadata":{"name":"registry-d7d7c8bc9-8k6j8","generateName":"registry-d7d7c8bc9-","namespace":"container-registry","selfLink":"/api/v1/namespaces/container-registry/pods/registry-d7d7c8bc9-8k6j8","uid":"384c62b9-1971-4813-8413-aac9d50d08fd","resourceVersion":"396","creationTimestamp":"2020-06-30T05:40:00Z","labels":{"app":"registry","pod-template-hash":"d7d7c8bc9"},"ownerReferences":[{"apiVersion":"apps/v1","kind":"ReplicaSet","name":"registry-d7d7c8bc9","uid":"0cd2786e-e89b-49ea-957f-43bbfc74c700","controller":true,"blockOwnerDeletion":true}]},"spec":{"volumes":[{"name":"registry-data","persistentVolumeClaim":{"claimName":"registry-claim"}},{"name":"default-token-rc5ld","secret":{"secretName":"default-token-rc5ld","defaultMode":420}}],"containers":[{"name":"registry","image":"cdkbot/registry-amd64:2.6","ports":[{"name":"registry","containerPort":5000,"protocol":"TCP"}],"env":[{"name":"REGISTRY_HTTP_ADDR","value":":5000"},{"name":"REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY","value":"/var/lib/registry"},{"name":"REGISTRY_STORAGE_DELETE_ENABLED","value":"yes"}],"resources":{},"volumeMounts":[{"name":"registry-data","mountPath":"/var/lib/registry"},{"name":"default-token-rc5ld","readOnly":true,"mountPath":"/var/run/secrets/kubernetes.io/serviceaccount"}],"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","imagePullPolicy":"IfNotPresent"}],"restartPolicy":"Always","terminationGracePeriodSeconds":30,"dnsPolicy":"ClusterFirst","serviceAccountName":"default","serviceAccount":"default","nodeName":"ecr-baseline","securityContext":{},"schedulerName":"default-scheduler","tolerations":[{"key":"node.kubernetes.io/not-ready","operator":"Exists","effect":"NoExecute","tolerationSeconds":300},{"key":"node.kubernetes.io/unreachable","operator":"Exists","effect":"NoExecute","tolerationSeconds":300}],"priority":0,"enableServiceLinks":true},"status":{"phase":"Running","conditions":[{"type":"Initialized","status":"True","lastProbeTime":null,"lastTransitionTime":"2020-06-30T05:40:01Z"},{"type":"Ready","status":"True","lastProbeTime":null,"lastTransitionTime":"2020-06-30T05:40:13Z"},{"type":"ContainersReady","status":"True","lastProbeTime":null,"lastTransitionTime":"2020-06-30T05:40:13Z"},{"type":"PodScheduled","status":"True","lastProbeTime":null,"lastTransitionTime":"2020-06-30T05:40:01Z"}],"hostIP":"<IP_ADDRESS>","podIP":"<IP_ADDRESS>","podIPs":[{"ip":"<IP_ADDRESS>"}],"startTime":"2020-06-30T05:40:01Z","containerStatuses":[{"name":"registry","state":{"running":{"startedAt":"2020-06-30T05:40:12Z"}},"lastState":{},"ready":true,"restartCount":0,"image":"docker.io/cdkbot/registry-amd64:2.6","imageID":"docker.io/cdkbot/registry-amd64@sha256:9dc5ad9e0b3ed59afa4febe8d663fd545628c60886a2c9fcd0e186e5cf6343ef","containerID":"containerd://7e14ff48ff18f6470975ee0b31f599f3a5b86c922bd544db6a0015e558220d0d","started":true}],"qosClass":"BestEffort"}}
I0630 05:43:04.883059   10322 round_trippers.go:423] curl -k -v -XGET  -H "Accept: application/json, */*" -H "User-Agent: kubectl/v1.17.7 (linux/amd64) kubernetes/b445510" -H "Authorization: Basic YWRtaW46YUhkUWFtWk9aMDlQZFUxek0yOUZRbkFyTTFoTVQxcG5kWFJNVDNBd1ZqTjVUSEZ3YlVSMlVtWjBORDBL" 'https://<IP_ADDRESS>:16443/api/v1/namespaces/container-registry/pods/registry-d7d7c8bc9-8k6j8/log'
I0630 05:43:04.887857   10322 round_trippers.go:443] GET https://<IP_ADDRESS>:16443/api/v1/namespaces/container-registry/pods/registry-d7d7c8bc9-8k6j8/log 401 Unauthorized in 4 milliseconds
I0630 05:43:04.887895   10322 round_trippers.go:449] Response Headers:
I0630 05:43:04.887901   10322 round_trippers.go:452]     Date: Tue, 30 Jun 2020 05:43:04 GMT
I0630 05:43:04.887905   10322 round_trippers.go:452]     Cache-Control: no-cache, private
I0630 05:43:04.887910   10322 round_trippers.go:452]     Content-Type: application/json
I0630 05:43:04.887913   10322 round_trippers.go:452]     Content-Length: 276
I0630 05:43:04.887952   10322 request.go:1017] Response Body: {"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"the server has asked for the client to provide credentials ( pods/log registry-d7d7c8bc9-8k6j8)","reason":"Unauthorized","details":{"name":"registry-d7d7c8bc9-8k6j8","kind":"pods/log"},"code":401}
I0630 05:43:04.888316   10322 helpers.go:203] server response object: [{
  "metadata": {},
  "status": "Failure",
  "message": "the server has asked for the client to provide credentials ( pods/log registry-d7d7c8bc9-8k6j8)",
  "reason": "Unauthorized",
  "details": {
    "name": "registry-d7d7c8bc9-8k6j8",
    "kind": "pods/log"
  },
  "code": 401
}]
F0630 05:43:04.888383   10322 helpers.go:114] error: You must be logged in to the server (the server has asked for the client to provide credentials ( pods/log registry-d7d7c8bc9-8k6j8))

Other things I have tried:

installing kubectl with snap, then writing out the microk8s config with microk8s.kubectl config view --raw > $HOME/.kube/config and using the vanilla kubectl

The result is the same as above, except in the verbose output, it lists the .kube/config file.  Which is (as you might expect), identical to the one in /var/snap/microk8s/1489/credentials/client.config

rebooting the system, making sure package updates are current, uninstalling and reinstalling the microk8s snap, restarting the microk8s snap, doing microk8s.reset

Always the same outcome

inspecting the logs for errors that might be relevant - nothing obvious jumps out at me

Once or twice, I thought the log commands intermittently succeeded, but there was no rhyme or reason as to why they might have succeeded those particular times, and repeating the same log command would give a failure the next time.  Lately, I have not seen that happen.

The other weird thing is that this is only a problem on new copies of the VM.  I have another VM (same configuration, probably 6-8 months old) that is my normal dev environment, and everything works fine there.  I did a v=9 log request on the container registry there with the same commands and it returned the log.  Visually, everything looks the same up to the point where one returns 401 Unauthorized and the other 200 and the log data.
A little more inspection shows that the working (old) VM is on 1.17.6, while the broken one (new) VM is on 1.17.7.  I was unable to go back to 17.6 in the snap install to test the older version on the new VM.

Taking a wild guess here. What about enabling rbac?

Thanks for checking in.  It has the same error:
$ microk8s.enable rbac
Enabling RBAC
Reconfiguring apiserver
RBAC is enabled
$ microk8s.kubectl logs -n container-registry registry-7cf58dcdcc-kq6rd
error: You must be logged in to the server (the server has asked for the client to provide credentials ( pods/log registry-7cf58dcdcc-kq6rd))

Can you try adding this --authentication-token-webhook=true to the file /var/snap/microk8s/current/args/kubelet?
After that you can stop start microk8s. microk8s stop then microk8s start.

It has the same error.  Here is the contents of the kublet command:
$ sudo cat /var/snap/microk8s/current/args/kubelet
--kubeconfig=${SNAP_DATA}/credentials/kubelet.config
--cert-dir=${SNAP_DATA}/certs
--client-ca-file=${SNAP_DATA}/certs/ca.crt
--anonymous-auth=false
--network-plugin=cni
--root-dir=${SNAP_COMMON}/var/lib/kubelet
--fail-swap-on=false
--cni-conf-dir=${SNAP_DATA}/args/cni-network/
--cni-bin-dir=${SNAP}/opt/cni/bin/
--feature-gates=DevicePlugins=true
--eviction-hard="memory.available<100Mi,nodefs.available<1Gi,imagefs.available<1Gi"
--container-runtime=remote
--container-runtime-endpoint=${SNAP_COMMON}/run/containerd.sock
--containerd=${SNAP_COMMON}/run/containerd.sock
--node-labels="microk8s.io/cluster=true"
--authentication-token-webhook=true
--cluster-domain=cluster.local
--cluster-dns=<IP_ADDRESS>

FWIW, I repeated these steps in a VM created from a freshly downloaded ISO of ubuntu 18.04 and the log query worked:
sudo snap install docker
sudo snap install microk8s --classic --channel=1.17/stable
sudo groupadd docker
sudo usermod -a -G microk8s,docker $USER
(reboot)
microk8s.kubectl get all -A
microk8s.kubectl logs -n container-registry registry-d7d7c8bc9-q9hpz

The (non-working) VM is based on ubuntu server 18.04 with Xubuntu installed after because it results in a leaner VM environment.  Although, as I said, the log command works in my Dev VM, which is the same base VM image, just been in use for a while, and is only running 1.17.6.
I have attached a microk8s.inspect report from the new VM:
inspection-report-20200630_113409.tar.gz
Is there any particular state or other comparison that I can make to help you track down the issue?

@thejray thanks for providing more info.
Using the non working xubuntu, did you try to dosudo snap remove microk8s --purge?

Purge and reinstall 1.17 has the same outcome.
inspect tarball from the log below
inspection-report-20200630_234356.tar.gz
$ sudo snap remove microk8s --purge
Stop snap "microk8s" services                                                                                Stop snap "microk8s" services                                                                                microk8s removed

$ snap list
Name    Version    Rev   Tracking       Publisher   Notes
core    16-2.45.1  9436  latest/stable  canonical✓  core
docker  19.03.11   471   latest/stable  canonical✓  -

$ sudo snap install microk8s --classic --channel=1.17/stable
microk8s (1.17/stable) v1.17.7 from Canonical✓ installed

$ microk8s.enable registry storage dns
Enabling the private registry
Enabling default storage class
deployment.apps/hostpath-provisioner created
storageclass.storage.k8s.io/microk8s-hostpath created
serviceaccount/microk8s-hostpath created
clusterrole.rbac.authorization.k8s.io/microk8s-hostpath created
clusterrolebinding.rbac.authorization.k8s.io/microk8s-hostpath created
Storage will be available soon
Applying registry manifest
namespace/container-registry created
persistentvolumeclaim/registry-claim created
deployment.apps/registry created
service/registry created
The registry is enabled
Enabling default storage class
deployment.apps/hostpath-provisioner unchanged
storageclass.storage.k8s.io/microk8s-hostpath unchanged
serviceaccount/microk8s-hostpath unchanged
clusterrole.rbac.authorization.k8s.io/microk8s-hostpath unchanged
clusterrolebinding.rbac.authorization.k8s.io/microk8s-hostpath unchanged
Storage will be available soon
Enabling DNS
Applying manifest
serviceaccount/coredns created
configmap/coredns created
deployment.apps/coredns created
service/kube-dns created
clusterrole.rbac.authorization.k8s.io/coredns created
clusterrolebinding.rbac.authorization.k8s.io/coredns created
Restarting kubelet
DNS is enabled

$ sudo iptables -P FORWARD ACCEPT

$ microk8s.inspect
Inspecting services
  Service snap.microk8s.daemon-cluster-agent is running
  Service snap.microk8s.daemon-flanneld is running
  Service snap.microk8s.daemon-containerd is running
  Service snap.microk8s.daemon-apiserver is running
  Service snap.microk8s.daemon-apiserver-kicker is running
  Service snap.microk8s.daemon-proxy is running
  Service snap.microk8s.daemon-kubelet is running
  Service snap.microk8s.daemon-scheduler is running
  Service snap.microk8s.daemon-controller-manager is running
  Service snap.microk8s.daemon-etcd is running
  Copy service arguments to the final report tarball
Inspecting AppArmor configuration
Gathering system information
  Copy processes list to the final report tarball
  Copy snap list to the final report tarball
  Copy VM name (or none) to the final report tarball
  Copy disk usage information to the final report tarball
  Copy memory usage information to the final report tarball
  Copy server uptime to the final report tarball
  Copy current linux distribution to the final report tarball
  Copy openSSL information to the final report tarball
  Copy network configuration to the final report tarball
Inspecting kubernetes cluster
  Inspect kubernetes cluster

Building the report tarball
  Report tarball is at /var/snap/microk8s/1489/inspection-report-20200630_234356.tar.gz

$ microk8s.kubectl get all -A
NAMESPACE            NAME                                        READY   STATUS    RESTARTS   AGE
container-registry   pod/registry-d7d7c8bc9-xvmwj                1/1     Running   0          43s
kube-system          pod/coredns-9b8997588-zl5hr                 1/1     Running   1          41s
kube-system          pod/hostpath-provisioner-7b9cb5cdb4-cslgj   1/1     Running   0          42s

NAMESPACE            NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
container-registry   service/registry     NodePort    <IP_ADDRESS>   <none>        5000:32000/TCP           43s
default              service/kubernetes   ClusterIP   <IP_ADDRESS>    <none>        443/TCP                  71s
kube-system          service/kube-dns     ClusterIP   <IP_ADDRESS>   <none>        53/UDP,53/TCP,9153/TCP   41s

NAMESPACE            NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
container-registry   deployment.apps/registry               1/1     1            1           43s
kube-system          deployment.apps/coredns                1/1     1            1           41s
kube-system          deployment.apps/hostpath-provisioner   1/1     1            1           43s

NAMESPACE            NAME                                              DESIRED   CURRENT   READY   AGE
container-registry   replicaset.apps/registry-d7d7c8bc9                1         1         1       43s
kube-system          replicaset.apps/coredns-9b8997588                 1         1         1       41s
kube-system          replicaset.apps/hostpath-provisioner-7b9cb5cdb4   1         1         1       43s

$ microk8s.kubectl logs -n container-registry registry-d7d7c8bc9-xvmwj
error: You must be logged in to the server (the server has asked for the client to provide credentials ( pods/log registry-d7d7c8bc9-xvmwj))

Try the same as above 1.17/edge (installs 1.17.8), still no joy:
inspection-report-20200630_235402.tar.gz

$ sudo snap remove microk8s --purge
microk8s removed

$ sudo snap install microk8s --classic --channel=1.17/edge
microk8s (1.17/edge) v1.17.8 from Canonical✓ installed

$ microk8s.enable registry storage dns
Enabling the private registry
Enabling default storage class
deployment.apps/hostpath-provisioner created
storageclass.storage.k8s.io/microk8s-hostpath created
serviceaccount/microk8s-hostpath created
clusterrole.rbac.authorization.k8s.io/microk8s-hostpath created
clusterrolebinding.rbac.authorization.k8s.io/microk8s-hostpath created
Storage will be available soon
Applying registry manifest
namespace/container-registry created
persistentvolumeclaim/registry-claim created
deployment.apps/registry created
service/registry created
The registry is enabled
Enabling default storage class
deployment.apps/hostpath-provisioner unchanged
storageclass.storage.k8s.io/microk8s-hostpath unchanged
serviceaccount/microk8s-hostpath unchanged
clusterrole.rbac.authorization.k8s.io/microk8s-hostpath unchanged
clusterrolebinding.rbac.authorization.k8s.io/microk8s-hostpath unchanged
Storage will be available soon
Enabling DNS
Applying manifest
serviceaccount/coredns created
configmap/coredns created
deployment.apps/coredns created
service/kube-dns created
clusterrole.rbac.authorization.k8s.io/coredns created
clusterrolebinding.rbac.authorization.k8s.io/coredns created
Restarting kubelet
DNS is enabled

$ microk8s.inspect
Inspecting services
  Service snap.microk8s.daemon-cluster-agent is running
  Service snap.microk8s.daemon-flanneld is running
  Service snap.microk8s.daemon-containerd is running
  Service snap.microk8s.daemon-apiserver is running
  Service snap.microk8s.daemon-apiserver-kicker is running
  Service snap.microk8s.daemon-proxy is running
  Service snap.microk8s.daemon-kubelet is running
  Service snap.microk8s.daemon-scheduler is running
  Service snap.microk8s.daemon-controller-manager is running
  Service snap.microk8s.daemon-etcd is running
  Copy service arguments to the final report tarball
Inspecting AppArmor configuration
Gathering system information
  Copy processes list to the final report tarball
  Copy snap list to the final report tarball
  Copy VM name (or none) to the final report tarball
  Copy disk usage information to the final report tarball
  Copy memory usage information to the final report tarball
  Copy server uptime to the final report tarball
  Copy current linux distribution to the final report tarball
  Copy openSSL information to the final report tarball
  Copy network configuration to the final report tarball
Inspecting kubernetes cluster
  Inspect kubernetes cluster

Building the report tarball
  Report tarball is at /var/snap/microk8s/1508/inspection-report-20200630_235402.tar.gz

$ microk8s.kubectl get all -A
NAMESPACE            NAME                                        READY   STATUS    RESTARTS   AGE
container-registry   pod/registry-d7d7c8bc9-p7hrg                1/1     Running   0          82s
kube-system          pod/coredns-9b8997588-hr7n7                 1/1     Running   0          82s
kube-system          pod/hostpath-provisioner-7b9cb5cdb4-fsjwh   1/1     Running   0          82s

NAMESPACE            NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
container-registry   service/registry     NodePort    <IP_ADDRESS>   <none>        5000:32000/TCP           86s
default              service/kubernetes   ClusterIP   <IP_ADDRESS>    <none>        443/TCP                  89s
kube-system          service/kube-dns     ClusterIP   <IP_ADDRESS>   <none>        53/UDP,53/TCP,9153/TCP   84s

NAMESPACE            NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
container-registry   deployment.apps/registry               1/1     1            1           86s
kube-system          deployment.apps/coredns                1/1     1            1           84s
kube-system          deployment.apps/hostpath-provisioner   1/1     1            1           86s

NAMESPACE            NAME                                              DESIRED   CURRENT   READY   AGE
container-registry   replicaset.apps/registry-d7d7c8bc9                1         1         1       82s
kube-system          replicaset.apps/coredns-9b8997588                 1         1         1       82s
kube-system          replicaset.apps/hostpath-provisioner-7b9cb5cdb4   1         1         1       82s

$ microk8s.kubectl logs -n container-registry registry-d7d7c8bc9-p7hrg
error: You must be logged in to the server (the server has asked for the client to provide credentials ( pods/log registry-d7d7c8bc9-p7hrg))
$ microk8s.kubectl logs -n container-registry registry-d7d7c8bc9-p7hrg -v=9
I0630 23:54:53.111347   22652 loader.go:375] Config loaded from file:  /var/snap/microk8s/1508/credentials/client.config
I0630 23:54:53.116412   22652 round_trippers.go:423] curl -k -v -XGET  -H "Accept: application/json, */*" -H "User-Agent: kubectl/v1.17.8 (linux/amd64) kubernetes/35dc4cd" -H "Authorization: Basic YWRtaW46ZVcxd1FWZzNaR2RVUzFKVVNXTnBPVXRZYkZoTVNETkxSbTl6ZDNNNFVqQXdlalE1UW5sUGRsbFRiejBL" 'https://<IP_ADDRESS>:16443/api/v1/namespaces/container-registry/pods/registry-d7d7c8bc9-p7hrg'
I0630 23:54:53.122330   22652 round_trippers.go:443] GET https://<IP_ADDRESS>:16443/api/v1/namespaces/container-registry/pods/registry-d7d7c8bc9-p7hrg 200 OK in 5 milliseconds
I0630 23:54:53.122372   22652 round_trippers.go:449] Response Headers:
I0630 23:54:53.122413   22652 round_trippers.go:452]     Cache-Control: no-cache, private
I0630 23:54:53.122432   22652 round_trippers.go:452]     Content-Type: application/json
I0630 23:54:53.122438   22652 round_trippers.go:452]     Content-Length: 2925
I0630 23:54:53.122443   22652 round_trippers.go:452]     Date: Tue, 30 Jun 2020 23:54:53 GMT
I0630 23:54:53.122474   22652 request.go:1017] Response Body: {"kind":"Pod","apiVersion":"v1","metadata":{"name":"registry-d7d7c8bc9-p7hrg","generateName":"registry-d7d7c8bc9-","namespace":"container-registry","selfLink":"/api/v1/namespaces/container-registry/pods/registry-d7d7c8bc9-p7hrg","uid":"18fa0ff5-312d-4518-a887-734191600393","resourceVersion":"350","creationTimestamp":"2020-06-30T23:52:58Z","labels":{"app":"registry","pod-template-hash":"d7d7c8bc9"},"ownerReferences":[{"apiVersion":"apps/v1","kind":"ReplicaSet","name":"registry-d7d7c8bc9","uid":"c5b28fb6-c8dc-4f69-bc91-e7283c9a2bbc","controller":true,"blockOwnerDeletion":true}]},"spec":{"volumes":[{"name":"registry-data","persistentVolumeClaim":{"claimName":"registry-claim"}},{"name":"default-token-hcv8f","secret":{"secretName":"default-token-hcv8f","defaultMode":420}}],"containers":[{"name":"registry","image":"cdkbot/registry-amd64:2.6","ports":[{"name":"registry","containerPort":5000,"protocol":"TCP"}],"env":[{"name":"REGISTRY_HTTP_ADDR","value":":5000"},{"name":"REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY","value":"/var/lib/registry"},{"name":"REGISTRY_STORAGE_DELETE_ENABLED","value":"yes"}],"resources":{},"volumeMounts":[{"name":"registry-data","mountPath":"/var/lib/registry"},{"name":"default-token-hcv8f","readOnly":true,"mountPath":"/var/run/secrets/kubernetes.io/serviceaccount"}],"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","imagePullPolicy":"IfNotPresent"}],"restartPolicy":"Always","terminationGracePeriodSeconds":30,"dnsPolicy":"ClusterFirst","serviceAccountName":"default","serviceAccount":"default","nodeName":"ecr-baseline","securityContext":{},"schedulerName":"default-scheduler","tolerations":[{"key":"node.kubernetes.io/not-ready","operator":"Exists","effect":"NoExecute","tolerationSeconds":300},{"key":"node.kubernetes.io/unreachable","operator":"Exists","effect":"NoExecute","tolerationSeconds":300}],"priority":0,"enableServiceLinks":true},"status":{"phase":"Running","conditions":[{"type":"Initialized","status":"True","lastProbeTime":null,"lastTransitionTime":"2020-06-30T23:53:16Z"},{"type":"Ready","status":"True","lastProbeTime":null,"lastTransitionTime":"2020-06-30T23:53:27Z"},{"type":"ContainersReady","status":"True","lastProbeTime":null,"lastTransitionTime":"2020-06-30T23:53:27Z"},{"type":"PodScheduled","status":"True","lastProbeTime":null,"lastTransitionTime":"2020-06-30T23:53:16Z"}],"hostIP":"<IP_ADDRESS>","podIP":"<IP_ADDRESS>","podIPs":[{"ip":"<IP_ADDRESS>"}],"startTime":"2020-06-30T23:53:16Z","containerStatuses":[{"name":"registry","state":{"running":{"startedAt":"2020-06-30T23:53:26Z"}},"lastState":{},"ready":true,"restartCount":0,"image":"docker.io/cdkbot/registry-amd64:2.6","imageID":"docker.io/cdkbot/registry-amd64@sha256:9dc5ad9e0b3ed59afa4febe8d663fd545628c60886a2c9fcd0e186e5cf6343ef","containerID":"containerd://f0088da6c7c513935b5c020bce6e1838fd595151f365eb832000d7a7f25db6b4","started":true}],"qosClass":"BestEffort"}}
I0630 23:54:53.126851   22652 round_trippers.go:423] curl -k -v -XGET  -H "Accept: application/json, */*" -H "User-Agent: kubectl/v1.17.8 (linux/amd64) kubernetes/35dc4cd" -H "Authorization: Basic YWRtaW46ZVcxd1FWZzNaR2RVUzFKVVNXTnBPVXRZYkZoTVNETkxSbTl6ZDNNNFVqQXdlalE1UW5sUGRsbFRiejBL" 'https://<IP_ADDRESS>:16443/api/v1/namespaces/container-registry/pods/registry-d7d7c8bc9-p7hrg/log'
I0630 23:54:53.131936   22652 round_trippers.go:443] GET https://<IP_ADDRESS>:16443/api/v1/namespaces/container-registry/pods/registry-d7d7c8bc9-p7hrg/log 401 Unauthorized in 5 milliseconds
I0630 23:54:53.131974   22652 round_trippers.go:449] Response Headers:
I0630 23:54:53.131984   22652 round_trippers.go:452]     Content-Length: 276
I0630 23:54:53.131990   22652 round_trippers.go:452]     Date: Tue, 30 Jun 2020 23:54:53 GMT
I0630 23:54:53.131995   22652 round_trippers.go:452]     Cache-Control: no-cache, private
I0630 23:54:53.132002   22652 round_trippers.go:452]     Content-Type: application/json
I0630 23:54:53.132064   22652 request.go:1017] Response Body: {"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"the server has asked for the client to provide credentials ( pods/log registry-d7d7c8bc9-p7hrg)","reason":"Unauthorized","details":{"name":"registry-d7d7c8bc9-p7hrg","kind":"pods/log"},"code":401}
I0630 23:54:53.132374   22652 helpers.go:203] server response object: [{
  "metadata": {},
  "status": "Failure",
  "message": "the server has asked for the client to provide credentials ( pods/log registry-d7d7c8bc9-p7hrg)",
  "reason": "Unauthorized",
  "details": {
    "name": "registry-d7d7c8bc9-p7hrg",
    "kind": "pods/log"
  },
  "code": 401
}]
F0630 23:54:53.132428   22652 helpers.go:114] error: You must be logged in to the server (the server has asked for the client to provide credentials ( pods/log registry-d7d7c8bc9-p7hrg))

Finally, tried 18.3, still with no difference:
inspection-report-20200701_001718.tar.gz
$ sudo snap remove microk8s --purge
microk8s removed

$ snap list
Name    Version    Rev   Tracking       Publisher   Notes
core    16-2.45.1  9436  latest/stable  canonical✓  core
docker  19.03.11   471   latest/stable  canonical✓  -

$ sudo snap install microk8s --classic --channel=1.18/stable
microk8s (1.18/stable) v1.18.3 from Canonical✓ installed

$ microk8s.enable registry storage dns
Enabling the private registry
Enabling default storage class
deployment.apps/hostpath-provisioner created
storageclass.storage.k8s.io/microk8s-hostpath created
serviceaccount/microk8s-hostpath created
clusterrole.rbac.authorization.k8s.io/microk8s-hostpath created
clusterrolebinding.rbac.authorization.k8s.io/microk8s-hostpath created
Storage will be available soon
Applying registry manifest
namespace/container-registry created
persistentvolumeclaim/registry-claim created
deployment.apps/registry created
service/registry created
The registry is enabled
Enabling default storage class
deployment.apps/hostpath-provisioner unchanged
storageclass.storage.k8s.io/microk8s-hostpath unchanged
serviceaccount/microk8s-hostpath unchanged
clusterrole.rbac.authorization.k8s.io/microk8s-hostpath unchanged
clusterrolebinding.rbac.authorization.k8s.io/microk8s-hostpath unchanged
Storage will be available soon
Enabling DNS
Applying manifest
serviceaccount/coredns created
configmap/coredns created
deployment.apps/coredns created
service/kube-dns created
clusterrole.rbac.authorization.k8s.io/coredns created
clusterrolebinding.rbac.authorization.k8s.io/coredns created
Restarting kubelet
DNS is enabled

$ microk8s.inspect
Inspecting Certificates
Inspecting services
  Service snap.microk8s.daemon-cluster-agent is running
  Service snap.microk8s.daemon-flanneld is running
  Service snap.microk8s.daemon-containerd is running
  Service snap.microk8s.daemon-apiserver is running
  Service snap.microk8s.daemon-apiserver-kicker is running
  Service snap.microk8s.daemon-proxy is running
  Service snap.microk8s.daemon-kubelet is running
  Service snap.microk8s.daemon-scheduler is running
  Service snap.microk8s.daemon-controller-manager is running
  Service snap.microk8s.daemon-etcd is running
  Copy service arguments to the final report tarball
Inspecting AppArmor configuration
Gathering system information
  Copy processes list to the final report tarball
  Copy snap list to the final report tarball
  Copy VM name (or none) to the final report tarball
  Copy disk usage information to the final report tarball
  Copy memory usage information to the final report tarball
  Copy server uptime to the final report tarball
  Copy current linux distribution to the final report tarball
  Copy openSSL information to the final report tarball
  Copy network configuration to the final report tarball
Inspecting kubernetes cluster
  Inspect kubernetes cluster

Building the report tarball
  Report tarball is at /var/snap/microk8s/1422/inspection-report-20200701_001718.tar.gz

$  microk8s.kubectl get all -A
NAMESPACE            NAME                                        READY   STATUS    RESTARTS   AGE
container-registry   pod/registry-7cf58dcdcc-rcgfz               1/1     Running   0          15m
kube-system          pod/coredns-588fd544bf-8bg5q                1/1     Running   0          15m
kube-system          pod/hostpath-provisioner-75fdc8fccd-kqsbb   1/1     Running   0          15m

NAMESPACE            NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
container-registry   service/registry     NodePort    <IP_ADDRESS>   <none>        5000:32000/TCP           15m
default              service/kubernetes   ClusterIP   <IP_ADDRESS>     <none>        443/TCP                  15m
kube-system          service/kube-dns     ClusterIP   <IP_ADDRESS>    <none>        53/UDP,53/TCP,9153/TCP   15m

NAMESPACE            NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
container-registry   deployment.apps/registry               1/1     1            1           15m
kube-system          deployment.apps/coredns                1/1     1            1           15m
kube-system          deployment.apps/hostpath-provisioner   1/1     1            1           15m

NAMESPACE            NAME                                              DESIRED   CURRENT   READY   AGE
container-registry   replicaset.apps/registry-7cf58dcdcc               1         1         1       15m
kube-system          replicaset.apps/coredns-588fd544bf                1         1         1       15m
kube-system          replicaset.apps/hostpath-provisioner-75fdc8fccd   1         1         1       15m

$ microk8s.kubectl logs -n container-registry registry-7cf58dcdcc-rcgfz
error: You must be logged in to the server (the server has asked for the client to provide credentials ( pods/log registry-7cf58dcdcc-rcgfz))

I'm unblocked by using a different VM, but I'm willing to keep help troubleshooting if it is valuable.  My worst fear is that I say, "oh, the problem is gone now, so I can ignore it."  And it will come back in some more persistent way, right when some critical release is due or something like that.

@thejray do you have some instructions so we can reproduce this? I couldn't find anything suspicious as to why it fails with logs and exec.

It seems like there is not much more I can do on my end to troubleshoot.  I do have a VM I could provide you with where these problems occur.  The compressed files for the VM about 6.2 GB.  Is there a way you'd like to receive that file?  I'd rather not post a public link, but it also seems like there are no private messaging features on github.

I have similar issue after a reboot
Microk8s seems running, but kubectl not working properly.

user@LAB:/$ kubectl get pod
error: You must be logged in to the server (Unauthorized)

-- Reboot --
Sep 11 06:35:55 LAB systemd[1]: Started Service for snap application microk8s.daemon-apiserver-kicker.
Sep 11 06:36:01 LAB microk8s.daemon-apiserver-kicker[925]: Signature ok
Sep 11 06:36:01 LAB microk8s.daemon-apiserver-kicker[925]: subject=/C=ID/ST=Canonical/L=Canonical/O=Canonical/OU=Canonical/CN=<IP_ADDRESS>
Sep 11 06:36:01 LAB microk8s.daemon-apiserver-kicker[925]: Getting CA Private Key
Sep 11 06:36:01 LAB microk8s.daemon-apiserver-kicker[925]: unable to write 'random state'
Sep 11 06:36:01 LAB microk8s.daemon-apiserver-kicker[925]: Signature ok
Sep 11 06:36:01 LAB microk8s.daemon-apiserver-kicker[925]: subject=/CN=front-proxy-client
Sep 11 06:36:01 LAB microk8s.daemon-apiserver-kicker[925]: Getting CA Private Key
Sep 11 06:36:01 LAB microk8s.daemon-apiserver-kicker[925]: unable to write 'random state'
Sep 11 06:36:01 LAB microk8s.daemon-apiserver-kicker[925]: CSR change detected. Reconfiguring the kube-apiserver
Sep 11 06:36:01 LAB microk8s.daemon-apiserver-kicker[925]: error: error running snapctl: unknown service: "microk8s.daemon-etcd.service"
Sep 11 06:36:01 LAB systemd[1]: snap.microk8s.daemon-apiserver-kicker.service: Main process exited, code=exited, status=1/FAILURE
Sep 11 06:36:01 LAB systemd[1]: snap.microk8s.daemon-apiserver-kicker.service: Failed with result 'exit-code'.
Sep 11 06:36:01 LAB systemd[1]: snap.microk8s.daemon-apiserver-kicker.service: Service hold-off time over, scheduling restart.
Sep 11 06:36:01 LAB systemd[1]: snap.microk8s.daemon-apiserver-kicker.service: Scheduled restart job, restart counter is at 1.
Sep 11 06:36:01 LAB systemd[1]: Stopped Service for snap application microk8s.daemon-apiserver-kicker.
Sep 11 06:36:01 LAB systemd[1]: Started Service for snap application microk8s.daemon-apiserver-kicker.
Sep 11 06:36:14 LAB microk8s.daemon-apiserver-kicker[2230]: Error from server (NotFound): namespaces "kubepublic" not found
Sep 11 06:36:15 LAB microk8s.daemon-apiserver-kicker[2230]: configmap/local-registry-hosting unchanged
Sep 11 06:36:18 LAB microk8s.daemon-apiserver-kicker[2230]: Signature ok
Sep 11 06:36:18 LAB microk8s.daemon-apiserver-kicker[2230]: subject=/C=ID/ST=Canonical/L=Canonical/O=Canonical/OU=Canonical/CN=<IP_ADDRESS>
Sep 11 06:36:18 LAB microk8s.daemon-apiserver-kicker[2230]: Getting CA Private Key
Sep 11 06:36:18 LAB microk8s.daemon-apiserver-kicker[2230]: unable to write 'random state'
Sep 11 06:36:18 LAB microk8s.daemon-apiserver-kicker[2230]: Signature ok
Sep 11 06:36:18 LAB microk8s.daemon-apiserver-kicker[2230]: subject=/CN=front-proxy-client
Sep 11 06:36:18 LAB microk8s.daemon-apiserver-kicker[2230]: Getting CA Private Key
Sep 11 06:36:18 LAB microk8s.daemon-apiserver-kicker[2230]: unable to write 'random state'
Sep 11 06:36:18 LAB microk8s.daemon-apiserver-kicker[2230]: CSR change detected. Reconfiguring the kube-apiserver
Sep 11 06:36:18 LAB microk8s.daemon-apiserver-kicker[2230]: error: error running snapctl: unknown service: "microk8s.daemon-etcd.service"
Sep 11 06:36:18 LAB systemd[1]: snap.microk8s.daemon-apiserver-kicker.service: Main process exited, code=exited, status=1/FAILURE
Sep 11 06:36:18 LAB systemd[1]: snap.microk8s.daemon-apiserver-kicker.service: Failed with result 'exit-code'.
Sep 11 06:36:18 LAB systemd[1]: snap.microk8s.daemon-apiserver-kicker.service: Service hold-off time over, scheduling restart.
Sep 11 06:36:18 LAB systemd[1]: snap.microk8s.daemon-apiserver-kicker.service: Scheduled restart job, restart counter is at 2.
Sep 11 06:36:18 LAB systemd[1]: Stopped Service for snap application microk8s.daemon-apiserver-kicker.
Sep 11 06:36:18 LAB systemd[1]: Started Service for snap application microk8s.daemon-apiserver-kicker.
Sep 11 06:36:21 LAB microk8s.daemon-apiserver-kicker[4236]: Error from server (NotFound): namespaces "kubepublic" not found
Sep 11 06:36:22 LAB microk8s.daemon-apiserver-kicker[4236]: configmap/local-registry-hosting unchanged
Sep 11 06:36:39 LAB systemd[1]: Stopping Service for snap application microk8s.daemon-apiserver-kicker...
Sep 11 06:36:39 LAB systemd[1]: Stopped Service for snap application microk8s.daemon-apiserver-kicker.
Sep 11 06:37:09 LAB systemd[1]: Started Service for snap application microk8s.daemon-apiserver-kicker.
Sep 11 06:37:15 LAB microk8s.daemon-apiserver-kicker[13410]: error: You must be logged in to the server (Unauthorized)
Sep 11 06:37:15 LAB microk8s.daemon-apiserver-kicker[13410]: error: You must be logged in to the server (the server has asked for the client to provide credentials)
Sep 11 06:37:15 LAB systemd[1]: snap.microk8s.daemon-apiserver-kicker.service: Main process exited, code=exited, status=1/FAILURE
Sep 11 06:37:15 LAB systemd[1]: snap.microk8s.daemon-apiserver-kicker.service: Failed with result 'exit-code'.
Sep 11 06:37:16 LAB systemd[1]: snap.microk8s.daemon-apiserver-kicker.service: Service hold-off time over, scheduling restart.
Sep 11 06:37:16 LAB systemd[1]: snap.microk8s.daemon-apiserver-kicker.service: Scheduled restart job, restart counter is at 1.

Name                  Version                     Rev   Tracking         Publisher     Notes
core                  16-<IP_ADDRESS>                 9804  latest/stable    canonical✓    core
core18                20200724                    1885  latest/stable    canonical✓    base
gnome-3-26-1604       <IP_ADDRESS>00529             100   latest/stable/…  canonical✓    -
gnome-3-28-1804       3.28.0-17-gde3d74c.de3d74c  128   latest/stable    canonical✓    -
gnome-3-34-1804       0+git.3009fc7               36    latest/stable    canonical✓    -
gnome-calculator      3.36.0+git9.96b95fd2        748   latest/stable/…  canonical✓    -
gnome-characters      v3.34.0+git8.a46106b        550   latest/stable/…  canonical✓    -
gnome-logs            3.34.0                      100   latest/stable/…  canonical✓    -
gnome-system-monitor  3.36.0-12-g35f88a56d7       148   latest/stable/…  canonical✓    -
gtk-common-themes     0.1-36-gc75f853             1506  latest/stable/…  canonical✓    -
helm                  3.3.1                       272   latest/stable    snapcrafters  classic
microk8s              v1.19.0                     1668  latest/stable    canonical✓    classic

I did face this issue, and in my case root of issue was in /etc/hosts
I was adding an entry for hostname/nodename which was map to a different ip than the node INTERNAL-IP address.
<IP_ADDRESS> myhostname

Obviously removing this entry return things back to function normally.
HTH


Runtime.consoleAPICalled() doesn't seem to work

Testing out code, not getting anything back from this:
Runtime.consoleAPICalled(() => {
  console.log(arguments);
});

Runtime.evaluate({
  expression: `(${function(){
    console.log('test console api call');
  }})()`,
  awaitPromise: true,
});

Also tried to use the Log.entryAdded event, but didn't detect my console.log's. I just want to print some data into client console and be able to see that in my terminal.

There some issues with that code:

arguments doesn't work with arrow functions, meaning that you'll get the arguments of a parent regular function or undefined.

your expression doesn't return a Promise so you cannot use awaitPromise: true;

finally events are not delivered because you need to enable the Runtime domain first:
 Runtime.enable();

@cyrus-and: thanks. I missed the part in the documentation for #3 and didn't know about #1. For #2, I simplified the code for the issue, my original code had a promise returned.
Do you know if any of the .enable() methods just allow for events to trigger? Seems like we can use other methods in each of the domain without first enabling. At least I'm able to do a Runtime.evaluate() without first doing Runtime.enable().

Do you know if any of the .enable() methods just allow for events to trigger?

AFAIK it's not documented anywhere but the rule of thumb is that in order to receive events from a given domain you need to enable it first. There a few exceptions though, sometimes you need to enable a domain in order to use its methods, see the follow-up question in #102.


reminder: algodiff

This is a reminder for:

add skeleton code for qr in algodiff.
complex number support in algodiff.
fft module refactoring to avoid circular dependency.

@ghennequin

add skeleton code for qr in algodiff, done.


runtime: correct attribution of internal mutex contention

As of Go 1.22, the mutex profile measures contention on internal mutex values, but attributes the contention to the function runtime._LostContendedRuntimeLock. This should be improved.
When running with GODEBUG=runtimecontentionstacks=1, the mutex profile attributes to the caller of runtime.unlock all the delay that the M encountered during its preceding runtime.lock call to obtain that lock. This is incorrect: the delay attributed to a runtime.unlock call should instead correspond to the total time that the other Ms were unable to proceed because this M was holding the lock.
I have the start of a plan to resolve this, so I'm seeking feedback from @mknyszek and @prattmic (or @golang/runtime or others) on whether I'm on the right track — both in the start of the plan, and on whether I'm working to the right set of constraints. Thank you!

The mutex profile for sync.Mutex uses fields on the sudog to track how many Gs have been waiting and for about how long. The sudogs form a linked list of waiters, and are dequeued under the control of the runtime. When waking a G, the caller of sync.Mutex.Unlock is able to claim responsibility for the delay that it specifically caused, and update the remaining waiters' start time so the next Unlocker can claim the right amount too. We'll need similar information for the Ms that hold runtime-internal locks.
I'd like to say a few assumed constraints out loud:

On Linux, futex(&l.key, FUTEX_WAKE, 1) can wake any M that was waiting on l.key.
We cannot change the dynamics of locks on Linux (such as by putting the runtime in charge of picking an M to wake, as it is with the semaphore-based implementation).
We cannot make interactions with an especially contended lock become O(N) with the number of waiters (any more than it is today, such as from the CPU's cache coherency work).
We cannot change the size of a runtime.mutex, it needs to remain uintptr.
An M can hold multiple contended locks at the same time.
It's OK to grow the M struct by several words.
It's OK to approximate the total wait time (as we do with sync.Mutex).
The M struct has some alignment (8 bytes?), so we can use a few of the least significant bits of an muintptr as flags (as seen in lock_sema.go).
An M can be waiting for only a single lock at a time.
There's no appetite for a new sudom struct, to represent waiting Ms as the sudog represents waiting Gs.

For OSes where we use lock_sema.go, an M that needs to block on a runtime.mutex first pushes itself onto the head of a linked list (runtime.mutex.key, linked via runtime.m.nextwaitm), and then sleeps on its own private semaphore. When the current holder of the lock is done, it pops an M off of the list and wakes that specific M. We could add fields to the M for the number of Ms after it on the list, for the time it went to sleep, and for the time that the tail M went to sleep (or a pointer to the tail M). I think that would be sufficient information to match the approximation we do for sync.Mutex via sudog, and would need only a simple set of invariants to update when pushing and popping Ms to/from this list.

For OSes such as Linux where we use lock_futex.go, the kernel-controlled wakeup order means we'll need something more.

The contents of runtime.mutex.key will point to the waiting M at the head of the linked list (as in lock_sema.go).
The list must be doubly-linked so that an M in the middle (if it's the one the kernel chooses to wake) can remove itself.
Any number of Ms may be adding themselves to the list concurrently (in the top half of runtime.lock).
But only one M will be reading/editing wait start timestamps and element counts (in the top half of runtime.unlock) OR removing itself from the list (in the bottom half of runtime.lock) at a time.
Also, if there are waiting Ms the mutex must always reflect that fact, which means removing lock_futex.go's initial atomic.Xchg speculative grab.

This uses space on the waiting Ms to store the necessary information; they're not using it for anything else while they're blocked.
I'll prepare a CL to implement this plan, but if I've gotten some assumptions wrong or it's otherwise clear that this won't work, it may be easier to spot and to discuss it here rather than in the details of code review. Thanks!

Reverted for the Go 1.23 cycle due to #67585

This direction seems right.
We should blame the lock wait time to the wait holder (the concept is called blame shifting).
It should be easier in Go since there is already a list of lock-waiters in the runtime.
It was done via sampling profilers:
https://www.cs.rice.edu/~johnmc/papers/hpctoolkit-ppopp-2010.pdf
It is also a thing in OpenMP runtime tools API: https://www.openmp.org/wp-content/uploads/OMPT-SC13-BOF.pdf
wait time to wait holder. It should be easier in Go since there is already a list of lock-waiters in the runtime.
It was done via sampling profilers:
https://www.cs.rice.edu/~johnmc/papers/hpctoolkit-ppopp-2010.pdf

Hmm. The blame shifting seems less useful than knowing what was blocked where and for how long. Ideally it seems it would report both - what was blocked for how long and what the lock holder was doing - but this feels like nested profiling which is pretty hard to follow.

Yes, the semantics of the "mutex" profile are to shift blame to the slow critical section. Part of why this didn't make it for the Go 1.23 cycle is that we only have the explicit list of lock waiters for the lock_sema.go platforms, and the extra bookkeeping required to add it for GOOS=linux was an unwelcome slowdown.
It is also useful to know what was blocked and for how long—for blocking that takes place outside of the runtime, that's reported on the "block" profile. Do you have an example of where that would have been useful for runtime-internal blocking, @robaho (maybe an open issue that is/was hard to debug)? If so, I think the next step would be to open a new issue to discuss adding it. I think it's possible, but we'd need to get consensus on whether it's worth the costs.


Do you have any plan to update this package?

Maybe we could open discussion?

Yes, Well if you also want to implement a feature in dart_web3, you can.

the official web3dart package was being handed over and continued. We should aim to continue there as many people who are using that package will have a look there first. People do not need to touch their dependency. Also as you can see some contribution started happening again. Therefore there is no need for this. if you don't plan to go a different route of course :)
https://pub.dev/packages/web3dart

Ownership of the web3dart package is transferred, that's really great! Well, I've also been using web3dart in my personal projects for a long time. The point of dart_web3 is if there is any problem for other developers in the library then anyone can solve it because web3dart is EOL and the repository is read only. Now that the ownership is transferred, it's entirely up to each developer which package they want to use. I'm staying with dart_web3 and developing a bit of dapp mobile wallet  with it.


crash after configure with login

Hi,
I wan't to use this adapter for the school of my son. When I configure the adapter, the adapter crashes with the following log-entries:

webuntis.0
2022-02-27 08:52:15.496
error
DB closed

webuntis.0
2022-02-27 08:52:15.496
error
Error: DB closed at Redis.sendCommand (/opt/iobroker/node_modules/ioredis/built/redis/index.js:636:24) at Redis.get (/opt/iobroker/node_modules/ioredis/built/commander.js:122:25) at StateRedisClient.setState (/opt/iobroker/node_modules/@iobroker/db-states-redis/lib/states/statesInRedisClient.js:657:40) at Webuntis.setState (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/build/lib/adapter/adapter.js:5880:35)

webuntis.0
2022-02-27 08:52:15.494
error
unhandled promise rejection: DB closed

webuntis.0
2022-02-27 08:52:15.494
error
Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().

webuntis.0
2022-02-27 08:52:15.493
warn
get state error: Connection is closed.

webuntis.0
2022-02-27 08:52:15.019
info
Timetable found on next workind day

webuntis.0
2022-02-27 08:52:14.986
warn
Terminated (UNCAUGHT_EXCEPTION): Without reason

webuntis.0
2022-02-27 08:52:14.985
info
terminating

webuntis.0
2022-02-27 08:52:14.979
error
Request failed with status code 403

Do you need further information, please contact me.

please test 0.3.2 from lastest or github

Great! Good job! It seems to be working with this version.


private repo with public issues

Is it possible to allow issues to be public (or logged on) while repositories remain private?

Sounds related to #776

Another use case is if you have non public source code but still want to provide a public issue tracker

I would like to be able to share setup links on the wiki page of the projects (ie: we have a team that prepares our Windows CE devices with specific customer applications to be installed on it) and also with Sales team for example.
Sharing Wiki (read only) and issues (Read/Write) for specific teams would be nice:
Those teams should not have access to the source code, but only to the wiki (Read only) and maybe on the issues (Read and Write i guess). OK this is not a standard function but this should be awesome to use gogs as a release share platform also!

Different permissions for Issues and Wiki would be great!

Two years ago of demand, although no arrangement..Let a person feel very sorry

Hope in the near future can solve, this is a very important feature, should need to obtain a higher priority than others, it leads to better reputation

That would be very useful!

@Unknwon please in 0.10 milestone complete

@BruinY It is not as easy as switch a button or change a value in database, will consider.

So it needs to redisign repo's permissions.

@lunny  the repo's permission in the redesign??
@Unknwon Gogs is good product, Hope to be able to attach importance to this problem, the strengthening of project management features, can make gogs more popular

Everybody thinks their needs are more important.

Maybe, but I think to strengthen the function of project management, for gogs will be better, but you still have to decide

See also #2157

first, let me say thanks for gogs. It looks very promising for my use case, especially assuming this is implemented.
imho, it would be ideal if permissions could be set thusly for any given repo:
read/write for wiki (public read, write by user, user group or all users)
read/write for issues (public read, write by user, user group or all users)
read/write for repo/code (public read, write by user, user group or all users)
same perms flexibility for any new major feature(where applicable)
People use these features for many different reasons. Access for the general public, all clients, groups of clients, coworkers, etc. User & group perms for each major feature should allow all reasonable scenarios.
I also tend to agree with @BruinY that this is an important feature request as i think Gogs should have been designed with this as part of it's early infrastructure and thus warrants temporary suspension of work on any ancillary features that have been planned since. Though, i mean that to be constructive feedback and certainly understand how these things happen. Also, i don't know any Go so i won't be much help with actual code for the forseeable future. typical, right?  :)
Thanks

We could also make use of a feature like this. :+1:

Different permissions for Issues and Wiki would be great!
Repo is for RD, Issues is for QA, Wiki is for QA&PM, so we can work with only one system!
Issues和Wiki使用不同权限是非常有必要的一个功能。
这个研发就可以使用代码库，测试使用Issues，测试和产品使用Wiki，这样大家只需要一个这样的系统就够用了

Patch has pushed to fix this issue, please test on develop branch or https://try.gogs.io.

Wow, "good things come to those who wait." Thanks for all the good, and hard work @Unknwon!

Nice job guys... but when repo is private and Wiki/Issues set to public, users can't see the repo neither on organisation, neither on repositories list or whatever (only if we give them a strict html link to issue page of the project) ... If we put them as collaborators, they can see it but they can also see the repository sources, clone, download... etc due to the default "Read" access of the user, which is the lower repository access


[ocaml5-issue] Deadlock in Dynlink test on Cygwin

Deadlock observed in a run on trunk Cygwin:
https://github.com/shym/multicoretests/actions/runs/4367430739/jobs/7638729550#step:21:764
Wed, 08 Mar 2023 22:46:19 GMT random seed: 366632243
Wed, 08 Mar 2023 22:46:19 GMT generated error fail pass / total     time test name
Wed, 08 Mar 2023 22:46:19 GMT
Wed, 08 Mar 2023 22:46:19 GMT [ ]    0    0    0    0 /  100     0.0s negative Lin DSL Dynlink test with Domain
Wed, 08 Mar 2023 22:47:55 GMT [ ]    0    0    0    0 /  100     0.0s negative Lin DSL Dynlink test with Domain (generating)
Wed, 08 Mar 2023 22:49:08 GMT [ ]    0    0    0    0 /  100    96.0s negative Lin DSL Dynlink test with Domain (shrinking:    1)
Thu, 09 Mar 2023 00:38:34 GMT [ ]    0    0    0    0 /  100   168.9s negative Lin DSL Dynlink test with Domain (shrinking:    3)
Thu, 09 Mar 2023 00:38:34 GMT Error: The operation was canceled.

As the code paths are completely different between Cygwin (which provides a dlopen()) and Windows (which uses flexdll), this is probably not related to #290.

Seen again on Cygwin 5.1.0~rc2 when merging #389 into main
https://github.com/ocaml-multicore/multicoretests/actions/runs/6077015167/job/16485985404
random seed: 153981
generated error fail pass / total     time test name

[ ]    0    0    0    0 /  100     0.0s negative Lin DSL Dynlink test with Domain
[ ]    0    0    0    0 /  100     0.0s negative Lin DSL Dynlink test with Domain (generating)
Error: The operation was canceled.

This triggered again on the 0.3 branch for Cygwin trunk part1
https://github.com/ocaml-multicore/multicoretests/actions/runs/6481561492/job/17599326796
random seed: 406303381
generated error fail pass / total     time test name

[ ]    0    0    0    0 /  100     0.0s negative Lin DSL Dynlink test with Domain
[ ]    0    0    0    0 /  100     0.0s negative Lin DSL Dynlink test with Domain (generating)
Error: The operation was canceled.

I've spent some time creating a reproducer for this:
libB.ml:
let value = 34

repro.ml:
let loadfile f =
  try Dynlink.loadfile (Dynlink.adapt_filename f)
  with Dynlink.Error (Dynlink.Module_already_loaded _) -> ()

let dont_crash () =
  let wait = Atomic.make true in
  let dom1 = Domain.spawn (fun () ->
			     while Atomic.get wait do Domain.cpu_relax() done;
  		             loadfile "libB.cmxs") in
  let dom2 = Domain.spawn (fun () ->
			     Atomic.set wait false;
			     loadfile "libB.cmxs") in
  let _ = Domain.join dom1 in
  let _ = Domain.join dom2 in
  ()

let _ =
  for i=1 to 1000 do
    Printf.printf "%i %!" i;
    dont_crash ()
  done

Makefile:
all:
	ocamlopt -g -shared libB.ml -o libB.cmxs
	ocamlopt -g -I +dynlink dynlink.cmxa repro.ml -o repro.exe

clean:
	rm -f libB.cmi libB.cmx libB.o libB.cmxs repro.cmi repro.cmx repro.o repro.exe

On MinGW (5.1.0, 5.1.1, 5.2.0~alpha1, trunk) this causes a range of different errors

hangs
segfaults
early exits
various Dynlink.Errors (bad object, not an OCaml plugin, missing frametable for libB, ...)

On MinGW 5.0.0 the errors trigger more rarely (but can still occur).
On Cygwin I've observed similar behaviour (no segfaults though).
On Linux I've not been able to trigger the issue.
I've found this: https://github.com/ocaml/flexdll/issues/120 which ticks the right boxes, as I believe flexdll is involved on both MinGW and Cygwin (according to David's remark above).
So there seem to be a flexdll issue remaining in addition to https://github.com/ocaml/flexdll/pull/112 @shym :grimacing:

The weekly 5.1.1 run triggered a Dynlink stress test crash on MinGW:
https://github.com/ocaml-multicore/multicoretests/actions/runs/8406318839/job/23020071322
random seed: 398767628
generated error fail pass / total     time test name

[ ]    0    0    0    0 / 1000     0.0s Lin Dynlink stress test with Domain
File "src/dynlink/dune", line 14, characters 7-16:
14 |  (name lin_tests)
            ^^^^^^^^^
(cd _build/default/src/dynlink && ./lin_tests.exe --verbose)
Command exited with code -1073741819.

FTR, while dusting off #399 for merging, I discovered that the parallel Dynlink issue also affects MSVC - because it also uses FlexDLL under the surface.
Here's an example MSVC trunk run (which I got running before bytecode):
https://github.com/ocaml-multicore/multicoretests/actions/runs/8438568844/job/23111051221?pr=399
random seed: 373847262
generated error fail pass / total     time test name

[ ]    0    0    0    0 / 1000     0.0s Lin Dynlink stress test with Domain
File "src/dynlink/dune", line 14, characters 7-16:
14 |  (name lin_tests)
            ^^^^^^^^^
(cd _build/default/src/dynlink && ./lin_tests.exe --verbose)
Command exited with code -1073741819.
[ ]    0    0    0    0 / 1000     0.0s Lin Dynlink stress test with Domain (generating)


Inherit block type in CanonStateNotification

Describe the feature
Replace use of SealedBlock with SealedBlock<N::BlockHeader, N::BlockBody> in
https://github.com/paradigmxyz/reth/blob/9b289351b6835774b7398afcbcb66e7c2ef6e7f7/crates/chain-state/src/notifications.rs#L96-L141
Additional context
No response

Hi @emhane, I would like take this issue. Thanks!

hi @emhane, i don't see use of SealedBlock in the code you mentioned. Did you mean to make SealedBlockWithSenders generic right?

yes @htiennv , thanks

Hi @emhane , seems this issue was done by 12857. Please check again!


MAINTAINERS: Add James Sturtevant(jsturtevant) as a REVIEWER

I'd like to invite @jsturtevant as a reviewer. He had made sustained commits to runwasi, including his work on enabling OCI artifacts for Wasm, demonstrated his technical depth and knowledge on this project.
Needs explicit LGTM from @jsturtevant and 1/3 of the runwasi Committers according to https://github.com/containerd/project/blob/main/GOVERNANCE.md.

[x] @devigned
[x] @cpuguy83
[ ] @danbugs

This PR will remain open for 7 days.

LGTM, Thanks all!


Proxy admin is not the one registered in the network manifest

Deployed and verified proxy by cloning openzeppelin-upgrades and running verify.js from packages/core
https://rinkeby.etherscan.io/address/0x154695947213748E4e24Fb83Fb3DeB7A8c587583#code
Running script like
async function main() {
    const MY_CONTRACT = await ethers.getContractFactory("MyContract");
    const PROXY_ADDRESS = "0x154695947213748E4e24Fb83Fb3DeB7A8c587583";
    const upgraded = await upgrades.upgradeProxy(
        PROXY_ADDRESS,
        MY_CONTRACT,
        ["A", "B", "C"],
    );
}

main();

Getting an error message:
node_modules/@openzeppelin/hardhat-upgrades/src/upgrade-proxy.ts:67
        throw new Error('Proxy admin is not the one registered in the network manifest');
              ^
Error: Proxy admin is not the one registered in the network manifest
    at getUpgrader (node_modules/@openzeppelin/hardhat-upgrades/src/upgrade-proxy.ts:67:15)
    at Proxy.upgradeProxy (node_modules/@openzeppelin/hardhat-upgrades/src/upgrade-proxy.ts:35:23)
    at main (scripts/proxy/proxy_nft.js:12:22)

My reason for doing so is that I don't know how to verify the contract code itself otherwise.
How can I upgrade implementation and have the proxy contract verified?

Hello @utgarda
Can you please confirm the .openzeppelin folder is present at each step. Is it being deleted during verification?

Indeed, I tried to copy JSON files to another project and even hacked them replacing addresses. Probably messed them up.

is there a way to get the .openzeppelin/.json back if i accidentally deleted them

@samw2k00 You can recreate the file with some manual steps.  See https://forum.openzeppelin.com/t/delete-openzeppelin-uncarefully-and-can-not-uprade-contracts-how-to-fix-it/20170/2


Error when building for docker - IsAppEncrypted.h:22:9: fatal error: 'objc/objc.h' file not found

Description
Hello.
I'm building a project based on Vapor with a Firebase real-time database inside.
The project is essentially a swift package, with Firebase dependencies added as usual:
.package(url: "https://github.com/firebase/firebase-ios-sdk", from: "10.27.0"),
and target dependencies
.product(name: "FirebaseDatabase", package: "firebase-ios-sdk"),
Evrething works well on the local machine, but when I try to build a docker file using docker build. I got this error (full log below)
In the file included from /build/.build/checkouts/GoogleUtilities/Third_party/IsAppEncrypted/IsAppEncrypted.m:43:
4.130 /build/.build/checkouts/GoogleUtilities/third_party/IsAppEncrypted/Public/IsAppEncrypted.h:22:9: fatal error: file objc/objc.h not found

Is there a way to fix or work around this?
Reproducing the issue
No response
Firebase SDK Version
10.27.0
Xcode Version
15.4
Installation Method
Swift Package Manager
Firebase Product(s)
Database
Targeted Platforms
macOS
Relevant Log Output
[+] Building 5.9s (13/23)
 => [internal] load .dockerignore                                                                                0.2s
 => => transferring context: 58B                                                                                0.2s
 => [internal] load build definition from Dockerfile                                                                     0.2s
 => => transferring dockerfile: 3.39kB                                                                                0.2s
 => [internal] load metadata for docker.io/library/ubuntu:jammy                                                          0.6s
 => [internal] load metadata for docker.io/library/swift:5.10-jammy                                                      0.7s
 => [build  1/13] FROM docker.io/library/swift:5.10-jammy@sha256:ded3bdf39b1eb72198a9e0fb6102e98b9c30467fa9e70d5f7d17b4  0.0s
 => [internal] load build context                                                                                0.7s
 => => transferring context: 1.19MB                                                                                0.6s
 => [stage-1 1/5] FROM docker.io/library/ubuntu:jammy@sha256:19478ce7fc2ffbce89df29fea5725a8d12e57de52eb9ea570890dc5852  0.0s
 => CACHED [build  2/13] RUN export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true     && apt-get -q u  0.0s
 => CACHED [build  3/13] WORKDIR /build                                                                                0.0s
 => CACHED [build  4/13] COPY ./Package.* ./                                                                             0.0s
 => CACHED [build  5/13] RUN swift package resolve         $([ -f ./Package.resolved ] && echo "--force-resolved-versio  0.0s
 => CACHED [build  6/13] COPY . .                                                                                0.0s
 => ERROR [build  7/13] RUN swift build -c release                 --static-swift-stdlib                 -Xlinker -ljem  4.3s
------
 > [build  7/13] RUN swift build -c release                 --static-swift-stdlib                 -Xlinker -ljemalloc:
3.851 [1/1] Compiling plugin SwiftProtobufPlugin
3.851 Building for production...
4.100 [1/1155] Compiling p_x25519.c
4.111 [2/1155] Compiling p_rsa_asn1.c
4.130 In file included from /build/.build/checkouts/GoogleUtilities/third_party/IsAppEncrypted/IsAppEncrypted.m:43:
4.130 /build/.build/checkouts/GoogleUtilities/third_party/IsAppEncrypted/Public/IsAppEncrypted.h:22:9: fatal error: 'objc/objc.h' file not found
4.130 #import <objc/objc.h>
4.130         ^~~~~~~~~~~~~
4.130 1 error generated.
4.131 [3/1155] Compiling third-party-IsAppEncrypted IsAppEncrypted.m
4.132 [3/1155] Compiling file.c
4.133 [3/1155] Compiling kyber.c
4.221 [3/1155] Write swift-version-24593BA9C3E375BF.txt
------
Error: failed to fetch an image or build from source: error building: failed to solve: process "/bin/sh -c swift build -c release                 --static-swift-stdlib                 -Xlinker -ljemalloc" did not complete successfully: exit code: 1

If using Swift Package Manager, the project's Package.resolved

Expand Package.resolved snippet

Replace this line with the contents of your Package.resolved.

If using CocoaPods, the project's Podfile.lock

Expand Podfile.lock snippet

Replace this line with the contents of your Podfile.lock!

Sorry, but Firebase and its dependencies depend on the Objective C runtime.


Device Edge Runtime Credential Management

Hi.. I need clarification on how Azure Edge runtime manages the Azure container registry credentials on the device side.
Based on various documentation, I understand when the the Edge agent on the device performs an authentication and then gets the Azure container registry credentials (from deployment manifest file/device twin) and syncs the modules on device.
Once Azure container registry credentials are retrieved, My question is how the edge device runtime stores & manage this container repository credential ? does it store the credentials in device storage (like physical config file or encrypted file any other from) ? if yes, any encryption used for that ?

@anilarunshanbhag Thank you for your question!
Since this channel is for driving improvements towards MS Docs, could you provide the URL of the specific documentation that your feedback is applicable to? That way, we are able to make sure your feedback is addressed by the right team.

@anilarunshanbhag
We are going to close this thread as resolved but if there are any further questions regarding the documentation, please tag me in your reply and we will be happy to continue the conversation.


Napple gives 8 absorption instead of 2

Info

Server version:  Paper 1.13.2
OldCombatMechanics version: 1.7.0
OldCombatMechanics config file:

  napple-effects:
    regeneration:
      duration: 600
      amplifier: 4
    damage_resistance:
      duration: 6000
      amplifier: 0
    fire_resistance:
      duration: 6000
      amplifier: 0
    absorption:
      duration: 2400
      amplifier: 0

Problem Description
I noticed using enchanted apple (notch apple) it give 8 assorbtion hearts instead 2 (as 1.8 old effect) and keep to use assobition 4

Any news about it? many players on 1.13.2 are complaining about it

May I have more information about this? Does it happen to everyone or just 1.13.2 clients? What OCM test build are you running? Is there also an issue with normal golden apples?

it happens for all client, my dev make a simple plugin  that patch that, i was using the latest on jenksin #32, i also advise all weapons do much damage wompared how 1.8 worked

@xion87 What do you mean by

my dev make a simple plugin that patch that

Also please try the latest test version from the Jenkins server in case something has changed in the meantime.


bugfix:S3C-4487 Non osis user returned in listUsers

Description:
As user which is not created by OSIS will not have name in the path, defaulting the value to a Non OSIS User string.

Hello saitharunthodupunuru,
My role is to assist you with the merge of this
pull request. Please type @bert-e help to get information
on this process, or consult the user documentation.
Status report is not available.

Waiting for approval
The following approvals are needed before I can proceed with the merge:

the author

2 peers

Codecov Report

Merging #55 (f45606b) into development/1.0 (01ca69b) will decrease coverage by 0.10%.
The diff coverage is 0.00%.

@@                  Coverage Diff                  @@
##             development/1.0      #55      +/-   ##
=====================================================
- Coverage              87.08%   86.98%   -0.11%
  Complexity               211      211
=====================================================
  Files                     18       18
  Lines                    914      914
  Branches                  64       64
=====================================================
- Hits                     796      795       -1
  Misses                    68       68
- Partials                  50       51       +1

Impacted Files
Coverage Δ

.../com/scality/osis/utils/ScalityModelConverter.java
94.97% <0.00%> (-0.51%)
:arrow_down:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 01ca69b...f45606b. Read the comment docs.

/approve

In the queue
The changeset has received all authorizations and has been added to the
relevant queue(s). The queue(s) will be merged in the target development
branch(es) as soon as builds have passed.
The changeset will be merged in:

:heavy_check_mark: development/1.0

There is no action required on your side. You will be notified here once
the changeset has been merged. In the unlikely event that the changeset
fails permanently on the queue, a member of the admin team will
contact you to help resolve the matter.
IMPORTANT
Please do not attempt to modify this pull request.

Any commit you add on the source branch will trigger a new cycle after the
current queue is merged.
Any commit you add on one of the integration branches will be lost.

If you need this pull request to be removed from the queue, please contact a
member of the admin team now.
The following options are set: approve

I have successfully merged the changeset of this pull request
into targetted development branches:

:heavy_check_mark: development/1.0

Please check the status of the associated issue S3C-4487.
Goodbye saitharunthodupunuru.


Web -LHN - LHN doesn't reflect report value before click

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Action Performed:
1, Click on FAB menu
2. Click on split bill button
3. Click Enter amount
4. Search & select multiple user
5. Click on split button
6. Click on one of the newly created reports from LHN
Expected Result:
LHN should reflect report value before click
Actual Result:
LHN reflects report value after a click on LHN
Workaround:
Unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[ ] Android / native
[ ] Android / Chrome
[ ] iOS / native
[ ] iOS / Safari
[x] MacOS / Chrome / Safari
[ ] MacOS / Desktop

Version Number: 1.3.31-1
Reproducible in staging?: n/a
Reproducible in production?: n/a
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos: Any additional supporting documentation
https://github.com/Expensify/App/assets/93399543/cd701d08-b7f1-40fa-8eed-f611d860628b
Expensify/Expensify Issue URL:
Issue reported by: @Natnael-guchima
Slack conversation: https://expensify.slack.com/archives/C049HHMV9SM/p1687456348210999
View all open jobs on GitHub

Proposal
LHN reflects report value after a click on LHN
Please re-state the problem that we are trying to solve in this issue.
What is the root cause of that problem?
The issue in the code is that the Left Hand Navigation (LHN) does not reflect the report value before clicking on it. Currently, it updates the LHN after a click on the report.
This happens in SplitBillDetailsPage.js code file
In this code file SplitBillDetailsPage Function Given this error in UI
What changes do you think we should make in order to solve the problem?
In Solution of this issue The code can modify as follows:

In the withReportOrNotFound HOC (Higher Order Component), update the reportActions prop to fetch the report actions for the given report ID before rendering the component. This will ensure that the report actions are available in the component's props when it mounts.

Update the SplitBillDetailsPage component to handle the case where the report or report action is not found. In the case where the report or report action is not found, display an appropriate error message or fallback UI.

By making these changes, the SplitBillDetailsPage component will receive the reportActions prop with the necessary data before rendering. It will also handle the case where the report action is not found and display an appropriate error message or fallback UI.

Not reproducible in v1.3.33-3.

@jjcoffee It is still reproducible. The reports that are affected are not the ones with GBR.
Screencast from 2023-06-27 13-26-49.webm

Clarifying something in channel

@dylanexpensify I think the issue is fixed on the latest build. I will check again and let you know if it is fixed or not.

reviewing today and posting next steps!

agreed, i believe this is fixed!


obs-studio: 27.2.4 -> 28.0.3

Description of changes
Depends on #194571 #194572
Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[x] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
22.11 Release Notes (or backporting 22.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[x] Fits CONTRIBUTING.md.

Attempted path: share/obs/obs-studio/locale/en-US.ini
Attempted path: /nix/store/kdpiplmmvdgw3yync5wwhp8akkynghnf-obs-studio-28.0.3/share/obs/obs-studio/locale/en-US.ini
Attempted path: share/obs/obs-studio/locale.ini
Attempted path: /nix/store/kdpiplmmvdgw3yync5wwhp8akkynghnf-obs-studio-28.0.3/share/obs/obs-studio/locale.ini
Attempted path: share/obs/obs-studio/themes/Yami.qss
Attempted path: /nix/store/kdpiplmmvdgw3yync5wwhp8akkynghnf-obs-studio-28.0.3/share/obs/obs-studio/themes/Yami.qss
info: Using EGL/X11
info: CPU Name: AMD Ryzen 7 PRO 4750U with Radeon Graphics
info: CPU Speed: 1700.000MHz
info: Physical Cores: 8, Logical Cores: 16
info: Physical Memory: 31329MB Total, 13964MB Free
info: Kernel Version: Linux 5.15.71
info: Distribution: NixOS "22.11"
info: Session Type: x11
info: Window System: X11.0, Vendor: The X.Org Foundation, Version: 1.20.14
info: Qt Version: 5.15.5 (runtime), 5.15.5 (compiled)
info: Portable mode: false
Attempted path: share/obs/obs-studio/themes/Dark/no_sources.svg
Attempted path: /nix/store/kdpiplmmvdgw3yync5wwhp8akkynghnf-obs-studio-28.0.3/share/obs/obs-studio/themes/Dark/no_sources.svg
QMetaObject::connectSlotsByName: No matching signal for on_tbar_position_valueChanged(int)
QMetaObject::connectSlotsByName: No matching signal for on_actionShowTransitionProperties_triggered()
QMetaObject::connectSlotsByName: No matching signal for on_actionHideTransitionProperties_triggered()
info: OBS 28.0.3 (linux)
info: ---------------------------------
info: ---------------------------------
info: audio settings reset:
	samples per sec: 48000
	speakers:        2
	max buffering:   960 milliseconds
	buffering type:  dynamically increasing
info: ---------------------------------
info: Initializing OpenGL...
info: Loading up OpenGL on adapter AMD AMD RENOIR (LLVM 14.0.6, DRM 3.42, 5.15.71)
info: OpenGL loaded successfully, version 4.6 (Core Profile) Mesa 22.1.7, shading language 4.60
info: ---------------------------------
info: video settings reset:
	base resolution:   640x480
	output resolution: 640x480
	downscale filter:  Bicubic
	fps:               30/1
	format:            NV12
	YUV mode:          Rec. 709/Partial
info: NV12 texture support not available
info: P010 texture support not available
info: Audio monitoring device:
	name: Default
	id: default
info: ---------------------------------
info: ---------------------------------
info:   Loaded Modules:
info: ---------------------------------
info: ==== Startup complete ===============================================
**error: Encoder ID 'obs_x264' not found
error: Failed to get properties for encoder '' (ffmpeg_aac)
error: Could not enumerate any AAC encoder bitrates
error: Failed to create aac streaming encoder (simple output)**
info: Freeing OBS context data
warning: 1 views remain at shutdown
info: == Profiler Results =============================
info: run_program_init: 1022.73 ms
info:  ┣OBSApp::AppInit: 3.835 ms
info:  ┃ ┗OBSApp::InitLocale: 0.908 ms
info:  ┗OBSApp::OBSInit: 211.068 ms
info:    ┣obs_startup: 62.216 ms
info:    ┗OBSBasic::OBSInit: 115.947 ms
info:      ┣OBSBasic::InitBasicConfig: 0.134 ms
info:      ┣OBSBasic::ResetAudio: 0.337 ms
info:      ┣OBSBasic::ResetVideo: 114.975 ms
info:      ┣OBSBasic::InitOBSCallbacks: 0.012 ms
info:      ┣OBSBasic::InitHotkeys: 0.041 ms
info:      ┣obs_load_all_modules2: 0.024 ms
info:      ┗OBSBasic::ResetOutputs: 0.132 ms
info: obs_hotkey_thread(25 ms): min=0.348 ms, median=0.943 ms, max=25.107 ms, 99th percentile=25.107 ms, 96.2963% below 25 ms
info: audio_thread(Audio): min=0.017 ms, median=0.025 ms, max=0.04 ms, 99th percentile=0.04 ms
info: obs_graphics_thread(33.3333 ms): min=0.312 ms, median=0.413 ms, max=2.573 ms, 99th percentile=2.573 ms, 100% below 33.333 ms
info:  ┣tick_sources: min=0.001 ms, median=0.002 ms, max=0.003 ms, 99th percentile=0.003 ms
info:  ┣output_frame: min=0.251 ms, median=0.333 ms, max=2.521 ms, 99th percentile=2.521 ms
info:  ┃ ┗gs_context(video->graphics): min=0.246 ms, median=0.329 ms, max=2.518 ms, 99th percentile=2.518 ms
info:  ┃   ┣render_video: min=0.024 ms, median=0.039 ms, max=0.697 ms, 99th percentile=0.697 ms
info:  ┃   ┃ ┗render_main_texture: min=0.017 ms, median=0.029 ms, max=0.687 ms, 99th percentile=0.687 ms
info:  ┃   ┗gs_flush: min=0.006 ms, median=0.01 ms, max=0.018 ms, 99th percentile=0.018 ms
info:  ┗render_displays: min=0.015 ms, median=0.026 ms, max=0.063 ms, 99th percentile=0.063 ms
info: =================================================
info: == Profiler Time Between Calls ==================
info: obs_hotkey_thread(25 ms): min=25.434 ms, median=26.249 ms, max=49.981 ms, 7.69231% within ±2% of 25 ms (0% lower, 92.3077% higher)
info: obs_graphics_thread(33.3333 ms): min=32.577 ms, median=33.343 ms, max=33.926 ms, 95.2381% within ±2% of 33.333 ms (4.7619% lower, 0% higher)
info: =================================================
info: Number of memory leaks: 304

Builds now successfully but does not start with this error: Failed to create aac streaming encoder (simple output)

I think the problem is, that the plugin folder is cleared. At least i got it somehow working with the following hackish diff (which breaks the nixos plugin system for obs, it's only for demonstration!)
index 5303991f1fb..6db7c5239e7 100644
--- a/pkgs/applications/video/obs-studio/wrapper.nix
+++ b/pkgs/applications/video/obs-studio/wrapper.nix
@@ -22,16 +22,16 @@ symlinkJoin {
       wrapCommandLine = [
           "wrapProgram"
           "$out/bin/obs"
-          ''--set OBS_PLUGINS_PATH "${pluginsJoined}/lib/obs-plugins"''
-          ''--set OBS_PLUGINS_DATA_PATH "${pluginsJoined}/share/obs/obs-plugins"''
+          ''--set OBS_PLUGINS_PATH "${obs-studio}/lib/obs-plugins"''
+          ''--set OBS_PLUGINS_DATA_PATH "${obs-studio}/share/obs/obs-plugins"''
         ] ++ pluginArguments;
     in ''
     ${concatStringsSep " " wrapCommandLine}

     # Remove unused obs-plugins dir to not cause confusion
-    rm -r $out/share/obs/obs-plugins
+    # rm -r $out/share/obs/obs-plugins
     # Leave some breadcrumbs
-    echo 'Plugins are at ${pluginsJoined}/share/obs/obs-plugins' > $out/share/obs/obs-plugins-README
+    # echo 'Plugins are at ${pluginsJoined}/share/obs/obs-plugins' > $out/share/obs/obs-plugins-README
   '';

   inherit (obs-studio) meta;

Please also note that with obs version 28, there is no need for the external websocket plugin. i did not manage to build version 5.0.2 of it, but it's also not needed, because it is now included in obs (see https://github.com/obsproject/obs-studio/releases/tag/28.0.0):

Added obs-websocket 5.0 as a first-party plugin [tt2468]

So i think obs-studio-plugins.obs-websocket should to be removed with/after the update to version 28 of obs.
Sadly my nixos skills are not good enough to really help, but i hope this information saves you some time.

Thanks for your research and pointing this out! It seems, that we can not continue to drop the shipped plugins like before (?), maybe we can do something like splitting the plugin-files from the obs-build to include them in the combined-plugins output. But for now I have no idea how to archive this.
For the websocket-plugin: I also ran into this but forget to add it here as I dropped the plugins at some point for now until OBS28 runs (somehow).

obs doesn't pick up its built-in plugins, setting OBS_PLUGINS_PATH to ./result/lib/obs-plugins (same with OBS_PLUGINS_DATA_PATH and share) makes startup succeed. Trying to figure out how to properly fix that.
Also we should consider building it with Qt 6, which may cause plugin incompatibilities however.

Also we should consider building it with Qt 6, which may cause plugin incompatibilities however.

Checked the used dependencies, we missing qtx11extras for Qt6. As I didn't found libsForQt6 I would have imported qt6 and use qt6.qtbase and qt6.qtsvg? Or do we have to move the obs-studio package to qt6-packages.nix?
@raphaelr Thanks for looking into and helping out 🥇

i also wanted to share my latest success: i got obs working with an external plugin: https://github.com/BenediktSeidl/nixpkgs/commit/b4c7471f3825e27e9960298e6a5ced0b5de80f2e but the non wrapped version of obs will exit with an error, you described above. also obs-backgroundremoval can only be compiled from master.

Updated PR to build with qt6, added temporary fix (https://github.com/NixOS/nixpkgs/pull/194578#issuecomment-1268965958) to be able to run output for testing

Raphael has the problem right. obs-nix.c expects a relative OBS_PLUGIN_DESTINATION at runtime, but we need it to be absolute at build time.
I'd consider something like this: https://github.com/miangraham/nixpkgs/commit/286080568c51f5f3d3e3a06a1c8322bf15c98cd5
Leave OBS_PLUGIN_DESTINATION unchanged on the build side, but give the runtime side what it expects by pulling the prefix out of the string passed from cmake into obsconfig.h's #define. Slightly bigger change than one-line patching obs-nix.c, but future-proofs against other C code additions with similar expectations.
New variable used just for this at build time, as seen from cmake:
-- OBS_PLUGIN_DESTINATION_RELATIVE="lib/obs-plugins"
I've built but not runtime tested the above because my wayland system dumps core from QT before reaching the affected areas, which will be another bug to fix at some point. Should be testable from X.

Re: qt6, unrelated to obs-plugins, here's my wayland error for reference.
$ nix-shell /home/ian/.cache/nixpkgs-review/rev-286080568c51f5f3d3e3a06a1c8322bf15c98cd5/shell.nix

.cache/nixpkgs-review/rev-286080568c51f5f3d3e3a06a1c8322bf15c98cd5 via ❄  impure (review-shell)
$ obs --verbose
qt.qpa.plugin: Could not find the Qt platform plugin "wayland" in ""
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: offscreen, minimal, eglfs, linuxfb, minimalegl, xcb, vkkhrdisplay, vnc.

Aborted (core dumped)

I'd consider something like this: miangraham@2860805

Thanks!

Re: qt6, unrelated to obs-plugins, here's my wayland error for reference

adding qtwayland to buildInputs fixes that - I guess that's not included by default in qt6 anymore?

Good call. This addition got me running on wayland (unwrapped): https://github.com/miangraham/nixpkgs/commit/e36a42b0c8fe327c0a722eb6135b2c8c66e2a635
.cache/nixpkgs-review/rev-e36a42b0c8fe327c0a722eb6135b2c8c66e2a635 via ❄  impure (review-shell)
λ obs --verbose
...
info: Platform: Wayland
...
info: Qt Version: 6.4.0 (runtime), 6.4.0 (compiled)
...
info:   Loaded Modules:
info:     vlc-video.so
info:     text-freetype2.so
info:     rtmp-services.so
info:     obs-x264.so
info:     obs-websocket.so
info:     obs-vst.so
info:     obs-transitions.so
info:     obs-outputs.so
info:     obs-filters.so
info:     obs-ffmpeg.so
info:     obs-browser.so
info:     linux-v4l2.so
info:     linux-pulseaudio.so
info:     linux-pipewire.so
info:     linux-capture.so
info:     linux-alsa.so
info:     image-source.so
info:     frontend-tools.so
info:     decklink-output-ui.so
info:     decklink-captions.so
info: ---------------------------------
info: ==== Startup complete ===============================================
...
info: =================================================
info: Number of memory leaks: 0

Lots of plugin build breakage as expected, but otherwise looks much better than I would have guessed this early.
Assuming the above works out, it should be safe to revert the changes to wrapper.nix and nuke obs-websocket.nix.

Thanks for digging into @miangraham I've encountered your feedback/patch to the PR to then try to get some plugins working.
@raphaelr I've added qtwayland to buildInputs or do we need a condition here?
Can I just remove obs-websocket plugin from nixpkgs to drop it or is there some kind of option where we should do this depending on obs-studio version for backwards-compatibility? Should this be added to this PR or a separate referenced here?

Successfully fixed build for obs-pipewire-audio-capture and working test-recording.

I've added qtwayland to buildInputs or do we need a condition here?

Just add it to buildInputs unconditionally.

Can I just remove obs-websocket plugin from nixpkgs to drop it

Remove the file and replace the entry in plugins.nix with a throw: throw "obs-websocket has been removed: Functionality has been integrated into obs-studio itself.", so that users know what happened.
In any case, removing plugins is a breaking change and therefore requires an entry in the release notes.

I've added qtwayland to buildInputs or do we need a condition here?

Just add it to buildInputs unconditionally.

✅

Can I just remove obs-websocket plugin from nixpkgs to drop it

Remove the file and replace the entry in plugins/default.nix with a throw: throw "obs-websocket has been removed: Functionality has been integrated into obs-studio itself.", so that users know what happened.
In any case, removing plugins is a breaking change and therefore requires an entry in the release notes.

Can I do it with this PR as the plugin will be removed with the upgrade to OBS28 or should it be another depending PR (like librist and libajantv2)

-DENABLE_JACK=ON

Should add this to cmakeFlags, libjack2 is already included in buildInputs, so it makes sense to enable it

Will add it later and check if the patches are still necessary.

Result of nixpkgs-review pr 194578 run on x86_64-linux 1

5 packages failed to build:

obs-studio-plugins.obs-backgroundremoval
obs-studio-plugins.obs-move-transition
obs-studio-plugins.obs-multi-rtmp
obs-studio-plugins.obs-pipewire-audio-capture
obs-studio-plugins.obs-websocket

8 packages built:

libajantv2
librist
obs-studio
obs-studio-plugins.looking-glass-obs
obs-studio-plugins.obs-gstreamer
obs-studio-plugins.obs-nvfbc
obs-studio-plugins.obs-vkcapture
obs-studio-plugins.wlrobs

Result of nixpkgs-review pr 194578 run on x86_64-linux 1

5 packages failed to build:

obs-studio-plugins.obs-backgroundremoval
obs-studio-plugins.obs-move-transition
obs-studio-plugins.obs-multi-rtmp
obs-studio-plugins.obs-pipewire-audio-capture
obs-studio-plugins.obs-websocket

8 packages built:

libajantv2
librist
obs-studio
obs-studio-plugins.looking-glass-obs
obs-studio-plugins.obs-gstreamer
obs-studio-plugins.obs-nvfbc
obs-studio-plugins.obs-vkcapture
obs-studio-plugins.wlrobs

Plugins already fixed for OBS28:

obs-studio-plugins.obs-move-transition - https://github.com/NixOS/nixpkgs/pull/195051
obs-studio-plugins.obs-pipewire-audio-capture - https://github.com/NixOS/nixpkgs/pull/195024

Updated PR to add -DENABLE_JACK=ON. When it's ready I will remove the picked commit for the required new packages.

Result of nixpkgs-review pr 194578 run on x86_64-linux 1

6 packages failed to build:

obs-studio-plugins.obs-backgroundremoval
obs-studio-plugins.obs-move-transition
obs-studio-plugins.obs-multi-rtmp
obs-studio-plugins.obs-ndi
obs-studio-plugins.obs-pipewire-audio-capture
obs-studio-plugins.obs-websocket

6 packages built:

obs-studio
obs-studio-plugins.looking-glass-obs
obs-studio-plugins.obs-gstreamer
obs-studio-plugins.obs-nvfbc
obs-studio-plugins.obs-vkcapture
obs-studio-plugins.wlrobs

Updated PR to add -DENABLE_JACK=ON

Tested on https://github.com/NixOS/nixpkgs/commit/31b147d1613df86466bc5bf0cca86e0fd990df5f:
info: ---------------------------------
info:   Loaded Modules:
...
info:     linux-jack.so
...
info: ---------------------------------

info: ------------------------------------------------
info: Loaded scenes:
info: - scene 'Main':
info:     - source: 'obs music in' (jack_output_capture)
info:         - monitoring: monitor and output
info:     - source: 'obs mic in' (jack_output_capture)
info:         - monitoring: monitor and output
...
info: ------------------------------------------------

It works! 🎉
Qt is still sad:
info: Qt Version: 5.15.5 (runtime), 5.15.5 (compiled)

Current PR is missing at least the qt6Packages.callPackage change from a previously working commit.

Updated PR to build against Qt6 again, removed cherry-picked dependencies as merged now.

Can I do it within this PR (in an additional commit) as the plugin will be removed with the upgrade to OBS28 or should it be another depending PR (like librist and libajantv2)

Do it in this PR; if you do it in a new PR master becomes broken (no obs-websocket but also no OBS 28).

Great to see a new OBS coming in. :+1:  Can you rebase this PR? Otherwise, the build runs into:
❯ nix-build -A pkgs.obs-studio
error: Function called without required argument "librist" at /home/julian/src/own/nixpkgs/pkgs/applications/video/obs-studio/default.nix:40, did you mean "librest", "libXtst" or "libast"?

I've tested it with some light recording workloads and it looks good. Fiddling with a V4L2 source made by Gnome Session crash, but that doesn't seem like it should be OBS's fault.
The Gnome Shell crash is this one and it's supposedly fixed in GNOME 43: https://gitlab.gnome.org/GNOME/mutter/-/issues/2433 (I'm running 42.4)

Can I do it within this PR (in an additional commit) as the plugin will be removed with the upgrade to OBS28 or should it be another depending PR (like librist and libajantv2)

Do it in this PR; if you do it in a new PR master becomes broken (no obs-websocket but also no OBS 28).

Done in separate commit within this PR

Great to see a new OBS coming in. +1 Can you rebase this PR? Otherwise, the build runs into:

Rebased on current master

obs-studio looks good; plugin status (nix build .#obs-studio-plugins.name):
https://obsproject.com/kb/obs-studio-28-plugin-compatibility

[ ] looking-glass-obs: builds, do not have the hardware to test
[ ] obs-backgroundremoval: build failure; needs building from master as indicated by BenediktSeidl
[ ] obs-gstreamer: builds, need to test
[ ] obs-hyperion: https://github.com/NixOS/nixpkgs/pull/190721
[ ] obs-move-transition: https://github.com/NixOS/nixpkgs/pull/195051
[ ] obs-multi-rtmp: build failure
[ ] obs-ndi: unfree stuff, cannot even attempt to build, compatibility page says "in progress"
[ ] obs-nvfbc: build failure
[ ] obs-pipewire-audio-capture: https://github.com/NixOS/nixpkgs/pull/195024
[ ] obs-vkcapture: builds, need to test
[x] obs-websocket: removed
[ ] wlrobs: https://github.com/NixOS/nixpkgs/pull/195029

This is just an overview of the current status, not a "this MUST be fixed" list.

obs-ndi non-compat tracking issue: https://github.com/Palakis/obs-ndi/issues/745
Upstream is broken against v28 until they finalize a fix.
Bleeding edge packagers like Alpine-edge, Arch, RPMFusion seem to have rolled forward without it. It's also got users in practice--see activity on the issue above for an idea.
Assuming we don't plan to wait for it, flag as broken until they have a new release and consider user impact as a factor in merging before or after 22.11.

Since many plugins aren't ported yet and the changes to the derivation seem fairly minimal, could we keep around both versions?

Since many plugins aren't ported yet and the changes to the derivation seem fairly minimal, could we keep around both versions?

Sounds like a good idea, will try to have a look at it but mighty take some days (maybe the weekend).

Since many plugins aren't ported yet and the changes to the derivation seem fairly minimal, could we keep around both versions?

I've had quiet a look today but as there are fundamental changes like stdenv.mkDerivation vs mkDerivation my solution would be two separate derivations even with some duplicate code as we intend to drop 27 in the near future? Otherwise I would need some help/ideas on a more generic approach/example

I'm not an expert in this but it seems mkDerivation as a direct parameter is a remnant of an older style of packaging QT apps. Just use stdenv.mkDerivation and add wrapQtAppsHook to nativeBuildInputs for both versions.
As for version selection, I'd use a pattern similar to Emacs. A generic.nix with a function that takes version and hash and returns the existing package function. Then add versioned files that simply call generic.nix with a certain version. (You could do the same in a single file, that's preference.)
In the derivation we can then check against the version for optional dependencies etc. using finalAttrs.version (or rec but it kinda sucks).

Thanks @Atemu again for your help - I'm not quite sure if it's fully the solution you proposed but there were some issues with importing additional packages in 27/28.nix and appending to buildInputs so I came across this solution in a library and got it adapted and working. Both versions 27.x and 28.x are building and possible to launch without errors.
One thing I'm unsure about, how to handle/proceed with the plugins as there are sometimes different build/things for LibObs etc. needed.


fix(es/codegen): Skip emit space if jsx attrs is empty

Description:
For now, when emit a JSXOpeningElement directly, it will contain a space whether or not attrs is empty.
// input

// output

This PR fix this issue by skip space!() and emit attrs when attrs is empty.

 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.You have signed the CLA already but the status is still pending? Let us recheck it.

You can do UPDATE=1 cargo test to update fixtures

Already try to fix test error, Thx!


Add :LushifyJustHSL or similar

If you're working on a colors file, with no spec, :Lushify will work to highlight those colors but it will also be looking for a spec to apply. It doesn't explode but it will keep complaining.

Scope creep for now.


Custom Icon Alignment

I have implemented custom icons for play/pause. But they are not center aligned which is like this

How to set that custom button to center aligned.

Since it's your custom layout, that's up to you. You do it in the same way as you would in a regular view.

Since it's your custom layout, that's up to you. You do it in the same way as you would in a regular view.

I am using the methods setCustomAction1() and setCustomAction2(). Not a custom views it's custom icons

custom actions are not centred by design. More appropriate names should have been setCustomActionRight and setCustomActionLeft

custom actions are not centred by design. More appropriate names should have been setCustomActionRight and setCustomActionLeft

Okay, Thank you


Updates to filtercheck macro (and tests)

:tada: This PR is included in version 4.23.3 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket: