Sysbox Install - Pods stuck in ContainerCreating or Podinitializing state - cri-o configured with systemd cgroup manager, but did not receive slice as parent

Rancher 2.6.5 - RKE2 v1.23.6+rke2r1 - Sysbox-CE 0.5.2 - Ubuntu 20.04 - Kernel 5.13.0-39-generic - x86_64
An issue was observed when attempting to install Sysbox on an RKE2 kubernetes cluster.
After the install, the pods in each worker node fail to come back online, and are stuck in the ContainerCreating or Podinitializing state.
The pods show the following error.

Failed to create pod sandbox: rpc error: code = Unknown desc = cri-o configured with systemd cgroup manager, but did not receive slice as parent: /kubepods/burstable/pod95c5e3b0-0305-4bd3-8cf7-019d19f9af0b

Below are logs from the sysbox-deploy-k8s-xxxxx pod.

Detected Kubernetes version v1.23
Adding K8s label "crio-runtime=installing" to node ...
node/xxxxx labeled
Deploying CRI-O installer agent on the host (v1.23) ...
Running CRI-O installer agent on the host (may take several seconds) ...
Removing CRI-O installer agent from the host ...
Configuring CRI-O ...
Adding K8s label "sysbox-runtime=installing" to node ...
node/xxxxx labeled
Installing Sysbox dependencies on host ...
Copying shiftfs sources to host ...
Kernel version 5.13 is >= 5.13
Deploying Sysbox installer helper on the host ...
Running Sysbox installer helper on the host (may take several seconds) ...
Stopping the Sysbox installer helper on the host ...
Removing Sysbox installer helper from the host ...
Installing Sysbox on host ...
Created symlink from /etc/systemd/system/multi-user.target.wants/sysbox.service to /lib/systemd/system/sysbox.service.
Created symlink from /etc/systemd/system/sysbox.service.wants/sysbox-mgr.service to /lib/systemd/system/sysbox-mgr.service.
Created symlink from /etc/systemd/system/sysbox.service.wants/sysbox-fs.service to /lib/systemd/system/sysbox-fs.service.
Configuring host sysctls ...
kernel.unprivileged_userns_clone = 1
fs.inotify.max_queued_events = 1048576
fs.inotify.max_user_watches = 1048576
fs.inotify.max_user_instances = 1048576
kernel.keys.maxkeys = 20000
kernel.keys.maxbytes = 1400000
kernel.pid_max = 4194304
Starting Sysbox ...
Adding Sysbox to CRI-O config ...
Restarting CRI-O ...
Deploying Kubelet config agent on the host ...
Running Kubelet config agent on the host (will restart Kubelet and temporary bring down all pods on this node for ~1 min) ...

Same issue exists with Rancher 2.6.6, K8S v1.22.10, Ubuntu 20.04 (latest).

Reproduction steps:

Create 2 e2-medium VMs on GCP with Ubuntu 22.04 Minimal x86/64 (NOTE: Sysbox doesn't work with RKE control plane + worker in a single node [it doesn't recognize kubelet], so you need a separate worker-only node)
Go to a Rancher instance (we use v2.6.3), create a RKE2 cluster, no changes from the default options
Add one of the instances as control-plane + etcd + worker, without the label
Add the other instance as worker only, with the label sysbox-install=yes
Run: kubectl apply -f https://raw.githubusercontent.com/nestybox/sysbox/master/sysbox-k8s-manifests/sysbox-install.yaml
Install runs successfully, but after kubelet gets restarted, the issue reported in the first post happens, all pods in the node get stuck in ContainerCreating/PodInitializing

@dgadelha, thanks for the repro steps. Will take a look at this one within the next few days.

@rodnymolina same issue on:
RKE2 v1.23.10+rke2r1, sysbox-ce v0.5.2, Ubuntu 22.04, kernel 5.15.0-46-generic
When the RKE2 worker node is initially bootstrapped (with containerd), kubelet on the node is running with the following arg:
--cgroup-driver=systemd
After successful sysbox installation kubelet is restarted and running with the --cgroup-driver=cgroupfs.
However, sysbox generated crio configuration is missing the cgroup_manager setting which defaults to systemd (https://github.com/nestybox/cri-o/blob/main/docs/crio.conf.5.md)
Adding the following in /etc/crio/crio.conf:
[crio]
  ...
  [crio.runtime]
    conmon_cgroup = "pod"
    cgroup_manager = "cgroupfs"
  ...

and restarting crio with systemctl restart crio.service resolves the problem.

@gdraganic, I think that's pretty much the issue here...
The sysbox daemon-set should not have switched the RKE2's kubelet to cgroupfs if RKE2 has originally picked systemd as its cgroup driver. The goal here is to reduce disruptions to the minimum, so we will need to check why this isn't happening.
In consequence, the current crio.conf file is displaying the proper configuration. The problem is with the kubelet one. We will look into this.
Btw, yes, you can also workaround the issue by doing what you suggested (switching crio to cgroupfs), but I think a better solution would be to do what I described above.
Thanks for your detailed analysis.

What exactly is sysbox doing here? Is it installing cri-o and then reconfiguring rke2 to use that as the --container-runtime-endpoint instead of the packaged containerd? RKE2 manages the cgroup driver for both the kubelet and containerd if you use the packaged containerd, but if you bring your own container runtime, you're responsible for making sure that the kubelet's cgroup driver is the same as the container runtime. Sounds like sysbox is not doing that properly.

but if you bring your own container runtime,  you're responsible for making sure that the kubelet's cgroup driver is the same as the container runtime.

That's correct @brandond; it * should * be doing that with Kubelet and CRI-O, but I'll let @rodnymolina double check it.

@rodnymolina any update ?
Same issue on:
Rancher 2.6.8, v1.23.8-rancher1, sysbox-ce v0.5.2, Ubuntu 20.04, kernel 5.4.0-1055-kvm

@brandond, @TH3VenGeuR, sorry for the delay. We have a fix for this one already. I'll provide a test image to verify things are working as expected. Will ping you when done (a few days).

RKE2 manages the cgroup driver config for both the kubelet and containerd if you use the packaged containerd, but if you bring your own container runtime, you're responsible for making sure that the kubelet's cgroup driver is the same as the container runtime. Sounds like sysbox is not doing that properly.

@brandond. that was exactly the issue: sysbox was not properly setting the cgroup-driver based on kubelet's  preconfigured value, which explains why cri-o and kubelet are displaying conflicting settings.

@rodnymolina Any update on the fix. I also have an RKE2 cluster that this issue is reproducible on.

@MWY3510, @TH3VenGeuR, could you please give this image a try? This one is expected to fix this issue and a few others we've been working on.
To point to it, you will need to update our install/uninstall manifests to ghcr.io/nestybox/sysbox-deploy-k8s:rodny-dev.

@rodnymolina I tested your image against a fresh RKE2 cluster running 1.23. Looks like it is working. I will test against my other two clusters and double check. Should have those results later today. Thanks.

@rodnymolina same issue on: RKE2 v1.23.10+rke2r1, sysbox-ce v0.5.2, Ubuntu 22.04, kernel 5.15.0-46-generic
When the RKE2 worker node is initially bootstrapped (with containerd), kubelet on the node is running with the following arg: --cgroup-driver=systemd
After successful sysbox installation kubelet is restarted and running with the --cgroup-driver=cgroupfs. However, sysbox generated crio configuration is missing the cgroup_manager setting which defaults to systemd (https://github.com/nestybox/cri-o/blob/main/docs/crio.conf.5.md)
Adding the following in /etc/crio/crio.conf:
[crio]
  ...
  [crio.runtime]
    conmon_cgroup = "pod"
    cgroup_manager = "cgroupfs"
  ...

and restarting crio with systemctl restart crio.service resolves the problem.

I am currently using the same workaround above and I am able to run sysbox on Ubuntu 20.04 Rancher RKE1 K8S 1.23.14 cluster. However, whenever a worker node is rebooted, kubelet und kubelet-proxy restarted by dockerd try to bind the same ports 10250 and 10248 on the restarted node. Of course, one of them fails and continues to restart forever.
I found the following workaround:

Stop the kubelet-proxy container and remove it:
docker stop <kubelet-proxy-id>
docker rm <kubelet-proxy-id>
Wait until K8S restarts kubelet-proxy
Worker node will slowly get healthy again

Although I have no clue what is happening there, I hope others might benfit from this workaround.

Hi @rodnymolina, image is not working on my environment.
It ends with error : Failed to create pod sandbox: rpc error: code = Unknown desc = cri-o configured with systemd cgroup manager, but did not receive slice as parent

@FFock, sorry for the delay in getting back to you. I will try to restart a k3s node to reproduce the behavior you described.
@TH3VenGeuR, could you please provide more details about your setup so that I can attempt to reproduce it? Thanks.

@TH3VenGeuR, also, which sysbox-deploy image did you try in this last attempt?

Hello, i tried this image ghcr.io/nestybox/sysbox-deploy-k8s:rodny-dev. You said it should fix the issue one month ago
My setup is still the same :
Rancher 2.6.8, v1.23.8-rancher1, sysbox-ce v0.5.2, Ubuntu 20.04, kernel 5.4.0-1055-kvm

Hi @rodnymolina,
I've now tested the new sysbox-deploy image against the version combinations detailed below.
Each test succeeded, in that all pods came online of their own accord.  A series of errors are seen in the logs reproduced below.
Here is the deploy image used.
ghcr.io/nestybox/sysbox-deploy-k8s:rodny-dev
Here are the version combinations.

Rancher 2.7.1 - RKE2 v1.23.15+rke2r1 - Sysbox-CE 0.5.2 (rodny-dev) - Ubuntu 20.04.5 LTS - Kernel 5.15.0-46-generic - x86_64
Rancher 2.7.1 - RKE2 v1.24.9+rke2r2 - Sysbox-CE 0.5.2 (rodny-dev) - Ubuntu 20.04.5 LTS - Kernel 5.15.0-46-generic - x86_64
Rancher 2.7.1 - RKE2 v1.24.9+rke2r2 - Sysbox-CE 0.5.2 (rodny-dev) - Ubuntu 22.04.2 LTS - Kernel 5.19.0-35-generic - x86_64

Here is the manifest file used during installation.
https://github.com/nestybox/sysbox/raw/master/sysbox-k8s-manifests/sysbox-ee-install.yaml
Here are the logs from the sysbox-ee-deploy-k8s container for each combination.
Combination 1
Fri, Mar 3 2023 2:25:12 pm | E0303 04:25:12.703565 27 memcache.go:238] couldn't get current server API group list: Get "https://<IP_ADDRESS>:443/api?timeout=32s": dial tcp <IP_ADDRESS>:443: i/o timeout
Fri, Mar 3 2023 2:25:12 pm | Detected Kubernetes version v1.23
Fri, Mar 3 2023 2:25:13 pm | Stopping the Kubelet config agent on the host ...
Fri, Mar 3 2023 2:25:13 pm | Removing Kubelet config agent from the host ...
Fri, Mar 3 2023 2:25:13 pm | Kubelet reconfig completed.
Fri, Mar 3 2023 2:25:13 pm | Adding K8s label "crio-runtime=running" to node ...
Fri, Mar 3 2023 2:25:14 pm | node/athena207-cluster1-w1 labeled
Fri, Mar 3 2023 2:25:14 pm | Adding K8s label "sysbox-runtime=running" to node ...
Fri, Mar 3 2023 2:25:14 pm | node/athena207-cluster1-w1 labeled
Fri, Mar 3 2023 2:25:14 pm | The k8s runtime on this node is now CRI-O.
Fri, Mar 3 2023 2:25:14 pm | Sysbox-EE installation completed.
Fri, Mar 3 2023 2:25:14 pm | Done.

Combination 2
Fri, Mar 3 2023 9:16:46 am | E0302 23:16:46.318312 27 memcache.go:255] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
Fri, Mar 3 2023 9:16:46 am | E0302 23:16:46.326628 27 memcache.go:106] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
Fri, Mar 3 2023 9:16:46 am | E0302 23:16:46.336036 27 memcache.go:106] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
Fri, Mar 3 2023 9:16:46 am | E0302 23:16:46.337765 27 memcache.go:106] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
Fri, Mar 3 2023 9:16:46 am | E0302 23:16:46.427676 34 memcache.go:255] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
Fri, Mar 3 2023 9:16:46 am | E0302 23:16:46.430724 34 memcache.go:106] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
Fri, Mar 3 2023 9:16:46 am | E0302 23:16:46.434975 34 memcache.go:106] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
Fri, Mar 3 2023 9:16:46 am | E0302 23:16:46.437726 34 memcache.go:106] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
Fri, Mar 3 2023 9:16:46 am | Detected Kubernetes version v1.24
Fri, Mar 3 2023 9:16:46 am | Stopping the Kubelet config agent on the host ...
Fri, Mar 3 2023 9:16:46 am | Removing Kubelet config agent from the host ...
Fri, Mar 3 2023 9:16:47 am | Kubelet reconfig completed.
Fri, Mar 3 2023 9:16:47 am | Adding K8s label "crio-runtime=running" to node ...
Fri, Mar 3 2023 9:16:47 am | E0302 23:16:47.342302 62 memcache.go:255] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
Fri, Mar 3 2023 9:16:47 am | E0302 23:16:47.347992 62 memcache.go:106] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
Fri, Mar 3 2023 9:16:47 am | E0302 23:16:47.352203 62 memcache.go:106] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
Fri, Mar 3 2023 9:16:47 am | E0302 23:16:47.354770 62 memcache.go:106] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
Fri, Mar 3 2023 9:16:47 am | node/athena207-cluster1-w1 labeled
Fri, Mar 3 2023 9:16:47 am | Adding K8s label "sysbox-runtime=running" to node ...
Fri, Mar 3 2023 9:16:47 am | E0302 23:16:47.624243 66 memcache.go:255] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
Fri, Mar 3 2023 9:16:47 am | E0302 23:16:47.642437 66 memcache.go:106] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
Fri, Mar 3 2023 9:16:47 am | E0302 23:16:47.645826 66 memcache.go:106] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
Fri, Mar 3 2023 9:16:47 am | E0302 23:16:47.647929 66 memcache.go:106] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
Fri, Mar 3 2023 9:16:47 am | node/athena207-cluster1-w1 labeled
Fri, Mar 3 2023 9:16:47 am | The k8s runtime on this node is now CRI-O.
Fri, Mar 3 2023 9:16:47 am | Sysbox-EE installation completed.
Fri, Mar 3 2023 9:16:47 am | Done.

Combination 3
Fri, Mar 3 2023 10:41:03 am | Detected Kubernetes version v1.24
Fri, Mar 3 2023 10:41:03 am | Stopping the Kubelet config agent on the host ...
Fri, Mar 3 2023 10:41:04 am | Removing Kubelet config agent from the host ...
Fri, Mar 3 2023 10:41:04 am | Kubelet reconfig completed.
Fri, Mar 3 2023 10:41:04 am | Adding K8s label "crio-runtime=running" to node ...
Fri, Mar 3 2023 10:41:05 am | node/athena207-cluster2-w1 labeled
Fri, Mar 3 2023 10:41:05 am | Adding K8s label "sysbox-runtime=running" to node ...
Fri, Mar 3 2023 10:41:05 am | node/athena207-cluster2-w1 labeled
Fri, Mar 3 2023 10:41:05 am | The k8s runtime on this node is now CRI-O.
Fri, Mar 3 2023 10:41:05 am | Sysbox-EE installation completed.
Fri, Mar 3 2023 10:41:05 am | Done.

I think I found the root cause of this problem. It is the kubelet-config-helper.service which is not accepting the crio runtime sysbox-deploy installed:
+ crio_conf_file=/etc/crio/crio.conf
+ crio_socket=/var/run/crio/crio.sock
+ crio_runtime=unix:///var/run/crio/crio.sock
+ kubelet_bin=
+ runtime=
+ kubelet_ctr_restart_mode=no
+ execstart_line_global=
+ main
++ id -u
+ euid=0
+ [[ 0 -ne 0 ]]
+ mount
+ grep -q '/sys .*ro,'
+ kubelet_snap_deployment
+ snap list
+ grep -q kubelet
+ kubelet_rke_deployment
+ command -v docker
+ docker inspect '--format={{.Config.Labels}}' kubelet
+ egrep -q rke.container.name:kubelet
+ do_config_kubelet_rke
+ echo 'Detected RKE'\''s docker-based kubelet deployment on host.'
Detected RKE's docker-based kubelet deployment on host.
+ get_runtime_kubelet_docker
+ set +e
++ docker exec kubelet bash -c 'ps -e -o command | egrep \^kubelet | egrep -o "container-runtime-endpoint=\S*" | cut -d '\''='\'' -f2'
+ runtime=unix:///var/run/cri-dockerd.sock
+ set -e
+ [[ unix:///var/run/cri-dockerd.sock == '' ]]
+ [[ unix:///var/run/cri-dockerd.sock =~ crio ]]
+ [[ ! unix:///var/run/cri-dockerd.sock =~ dockershim ]]
+ echo 'Unsupported runtime for RKE scenario: unix:///var/run/cri-dockerd.sock'
Unsupported runtime for RKE scenario: unix:///var/run/cri-dockerd.sock

This seems to be fixed in 0.6.1. On AKS using sysbox 0.6.1 I get a valid crio.conf file with cfgroup_manager = "systemd" (as it should be).

Thanks for verifying this @the-gigi.
There are a couple of different issues being reported here: 1) the systemd/cgroupfs issue that affects mostly rke2 setups and which has been already fixed in v0.6.1, and 2) the one reported by @FFock that impacts traditional rke deployments. The second one hasn't been fixed yet, but I'm planning to do so shortly.

@rodnymolina, am seeing issue 1 continue to show up periodically on rke2 nodes with Sysbox 0.6.3.

Observations below of an issue 1 failure with Sysbox 0.6.3.
A search for the kubelet process comes up empty.
ps -aux | grep kubelet
A reference to cgroupfs is missing from crio config.
/etc/crio/crio.conf

rke2-agent shows a failure at 12:54:50.
systemctl status rke2-agent

Sysbox came online just prior to the failure, at 12:54:47.
systemctl status sysbox

Comparing these details with a successful launch shown below.
ps -aux | grep kubelet

/etc/crio/crio.conf

systemctl status rke2-agent

systemctl status sysbox

The following pieces look to be critical.
journalctl -xefu rke2-agent.service

journalctl -xefu kubelet-config-helper.service

Both of these are systemd related and running within a newly created VM.
Am therefore assuming the issue relates to lingering of systemd user instances within the VM.
I'll therefore apply the following fix and monitor to see if the issue re-occurs.

loginctl enable-linger root

in an attempt to workaround this timing issue, our automated solution now puts the following file in place.
/etc/crio/crio.conf.d/crio.conf

this is performed prior to configuring the worker node with RKE2.
after the Sysbox installation completes, crio shows the following
crio-status info

it is also observed that rke2-agent is placed in a stopped state.
manually starting rke2-agent at this point successfully brings the RKE2 system online.
am currently attempting to devise an automated approach for handling this aspect of the workaround.
@rodnymolina, any thoughts on the above?

we started looking at the issue from the perspective that a service is being reloaded at the failure point.
we therefore removed the needrestart package ... and also noticed that snapd continued to reload lxd at the failure point.
we are now testing the removal of both the "needrestart * and snapd* packages just prior to creating the RKE2 node ... and reinstalling these two packages once the RKE2 node is successfully started with Sysbox installed.


Github actions fixes

see https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/

Cancelling. Will do these fixes on the other PR #117


Make node.cmd() more robust.

I have an environment where different nodes may call net.stop() and sudo mn -c to clean up mininet. Unfortunately, it seems that net.stop()  gets stuck  if sudo mn -c has been called in the meantime. The code to reproduce this issue is as follows:
import os
from mininet.net import Mininet
from mininet.topo import SingleSwitchTopo
from mininet.log import setLogLevel

def test_net(hosts=5, sched='cfs'):
    topo = SingleSwitchTopo(hosts)
    net = Mininet(topo=topo, controller=None)
    net.start()
    os.system('sudo mn -c')
    net.stop()

if __name__ == '__main__':
    setLogLevel('info')
    test_net(hosts=3)

This pull request is intended to make the node.cmd() call more robust to ensure that it does not crash anymore.
This file change is taken from changes in containernet (@mpeuster). Please let me know what you think.

Not sure how to debug that failing test...


Generics and Java 7 syntax in osgi and plugins packages

These changes leave only core untouched. Generics are not applied where Java compiler is unhappy (arrays of generics).

https://stackoverflow.com/questions/30454635/when-using-for-a-primitive-and-a-boxed-value-is-autoboxing-done-or-is-unbox

Thanks - the JLS sections[1][2] mentioned in there answers my questions. I have now merged this PR.
Unfortunately, my attempt at triggering the auto closure of the PR by adding a trigger message to the commit hasn't succeeded this time. So please go ahead and manually close this PR for now.
[1] https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.21.1
[2] https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.6.2

Thank you!


Switching Reconciliation in SLI Prober from composition to composite resource

Summary
Switching from composition to composite in Prober Reconciliation to avoid issues with monitoring and aleerting when instance is recreated with the same name in the same namespace.
Solution respects our decision to use the same credentials v1/Secret which user uses, this is why I'm fetching composition and take different Secret.
Tested using:

test files
local kind cluster
lab cluster

I guess the title should be "Switching Reconciliation in SLI Prober from claim to composite resource"?


Aqua QSVM  - 403 Client Error:  .....  Error code: NOT_CREDITS_AVALIABLES.

Informations

Qiskit Aqua version:  0.6
Python version:  3.7
Operating system:  Windows10
We are using qiskit 0.12.0 and the following components version

What is the current behavior?
Error message when running Aqua Qsvm :  403 Client Error: Forbidden for url: https://api-qcon.quantum-computing.ibm.com/api/Network/ibm-q/Groups/open/Projects/main/Jobs?access_token=.... NOT_CREDITS_AVALIABLES, Error code: NOT_CREDITS_AVALIABLES.
2019-10-04 10:26:25,814:qiskit.aqua.algorithms.many_sample.qsvm.qsvm:DEBUG: Building circuits:
|██████████████████████████████████████████████████| 435/435 [00:00:00:00]
2019-10-04 10:27:28,305:qiskit.aqua.utils.run_circuits:WARNING: FAILURE: Can not get job id, Resubmit the qobj to get job id.Error: 403 Client Error: Forbidden for url: https://api-qcon.quantum-computing.ibm.com/api/Network/ibm-q/Groups/open/Projects/main/Jobs?access_token=.... NOT_CREDITS_AVALIABLES, Error code: NOT_CREDITS_AVALIABLES.

We're running on Open device  (vigo or ourence) and after a chunk of about 280 error messages (NOT_CREDITS_AVALIABLES) that took about 15 minutes,  the jobs are successfully executed
2019-10-04 10:40:07,936:qiskit.aqua.utils.run_circuits:WARNING: FAILURE: Can not get job id, Resubmit the qobj to get job id.Error: 403 Client Error: Forbidden for url: https://api-qcon.quantum-computing.ibm.com/api/Network/ibm-q/Groups/open/Projects/main/Jobs?access_token=.... NOT_CREDITS_AVALIABLES, Error code: NOT_CREDITS_AVALIABLES.
2019-10-04 10:40:10,330:qiskit.aqua.utils.run_circuits:WARNING: FAILURE: Can not get job id, Resubmit the qobj to get job id.Error: 403 Client Error: Forbidden for url: https://api-qcon.quantum-computing.ibm.com/api/Network/ibm-q/Groups/open/Projects/main/Jobs?access_token=.... NOT_CREDITS_AVALIABLES, Error code: NOT_CREDITS_AVALIABLES.
2019-10-04 10:40:12,604:qiskit.aqua.utils.run_circuits:WARNING: FAILURE: Can not get job id, Resubmit the qobj to get job id.Error: 403 Client Error: Forbidden for url: https://api-qcon.quantum-computing.ibm.com/api/Network/ibm-q/Groups/open/Projects/main/Jobs?access_token=.... NOT_CREDITS_AVALIABLES, Error code: NOT_CREDITS_AVALIABLES.
2019-10-04 10:40:15,213:qiskit.aqua.utils.run_circuits:WARNING: FAILURE: Can not get job id, Resubmit the qobj to get job id.Error: 403 Client Error: Forbidden for url: https://api-qcon.quantum-computing.ibm.com/api/Network/ibm-q/Groups/open/Projects/main/Jobs?access_token=.... NOT_CREDITS_AVALIABLES, Error code: NOT_CREDITS_AVALIABLES.
2019-10-04 10:40:17,852:qiskit.aqua.utils.run_circuits:WARNING: FAILURE: Can not get job id, Resubmit the qobj to get job id.Error: 403 Client Error: Forbidden for url: https://api-qcon.quantum-computing.ibm.com/api/Network/ibm-q/Groups/open/Projects/main/Jobs?access_token=.... NOT_CREDITS_AVALIABLES, Error code: NOT_CREDITS_AVALIABLES.
2019-10-04 10:40:20,443:qiskit.aqua.utils.run_circuits:WARNING: FAILURE: Can not get job id, Resubmit the qobj to get job id.Error: 403 Client Error: Forbidden for url: https://api-qcon.quantum-computing.ibm.com/api/Network/ibm-q/Groups/open/Projects/main/Jobs?access_token=.... NOT_CREDITS_AVALIABLES, Error code: NOT_CREDITS_AVALIABLES.
2019-10-04 10:40:24,393:qiskit.aqua.utils.run_circuits:INFO: Backend status: BackendStatus(backend_name='ibmq_vigo', backend_version='1.0.1', operational=True, pending_jobs=5, status_msg='active')
2019-10-04 10:40:24,393:qiskit.aqua.utils.run_circuits:INFO: There are 6 jobs are submitted.
2019-10-04 10:40:24,393:qiskit.aqua.utils.run_circuits:INFO: All job ids:
['5d97025849e903001915bebf', '5d97025d06da890018816dad', '5d9702615110a30018ef0f93', '5d970266a5fb6b00194d23d9', '5d97026a65da3400187d2d7d', '5d9705765110a30018ef0f94']
2019-10-04 10:40:24,393:qiskit.aqua.utils.run_circuits:INFO: Running 0-th qobj, job id: 5d97025849e903001915bebf
2019-10-04 10:40:26,361:qiskit.aqua.utils.run_circuits:INFO: COMPLETED the 0-th qobj, job id: 5d97025849e903001915bebf
2019-10-04 10:40:26,361:qiskit.aqua.utils.run_circuits:INFO: Running 1-th qobj, job id: 5d97025d06da890018816dad
2019-10-04 10:40:27,822:qiskit.aqua.utils.run_circuits:INFO: COMPLETED the 1-th qobj, job id: 5d97025d06da890018816dad
2019-10-04 10:40:27,837:qiskit.aqua.utils.run_circuits:INFO: Running 2-th qobj, job id: 5d9702615110a30018ef0f93
2019-10-04 10:40:28,554:qiskit.aqua.utils.run_circuits:INFO: COMPLETED the 2-th qobj, job id: 5d9702615110a30018ef0f93
2019-10-04 10:40:28,554:qiskit.aqua.utils.run_circuits:INFO: Running 3-th qobj, job id: 5d970266a5fb6b00194d23d9
2019-10-04 10:40:29,673:qiskit.aqua.utils.run_circuits:INFO: COMPLETED the 3-th qobj, job id: 5d970266a5fb6b00194d23d9
2019-10-04 10:40:29,673:qiskit.aqua.utils.run_circuits:INFO: Running 4-th qobj, job id: 5d97026a65da3400187d2d7d
2019-10-04 10:40:30,978:qiskit.aqua.utils.run_circuits:INFO: COMPLETED the 4-th qobj, job id: 5d97026a65da3400187d2d7d
2019-10-04 10:40:30,978:qiskit.aqua.utils.run_circuits:INFO: Running 5-th qobj, job id: 5d9705765110a30018ef0f94
.................................
.................................

Steps to reproduce the problem
dev_instance = QuantumInstance(dev_backend, shots=1024, seed_transpiler=50, circuit_caching=False)
qsvm_result = qsvm.run(dev_instance)
What is the expected behavior?
Suggested solutions
Similar problem referenced in issue : Error connecting to quantum devices #584 with Aqua version 0.5. Supposed to be fixed in Aqua 0.6
I noticed issue https://github.com/Qiskit/qiskit/issues/395 in qiskit referencing  "Error msg typo: NOT_CREDITS_AVALIABLES"
but seems to be related to the typo only ?? :-)

When Aqua, such as via the IBM Q Provider, ends up with a remote connection, we retry job to ensure its success so that the algorithm can run to completion. We do show errors along the way and refusals to run such as lack of credits. These errors are from the backend/provider and we merely react/show these. Since credits are restored over time then at some point jobs can be run again which seems to be what you are seeing.
In the future I would expect this logic in Aqua to delegate over to a WorkEngine as described by this issue in the IBMQ Provider. https://github.com/Qiskit/qiskit-ibmq-provider/issues/333

@patdenim Can this now be closed or do you still have any issue around this?

@woodsp-ibm  hoops Sorry Steve, sure we can close it.


update migration script for DB schema changes

What type of PR is this? (check all applicable)

[ ] Refactor
[ ] Feature
[ ] Bug Fix
[ ] Optimization
[ ] Documentation Update
[ ] Community Node Submission

Have you discussed this change with the InvokeAI team?

[ ] Yes
[ ] No, because:

Have you updated all relevant documentation?

[ ] Yes
[ ] No

Description
Related Tickets & Documents

Related Issue #
Closes #

QA Instructions, Screenshots, Recordings

Merge Plan

Added/updated tests?

[ ] Yes
[ ] No : please replace this line with details on why tests
have not been included

[optional] Are there any post deployment tasks we need to perform?

The existing migrate_yaml_config_1.py script is not going to work. It assumes the model entry in the yaml file is able to be parsed into a model config, which is never true.
Instead, it needs to use the model probe and/or model installer class to create valid model config entities. I think this is all that needs to be in the script:

Add the model manager service to the migration builder function, so that the migration callback has access to it. It will need to be added to the sqlite_util.init_db function and passed along.
Use the YAML data to construct a dict that has the name and description in it - the model manager will handle the rest.
In the migration, call model_manager.heuristic_import(source=model_path_from_yaml, config=dict_with_name_and_desc, inplace=True)

There's no need to check if a model is already installed and update if so - we know none of them are installed at this point. As a result, the migration script should be much shorter and will contain no SQL.

Whoops, yep. Hmm... gotta be a way. I suppose a fallback plan might be to extract the relevant logic from the service (including the probe), just hardcode it.
Maybe this yaml migration should happen within the service itself? Like on init we read the yaml if it exists, rename it to .old, then pass the yaml data as an extra arg to the sync method.


Created arithmetic operators concept, as per #1049

Part of #1049

Thank you for reviewing @junedev. I've incorporated your improvement suggestions.


onDismissed is not called.

Simply with this code, the "onDismissed" does not execute after closing the popup menu.
DropdownSearch<String>.multiSelection(
                items: (f, cs) => ["Item 1", 'Item 2', 'Item 3', 'Item 4'],
                popupProps: PopupPropsMultiSelection.menu(
                  onDismissed: () {
                    // This does not fire.
                    print("Dismissed");
                  },
                  disabledItemFn: (item) => item == 'Item 3',
                  fit: FlexFit.loose,
                ),
              ),
            )

Bug not reproducible in v6.0.1 on Android.
Could you indique in which platform and version you get this issue ?

This is reproducible on web with chrome.

tested in Google chrome => no issue.

Could you put a video or a gif to reproducible issue ?

Using v6.0.1: onDismissed is not triggered.
v6.0.1.webm
Using v6.0.0: onDismissed is actually triggered.
v6.0.0.webm
Here is my setup:
Operating System: Ubuntu 22.04.5 LTS
Kernel: Linux 6.8.0-45-generic
Flutter 3.24.3
Dart 3.5.3
Performed on Google Chrome 129.0.6668.89.

this issue is coming on the Android simulator too API Vanilla Ice Cream

The onDismissed is triggering on Android with v6.0.4-pre

I confirm I have the same problem with v6.0.1 in web chrome but not with the v6.0.0

@AlessandroDeStefano  onDismissed called inside onDispose of the popup.  It should be called every time the popup is closed.
The problem it's is working in same devices and not in others.
@AlessandroDeStefano @malwinder-s @tmztr
could you please confirm that you see destroyed in console in this example after running it in device with the issue ?:
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Two Empty Pages',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: FirstPage(),
    );
  }
}

class FirstPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('First Page'),
      ),
      body: Center(
        child: ElevatedButton(
          child: Text('Go to Second Page'),
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => SecondPage()),
            );
          },
        ),
      ),
    );
  }
}

class SecondPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => SecondPageState();
}

class SecondPageState extends State<SecondPage> {
  @override
  void dispose() {
    print('destroyed');
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Second Page'),
      ),
      body: Center(
        child: ElevatedButton(
          child: Text('Finish'),
          onPressed: () => Navigator.of(context).pop(),
        ),
      ),
    );
  }
}

I am seeing the same issue when using Chrome with v6.0.1.  When clicking outside of the menu, onDismissed is not called even though the menu goes away.  I tried reverting back to 6.0.0 to test it but was having difficulties using that version.

@CoreySafetyIndicators
could you please confirm that you see destroyed in console in this example after running it in device with the issue ?:
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Two Empty Pages',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: FirstPage(),
    );
  }
}

class FirstPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('First Page'),
      ),
      body: Center(
        child: ElevatedButton(
          child: Text('Go to Second Page'),
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => SecondPage()),
            );
          },
        ),
      ),
    );
  }
}

class SecondPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => SecondPageState();
}

class SecondPageState extends State<SecondPage> {
  @override
  void dispose() {
    print('destroyed');
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Second Page'),
      ),
      body: Center(
        child: ElevatedButton(
          child: Text('Finish'),
          onPressed: () => Navigator.of(context).pop(),
        ),
      ),
    );
  }
}

I think it's related to this issue https://github.com/flutter/flutter/issues/40940
In all cases i think i have a workaround to fix it in the next version

@salim-lachdhaf Sorry for the delay.  I ran your example and I do see destroy printed in the console.  But it sounds like you may have located the issue.  Thank you for looking at this.

@salim-lachdhaf I'm sorry for the very delayed response. I do see destroy printed in the console.
You answered me:

onDismissed called inside onDispose of the popup.

But I can't find this call you mention in the codebase of the package for the latest version. Can you point me to the place in the code where the onDismissed callback is called?

this issue is solved in v7.0.0-pre (will be release today). re open it if not the case.


Fixed changing color of points shape when label is changed

Motivation and context

Before:

After:

How has this been tested?

Manual testing
Checklist

[x] I submit my changes into the develop branch
[ ] I have created a changelog fragment
[ ] I have updated the documentation accordingly
[ ] I have added tests to cover my changes
[ ] I have linked related issues (see GitHub docs)
[x] I have increased versions of npm packages if it is necessary
(cvat-canvas,
cvat-core,
cvat-data and
cvat-ui)

License

[x] I submit my code changes under the same MIT License that covers the project.
Feel free to contact the maintainers if that's a concern.

Summary by CodeRabbit

Enhancements

Improved visualization by updating the colorization for shapes of type 'points' in the canvas view.

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 83.61%. Comparing base (78fa7cf) to head (6114569).
Report is 1 commits behind head on develop.

Additional details and impacted files
@@             Coverage Diff             @@
##           develop    #8082      +/-   ##
===========================================
- Coverage    83.62%   83.61%   -0.01%
===========================================
  Files          383      383
  Lines        40439    40443       +4
  Branches      3815     3816       +1
===========================================
+ Hits         33817    33818       +1
- Misses        6622     6625       +3

Components
Coverage Δ

cvat-ui
79.58% <100.00%> (-0.02%)
:arrow_down:

cvat-server
87.29% <ø> (ø)


New text changes hard to read on OSX

The font changes recently (especially in the input element) is very hard to read due to font weight from the thin lines in the blueprint background. @victorporof @phlsa would removing the background image or thickening the font be acceptable?

I did that intentionally to follow the mockups. I can increase weight if desired.

Sorry, that must have come from the font rendering when exporting images.
We never really talked about fonts though, so let's do it now :)
My suggestion would be to do the following:

Windows: Segoe UI Regular
macOS: San Francisco Text Regular (or Helvetica Regular on older systems)
Linux: Ubuntu Sans Regular

The browser will look slightly different on the respective platforms that way, but I'd argue that this is a good thing.

Came here with the same issue! I would really appreciate removing the grid background from the macOS version. It makes things hard to read across the UI:

Also, I agree that making the browser looking slightly different across platforms would be a good thing. It adds a bit of nativity to the browser within each OS.


Drop master/slave terminology

Let's use primary/leader/host or something instead of master and follower/agent/worker or something instead of slave.

I vote for Leader/Follower for scenarios where Leader orchestrates work of Followers. In case we talk about recovery procedures we can use Primary/Backup terminology.


Notification button doesn't work

Notification cancel and pause in DefaultFetchNotificationManager.kt doesn't work. Every time I clicked those button, notification keeps disappear.
Maybe related to this issue #327
Here's my code
override fun updateNotification(
          notificationBuilder: NotificationCompat.Builder,
          downloadNotification: DownloadNotification,
          context: Context
        ) {
          downloadNotification.apply {
            notificationBuilder.let {
              when {
                isPaused -> {
                  it.setContentTitle(getFileShortName(filename)).setSubText("dijeda")
                    .setContentText("Unduhan dijeda").setSmallIcon(R.drawable.ic_c_download_pause)
                    .addAction(
                      NotificationCompat.Action(
                        null, "Lanjutkan", getActionPendingIntent(
                          this, DownloadNotification.ActionType.RESUME
                        )
                      )
                    ).addAction(
                      NotificationCompat.Action(
                        null, "Batal", getActionPendingIntent(
                          this, DownloadNotification.ActionType.CANCEL
                        )
                      )
                    ).setTimeoutAfter(getNotificationTimeOutMillis()).build()
                }
                isDownloading -> {
                  it.setContentTitle(getFileShortName(filename)).setContentText(
                    getEtaText(
                      clarityPotion, etaInMilliSeconds
                    )
                  ).setStyle(
                    NotificationCompat.BigTextStyle().bigText(
                      "T: " + getDataSize(total) + " \u2022 D: " + getDataSize(
                        downloaded
                      ) + " \u2022 S: " + getDataSize(downloadedBytesPerSecond) + "/s"
                    )
                  ).setProgress(100, progress, progressIndeterminate).setSubText(
                    timeEndedAt(
                      etaInMilliSeconds
                    )
                  ).setSmallIcon(R.drawable.ic_c_downloading).setOngoing(true).addAction(
                    NotificationCompat.Action(
                      null, "Jeda", getActionPendingIntent(
                        this, DownloadNotification.ActionType.PAUSE
                      )
                    )
                  ).addAction(
                    NotificationCompat.Action(
                      null, "Batal", getActionPendingIntent(
                        this, DownloadNotification.ActionType.CANCEL
                      )
                    )
                  ).setTimeoutAfter(getNotificationTimeOutMillis()).build()
                }
              }
            }
          }
        }

I also tried custom notification using listener with Downloader.FileDownloaderType.PARALLEL enabled, sometimes onCompleted event called twice even more when download finished.

@nana-desu when implementing a custom version of DefaultFetchNotificationManager you must also override the getFetchInstanceForNamespace method to provide the fetch instance the download belongs too.
     final FetchConfiguration fetchConfiguration = new FetchConfiguration.Builder(this)
                .enableRetryOnNetworkGain(true)
                .setDownloadConcurrentLimit(3)
                .setNotificationManager(new DefaultFetchNotificationManager(this) {
                    @NotNull
                    @Override
                    public Fetch getFetchInstanceForNamespace(@NotNull String namespace) {
                        return null;
                    }
                })
                .setHttpDownloader(new HttpUrlConnectionDownloader(Downloader.FileDownloaderType.PARALLEL))
                // OR
                //.setHttpDownloader(getOkHttpDownloader())
                .build();

I use this but notification keeps disappear when pause clicked
 .setNotificationManager(object: DefaultFetchNotificationManager(this) {
          override fun getFetchInstanceForNamespace(namespace: String): Fetch {
            return fetch
          }

          override fun updateNotification(
            notificationBuilder: NotificationCompat.Builder,
            downloadNotification: DownloadNotification,
            context: Context
          ) {
            super.updateNotification(notificationBuilder, downloadNotification, context);
            //update builder title here
            notificationBuilder.setContentTitle("new title")
          }

For custom listener .addListener(), can you fix for onCompleted called twice or more when using Downloader.FileDownloaderType.PARALLEL enabled
Thank you

I implemented that but notification keeps disappear or maybe download stopped while pause clicked.
Another problem with custom notification on setListener, somehow when download finished but notification stuck at 100%. This issue related to this https://github.com/tonyofrancis/Fetch/issues/460
Thank you

Any workaround?

@ghost how did you fix DefaultFetchNotificationManager issue? Please help, I am having the same issue, whenever I click on pause or cancel button nothing happens and the notification disappear automatically.

@harrisaliqamar The DefaultFetchNotificationManager does not work well for all applications. It is best to provide Fetch with your own customer implementation and override the  fun postDownloadUpdate(download: Download): Boolean method. It would actually be easy and you would have more customization.


Update

May you please update the mod to cellular 2.01? It would be much appreciated. Thank you!

Let me awnser for monochromeninja/KinuTheDragon, he wont port Monomod to CelLua 2.0.1, as doing that would take a lot of effort and time,wich he sadly, doesn't have, so Monomod is discontinued and he started working on some other things, like MonoMachine, and he have probably no plans of porting Monomod to CelLua 2.0.1


MAISTRA-2648: WASM fix for s390x

Fixes https://issues.redhat.com/browse/MAISTRA-2648
The permanent fix is not a part of maistra/envoy yet:
proxy-wasm/proxy-wasm-cpp-host#198
Signed-off-by: Konstantin Maksimov<EMAIL_ADDRESS>

/ok-to-test

Note: I tagged this PR with do-not merge as I think @twghu should be able to gate this (I also added him as a reviewer) - he may have a large set of changes inbound for the target branch, and it might help if the target doesn't move.

Sorry - I misread the target branch; please disregard the earlier comment. I removed the do-not-merge label. Sorry about the noise!

/retest

/retest

/retest


Login with Google account

As a guest
I want to be able to login using a Google account
So that it's easier to join the platform

Closing this one since it will be covered by supabase.


Update permit # placeholder

Should offer an example of both # formats:
• 3 alpha/4 numeric
• 4 alpha/5 numeric

Duplicate of #30


net/http/pprof: assess and document security implications of the goroutines endpoint

The net/http/pprof endpoints include stack traces with integer arguments, which can leak sensitive information depending on the settings. We should mention that in the docs.

Maybe we should even hide the variables from the net/http/pprof output, or make them optional.


Update README.md

Minor typo and changes to formatting.

You can further improve the formatting by indenting the fenced code blocks. This way they should be treated as part of the numbered list.


More details for POSTServlet docs

Hi @0ang3el thanks for making this tool, it's easy to use and the code looks very clean. I'm a security researcher, new to AEM, and I'm trying to figure out how to exploit an unprotected POSTServlet endpoint.
$ curl -F ':operation=nop' 'https://somedomain.com/content/dam.json;%0Aa.png'
...

Null Operation Status: 200

...

Can you explain a few more details about how that would be exploitable? I understand the RCE steps just fine but I'm having trouble with doing an actual upload. I have been reading over the sling docs here and trying several different paths but cannot get a 200 on anything other than a nop.
$ curl<EMAIL_ADDRESS>'https://somedomain.com/content/dam/rcetype;%0Aa.png'
...

500

...

org.apache.sling.api.SlingException: Exception during response processing.

...

Any extra info is appreciated, and I can add some more details to the docs in the spirit of contribution.

Also FWIW I read through the most recent slideshare here which has great info but not the details I am looking for.

Ah I think I see what's going on. I need some creds to exploit it, just because it's exposed through the dispatcher doesn't mean that I have write perms.

Hi @mgbelisle! You are right, that's because you lack write permissions for the node in JCR. Usually node /content/usergenerated/etc/commerce/smartlists is writable by anonymous user.

Great, thanks for the info @0ang3el ! That makes sense, and it's pretty much what you already have it depends on your privileges so I'll close out this PR without any changes.

You're right @0ang3el the /content/usergenerated/etc/commerce/smartlists node is writable by an anonymous user!
$ curl -X POST 'https://something.com/content/usergenerated/etc/commerce/smartlists/*%0a.png'
...

Created

...
                /content/usergenerated/etc/commerce/smartlists/89_1558804816403

I've been trying to exploit it but not getting very far, can you explain a little more about how you exploited this one?
https://image.slidesharecdn.com/slideshacktivity2018-190125182522/95/hunting-for-security-bugs-in-aem-webapps-50-638.jpg?cb=1548440763
Trying to upload a file like the sling docs describe but it's not working.
$ curl<EMAIL_ADDRESS>'https://something.com/content/usergenerated/etc/commerce/smartlists/89_1558804816403;%0a.png'
...

500

...

org.apache.sling.api.SlingException: Exception during response processing.

I feel really close to getting xss on this one :-)


how to change the username and password of the mqtt broker ？

Hello, I am an engineer from China. May I ask how to change the username and password of the mqtt broker after installing the chirpstack server using Docker

Please find all ChirpStack configuration files here:
https://github.com/chirpstack/chirpstack-docker/tree/master/configuration
To configure Mosquitto with username / password authentication, please see:

https://mosquitto.org/documentation/authentication-methods/
http://www.steves-internet-guide.com/mqtt-username-password-example/

I am using the chipstack v3 version.
https://github.com/chirpstack/chirpstack-docker/tree/v3
May I know which configuration file I should modify? I cannot find a way to modify it. Could you please provide assistance

I edit chirpstack-gateway-bridge.toml as:
[integration.mqtt.auth.generic]
servers=["tcp://mosquitto:1883"]
username="inspur"
password="cxyjs123@"
and i edit mosquitto.conf as
listener 1883
allow_anonymous false
but those opration all faild


Fixing image repo secret extraction for unloading worker pod

image repo secret wasd previously extracted from the volume that was mapped into the loading pod. Since the volume no longer exists, we must extract it from the imagePullSecret of the loading pod

/assign @ybettan

/lgtm

/test operator-upgrade

/cherry-pick release-2.2


feat: add maintenance issue_template

fixes: #1668

If you want I could be assigned by default, since I am doing a lot of work with TSLint, smaller refactors etc (+ I would like to learn / do even more in that direction :) )

Sure! Assigned by default if you want :). Do you want to make the change before I merge?

@nicojs that should do :)


Give Digital Production team read only access to editorial photography masters

@jtweed by what means? Is this via S3? Have we already done this?

IAM user with access to the S3 console was my assumption. Let’s talk about this today.

This is probably a quick win as we've got a template for this.

What this means:

Holly and Rioghnach also need admin access to the client transfer bucket
All four need read-only access to wc-editorial-photography

Awaiting Keybase account creation.


Add AndroidX Support

Addresses #1280
It would be nice if we could get this functionality tested within ButterKnife. Should we move ButterKnife to AGP 3.2 and create a Jetifier enabled app as an integration test?
For the time being I was able to deploy to maven local and successfully built an AndroidX app using this change. Strangely I had to declare an explicit dependency on ButterKnife's annotations artifact otherwise they didn't appear on my classpath.

Got access to my other account back. Going to add the PR from there.


Philosofical question + practical issues

Hi,
I was trying out your library yesterday and I'm pretty impressed but I have some questions.
I was trying a simple scenario, fetch items from SharePoint, map them to simple POCO object, make it trackable via AsTrackable() so I know what properties have changed, accept the initial version of data via AcceptChanges() and then insert it to a tracked collection of this objects.
var items = op
		.GetItems();
var trackableStock = new TrackableStock();

foreach (var item in items)
{
	var model = new TrackableStockItem();
	var trackedModel = model.AsTrackable();
	trackedModel.Id = item.Id;
	trackedModel.Name = item["Title"].ToString();

	trackedModel.CastToIChangeTrackable().AcceptChanges();
	trackableStock.Items.Add(trackedModel);
}

The problem with this approach, which I find correct because when there has to be a parameterless constructor then there has to be a way to accept the initial data, is that tracked collection then does not recognize these items as added but as unchanged.
So say I want to create a new item then I'll create a new POCO object, change it to tracked POCO object, set the data and accept the changes and then push it into the collection so when I'm saving all items I know exactly which are new/added and which are changed.
I mean there should be another way how to track which objects are added then using "IsChanged" property, in my opinion.
Another thing is that the code is getting quite talkative but this is perhaps because I'm not sure what I'm doing.
public class TrackableStock
{
	public IList<TrackableStockItem> Items { get; } = new List<TrackableStockItem>().AsTrackable();
}

...

trackableStock.Items[0].Amount = 15; // this works fine
trackableStock.Items.Remove(trackableStock.Items[1]); // this works fine as well
var stockItem = new TrackableStockItem() { Name = "Newly created item" }.AsTrackable(); // I would love to see this method like AsTrackable(initialValues: true);
stockItem.CastToIChangeTrackable().AcceptChanges(); // this feels akward to me if I have to do it every single time, one can get use to it but still..
trackableStock.Items.Add(stockItem); // does not tracked properly when the object has accepted changes

Do I have to Cast.. it to trackable object everytime I want to accept changes and undo them? That's a lot of code noise.
I would probably create a factory class for new POCO instances for example Is.Tracked(); just to make it simpler. or perhaps an extension method for an Object class, so I could create NewTracked() object anywhere.
I'm using the latest beta NuGET.

I am not sure I fully understand your concerns, does the following help?
void Main()
{
    var items = GetItems();
    var trackableStock = new TrackableStock();

    //Option 1
    foreach (var item in items)
    {
        var model = new TrackableStockItem();
        model.Id = item.Id;
        model.Name = item.Name.ToString();

        trackableStock.Items.Add(model);
    }
    trackableStock.Items.CastToIChangeTrackableCollection().AcceptChanges();
    //or
    trackableStock.AcceptChanges();

    Console.WriteLine($"IsChanged: {trackableStock.Items.CastToIChangeTrackableCollection().IsChanged}");

    //option 2
    IList<TrackableStockItem> trackableStockList = items
        .Select(i => new TrackableStockItem { Id = i.Id, Name = i.Name })
        .ToList()
        .AsTrackable();

    Console.WriteLine($"IsChanged: {trackableStockList.CastToIChangeTrackableCollection().IsChanged}");
}

public TrackableStockItem[] GetItems() => new[]
{
  new TrackableStockItem
  {
    Id = 0,
    Name = "Test0"
  },
  new TrackableStockItem
  {
    Id = 1,
    Name = "Test1"
  }
};

public class TrackableStock
{
    public IList<TrackableStockItem> Items { get; } = new List<TrackableStockItem>().AsTrackable();

    public void AcceptChanges() => Items.CastToIChangeTrackableCollection().AcceptChanges();
}

public class TrackableStockItem
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}

Closed due to inactivity

Forgive me if I'm wrong, but wouldn't the answer be to create the instance of your object and set all the properties before you cast it as trackable? ie, perform all your initialization on your object to set it's initial state, and then make it trackable so that becomes your starting point and only changes after that point will then trigger the change tracking?

it

I wish I remembered this code and question but it is so blury. Anyway, what you are saying sounds right.


Can Connect to Bluetooth Printer

After running the example project, I can't connect to my bluetooth printer. Please how do i solve this

+1

i can connect.but cant pritnt(write data)...why?

i can connect.but cant pritnt(write data)...why?

did you find anything? I have one more question though if you don't  mind ..
is it possible to write data through this package right ! if our printer is a ble device?


Fixed crash when transcoding one- or two-channel KTX2 textures

Objective
Fixes a crash when transcoding one- or two-channel KTX2 textures
Solution
transcoded array has been pre-allocated up to levels.len using a macros. Rgb8 transcoding already uses that and addresses transcoded array by an index. R8UnormSrgb and Rg8UnormSrgb were pushing on top of the transcoded vec, resulting in first levels.len() vectors to stay empty, and second levels.len() levels actually being transcoded, which then resulted in out of bounds read when copying levels to gpu

Can you add a test to avoid regressions here?

@alice-i-cecile a unit test or a test file?

@alice-i-cecile I've built in a sample ktx2 file into the unit test. it's only 312 bytes. Let me know if you want it organized differently.

@alice-i-cecile ah ok, next time I make a pull request I’ll sprinkle docs on functions I touch (if you want)

I will never say no to more docs ;)


ref(Jenkinsfile): remove shell output hack

To use approach seen here.

It looks like we have the latest versions of all of the Pipeline plugins, so trying this out.

Current coverage is 10.31% (diff: 100%)

Merging #203 into master will not change coverage

@@             master       #203   diff @@
==========================================
  Files            49         49
  Lines          3460       3460
  Methods           0          0
  Messages          0          0
  Branches          0          0
==========================================
  Hits            357        357
  Misses         3057       3057
  Partials         46         46

Powered by Codecov. Last update e6d96b7...912ad85

Looks like it works, nice find!


Android: Support muted feeds

Add support for mute/unmute as follows:

Menu option within a feed/folder view to mute/unmute
Long press menu option for a feed/folder to mute/unmute
Show muted feeds in all sites view (like #824 suggests) perhaps with a mute icon where the count would normally be?

Any feedback/suggestions @dosiecki @samuelclay

A few questions.

Does Feed.active map to the muted state?
Are there API end points for mute/unmute of a feed?

My only context on this is that, about a year back, there was a task to ensure that if a feed's active field was set low, it is totally ignored upon receipt and is never even allowed into the DB.  See:
https://github.com/samuelclay/NewsBlur/blob/master/clients/android/NewsBlur/src/com/newsblur/service/NBSyncService.java#L460
However, there are some vestiges of a plan to support display and manipulation of them in the system.  For instance, we have domain fields and DB bindings for it:
https://github.com/samuelclay/NewsBlur/blob/master/clients/android/NewsBlur/src/com/newsblur/domain/Feed.java#L21

Sounds good to me. I suppose web and iOS should show muted sites in All Stories as well.

Is there an API end point I can call to mute or unmute a feed by feed ID?

You have to pass back the entire folder_feeds collection to save_feed_chooser.


Building the template

Hi,
I really appreciate your initiative to build this magnificent library and I'm working on starting to use it!
As I was following your tutorial to get started with the project template, I got this error when I was building and I can't figure out how to fix it...
Error   26  The command "
xcopy "C:\Clients Dynamics CRM\DEV\GS_Sparkle\SparkleXrmCrmPackage\CrmPackage\WebResources\js\ClientUI.debug.js" "C:\Clients Dynamics CRM\DEV\GS_Sparkle\SparkleXrmCrmPackage\CrmPackage\WebResources/js/ClientUI.js" /y /i /o
xcopy "C:\Clients Dynamics CRM\DEV\GS_Sparkle\SparkleXrmCrmPackage\CrmPackage\WebResources\js\ClientHooks.debug.js" "C:\Clients Dynamics CRM\DEV\GS_Sparkle\SparkleXrmCrmPackage\CrmPackage\WebResources/js/ClientHooks.js" /y /i /o
" exited with code 4.   C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets  1063    6   CrmPackage
Thank you for your time!

Try building each project individually first, then build the solution. Also - check that there are no strange permissions on your folders.

Also, please try running the visual studio as administrator....

Running as administrator worked! Thanks tinunelson

Hi,
I know this an old issue/question, but I thought I would raise this again.  Running as administrator is not always a solution in corporate environments - builds with no issue on my personal Win10 machine but at work it is a different story.
I found this is due to the "/o" switch.  Removing the switch resolves the build issue without the need for "Run as Administrator".  The security on Vista and up is what is causing this, maybe look at using robocopy instead as xcopy has been depreciated.
Its a small annoyance rather than an issue.  😃
Thanks for the fantastic solutions.


QT-Wallet configuration Main page needs UI improvement.

Description:
In QT-Wallet configuration Main page, observed lot of empty spaces.
Wallet Config page needs a UI redesign to avoid empty spaces. Please refer screenshot for more details.

Reassigning to Konstantin. He is implementing so he should fix.

Successfully verified with the latest build, hence closing this ticket.


[OSX] utils.format is not a function

When trying to delete an auto scaling rule on a cloud service I get this error
info:    Executing command insights autoscale setting delete
error:   utils.format is not a function
error:   Error information has been recorded to
error:   insights autoscale setting delete command failed
at insightsAutoscaleSettingCommand__executeDeleteCmd__8 (/usr/local/lib/node_modules/azure-cli/lib/commands/arm/insights/insights.autoscale.setting.js:281:49)
  at insightsAutoscaleSettingCommand__prepareAndExecuteDelete__5 (/usr/local/lib/node_modules/azure-cli/lib/commands/arm/insights/insights.autoscale.setting.js:93:10)
  at __2 (/usr/local/lib/node_modules/azure-cli/lib/commands/arm/insights/insights.autoscale.setting.js:45:39)

Hi @yshahin this repo is for the new CLI, written in Python. Your issue is for the CLI written in Node. Please open this issue in: https://github.com/Azure/azure-xplat-cli


[Discussion] Why is "Matches Count" reduced from 2 to 1 to 0?

Dear all,
I am using "Corona-warn-app" in Germany and have a question about the "matches count" in json file.
For me, the key count "12457" popped up intially on Sep 27 and "Matches count" showed 2. I think it means that I had met 2 confirmed cases someday before and they used one account to confirm the infections (at that time the total exposures for me was 4, together with two other encounters). However, on Oct 1 this "Matches count" was reduced to 1 and the total exposures was also decreased to 3. Then, this morning, the "Matches count" with 12457 is reduced to 0 and my total exposures also becomes 2.
I am wondering what it means with the change of "Matches count"? Does it means that these two cases gradually recovered and then should not be taken into account? Or they misreported? Or some bugs here?
Thanks in advance for your help ;)
Best wishes,

Hi @ArgentinaRDX,
matchesCount drops as soon as the the encounter which lead to a particular match lies more than 14 days in the past because your phone only retains data for the last 14 days: https://www.coronawarn.app/en/faq/#traceback

Hi @daimpi ,

Thanks for your reply. However, I still have two questions:

For me, these two encounters match with the same "KeyCount" 12457. The first match disappeared on Oct 1, the second ome drops today. Does it mean that I met this guy twice on two different days, such as on Sep 14 and Sep 16 in the office? I initially thought it means that I had met 2 confirmed cases someday before and they used one account to confirm the two infections.

Still considering this "KeyCount" 12457, although the matches have disappeared, the information is still kept here. Does it mean that the information will remain more than 14 days, but the checks of the matching will only be done within 14 days?

Thanks for your help 👍

Hi @ArgentinaRDX,
matchesCount drops as soon as the the encounter which lead to a particular match lies more than 14 days in the past because your phone only retains data for the last 14 days: https://www.coronawarn.app/en/faq/#traceback

Could you upload your log file here (put it in a .zip archive or rename the ending from .json to .txt) that would make it easier to check :).

Hi @daimpi,
Please see the file as below. Really appreciate for your help ;)
all-exposure-checks.txt

Could you upload your log file here (put it in a .zip archive or rename the ending from .json to .txt) that would make it easier to check :).

Thanks, I've put your (slightly adjusted) log into EN analyzer and got the following output:

From this I gather that you should have seen the following in your CWA:

Date
Displayed Number of Encounters in CWA

24. Sep (and before)
0

25. Sep
1

26. Sep
1

27. Sep
4

28. Sep
4

29. Sep
4

30. Sep
4

01. Okt
3

02. Okt
3

03. Okt
2

Does this sound plausible to you?
Regarding

For me, these two encounters match with the same "KeyCount" 12457. The first match disappeared on Oct 1, the second one drops today. Does it mean that I met this guy twice on two different days, such as on Sep 14 and Sep 16 in the office? I initially thought it means that I had met 2 confirmed cases someday before and they used one account to confirm the two infections.

You can in general not reliably know whether you encountered two different persons on two days or the same person, as the only thing which identifies them is their Temporary Exposure Key (TEK), which changes every 24h and is random i.e. meeting person A on day x and Person B on day x+1 looks identical to meeting person A on day x & x+1. In both cases you'd see 2 matches in your log which are reduced to 1 match on day x+15 and to 0 on day x+16.
In your case this entry looks only slightly different:

In this case there are two days between the two encounters. This could mean that this are two different ppl who both uploaded their keys on the Sept 25th or it could also be just one person. The only thing we can say for certain is that the first encounter happened on the Sept 16th and the 2nd on Sept 18th.

Still considering this "KeyCount" 12457, although the matches have disappeared, the information is still kept here. Does it mean that the information will remain more than 14 days, but the checks of the matching will only be done within 14 days?

Afaik the matches disappear because your phone matches the keys it downloaded from the server with the Rolling Proximity Identifiers (RPIs) which it recorded from contact with other phones and those RPIs will be deleted if they're older than 14 days, after which your phone will no longer find a match.
Your log always shows what checks have been performed in the last 14 days (each of these days, 14 packages for the previous 14 days are checked, which should yield a total of 196 checks, but it shows slightly more checks b/c of a Google bug: https://github.com/corona-warn-app/cwa-app-android/issues/1020 ^^)
As you can see above the package with "KeyCount" 12457 contains keys uploaded on Sept 25th therefore it will continued to be checked till it's 14 days old i.e. until Oct 09th.

One thing I found curious in your EN log: your timestamps were in a different format compared to what I'm used to and how they look like in my log. Compare e.g. an entry from Oct 03rd:

You: timestamp":"2020.10.3  09:40
Me: timestamp":"3. Oktober 2020, 02:54

Could you let me know

Which ENF version you have on your phone? (See here for a description on how to find your ENF version)
Which language/country settings you use in Android.

Hi @daimpi,
I check that my ENF is<PHONE_NUMBER>5, I guess meaning that I am using Version 1.5.
Sorry that this may be a confusion caused by myself. My language setting is Chinese in Android, therefore my corona-warn-app is in English. When I download the log file, the date format is "year-month-day" together with Chinese characters in-between. In order to not confuse you, I replace all the Chinese characters with "." and that's why you see this weird format.
Best,

One thing I found curious in your EN log: your timestamps were in a different format compared to what I'm used to and how they look like in my log. Compare e.g. an entry from Oct 03rd:
* You: `timestamp":"2020.10.3  09:40`

* Me: `timestamp":"3. Oktober 2020, 02:54`

Could you let me know
1. Which ENF version you have on your phone? (See [here](https://www.coronawarn.app/en/faq/#ENF_version) for a description on how to find your ENF version)

2. Which language/country settings you use in Android.

Hi @daimpi ,
Thanks a lot for your detailed explanation! That's really helpful :)
Now I have totally solved my second question and understood part of the mechanism behind. Regarding the posts you shared with me, I think it means that Google may store 17-day history in my phone (maybe it is a bug, but it is the case for me which can be seen from the log file I uploaded). However, when the app does the exposure checks, it will only compare with the data within 14 days online. Is that correct?
One more question about this "14-day": is today excluded? From your analysis, since my first encounter disappeared on Oct 1 and the second one disappeared on Oct 3, it means that my first encounter should be on Sep 16 and second on Sep 18. Satistically it makes sense, however for me, it doesn't. If my memory is correct, I stayed at home for the whole day on Sep 18, so the chance of encounter should be very low. On the other hand, if today is not excluded when counting this "14-day", then my two encounters should be on Sep 17 and Sep 19, which is much more plausible for me. That's why I am curious about how to count this "14-day" ;)
Anyways, many thanks for your help. Have a nice Sunday!
Best,

Thanks, I've put your (slightly adjusted) log into EN analyzer and got the following output:

From this I gather that you should have seen the following in your CWA:
Date 	Displayed Number of Encounters in CWA
24. Sep (and before) 	0
25. Sep 	1
26. Sep 	1
27. Sep 	4
28. Sep 	4
29. Sep 	4
30. Sep 	4

Okt 	3
Okt 	3
Okt 	2

Does this sound plausible to you?
Regarding

For me, these two encounters match with the same "KeyCount" 12457. The first match disappeared on Oct 1, the second one drops today. Does it mean that I met this guy twice on two different days, such as on Sep 14 and Sep 16 in the office? I initially thought it means that I had met 2 confirmed cases someday before and they used one account to confirm the two infections.

Assuming both keys were uploaded on the same day, you can in general not reliably know whether you encountered two different persons on two days or the same person, as the only thing which identifies them is their Temporary Exposure Key (TEK), which changes every 24h and is random i.e. meeting person A on day x and Person B on day x+1 looks identical to meeting person A on day x & x+1. In both cases you'd see 2 matches in your log which are reduced to 1 match on day x+15 and to 0 on day x+16.
In your case this entry looks only slightly different:

In this case there are two days between the two encounters. This could mean that this are two different ppl who both uploaded their keys on the Sept 25th or it could also be just one person. The only thing we can say for certain is that the first encounter happened on the Sept 16th and the 2nd on Sept 18th.

Still considering this "KeyCount" 12457, although the matches have disappeared, the information is still kept here. Does it mean that the information will remain more than 14 days, but the checks of the matching will only be done within 14 days?

Afaik the matches disappear because your phone matches the keys it downloaded from the server with the Rolling Proximity Identifiers (RPIs) which it recorded from contact with other phones and those RPIs will be deleted if they're older than 14 days, after which your phone will no longer find a match.
Your log always shows what checks have been performed in the last 14 days (each of these days, 14 packages for the previous 14 days are checked, which should yield a total of 196 checks, but it shows slightly more checks b/c of a Google bug: #1020 ^^)
As you can see above the package with "KeyCount" 12457 contains keys uploaded on Sept 25th therefore it will continued to be checked till it's 14 days old i.e. until Oct 09th.

I check that my ENF is<PHONE_NUMBER>5, I guess meaning that I am using Version 1.5.
Sorry that this may be a confusion caused by myself. My language setting is Chinese in Android, therefore my corona-warn-app is in English. When I download the log file, the date format is "year-month-day" together with Chinese characters in-between. In order to not confuse you, I replace all the Chinese characters with "." and that's why you see this weird format.

I see, thanks for the additional info 🙂. This means the language setting explains how the timestamp format came to be, as we're both actually on the same ENF version<PHONE_NUMBER>5 i.e. v.1.7).
I'll forward this info to @felixlen who is the author of the amazing EN analyzer tool which I used extensively above 🙂.

Hey @ArgentinaRDX

However, when the app does the exposure checks, it will only compare with the data within 14 days online. In other words, there is always no exposures on the 15th, 16th and 17th day ago in the log file. Is that correct?

Yes this is correct.
But we have to distinguish between two different points in time:

let x be the day at which a infected person who you were in contact with uploads their keys.
let y be the day at which the encounter with the infected person actually happened

Because of some current limitations (no same-day DKs) x - y >= 1 day
If everything works correctly CWA should hand the packages for the last 14 days [x-13..x] (inclusive brackets) over to ENF on day x+1. This means package x will be checked for the last time on day x+14, but not anymore on day x+15. This is something you can easily verify yourself: all packages are uniquely identified by their hash and you can look up here which hash belongs to which day (for Android hashes you have to remove the escape characters (\) and convert them from Base64 to hex first).
You can e.g. see that the Android EN log hash kFdI/dw7d6Tww9o8j/tBNf7KwYqVRQ19omn1/V4YUr0= belongs to the key package from Sept 17th which means it could be checked for the first time on Sept 18th and the last day it was checked is Oct 1st.
But because the actual encounter always happened before the keys are uploaded, you will always have a time period in which the package is still checked by ENF, but the RPI your phone recorded is already deleted and therefore you see matchCount going to zero.

One more question about this "14-day": is today excluded? From your analysis, since my first encounter disappeared on Oct 1 and the second one disappeared on Oct 3, it means that my first encounter should be on Sep 16 and second on Sep 18. Satistically it makes sense, however for me, it doesn't. If my memory is correct, I stayed at home for the whole day on Sep 18, so the chance of encounter should be very low. On the other hand, if today is not excluded when counting this "14-day", then my two encounters should be on Sep 17 and Sep 19, which is much more plausible for me. That's why I am curious about how to count this "14-day" ;)

I'm not entirely sure tbh. My understanding so far was that RPIs are phased out in the same way as TEKs i.e. when the day of their validity (in UTC time) lies more than 14 days in the past. E.g. a RPI recorded on Sept 15 would still show up as a match on Sept 29, but not anymore on Sept 30 b/c it got deleted at the beginning of Sept 30 (UTC time). But I could be wrong about this. @kbobrowski @mh- do you by chance know how exactly this works?

Hi @daimpi !
Thanks very much for all your answers. I tried to understand them, and all are in such a detail. I really appreciate for all your helps here.
Just want to add one thing about the last point where you are also not so sure. Depending on what my data show and the memory of what  I could recall, I guess that it may be based on what time the server update the new keys. For instance, if everyday at 14:00 the server upload all the keys containing all the new information, then within the next 24 hours what we can check are all those keys. If I open my cwa at 10am on Sep 30, the data that will be checked are uploaded on Sep 29 at 2pm which contain the information from Sep 15, 2pm to Sep 29, 2pm (14*24 hours). This is a bit contradicted to your words, however, if we change the time that the server makes the update to midnight, then all match with your answers. However, if they follow the strict rule to delete all the data that are more than 14 days old, then you will be right. Anyways, as I said, I am just curious about it :)
Hope everything goes well with you in this special period! Wish all the best.

Hey @ArgentinaRDX

However, when the app does the exposure checks, it will only compare with the data within 14 days online. In other words, there is always no exposures on the 15th, 16th and 17th day ago in the log file. Is that correct?

Yes this is correct.
But we have to distinguish between two different points in time:
* let x be the day at which a infected person who you were in contact with uploads their keys.

* let y be the day at which the encounter with the infected person actually happened

Because of some current limitations (no same-day DKs) x - y >= 1 day
If everything works correctly CWA should hand the packages for the last 14 days [x-13..x] (inclusive brackets) over to ENF on day x+1. This means package x will be checked for the last time on day x+14, but not anymore on day x+15. This is something you can easily verify yourself: all packages are uniquely identified by their hash and you can look up here which hash belongs to which day (for Android hashes you have to remove the escape characters (\) and convert them from Base64 to hex first).
You can e.g. see that the Android EN log hash kFdI/dw7d6Tww9o8j/tBNf7KwYqVRQ19omn1/V4YUr0= belongs to the key package from Sept 17th which means it could be checked for the first time on Sept 18th and the last day it was checked is Oct 1st.
But because the actual encounter always happened before the keys are uploaded, you will always have a time period in which the package is still checked by ENF, but the RPI your phone recorded is already deleted and therefore you see matchCount going to zero.

One more question about this "14-day": is today excluded? From your analysis, since my first encounter disappeared on Oct 1 and the second one disappeared on Oct 3, it means that my first encounter should be on Sep 16 and second on Sep 18. Satistically it makes sense, however for me, it doesn't. If my memory is correct, I stayed at home for the whole day on Sep 18, so the chance of encounter should be very low. On the other hand, if today is not excluded when counting this "14-day", then my two encounters should be on Sep 17 and Sep 19, which is much more plausible for me. That's why I am curious about how to count this "14-day" ;)

I'm not entirely sure tbh. My understanding so far was that RPIs are phased out in the same way as TEKs i.e. when the day of their validity (in UTC time) lies more than 14 days in the past. E.g. a RPI recorded on Sept 15 would still show up as a match on Sept 29, but not anymore on Sept 30 b/c it got deleted at the beginning of Sept 30 (UTC time). But I could be wrong about this. @kbobrowski @mh- do you by chance know how exactly this works?

@ArgentinaRDX glad I could help 🙂.
I just heard back from @mh- and he confirmed the RPI schedule I described above on a rooted Android device:

Today (2020-10-07), the earliest RPI in my Android device’s database is from 2020-09-23 00:01 UTC.

This means my statement

The only thing we can say for certain is that the first encounter happened on the Sept 16th and the 2nd on Sept 18th.

should be correct.

Hey @daimpi ,
That's great! Thanks again for all your time and help :)
Best wishes,

@ArgentinaRDX glad I could help 🙂.
I just heard back from @mh- and he confirmed the RPI schedule I described above on a rooted Android device:

Today (2020-10-07), the earliest RPI in my Android device’s database is from 2020-09-23 00:01 UTC.

This means my statement

The only thing we can say for certain is that the first encounter happened on the Sept 16th and the 2nd on Sept 18th.

should be correct.

Dear @ArgentinaRDX, @daimpi,
Thanks for contributing. Do I understand correctly that this question has been resolved and we can close this issue?
Best wishes,
DS

Corona-Warn-App Open Source Team

Hi @dsarkar,

Do I understand correctly that this question has been resolved and we can close this issue?

yes I would think so, @ArgentinaRDX do you agree? 🙂

Sure! Thanks for your work @dsarkar. Wish both of you all the best! @daimpi

Hi @dsarkar,

Do I understand correctly that this question has been resolved and we can close this issue?

yes I would think so, @ArgentinaRDX do you agree? 🙂

Hi @ArgentinaRDX, thanks for the feedback and for contributing here to the community. Your special thanks should go to @daimpi.
Best wishes,
DS

Corona-Warn-App Open Source Team

Some update for anyone coming late to this thread: devs have stated that the RPI deletion schedule doesn't work in 24h chunks as discussed above but rather:

Both under iOS and Android RPIs are not deleted at midnight but by trend after 14 x 24 h.

(via @dsarkar)

@daimpi

Some update for anyone coming late to this thread: devs have stated that the RPI deletion schedule doesn't work in 24h chunks as discussed above but rather:

Both under iOS and Android RPIs are not deleted at midnight but by trend after 14 x 24 h.

Are you referring to the clean-up job of the Exposure Notification Framework / System?

@MikeMcC399

Are you referring to the clean-up job of the Exposure Notification Framework / System?

Yes. This is how I understood the dev statement. This implies the number of matches can go down even within the same (UTC) day.

@MikeMcC399

To fill in about the clean-up job for Android regarding the exposure check history: this runs every 24 hours at a random time.

Interesting thanks for the info 🙂.  Do you know whether this also applies to the RPI deletion?

@daimpi

Interesting thanks for the info 🙂. Do you know whether this also applies to the RPI deletion?

No, I don't have any independent information about the RPI clean-up. Sorry!

Hi @daimpi and @MikeMcC399 , thanks for your information.
I understood it like this: RPIs are deleted countinously during runtime of phone, when their age is 14*24 hours.
The exposure log is updated (old entries deleted) only once per day.
Wouldn't that perfectly explain the problems discussed in #1516 and #1210 ?
Let's say 2 exposure checks (with each freshly downloaded DKs) are done during one day, one in the morning and one in the evening. The first exposure check is done in the morning at 08:00am. One match is found from one encounter, that had been 13 days and 22 hours ago (at 10:00am). On opening CWA at 08:05am, it requests the exposure summary from the ENF (after the checks had already run 5 minutes ago), and it shows one match (and so does the ENF log). Then at 10:00am, the RPI that caused the match is deleted from ENF, and so is the ENF's data object of the exposure summary. Then at 10:30am, user again opens CWA, the exposure summary is again retrieved from ENF, now there are 0 matches because of the aged out RPI. But ENF log (history) still shows 1 match from check at 08:00am. Finally, in the evening at 07:00pm, the next regular check is done with fresh DKs. No match is found. On opening CWA at 07:30pm, CWA retrieves the exposure summary from ENF with 0 matches (and accordingly displays 0 matches), while the new entry in the exposure log (history) also states 0 matches. Everything is synchronized again.
Does this sound plausible to you?

@vaubaehn
I don't know that I can add any value to your scenario. We do know that data is changing during the day and this can lead to changed status displays during the day.

Hey @vaubaehn sry for the late reply:

[…]Then at 10:30am, user again opens CWA, the exposure summary is again retrieved from ENF, now there are 0 matches because of the aged out RPI.[…]

My understanding so far was that in the old ENF v1 legacy mode (with CWA pre 1.7) this wouldn't work like this but rather that the info (ExposureSummary) which was retrieved with the first check on a specific day was cached by CWA for the rest of the day and not queried each time you open CWA (I could obviously be wrong about this as I didn't look at the code). I asked for clarification on how exactly this number is updated in CWA here but haven't received an answer unfortunately.
If each time CWA was opened a new ExposureSummary query was processed by ENF then that - together with RPIs being deleted after 14*24h - would o/c explain those issues as you said.

With the switch to ENFv2 in CWA 1.9, this issue has likely become obsolete. Therefore, we will close it.

Corona-Warn-App Open Source Team


Make sass first class member

This pull request add support for theme folder and a resource handler for scss files. Files from the theme folder are not copied to the build directories.
The scss files are compiled into the resource directories. This is the same behavior as with the old qooxdoo compiler.

By the way, i changed the cli too so that theme directories are watched too. Will do the pull request after this.


Ballerina does not support object type query parameters

Description:
Ballerina does not support object type query parameters in http module
Describe your problem(s)
When trying to generate a client for Stripe API using Open API specification, the client generation fails. This is because in the yaml file, an endpoint (/v1/account/persons) has a query parameter of type object.
https://stripe.com/docs/api/persons/object#person_object-relationship
  /v1/account/persons:
    get:
      description:
Returns a list of people associated with the account’s legal
        entity. The people are returned sorted by creation date, with the most
        recent people appearing first.

      operationId: GetAccountPersons
      parameters:
        - description: A cursor for use in pagination. `ending_before` is an object ID
            that defines your place in the list. For instance, if you make a
            list request and receive 100 objects, starting with `obj_bar`, your
            subsequent call can include `ending_before=obj_bar` in order to
            fetch the previous page of the list.
          in: query
          name: ending_before
          required: false
          schema:
            maxLength: 5000
            type: string
          style: form
        - description: Specifies which fields in the response should be expanded.
          explode: true
          in: query
          name: expand
          required: false
          schema:
            items:
              maxLength: 5000
              type: string
            type: array
          style: deepObject
        - description: A limit on the number of objects to be returned. Limit can range
            between 1 and 100, and the default is 10.
          in: query
          name: limit
          required: false
          schema:
            type: integer
          style: form
        - description: Filters on the list of people returned based on the person's
            relationship to the account's company.
          explode: true
          in: query
          name: relationship
          required: false
          schema:
            properties:
              director:
                type: boolean
              executive:
                type: boolean
              owner:
                type: boolean
              representative:
                type: boolean
            title: all_people_relationship_specs
            type: object
          style: deepObject
        - description: A cursor for use in pagination. `starting_after` is an object ID
            that defines your place in the list. For instance, if you make a
            list request and receive 100 objects, ending with `obj_foo`, your
            subsequent call can include `starting_after=obj_foo` in order to
            fetch the next page of the list.
          in: query
          name: starting_after
          required: false
          schema:
            maxLength: 5000
            type: string
          style: form

In ballerina, query parameters are only supported for the following data types
 type BasicType boolean|int|float|decimal|string;
 public type QueryParamType ()|BasicType|BasicType[];

Because of this issue, the client generation fails.
Describe your solution(s)
Support object type query parameters in http module
Suggested Labels (optional):
Type/Bug, module/http, Priority/High

@shafreenAnfar please check this. I don't see any hard reason as to why we can't allow any json object as a query parameter - it just has to be URL encoded appropriately.

@shafreenAnfar please check this. I don't see any hard reason as to why we can't allow any json object as a query parameter - it just has to be URL encoded appropriately.

Ack @sanjiva. We're working on it and will add it for the beta 3 release.


Migrate addMessage from core.js to a Stimulus Controller w-messages

Fixes https://github.com/wagtail/wagtail/issues/9493

[ ] Do the tests still pass?[^1]
[ ] Does the code comply with the style guide?
[ ] For front-end changes: Did you test on all of Wagtail’s supported environments?

@lb as of now its pretty dummy code that's working, as far as i can understand i need to pull out li element from template and append it to above ul am i right??
i can't seem to get the li from the template tag.

whenever i am trying a querySelector on this.templatesTarget i seem to get null any idea?
or i am approaching it the wrong way?

@salty-ivy yeah, template content is not really in the DOM other than being parsed as valid by the browser.
Here is an idea for an approach.

Change the target to singular static targets = [... ,'template'];
Make a template for each variant of the message, looking at the existing code, we could just support success and then a 'default' fall-back.
When finding the matching template, you could search through all template targets for the one with a matching status attribute.
When we cannot find a matching one we fall back to the first template target.
Finally, do the pulling out of the right HTML, clone it (read the MDN docs carefully), add it to the DOM and inject the message text in the right span element.

Example TS
const status = 'success';
const template = this.templateTargets.find(element => element.dataset.messageStatus === status) || this.templateTarget;
// note: we first try to find the matching target by going through ALL targets and reading the `data-message-status`, this message-status is nothing special, just a normal data attribute.
// if we do not find a matching one, we fall back to the FIRST target by using `templateTarget` (not `templateTargets`) and use that template instead

Example HTML
                <template data-w-messages-target="template">

{% icon name="warning" classname="messages-icon" %}

                </template>
                <template data-w-messages-target="templates" data-message-status="success">

{% icon name="success" classname="messages-icon" %}

                </template>

@lb- i have done already done similar stuff, but with only single template.
Do you mind reviewing that. Stating Some differences and positive aspects of the way you have described

Few more comments, thanks for pursuing this, I hope the feedback is not too nitpicky.

No problems with those, would like to get as much feedback/nitpicks as possible, it brings along a lot of understanding

@lb sorry for the throwback again, why this doesn't seems to work with image upload ?

while inspecting div doesn't seems to have any content in it not even ul nor the template.

while view page source shows it

@salty-ivy try to get the other usage working well, I might not have time to look at your branch for a day or so.
Maybe some other JS is removing the html there - confirm you have removed any original addMessage code for example.

Ahh. It's probably clearing that messages container on upload, so that previously added messages get removed.
You may need to add a new method clear, and a similar event listener data-action="w-messages:clear->...".
You'll also need to keep track of dynamically injected messages, you can do this by adding a new target. Then use that target to remove any added.

@lb- i am not really sure what's causing the backend tests to fail. exactly.

@lb- also as you have mentioned. the new code of getting the content from template will be reactive to event listeners as we have gotten content while avoiding documentFragment pitfall https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template#avoiding_documentfragment_pitfall

Yeah. I did a quick smoke test of this and it's fine the way it's being implemented.
One day it might be good to have discrete template elements for each snippet but it's best to keep this implementation simple now and if it's ever expanded on it can be refactored then.

@lb- Done added one additional test should fall back to success status, if invalid status is provided. thanks for these amazing feedbacks.

Release notes note to self

fix: Double check the document updated message - likely a bug fix
feature: Dynamically added messages now have icons (yay)
deprecation - addMessage (undocumented) no longer a global, use dispatch event instead
maintenance; migration with unit tests

Awesome! Thanks for following thorough 🫡, that was real fun.


Fixed tokens seeder

Example response from GET /tokens:
{
	"status_code": 1000,
	"data": {
		"country_code": "US",
		"party_id": "MSP",
		"uid": "001",
		"type": "APP_USER",
		"contract_id": "contract_001",
		"visual_number": "VIS001",
		"issuer": "Issuer001",
		"group_id": "group_001",
		"valid": true,
		"whitelist": "ALWAYS",
		"language": "EN",
		"default_profile_type": "premium",
		"energy_contract": {
			"supplier_name": "Supplier001",
			"contract_id": "contract_001"
		},
		"last_updated": "2024-07-10T14:13:27.293Z"
	}
}

Would you mind helping do a small fix on this line: https://github.com/citrineos/citrineos-ocpi/blob/2e7e302028cb64f8928c80d2757eee2b24b8cc93/seeders/20240703120234-transactions.ts#L214. I found it created a incorrect datetime in 1969.

@lydiazcheng transaction related changes in PR: https://github.com/citrineos/citrineos-ocpi/pull/76

@elliot-sabitov @thanaParis can we please have this merged in?


Add node context to wallet RPC request object

Add node context to wallet RPC request object, as getauxblock needs access to the node to determine if it is in initial block download, and requires access to the wallet to get an address to pay to.

someone review


VLS checker did not watch JS/TS file change

client side should implement this.lspConnection.onDidChangeWatchedFiles like vscode client does.

implementated in https://github.com/fi3ework/vite-plugin-checker/pull/93