text:
vSphere Infrastructure Provider cluster creation fails

What kind of request is this (question/bug/enhancement/feature request):
Error/Bug/Layer 8 problem (idk...)
Steps to reproduce (least amount of steps as possible):
Try to set up a cluster from new nodes with vSphere Node Driver and the official Ubuntu Server OVA as node template
Result:
Nodes fail to register with various errors (like "Failed to start Certificates deployer container on host [HOST_IP]: Error response from daemon: endpoint with name cert-deployer already exists in network bridge").
I have also seen some errors involving some docker socket, but I could not document them before they were replaced by new messages.
There seems to be some kind of looping during certificate deployment, since the setup is already going for more than six hours now.
Also, the Node VMs have not been customized to the spec I defined in the node templates. They all have the stock port group connected (not the one I set), also CPU and RAM values are not the ones I set them too. The VMs have been placed in the Cluster root, not the folder I provided, too. The resource pool is correct, though.
So in summary, the VMs have not been customized at all, even though cloud-init ran as expected (the user I defined was created) and Docker and the corresponding containers have been installed.
Other details that may be helpful:
I'm running vSphere 7 on two ESXi-hosts. I have tested with administrator credentials.
Environment information
Rancher 2.5 standalone on a Ubuntu 20.04 Server VM.
Rancher is connected to a management network (the default network the Ubuntu Server Template places new VMs in). It has routing set up to a different VLAN, on which the nodes should live per my definition.

Cluster information

Cluster type (Hosted/Infrastructure Provider/Custom/Imported): Infrastructure Provider vSphere

Machine type (cloud/VM/metal) and specifications (CPU/memory): VMs with 2C/4GB RAM for master nodes and 8C/16GB RAM for worker nodes

Kubernetes version (use kubectl version): 1.19.2-rancher1-1
not applicable, since the cluster won't come up

Docker version (use docker version):

(paste the output here)

One of the docker socket errors is the following one:
[Failed to start Certificates deployer container on host [HOST_IP]: error during connect: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/cert-deployer/start": can not build dialer to [c-pbknb:m-h6rmz]]


text:
RKE2 upgrade takes a long time to finish upgrading and sometimes get stuck after upgrading one master node

Rancher Server Setup

Rancher version: 2.6head commit id: a97612b
Installation option (Docker install/Helm Chart): HELM

If Helm Chart, Kubernetes Info: RKE1
Cluster Type (RKE1, RKE2, k3s, EKS, etc): RKE1
Node Setup: 3 nodes all roles
Version: 1.20.9

Proxy/Cert Details: rancher generated

Information about the Cluster

Kubernetes version: 1.20.10rke2 to 1.21.4 rke2 version
Cluster Type (Local/Downstream): Downstream imported RKE2 cluster

Describe the bug

This happened on an upgraded rancher from 2.5.9 to 2.6head setup, but that shouldnt matter.
Deploy an imported RKE2 cluster - 3 etcd+cp and 2 worker nodes on 1.20.10 rke2 version
Upgrade rancher
Upgrade the rke2 version of the downstream cluster to 1.21.4
One of the master nodes get upgraded, and the cluster is stuck in Provisioning
It waits for 30 mins, and another master plan pod is deployed, and then master nodes get upgraded, and worker also get upgraded.

I believe this is due to system-upgrade-controller itself and maybe we should move this to that repo. I have seen this same thing happen in the past on standalone SUC upgrades. Basically, the upgrade gets stuck on a node and there is some internal timeout of 30 minutes until it will retry on its own. Usually this retry resolves the issue.
When it gets stuck, there isn't anything useful that I can tell by looking at the plans and jobs, other than that it tried to apply on a master node (for example, based on the plan) and then there is no pod showing that it ran anything.

This could very well be an upstream bug that SUC exposes, and we probably want to bump it out of 2.6.1. For the use cases here, we are not using drain, which can itself sometimes be the problem.
What I'm seeing is that a job on the node in question (in this case a server node) is created but not running:
NAME                                                                  READY   STATUS     RESTARTS   AGE
pod/apply-rke2-agent-on-ip-172-31-13-106.us-east-2.compute.in-lprnz   0/1     Init:0/2   0          9m3s
pod/apply-rke2-agent-on-ip-172-31-6-22.us-east-2.compute.inte-pjdfd   0/1     Init:0/2   0          9m3s
pod/system-upgrade-controller-7cbf7ff8d5-6t6lv                        1/1     Running    0          79m

NAME                                                                        COMPLETIONS   DURATION   AGE
job.batch/apply-rke2-agent-on-ip-172-31-13-106.us-east-2.compute.in-35da0   0/1           9m         9m
job.batch/apply-rke2-agent-on-ip-172-31-6-22.us-east-2.compute.inte-7f711   0/1           9m         9m
job.batch/apply-rke2-server-on-ip-172-31-2-47.us-east-2.compute.int-59967   0/1                      9m1s

When checking the kubelet logs on the node, it appears this could be a problem with it not finding mount points, even though they exist:
E0902 20:00:42.335782    3767 kubelet_pods.go:153] Mount cannot be satisfied for container "cordon", because the volume is missing (ok=false) or the volume mounter (vol.Mounter) is nil (vol={Mounter:<nil> BlockVolumeMapper:<nil> SELinuxLabeled:false ReadOnly:false InnerVolumeSpecName:}): {Name:host-root ReadOnly:false MountPath:/host SubPath: MountPropagation:<nil> SubPathExpr:}
E0902 20:00:42.335900    3767 kuberuntime_manager.go:829] init container &Container{Name:cordon,Image:rancher/kubectl:v1.18.3,Command:[],Args:[cordon ip-172-31-2-47.us-east-2.compute.internal],WorkingDir:,Ports:[]ContainerPort{},Env:[]EnvVar{EnvVar{Name:SYSTEM_UPGRADE_NODE_NAME,Value:,ValueFrom:&EnvVarSource{FieldRef:&ObjectFieldSelector{APIVersion:v1,FieldPath:spec.nodeName,},ResourceFieldRef:nil,ConfigMapKeyRef:nil,SecretKeyRef:nil,},},EnvVar{Name:SYSTEM_UPGRADE_POD_NAME,Value:,ValueFrom:&EnvVarSource{FieldRef:&ObjectFieldSelector{APIVersion:v1,FieldPath:metadata.name,},ResourceFieldRef:nil,ConfigMapKeyRef:nil,SecretKeyRef:nil,},},EnvVar{Name:SYSTEM_UPGRADE_POD_UID,Value:,ValueFrom:&EnvVarSource{FieldRef:&ObjectFieldSelector{APIVersion:v1,FieldPath:metadata.uid,},ResourceFieldRef:nil,ConfigMapKeyRef:nil,SecretKeyRef:nil,},},EnvVar{Name:SYSTEM_UPGRADE_PLAN_NAME,Value:rke2-server,ValueFrom:nil,},EnvVar{Name:SYSTEM_UPGRADE_PLAN_LATEST_HASH,Value:8edf2a220da7edb9e0979f15c1f4f9eeb539dfc0c1845203376af791,ValueFrom:nil,},EnvVar{Name:SYSTEM_UPGRADE_PLAN_LATEST_VERSION,Value:v1.21.4-rc1-rke2r3,ValueFrom:nil,},},Resources:ResourceRequirements{Limits:ResourceList{},Requests:ResourceList{},},VolumeMounts:[]VolumeMount{VolumeMount{Name:host-root,ReadOnly:false,MountPath:/host,SubPath:,MountPropagation:nil,SubPathExpr:,},VolumeMount{Name:pod-info,ReadOnly:true,MountPath:/run/system-upgrade/pod,SubPath:,MountPropagation:nil,SubPathExpr:,},VolumeMount{Name:system-upgrade-token-lwn4z,ReadOnly:true,MountPath:/var/run/secrets/kubernetes.io/serviceaccount,SubPath:,MountPropagation:nil,SubPathExpr:,},},LivenessProbe:nil,ReadinessProbe:nil,Lifecycle:nil,TerminationMessagePath:/dev/termination-log,ImagePullPolicy:Always,SecurityContext:nil,Stdin:false,StdinOnce:false,TTY:false,EnvFrom:[]EnvFromSource{},TerminationMessagePolicy:File,VolumeDevices:[]VolumeDevice{},StartupProbe:nil,} start failed in pod apply-rke2-server-on-ip-172-31-2-47.us-east-2.compute.int-97cwk_system-upgrade(e985599a-93ed-498c-a279-5fb0ad4fed8c): CreateContainerConfigError: cannot find volume "host-root" to mount into container "cordon"
E0902 20:00:42.335926    3767 pod_workers.go:191] Error syncing pod e985599a-93ed-498c-a279-5fb0ad4fed8c ("apply-rke2-server-on-ip-172-31-2-47.us-east-2.compute.int-97cwk_system-upgrade(e985599a-93ed-498c-a279-5fb0ad4fed8c)"), skipping: failed to "StartContainer" for "cordon" with CreateContainerConfigError: "cannot find volume \"host-root\" to mount into container \"cordon\""

This fixed itself within 20 minutes, but for future reference, on the system where we see these errors, we need to attempt correlation with the containerd logs (because while the kubelet is responsible for setting up mounts these are funneled through containerd which is likely applying its own sanity checks).

I was not able to reproduce this on v2.6-head (1d2b746) by following the original instructions:

import 1.20.10 rke2 cluster
upgrade to 1.21.x
the cluster upgrades in a timely manner and returns to an active state

source: gharchive/issue

authors: rancher-max slickwarren sowmyav27

repo: rancher/rancher

license_type: permissive

license_source: github-api


text:
Rancher local cluster charts not updated on upgrade from v2.5.9 -> v2.6.0 with --set useBundledSystemChart: true

SURE-3336
Rancher Server Setup
Rancher Cluster:
Rancher version: v2.6.0 upgraded from v2.5.9
Downstream Cluster:
N/A
Longhorn:
N/A
Other:
N/A
Information about the Cluster

Kubernetes version:
Cluster Type (Local/Downstream):

If downstream, what type of cluster? (Custom/Imported or specify provider for Hosted/Infrastructure Provider):

Issue description:
In a Rancher environment with the helm chart option --set useBundledSystemChart=true the available Rancher charts in the local cluster are not updated upon upgrade from Rancher v2.5.9.
Business impact:
Latest v2.6 charts are not available to the user, and the rancher-webhook and fleet workloads are not updated, resulting in multiple failures. Following errors in Rancher Pod logs:
2021/09/09 15:23:02 [ERROR] error syncing 'machinehealthchecks.cluster.x-k8s.io': handler need-a-cert: services "webhook-service" not found, requeuing
2021/09/09 15:23:02 [ERROR] error syncing 'clusters.cluster.x-k8s.io': handler need-a-cert: services "webhook-service" not found, requeuing
2021/09/09 15:23:02 [ERROR] error syncing 'machinesets.cluster.x-k8s.io': handler need-a-cert: services "webhook-service" not found, requeuing
2021/09/09 15:23:02 [ERROR] error syncing 'machinedeployments.cluster.x-k8s.io': handler need-a-cert: services "webhook-service" not found, requeuing
2021/09/09 15:23:02 [ERROR] error syncing 'machines.cluster.x-k8s.io': handler need-a-cert: services "webhook-service" not found, requeuing
2021/09/09 15:23:02 [ERROR] error syncing 'validating-webhook-configuration': handler need-a-cert: services "webhook-service" not found, requeuing
2021/09/09 15:23:03 [ERROR] available chart version (0.3.500) for fleet-crd is less than the min version (100.0.0+up0.3.6)
2021/09/09 15:23:03 [ERROR] Failed to find system chart fleet-crd will try again in 5 seconds: no chart name found
2021/09/09 15:23:08 [ERROR] available chart version (0.3.500) for fleet-crd is less than the min version (100.0.0+up0.3.6)
2021/09/09 15:23:08 [ERROR] Failed to find system chart fleet-crd will try again in 5 seconds: no chart name found
2021/09/09 15:23:13 [ERROR] available chart version (0.3.500) for fleet-crd is less than the min version (100.0.0+up0.3.6)
2021/09/09 15:23:13 [ERROR] Failed to find system chart fleet-crd will try again in 5 seconds: no chart name found2021/09/09 15:23:02 [ERROR] error syncing 'machinehealthchecks.cluster.x-k8s.io': handler need-a-cert: services "webhook-service" not found, requeuing
2021/09/09 15:23:02 [ERROR] error syncing 'clusters.cluster.x-k8s.io': handler need-a-cert: services "webhook-service" not found, requeuing
2021/09/09 15:23:02 [ERROR] error syncing 'machinesets.cluster.x-k8s.io': handler need-a-cert: services "webhook-service" not found, requeuing
2021/09/09 15:23:02 [ERROR] error syncing 'machinedeployments.cluster.x-k8s.io': handler need-a-cert: services "webhook-service" not found, requeuing
2021/09/09 15:23:02 [ERROR] error syncing 'machines.cluster.x-k8s.io': handler need-a-cert: services "webhook-service" not found, requeuing
2021/09/09 15:23:02 [ERROR] error syncing 'validating-webhook-configuration': handler need-a-cert: services "webhook-service" not found, requeuing
2021/09/09 15:23:03 [ERROR] available chart version (0.3.500) for fleet-crd is less than the min version (100.0.0+up0.3.6)
2021/09/09 15:23:03 [ERROR] Failed to find system chart fleet-crd will try again in 5 seconds: no chart name found
2021/09/09 15:23:08 [ERROR] available chart version (0.3.500) for fleet-crd is less than the min version (100.0.0+up0.3.6)
2021/09/09 15:23:08 [ERROR] Failed to find system chart fleet-crd will try again in 5 seconds: no chart name found
2021/09/09 15:23:13 [ERROR] available chart version (0.3.500) for fleet-crd is less than the min version (100.0.0+up0.3.6)
2021/09/09 15:23:13 [ERROR] Failed to find system chart fleet-crd will try again in 5 seconds: no chart name found
RKE2 Node Driver cluster provisioning fails with following error:
Failed to create fleet-default/rke2 cluster.x-k8s.io/v1alpha4, Kind=Cluster for rke-cluster fleet-default/rke2: Internal error occurred: failed calling webhook "default.cluster.cluster.x-k8s.io": Post "https://webhook-service.cattle-system.svc:443/mutate-cluster-x-k8s-io-v1alpha4-cluster?timeout=10s": service "webhook-service" not found, failed to create fleet-default/rke2-pool1 cluster.x-k8s.io/v1alpha4, Kind=MachineDeployment for rke-cluster fleet-default/rke2: Internal error occurred: failed calling webhook "default.machinedeployment.cluster.x-k8s.io": Post "https://webhook-service.cattle-system.svc:443/mutate-cluster-x-k8s-io-v1alpha4-machinedeployment?timeout=10s": service "webhook-service" not found
Troubleshooting steps:
N/A
Repro steps:

Provision a single all role node RKE cluster (I used RKE v1.2.9)
Install Rancher v2.5.9 from helm with --set useBundledSystemChart=true, only other option I specified in helm install with –set hostname
Perform helm upgrade to v2.6.0 with --set useBundledSystemChart=true
Observe lack of chart version updates available in local cluster Apps & Marketplace, errors in Rancher Pod logs and inability to provision RKE2 cluster
Perform helm upgrade to --set useBundledSystemChart=false and attempt to refresh the Rancher chart repository, observe issues persist
Workaround:
Is workararound available and implemented? Not that I could determine, attempting to --set useBundledSystemChart=false and fresh chart repo still didn't resolve this

It's easy to reproduce: use the flag and see if the chart repo has been updated. Good issue to learn about charts.
Actual behavior:
Only existing Rancher v2.5.9 chart versions appear available
Expected behavior:
Rancher v2.6.0 charts available
Files, logs, traces:
Contents of the two rancher-charts- ConfigMaps from my lab after upgrade to v2.6.0, not sure how to decode these, but both the same
Additional notes:
Correct charts are available on fresh install of v2.6.0

Reporter cannot reproduce. Closing.

authors: MKlimuszka SheilaghM


text:
Build not supported in catalog with build

Rancher Version: v1.1.0-dev4
Docker Version: 1.12.1
Using one host with rancher-server image launch and agent container on same machine
Is there anyway to support docker compose file with "build: ." from private catalog entry ?
According to this ((http://docs.rancher.com/rancher/v1.2/en/cattle/rancher-compose/build/) it is possible with s3. I have successfully connected to aws s3 within rancher-server container installing python awscli inside it but can't manage to make it work from rancher ui, i keep getting the following error:
time="2016-10-21T15:30:18Z" level=info msg="[uptime2:uptime-mongodb-service]: Created " eventId=09a1a9de-5f01-48e8-ba7d-dce2b19a08e1 resourceId=1e19
time="2016-10-21T15:30:18Z" level=info msg="[uptime2:uptime-server-service]: Creating " eventId=09a1a9de-5f01-48e8-ba7d-dce2b19a08e1 resourceId=1e19
time="2016-10-21T15:30:18Z" level=info msg="Creating service uptime-server-service"
time="2016-10-21T15:30:18Z" level=error msg="Failed Creating uptime-server-service : Build not supported"
time="2016-10-21T15:30:18Z" level=error msg="Failed to start: uptime-server-service : Build not supported"
time="2016-10-21T15:30:18Z" level=error msg="Stack Create Event Failed: Build not supported" eventId=09a1a9de-5f01-48e8-ba7d-dce2b19a08e1 resourceId=1e19

hey @JeanDaniel-Fischer can you share the docker/rancher-compose.yml files you used here?

@aemneina @JeanDaniel-Fischer Correct, build is not supported when launching catalogs as it's expected to be used with a local filesystem. Inside the rancher server container, we don't have support for build for services.


text:
Incorrect server version reported in kubectl

Rancher server version - Build from master
k8s template (v1.4.4-rancher1)  from 1.2 branch of rancher-catalog .
kubectl server version shows server as  v1.2.0-alpha.1.17071+0fe26bc6339a86-dirty (edited)
> kubectl version
Client Version: version.Info{Major:"1", Minor:"4", GitVersion:"v1.4.4", GitCommit:"3b417cc4ccd1b8f38ff9ec96bb50a81ca0ea9
d56", GitTreeState:"clean", BuildDate:"2016-10-21T02:48:38Z", GoVersion:"go1.6.3", Compiler:"gc", Platform:"linux/amd64"
}
Server Version: version.Info{Major:"1", Minor:"2+", GitVersion:"v1.2.0-alpha.1.17071+0fe26bc6339a86-dirty", GitCommit:"0
fe26bc6339a860096bc30c5c0fa29e9f669edc1", GitTreeState:"dirty", BuildDate:"2016-10-31T18:07:28Z", GoVersion:"go1.6.3", C
ompiler:"gc", Platform:"linux/amd64"}
>

In previous K8s template , server version was reported correctly:

Download a new alena1108/k8s:dev; it should report the correct server version

Tested with master. The server version reported is 1.4.5-rancher2 as shown below:
> kubectl version
Client Version: version.Info{Major:"1", Minor:"4", GitVersion:"v1.4.4", GitCommit:"3b417cc4ccd1b8f38ff9ec96bb50a81ca0ea9
d56", GitTreeState:"clean", BuildDate:"2016-10-21T02:48:38Z", GoVersion:"go1.6.3", Compiler:"gc", Platform:"linux/amd64"
}
Server Version: version.Info{Major:"1", Minor:"4+", GitVersion:"v1.4.5-rancher2", GitCommit:"4b5664eb051eadd7916d8af4b0f
e29377f13f18b", GitTreeState:"clean", BuildDate:"2016-11-10T23:10:06Z", GoVersion:"go1.6.3", Compiler:"gc", Platform:"li
nux/amd64"}

authors: alena1108 sangeethah soumyalj


text:
pulll catalog?

I've been experimenting with creating catalogs and I was wondering if it might be a good idea to have a pull catalog button?   Most of the time I can just hit reload, and the new changes come in, but many times I'll hit reload a couple of times and it refuses to trigger, and I'll go in settings remove my catalog and hit save, and then re-add the catalog.  It might be nice to have a rebuild catalog button, or an api call that I curl in?

@joshuacox - After thinking about it, if you click on the reload and it doesn't update with the changes you made, then that is a bug.  Next time can you make a note of what didn't update properly and add it to this issue.  If you can give me an example I can reproduce, then I might be able to get a dev to fix it :).

Something to note is that I am incrementing the version everytime now.  Another behavior I've adopted is hitting a hard reload on the catalog page and not the catalog item itself.   Most of the time this works, but every now and then I do have to "go in settings remove my catalog and hit save, and then re-add the catalog" as above.  I have waited a few times (gone to bed, and wait for morning), and it will still be on the old version and I'll have to do the above procedure to 'kick' it.  But for the most part it is working as intended, and I consider this an edge case.  I'm going to close as my workaround does indeed force it to update, feel free to reopen.

this is still a major issue.  I was going through some of the behaviour I go through to comply with Rancher not wanting to pull my catalogs and @jamessmoore was astounded at how many times you must reload a page before a catalog will update.

there needs to be a "pull catalogs" button somewhere for catalog developing sanity

I have also notice that this sentence "Alternatively, you could update the templates in the 0 folder and just re-deploy the entry." on this page is not true.  For example,
create a template
deploy in rancher
edit yml files in place inside 0
git commit and push
redeploy
changes are almost never carried over unless I reload stacks/user an insane amount of times (insane because I have no clue what this number is, sometimes once, sometimes 500 times and still will not update)

You're missing wait ≥ 5 min for polling or click refresh part...

'click refresh'  thank you for the pic!  I would've assumed you were talking about ctrl-shift-R or similar.  Hopefully that eliminates my issues.

authors: joshuacox tfiduccia vincent99


text:
k8s 1.6 upgrade

We should start looking at k8s 1.6 upgrade path. See if there are any big changes in building/packaging that would require catalog changes

As a part of upgrade to 1.6, could you also switch to using latest event-subscriber package? there are some bugs that were fixed in the latest.

v1.6.1 is now available in the v1.6.0-dev branch of catalog

hi, I'm struggling to figure out how to make use of 1.6 in rancher as well, is there any docs in regards to how to make use of the v1.6.0-dev branch of catalog ?
Thanks.

@thomasmodeneis we really don't recommend using any of our dev branches in our catalog until we have released the infra template officially. It hasn't gone through testing and sometimes there may be parts of the catalog that will require specific rancher release.
For example, since I have made this comment, we have released Rancher 1.6 and the k8s 1.6.x template was not released with it. The dev version of our k8s 1.6.x template has moved to a different catalog branch and requires using specific rancher release and still requires some UI changes and is not ready for public consumption. It has not gone through our QA team for testing so upgrading hasn't been tested.

@galal-hussein a new template for k8s v1.6.x is available in k8s-1.6-dev with all new images.
Can you validate upgrade and general k8s testing for this version?

Rancher server: v1.6.3-rc2
K8S 1.6.6 tested and verified including:

Validation tests
Upgrade tests
HA upgrade tests
Testing Addons

@deniseschannon thanks for your answer.
However I'm still a bit confused, is 1.6.6 released for public usage or still not available ?
Cheers.

Kubernetes 1.6 was released and available when starting Rancher v1.6.3. @thomasmodeneis Let me know if you have more questions.

authors: alena1108 deniseschannon galal-hussein thomasmodeneis


text:
Metadata service pointing to older version on master

Rancher Versions:
Server:Master
**Docker Version:**1.12.6
**OS and where are the hosts located? (cloud, bare metal, etc):**Ubuntu, Cloud
**Setup Details: (single node rancher vs. HA rancher, internal DB vs. external DB)**Single node
Environment Type: (Cattle/Kubernetes/Swarm/Mesos) Cattle
Steps to Reproduce:
Create a master setup with 3 hosts
Metadata service pointing to  older version rancher/metadata:v0.7.0
Infrastructure services fail to come up
Catalog is pointing to v1.5.0-dev but network services stack is still not pulling the required folder
Metadata container logs:
2/13/2017 3:13:50 PMtime="2017-02-13T23:13:50Z" level=info msg="Downloaded in 3.961042ms"
2/13/2017 3:13:50 PMtime="2017-02-13T23:13:50Z" level=error msg="Failed to download and reload metadata: non-200 response 404: {\"id\":\"d03a3602-3cb8-4518-92b6-60a01cebf29e\",\"type\":\"error\",\"links\":{},\"actions\":{},\"status\":404,\"code\":\"Not Found\",\"message\":\"Not Found\",\"detail\":null,\"baseType\":\"error\"}"

Network Services container logs
2/13/2017 3:13:57 PMCreating metadata client: Error 404 accessing /version path
2/13/2017 3:13:58 PMtime="2017-02-13T23:13:58Z" level=info msg="Waiting for metadata"
2/13/2017 3:14:29 PMCreating metadata client: Error 404 accessing /version path
2/13/2017 3:14:31 PMtime="2017-02-13T23:14:31Z" level=info msg="Waiting for metadata"
2/13/2017 3:15:02 PMCreating metadata client: Error 404 accessing /version path
2/13/2017 3:15:03 PMtime="2017-02-13T23:15:03Z" level=info msg="Waiting for metadata"
2/13/2017 3:15:34 PMCreating metadata client: Error 404 accessing /version path
2/13/2017 3:15:35 PMtime="2017-02-13T23:15:35Z" level=info msg="Waiting for metadata

When adding a new catalog - "Hello" - using "Admin"->"Settings" page , not able to list any templates from this catalog.
The newly added catalog is not saved in the DB .
mysql> select * from catalog;
+----+---------------------+---------------------+----------------+-----------+----------------------------------------------+--------+------------------------------------------+------+
| id | created_at          | updated_at          | environment_id | name      | url                                          | branch | commit                                   | type |
+----+---------------------+---------------------+----------------+-----------+----------------------------------------------+--------+------------------------------------------+------+
| 13 | 2017-02-14 15:52:28 | 2017-02-14 15:52:28 | global         | community | https://git.rancher.io/community-catalog.git |        | 01a0d8f723ee8b7b4cf7ea54e6eddcf1245bcace |      |
| 14 | 2017-02-14 15:52:36 | 2017-02-14 15:52:36 | global         | library   | https://git.rancher.io/rancher-catalog.git   |        | e6f8944ef89e393e8d625c00c897ecf70f582678 |      |
+----+---------------------+---------------------+----------------+-----------+----------------------------------------------+--------+------------------------------------------+------+
2 rows in set (0.00 sec)

@joshwget , If the catalog was not saved in the DB at all , how is UI able to list this catalog in "Catalog" dropdown menu ? We expect this information to be queried from the DB ?

@sangeethah Was this before or after the 0.16.1 release? This should have been fixed in that release.

Tested with master. Metadata service points to the correct version. When a catalog is added through Admin-settings tab, the templates are listed correctly:
mysql> select * from catalog;
+----+---------------------+---------------------+----------------+----------------+----------------------------------------------+------------+------------------------------------------+------+
| id | created_at          | updated_at          | environment_id | name           | url                                          | branch     | commit                                   | type |
+----+---------------------+---------------------+----------------+----------------+----------------------------------------------+------------+------------------------------------------+------+
|  4 | 2017-02-17 21:03:40 | 2017-02-17 21:03:40 | global         | community      | https://git.rancher.io/community-catalog.git | master     | 1022ba141640833b40d27d8dec478a57a8b4bab4 |      |
|  6 | 2017-02-17 21:03:44 | 2017-02-17 21:03:44 | global         | library        | https://git.rancher.io/rancher-catalog.git   | v1.5.0-dev | db6d23ae5c40bf5c060550f704511d1456e2a13d |      |
|  8 | 2017-02-17 21:19:32 | 2017-02-17 21:19:32 | global         | soumya-catalog | https://github.com/soumyalj/rancher-catalog  | master     | e521d8e96532a6eaf23c1fbed58dd7d3cac28689 |      |
+----+---------------------+---------------------+----------------+----------------+----------------------------------------------+------------+------------------------------------------+------+
3 rows in set (0.00 sec)

authors: joshwget sangeethah soumyalj


text:
new ui release

Fixes javascript issue on cluster edit.

LGTM

source: gharchive/pull-request


text:
including busybox image in rancher-images.txt for airgap setups

Addresses: https://github.com/rancher/rancher/issues/20780

LGTM


text:
Validation tests for apps with RBAC

Added 3 additional test cases and modified one existing one
Modified:
test_rbac_app_project_scope_list_deploy

New:
test_rbac_app_cluster_scope_list_deploy
test_rbac_app_project_scope_delete
test_rbac_app_cluster_scope_delete

Add some description to test cases to outline the test steps and validations done.
Include validation for cases for the user to NOT able to deploy catalog apps in all the cases were checks are done for USER to NOT able to list the catalog.


text:
[BUGFIX] AzureChinaCloud The subscription  could not be found. #42243

Issue:  #42243
Problem
rancher init SubscriptionServiceClient WithOut URL, which used default url ,
Solution
init SubscriptionServiceClient  with cap.baseurl

@rancherbot


text:
[v2.9] Allow import EKS cluster with self-managed nodes

Issue: https://github.com/rancher/eks-operator/issues/301 (cherry picked from commit f1acaafa66cf2b6dfde0022da650a0ddf704f525)
Issue:

Problem

Solution

Testing

Engineering Testing
Manual Testing

Automated Testing

Test types added/modified:

Unit
Integration (Go Framework)
Integration (v2prov Framework)
Validation (Go Framework)
Other - Explain: EXPLAIN
None
REMOVE NOT APPLICABLE BULLET POINTS ABOVE

If "None" - Reason: EXPLAIN THE REASON

If "None" - GH Issue/PR: LINK TO GH ISSUE/PR TO ADD TESTS

Summary: TODO
QA Testing Considerations

Regressions Considerations

TODO
Existing / newly added automated tests that provide evidence there are no regressions:

TODO

LGTM pending drone ci passing.

authors: mjura salasberryfin


text:
Align git manifest with release one (#183)

Make the manifest file aligned with the one proposed in release
(https://github.com/rancher/system-upgrade-controller/releases/download/v0.8.1/system-upgrade-controller.yaml).

Hi @sylvainOL, thank you for your contribution. Scanning this, it seems like a re-format. What problem does this change solve? I've looked at #183 that you have referenced but the underlying issue is that we do not telegraph versions in our manifest which means that a manifest referencing a tagged release will always be at least one commit behind said tag/release.

https://github.com/rancher/system-upgrade-controller/issues/183#issuecomment-1072668808

Hi @dweomer, but why don’t you update to the latest version (0.8.1) in master even after the release?

authors: dweomer sylvainOL

repo: rancher/system-upgrade-controller


text:
Make the recipes work with the least amount of configuration

For example, for AWS, only specifying the access/secret keys and then terraform apply should work.

Done for AWS recipes (RKE/RKE2/K3s) #145 ; in progress for Google.

repo: rancher/tf-rancher-up

license: MIT


text:
Test cases for workload creation with port mappings and few other fixes.

Added test cases for workload creation with port mappings.
Fixed failing Ingress test with rules having on path
Added cluster state check using kubectl for cluster creation workflows
Fixed connectivity check message for SD tests.
@bmdepesa @soumyalj can you review the changes?

LGTM

authors: bmdepesa sangeethah

repo: rancher/validation


text:
Running with 4 cores

Not to be merged. Just testing

Run:
http://drone.rancher.io/github.com/rancherio/cattle/pytest-xdist2/d4c5b80d38ad510fdcf8acc8b90c388e1933426e
Failures:
test_cluster_add_remove_host_actions
test_container_affinity
test_zone_list (teardown)
clean_up_projects (i think this is what is failing in the tear down)

run
http://drone.rancher.io/github.com/rancherio/cattle/pytest-xdist2/875494df4bb917d9e23d331b2224fb10145f6c6c
2 failures:
test_cluster_purge
test_host_only_3_hosts_subnet

Run
http://drone.rancher.io/github.com/rancherio/cattle/pytest-xdist2/5f97f576b7bf00e746a31dfaa34551ad40280682
3 failures:
test_container_affinity
test_host_only_3_hosts_subnet
test_remove_inactive_service

Run
http://drone.rancher.io/github.com/rancherio/cattle/pytest-xdist2/2e1c488d26db0d5163b4ca976732b8fffe1f191c
More random failures
test_link_create
test_container_affinity
test_delete_host_from_lb_when_agent_inactive
test_remove_inactive_service

Run
http://drone.rancher.io/github.com/rancherio/cattle/pytest-xdist2/1d4b1810ca3bddcf5ce2fa5a64d537826e9da31c
Fails:
test_host_only_3_hosts_same_phy
test_delete_host_from_lb_when_agent_removed

Run:
http://drone.rancher.io/github.com/rancherio/cattle/pytest-xdist2/39dd708985507499849efdd3fe6b1327ec60b8b9
Failures:
test_container_affinity
test_host_only_subnet

The common theme seems to be that when new simulated hosts are added and then allocated to, instances fail to allocate to them.

Starting fresh with green master in this pr:
https://github.com/rancherio/cattle/pull/490

repo: rancherio/cattle

license_source: bigquery


text:
Set as my login Environment doesn't work after 1st change

Steps:

Create a Environment called Environment1
In Manage Environments, set Environment1 as your Login Environment
Logout and log back in (you will be sent to Environment1)
Go back to Manage Environments and set Default as your Login Environment
Logout and log back in

Results:
You are still sent to Environment1 instead of Default.  If you go to Manage Environments, Environment1 is set as your Login Environment.
Expected:
Default should be your login environment.

@hibooboo2 This is the uniqueness constraint thing on userPrefs..  Please send back to @tfiduccia when it's fixed in master.
{
  actions: {},
  code: "NotUnique",
  detail: null,
  fieldName: "name",
  id: "8753d5b1-73c2-4b28-bd7d-6cac68898401",
  links: {},
  message: null,
  status: 422,
  type: "error"
}

Currently gdapi unique constraint doesn't exclude it self when doing the check for uniqueness. I have submitted a pr to gdapi that fixes this. And subsequently i will have to submit a pr to cattle to update this. I will ping @tfiduccia when it hits master.

rancherio/cattle#609 Fixes this.

build from master - June 12th
Verified fixed

repo: rancherio/rancher


text:
calling zonejs to rerender component on initalize

Should fix: https://github.com/rangle/rangle-starter/issues/90

I don't understand why this is needed - can you elaborate?

Angular doesn't call render function :confused: for the component coming back to the same route again until anything on the UI change, which calls the render method. I tried displaying the date first 💭  and it works fine as date changes every time and calls render function. To trigger it manually is to call zone.run() function.

Updating to beta 17 appears to have fixed this.

authors: SethDavenport sumitarora

license: mit


text:
Core does not accept power from Mekanism

Issue description:
Core does not accept power from Mekanism's Universal Cables.
What happens:
Nothing
What you expected to happen:
Something
Steps to reproduce:

Put down a core
Put down a power source
Connect with a Universal Cable
Pat yourself on the back for a job well done

Version (Make sure you are on the latest version before reporting):

Minecraft: 1.10.2
Forge: 12.18.3.2239
Refined Storage: 1.2.22

Does this issue occur on a server? [no]
Extra Notes
The cable physically connects to the core and power flows into the cable, but nothing enters the core.

mekanism bug

authors: JacobMuken raoulvdberge

repo: raoulvdberge/refinedstorage


text:
Add --skip and --preserve-null support. With chalk for logging.

Add --skip and --preserve-null support. With chalk for logging.
--skip is used to completely ignore specified tables. It would allow you to have a generic argument like --list name, but also allow you to not affect every table
--preserve-null allows you to specify that the anonymizer only changes values where there is already a value. If NULL is dumped, it is kept.

Thank you for your contribution!
I just released a new version that includes your contribution

There is probably bug in this change. I tried version 0.7.0 and encountered an issue:
ERROR:  syntax error at or near "List"
LINE 1: List: public.message.target_from, public.message.target_to
public.message.target_from, public.message.target_to seams like part of the content of my --configFile  which is actually
`
public.message.target_from:extension.maskContact
public.message.target_to:extension.maskContact
`
after downgradin to 0.6.0 everything works as expected


text:
[WIP] Add BlazingSQL version of query 01

This PR adds  the version of "query" 01 using BlazingSQL.

It shows Correctness Assertion True at scale factor 1K
(tpcx-bb) christianc@rl-dgx2-d17-u05-rapids-dgx201:~/tpcx-bb/tpcx_bb/queries/q01$ python tpcx_bb_query_01_sql.py --data_dir=/raid/tpcx-bb/sf1000/parquet_2gb/ --verify_results --verify_dir=/mnt/weka/nicholasb/tpcx-bb/validation/sf1000/ --cluster_host=10.150.162.27
Using default arguments
Connected to tcp://10.150.162.27:8786
WARNING: Count not make directory
WARNING:root:WARNING: Count not make directory
WARNING: Count not make directory
WARNING:root:WARNING: Count not make directory
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.protobuf.UnsafeUtil (file:/home/christianc/miniconda3/envs/tpcx-bb/lib/blazingsql-algebra.jar) to field java.nio.Buffer.address
WARNING: Please consider reporting this to the maintainers of com.google.protobuf.UnsafeUtil
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
BlazingContext ready
Standard ETL Query
/home/christianc/miniconda3/envs/tpcx-bb/lib/python3.7/site-packages/pandas/util/__init__.py:12: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.
  import pandas.util.testing
Correctness Assertion True
Must pass a sheet and tab name to use Google Sheets automation

The "query" finishes successfully at scale factor 10K
(tpcx-bb) christianc@rl-dgx2-d17-u05-rapids-dgx201:~/tpcx-bb/tpcx_bb/queries/q01$ python tpcx_bb_query_01_sql.py --data_dir=/mnt/weka/tpcx-bb/sf10000/parquet_3gb/ --cluster_host=10.150.162.27
Using default arguments
Connected to tcp://10.150.162.27:8786
WARNING: Count not make directory
WARNING:root:WARNING: Count not make directory
WARNING: Count not make directory
WARNING:root:WARNING: Count not make directory
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.protobuf.UnsafeUtil (file:/home/christianc/miniconda3/envs/tpcx-bb/lib/blazingsql-algebra.jar) to field java.nio.Buffer.address
WARNING: Please consider reporting this to the maintainers of com.google.protobuf.UnsafeUtil
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
BlazingContext ready
Must pass a sheet and tab name to use Google Sheets automation

Do you think this PR should change to the REVIEW state? cc @beckernick

After applying these changes I tested again at sf 1K and got the  Correctness Assertion True message again in the dgx201, so updating this PR to REVIEW.

repo: rapidsai/tpcx-bb


text:
Update to Rin v3.3.7-2

Happy birthday!! Hoshizora Rin!!!!!!!!!!!!!
ということで，Honoka v3.3.7-aの変更点をmergeしてRin v3.3.7-2を作成しました。
問題がなければMasterにMergeし，Releaseします。
誕生日なのに面白いことできなくてごめんなさい＞＜

よく考えるとレビュアーってのがいないので，Self LGTMしとこう(意味がない)

repo: raryosu/Rin


text:
support mmCIF files

Is support for .mmCIF files planned any time in the near future?

It would be a good feature to add. Currently it is not planned for the near-term though.

I think this can be closed :)

hah, good catch!

authors: a-r-j jaydeepsb rasbt

repo: rasbt/biopandas


text:
Add Support for Extracted Comments

gulp-wp-pot does not support extracted comments e.g. using the "translators:" (or other) keyword at the start of comments just prior to a translation function call, e.g.
your-translated-file.php:
<?php
/* translators: Limit to 32 characters or less */
$short_variable = __('Limited Length Phrase', 'sample-textdomain');

might produce a pot entry like so:
sample-textdomain.pot: (excerpt)
#. translators: Limit to 32 characters or less
#: your-translated-file.php:3
msgid "Limited Length Phrase"
msgstr ""

Thank you,
I think this would be good, but it requires a lot of work to make the script find it so I will have it in mind but I don't know when I can implement it. If someone can help implement it, it's always appreciated.

I think the added value is high enough that I will consider implementing it -- I'd like to make the keyword(s) configurable and let the parsing be tolerant cases like encountering opening/ending PHP tags, end of line comments the preceding line, inline comments, and either multi-line or multiple adjacent single line comments. It's enough complexity that perhaps forcing some limitations (e.g. only single-line comments) for an initial attempt would eliminate bugs.

I'm working on a major rewrite right now that will fix this when it's released.

Excited to see this. I'll try to make use of the new support in my project once it makes it into a usable release.

Fixed in 2.0. Defaults to translators: but can be changed with commentKeyword option

authors: lf-jeremy rasmusbe

repo: rasmusbe/gulp-wp-pot


text:
Documentation on label printing?

Sorry if this is posted somewhere but couldn't find more info.
I'm more of a hardware guy, right now I'm trying to use a Brother Ptouch printer to print labels after provisoning. So far the printer is working on the rpi 4 server (used this guide: https://github.com/HenrikBengtsson/brother-ptouch-label-printer-on-linux) but I can't figure the options on "labels/add label" to output.
Is there a detailed document on how to use this?
Thanks again and sorry for the trouble

The software assumes you are using a label printer that can be fed a text document with markup elements, and that the printer then does its thing.
E.g. you can draft a text template in the ZPL markup language if you are using a Zebra printer.
Or one in the JScript markup language for Brady/CAB printers.
In case you are using a consumer grade printer that does not understand any markup language, but just wants to receive pixel raster data, you will need to use an intermediate program that generates that.
One way is to draft the template in HTML in cmprovision, and configure that it pipes the result to "dompdf", which converts the HTML to PDF.
PDF is a file format that can then be printed by lpr, if your printer has a CUPS driver.
See also:
https://github.com/raspberrypi/cmprovision/issues/25#issuecomment-1602838683
https://github.com/trialinfo/ptouch-driver

Thanks! Will try to get a Zebra printer (that's what's available locally) as it will make things much simpler.

authors: aacos-uy maxnet

repo: raspberrypi/cmprovision


text:
[BUG]

Please only report one bug per issue!
Describe the bug
I am running the lores stream for processing. I am running the main stream for a webserver and simultaneously recording via the MJPEG encoder (but not accessing the frames from the frameserver). I am collecting both the lores and main camera stream via the following method described in the docs array = picam2.capture_arrays(["main", "lores"]) and sending these to different threads using the the frameserver.py example. The error is not consistent but seems to occur when a recording is triggered. I am not using a preview.
To Reproduce
See above.
Expected behaviour
I didn't expect this error message
Console Output, Screenshots
  File "/usr/lib/python3/dist-packages/picamera2/previews/null_preview.py", line 74, in handle_request
    completed_request = picam2.process_requests()
  File "/usr/lib/python3/dist-packages/picamera2/picamera2.py", line 1023, in process_requests
    self._encoder.encode(stream, display_request)
  File "/usr/lib/python3/dist-packages/picamera2/encoders/v4l2_encoder.py", line 243, in encode
    fcntl.ioctl(self.vd, VIDIOC_QBUF, buf)

Hardware :
pi 3a+ with ov9281
Additional context
Add any other context about the problem here.

Hi, thanks for the report. It sounds as though the encoder has perhaps not started, but it's very hard to diagnose in the abstract. Are you able to attach a minimal test case that shows the problem? Thanks.

Hi David,
Here is an example code which still raises the error
#!/usr/bin/python3

# These two are only needed for the demo code below the FrameServer class.
import time
from threading import Condition, Thread

from picamera2 import Picamera2
from picamera2.encoders import MJPEGEncoder
from picamera2.outputs import CircularOutput, FileOutput

class FrameServer:
    def __init__(self, picam2, stream='main'):
        """A simple class that can serve up frames from one of the Picamera2's configured streams to multiple other threads.
        Pass in the Picamera2 object and the name of the stream for which you want
        to serve up frames.
        """
        self._picam2 = picam2
        self._stream = stream
        self._array = None
        self._condition = Condition()
        self._running = True
        self._count = 0
        self._thread = Thread(target=self._thread_func, daemon=True)

    @property
    def count(self):
        """A count of the number of frames received."""
        return self._count

    def start(self):
        """To start the FrameServer, you will also need to start the Picamera2 object."""
        self._thread.start()

    def stop(self):
        """To stop the FrameServer
        First stop any client threads (that might be
        blocked in wait_for_frame), then call this stop method. Don't stop the
        Picamera2 object until the FrameServer has been stopped.
        """
        self._running = False
        self._thread.join()

    def _thread_func(self):
        while self._running:
            array = picam2.capture_arrays(["main", "lores"])
            self._count += 1
            with self._condition:
                self._array = array
                self._condition.notify_all()

    def wait_for_frame(self, previous=None):
        """You may optionally pass in the previous frame that you got last time you called this function.
        This will guarantee that you don't get duplicate frames
        returned in the event of spurious wake-ups, and it may even return more
        quickly in the case where a new frame has already arrived.
        """
        with self._condition:
            if previous is not None and self._array is not previous:
                return self._array
            while True:
                self._condition.wait()
                if self._array is not previous:
                    return self._array

# Below here is just demo code that uses the class:

def thread1_func():
    global thread1_count
    frame = None
    while not thread_abort:
        (frame, lores), metadata  = server.wait_for_frame(frame)
        thread1_count += 1

def thread2_func():
    global thread2_count
    frame = None
    while not thread_abort:
        (frame, lores), metadata  = server.wait_for_frame(frame)
        thread2_count += 1
        if not thread2_count % 50000:
            print("thread2_count", thread2_count)
            print("entering recording loop")
            recording()

def recording():
    global encoding
    global ltime
    if not encoding:
        ltime = time.time()
        encoder.output = FileOutput("{}.mjpeg".format(time.strftime("%Y%m%d-%H%M%S")))
        picam2.start_encoder()
        print("recording for 2.0 seconds after last motion event")
        encoding = True
    else:
        if encoding and time.time() - ltime > 2.0:
            print("encoding is less that time")
            picam2.stop_encoder()
            print("recording stopped")
            encoding = False
            print("ending recording loop")

thread_abort = False
thread1_count = 0
thread2_count = 0
thread1 = Thread(target=thread1_func)
thread2 = Thread(target=thread2_func)

picam2 = Picamera2()
lores = (640, 400)
config = picam2.create_video_configuration(controls={"FrameDurationLimits": (33333, 33333)},main={'format': 'YUV420',"size": (1280, 720)}, lores={"size": lores})
picam2.align_configuration(config)
picam2.configure(config)
encoder = MJPEGEncoder()
picam2.encoder = encoder
picam2.start()

encoding = False
ltime = 0

server = FrameServer(picam2)
server.start()

thread1.start()
thread2.start()

time.sleep(25)

thread_abort = True
thread1.join()
thread2.join()
server.stop()
picam2.stop()

print("Thread1 received", thread1_count, "frames")
print("Thread2 received", thread2_count, "frames")
print("Server received", server.count, "frames")

error output
ending recording loop
    callback(picam2)
  File "/usr/lib/python3/dist-packages/picamera2/previews/null_preview.py", line 74, in handle_request
    completed_request = picam2.process_requests()
  File "/usr/lib/python3/dist-packages/picamera2/picamera2.py", line 1023, in process_requests
    self._encoder.encode(stream, display_request)
  File "/usr/lib/python3/dist-packages/picamera2/encoders/v4l2_encoder.py", line 243, in encode
    fcntl.ioctl(self.vd, VIDIOC_QBUF, buf)
OSError: [Errno 22] Invalid argument
thread2_count 150000
entering recording loop
recording for 2.0 seconds after last motion event
thread2_count 200000
entering recording loop
...

If anything, it looks like maybe it's stopped the encoder, but then tried getting it to encode another frame. I know there was a problem in that area some time ago, can I just check that you've got the most up-to-date version of Picamera2? Thanks.

The other little thing that I noticed is that your threads are all busy-spinning. The problem is that the test
            if previous is not None and self._array is not previous:
                return self._array

in wait_for_frame no longer works correctly now that you're returning a list of things rather than a single frame. You could probably just delete those lines and the behaviour will be more normal, though I'm guessing that
        if not thread2_count % 50000:

is no longer an appropriate test. It might be worth fixing that up and re-posting if you can. Thanks!

Hi David, the update seems to have solved the issue, it is not recurring now, in case it is useful picamera2 was on 0.3.5 and is now on 0.3.8.
For the sake of completeness I have tried modifying the code to check that the output from the array = picam2.capture_arrays(["main", "lores"]) statement is the same in the wait_for_frame function
#!/usr/bin/python3

# These two are only needed for the demo code below the FrameServer class.
import time
from threading import Condition, Thread

import numpy as np

from picamera2 import Picamera2
from picamera2.encoders import MJPEGEncoder
from picamera2.outputs import CircularOutput, FileOutput

class FrameServer:
    def __init__(self, picam2, stream='main'):
        """A simple class that can serve up frames from one of the Picamera2's configured streams to multiple other threads.
        Pass in the Picamera2 object and the name of the stream for which you want
        to serve up frames.
        """
        self._picam2 = picam2
        self._stream = stream
        self._array = None
        self._condition = Condition()
        self._running = True
        self._count = 0
        self._thread = Thread(target=self._thread_func, daemon=True)

    @property
    def count(self):
        """A count of the number of frames received."""
        return self._count

    def start(self):
        """To start the FrameServer, you will also need to start the Picamera2 object."""
        self._thread.start()

    def stop(self):
        """To stop the FrameServer
        First stop any client threads (that might be
        blocked in wait_for_frame), then call this stop method. Don't stop the
        Picamera2 object until the FrameServer has been stopped.
        """
        self._running = False
        self._thread.join()

    def _thread_func(self):
        while self._running:
            array = picam2.capture_arrays(["main", "lores"])
            # array = self._picam2.capture_array(self._stream)
            self._count += 1
            with self._condition:
                self._array = array
                self._condition.notify_all()

    def wait_for_frame(self, previous=None):
        """You may optionally pass in the previous frame that you got last time you called this function.
        This will guarantee that you don't get duplicate frames
        returned in the event of spurious wake-ups, and it may even return more
        quickly in the case where a new frame has already arrived.
        """
        with self._condition:
            if previous is None:
                return self._array
            if previous is not None and np.array_equal(self._array[0], previous[0]) or not np.array_equal(self._array[1], previous[1]):
                return self._array
            while True:
                self._condition.wait()
                if not np.array_equal(self._array[0], previous[0]) or not np.array_equal(self._array[1], previous[1]):
                    return self._array

# Below here is just demo code that uses the class:

def thread1_func():
    global thread1_count
    output = None
    while not thread_abort:
        output  = server.wait_for_frame(output)
        # print(output)
        if output is not None:
            (main, lores), metadata  = output
            # print(main)
            # print(type(main))
            # print(main.shape)
            # print(lores)
            # print(type(lores))
            # print(lores.shape)
        thread1_count += 1
        print("t1", thread1_count)

def thread2_func():
    global thread2_count
    output = None
    while not thread_abort:
        output  = server.wait_for_frame(output)
        # print(output)
        if output is not None:
            (main, lores), metadata  = output
            # print(main)
            # print(type(main))
            # print(main.shape)
            # print(lores)
            # print(type(lores))
            # print(lores.shape)
        thread2_count += 1
        print("t2", thread2_count)
        if not thread2_count % 100:
            print("thread2_count", thread2_count)
            print("entering recording loop")
            recording()

def recording():
    global encoding
    global ltime
    if not encoding:
        ltime = time.time()
        encoder.output = FileOutput("{}.mjpeg".format(time.strftime("%Y%m%d-%H%M%S")))
        picam2.start_encoder()
        print("recording for 2.0 seconds after last motion event")
        encoding = True
    else:
        if encoding and time.time() - ltime > 2.0:
            print("encoding is less that time")
            picam2.stop_encoder()
            print("recording stopped")
            encoding = False
            print("ending recording loop")

thread_abort = False
thread1_count = 0
thread2_count = 0
thread1 = Thread(target=thread1_func)
thread2 = Thread(target=thread2_func)

picam2 = Picamera2()
lores = (640, 400)
config = picam2.create_video_configuration(controls={"FrameDurationLimits": (33333, 33333)},main={'format': 'YUV420',"size": (1280, 720)}, lores={"size": lores})
picam2.align_configuration(config)
picam2.configure(config)
encoder = MJPEGEncoder()
picam2.encoder = encoder
picam2.start()

encoding = False
ltime = 0

server = FrameServer(picam2)
server.start()

thread1.start()
thread2.start()

time.sleep(25)

thread_abort = True
thread1.join()
thread2.join()
server.stop()
picam2.stop()

print("Thread1 received", thread1_count, "frames")
print("Thread2 received", thread2_count, "frames")
print("Server received", server.count, "frames")

This seems to be working but my threads are receiving quite different numbers
Thread1 received 1600 frames
Thread2 received 1251 frames
Server received 745 frames

would you expect this?

Thanks for the updated code. Glad that the later Picamera2 version seems to be better!
Nonetheless, I still can't see how it could be correct for either thread to report more frames than the server itself, so I think something must still be wrong. I must confess that this snippet from wait_for_frame:
            if previous is not None and np.array_equal(self._array[0], previous[0]) or not np.array_equal(self._array[1], previous[1]):
                return self._array

looks slightly scary. np.array_equal could be going off and doing per-pixel comparisons, whereas what you really want is "was this the same thing I handed out last time" (in C/C++ it might just be a simple pointer test). I think in in Python you might find that this
            if previous is not None and self._array is not previous:
                return self._array

would work. Maybe give that a try and see if the frame counts look sensible?

Thanks for looking, when I remove the
        if not thread2_count % 100:
            print("thread2_count", thread2_count)
            print("entering recording loop")
            recording()

call from thread2_func I receive
Thread1 received 1595 frames
Thread2 received 1505 frames
Server received 745 frames

If I still call the record loop and edit the wait_for_frame function in the class so that it checks for if previous is not None and self._array is not previous: rather than numpy arrays, I get the result:
Thread1 received 2447 frames
Thread2 received 1828 frames
Server received 746 frames

If I remove the record loop I get
Thread1 received 1690 frames
Thread2 received 1589 frames
Server received 745 frames

So it seems to be calling that calling the record function in thread2 is altering the number of frames received
I've tested a version of the original frameserver code with the record loop added:
#!/usr/bin/python3

# These two are only needed for the demo code below the FrameServer class.
import time
from threading import Condition, Thread

from picamera2 import Picamera2
from picamera2.encoders import MJPEGEncoder
from picamera2.outputs import CircularOutput, FileOutput

class FrameServer:
    def __init__(self, picam2, stream='main'):
        """A simple class that can serve up frames from one of the Picamera2's configured streams to multiple other threads.
        Pass in the Picamera2 object and the name of the stream for which you want
        to serve up frames.
        """
        self._picam2 = picam2
        self._stream = stream
        self._array = None
        self._condition = Condition()
        self._running = True
        self._count = 0
        self._thread = Thread(target=self._thread_func, daemon=True)

    @property
    def count(self):
        """A count of the number of frames received."""
        return self._count

    def start(self):
        """To start the FrameServer, you will also need to start the Picamera2 object."""
        self._thread.start()

    def stop(self):
        """To stop the FrameServer
        First stop any client threads (that might be
        blocked in wait_for_frame), then call this stop method. Don't stop the
        Picamera2 object until the FrameServer has been stopped.
        """
        self._running = False
        self._thread.join()

    def _thread_func(self):
        while self._running:
            array = self._picam2.capture_array(self._stream)
            self._count += 1
            with self._condition:
                self._array = array
                self._condition.notify_all()

    def wait_for_frame(self, previous=None):
        """You may optionally pass in the previous frame that you got last time you called this function.
        This will guarantee that you don't get duplicate frames
        returned in the event of spurious wake-ups, and it may even return more
        quickly in the case where a new frame has already arrived.
        """
        with self._condition:
            if previous is not None and self._array is not previous:
                return self._array
            while True:
                self._condition.wait()
                if self._array is not previous:
                    return self._array

# Below here is just demo code that uses the class:

def thread1_func():
    global thread1_count
    while not thread_abort:
        _ = server.wait_for_frame()
        thread1_count += 1

def thread2_func():
    global thread2_count
    frame = None
    while not thread_abort:
        frame = server.wait_for_frame(frame)
        thread2_count += 1
        if not thread2_count % 100:
            print("thread2_count", thread2_count)
            print("entering recording loop")
            recording()

def recording():
    global encoding
    global ltime
    if not encoding:
        ltime = time.time()
        encoder.output = FileOutput("{}.mjpeg".format(time.strftime("%Y%m%d-%H%M%S")))
        picam2.start_encoder()
        print("recording for 2.0 seconds after last motion event")
        encoding = True
    else:
        if encoding and time.time() - ltime > 2.0:
            print("encoding is less that time")
            picam2.stop_encoder()
            print("recording stopped")
            encoding = False
            print("ending recording loop")

thread_abort = False
thread1_count = 0
thread2_count = 0
thread1 = Thread(target=thread1_func)
thread2 = Thread(target=thread2_func)

picam2 = Picamera2()
lores = (640, 400)
config = picam2.create_video_configuration(controls={"FrameDurationLimits": (33333, 33333)},main={'format': 'YUV420',"size": (1280, 720)}, lores={"size": lores})
picam2.align_configuration(config)
picam2.configure(config)
encoder = MJPEGEncoder()
picam2.encoder = encoder
picam2.start()

encoding = False
ltime = 0

server = FrameServer(picam2)
thread1.start()
thread2.start()
server.start()
# picam2.sta

time.sleep(25)

thread_abort = True
thread1.join()
thread2.join()
server.stop()
picam2.stop()

print("Thread1 received", thread1_count, "frames")
print("Thread2 received", thread2_count, "frames")
print("Server received", server.count, "frames")

and here calling the record loop doesn't affect the number of frames received, so something must be up!
Thread1 received 745 frames
Thread2 received 745 frames
Server received 746 frames

scrap, that I think I have found the culprit, I had added a return check if previous was None in the wait_for_frame function. The first time the record loop was called previous was none and this altered the number of frames received for this call. It works OK if altered as follows:
    def wait_for_frame(self, previous=None):
        """You may optionally pass in the previous frame that you got last time you called this function.
        This will guarantee that you don't get duplicate frames
        returned in the event of spurious wake-ups, and it may even return more
        quickly in the case where a new frame has already arrived.
        """
        with self._condition:
            if previous is not None and self._array is not previous:
                return self._array
            while True:
                self._condition.wait()
                if self._array is not previous:
                    return self._array

Cool, are you getting basically the same number of frames reported everywhere now? That sounds much better!

Yes, all the numbers are matching and they all change together if I alter the frame rate, thanks again for the help

I think I can probably close this one now. Of course, if anything else comes up, just open a new issue!

authors: davidplowman tennisparty


text:
support both struct timespec and struct tm variants of the aon timer APIs

… since use of one type on RP2040 and the other on RP2350 require pulling in C library code.
Also provide weak pico_ wrappers for localtime_r and mktime so that the user can override the conversion functions

fixes #1810

repo: raspberrypi/pico-sdk


text:
RTL update to v0.15.2, clnrest activation, rune creation, add CLNrest to CONNECT for Zeus

[x] test clnrest activation
[x] create and copy rune
[x] test installs

Related to #4722 and should be tested together.

@openoms this PR is sill on draft - is it targeted for v1.11.3 or v1.12.x?

Installed RTL ok on amd64
Connected Zeus over Tor and clearnet using CLNrest

@openoms you now did quite some work on this - should I test for v1.11.3?

yes, ready for an RC, works well so far

@openoms RTL on my Testnode (runningCL) after install:

core lightning needs to updated using the updated script in dev to have clnrest installed

Reproduced the problem and the fix tested now on a RPi as well.

OK RTL install looks good now - with CL & LND on my test machine.
@openoms Both my Android & iPhone were not able to to connect to the CLNrest with Zeus still.

Could connect to the new RPi node through Tor using CLNrest on Zeus v0.9.0 on GrapheneOS, but Tor is known to be unreliable, I prefer Tailscale in place of the LAN connection.
Merging.

authors: openoms rootzoll

repo: raspiblitz/raspiblitz


text:
Multiple improvements of electrs installation

This incorporates multiple suggestions from #747
I intentionally didn't touch cookie settings because I'm not sure how it'd interact with other software.

Thanks, looks good! I just created a pull request to switch from rpcuser/password to the Bitcoin Core cookie authentication method.
My commit https://github.com/raspibolt/raspibolt/commit/5b75abcb83326cf7d83aa07c254fb5f117646c6d also simplifies the Rust installation, but uses the official install script. Is the package cargo from the repository good enough? Then this is of course even easier.
I'm also curios about the ROCKSDB directories. What does that do exactly?
I'll merge this PR first and then rebase my own PR https://github.com/raspibolt/raspibolt/pull/778 on top of that.

Is the package cargo from the repository good enough? Then this is of course even easier.

It should be for Debian 11 :)

I'm also curios about the ROCKSDB directories. What does that do exactly?

electrs can be dynamically linked to librocksdb-dev=6.11.4-3 package, making the build much faster (since it doesn't need to compile RocksDB from source):
https://github.com/romanz/electrs/blob/master/doc/install.md#build-dependencies

It should be for Debian 11 :)

Nice. Did you try on a current Raspberry Pi OS as well? I think this needs to work on that OS as well, at least for now. Unfortunately, I don't have one at the moment, all moved to Debian already.

Did you try on a current Raspberry Pi OS as well?

No, but IIUC, RaspiBlitz is based over latest RaspiOS:
https://github.com/rootzoll/raspiblitz#build-the-sd-card-image
CC: @openoms

Indeed, RaspiBlitz is using rustup to install Rust:
https://github.com/rootzoll/raspiblitz/blob/a5c5f455c71f6a7b715f485309216ee5321e2d7f/home.admin/config.scripts/bonus.electrs.sh#L274

Yes, regarding RaspiOS the RaspiBlitz switched to the 64bit version of the RaspberryOS which is still not the default download and published as beta.
The Raspberry Foundation prefers the one 32bit image image for all boards (RPi Zero included) while Lightning Labs can't fix: https://github.com/lightningnetwork/lnd/issues/4811.
RaspiBlitz is built on the latest 64bit image published by the Raspberry Pi Foundation and built on Debian 10 for now.

Is the package cargo from the repository good enough?

It's actually better because it's signature is verified out of the box.
Regarding 32 bit OSes: I think they should be deprecated, there's way too many issues around them and I don't think it's smart to risk money by using it.

Yesterday I compiled electrs using your instructions on the Debian 11 Raspberry image (latest daily), including the dynamic linking, with Rust installed from the repository (version 1.46.0). When I start the application, I get the following error, and Electrs quits:
$ electrs --conf /home/bitcoin/electrs/electrs.conf
Starting electrs 0.9.2 on aarch64 linux with Config { network: Bitcoin, db_path: "/home/bitcoin/electrs/db/bitcoin", daemon_dir: "/home/bitcoin/.bitcoin", daemon_auth: CookieFile("/home/bitcoin/.bitcoin/.cookie"), daemon_rpc_addr: 127.0.0.1:8332, daemon_p2p_addr: 127.0.0.1:8333, electrum_rpc_addr: 127.0.0.1:50001, monitoring_addr: 127.0.0.1:4224, wait_duration: 10s, jsonrpc_timeout: 15s, index_batch_size: 10, index_lookup_limit: Some(1000), reindex_last_blocks: 0, auto_reindex: true, ignore_mempool: false, sync_once: false, disable_electrum_rpc: false, server_banner: "Welcome to electrs 0.9.2 (Electrum Rust Server)!", args: [] }
[2021-11-08T10:49:59.346Z INFO  electrs::metrics::metrics_impl] serving Prometheus metrics on 127.0.0.1:4224
[2021-11-08T10:49:59.346Z INFO  electrs::server] serving Electrum RPC on 127.0.0.1:50001
Illegal instruction

I recompiled Electrs just now on the same system and did not change anything except compiling it without the ROCKSDB arguments for dynamic linking. This works fine. Intersting that the next line that the above version did not reach is about the database.
$ electrs --conf /home/bitcoin/electrs/electrs.conf
Starting electrs 0.9.2 on aarch64 linux with Config { network: Bitcoin, db_path: "/home/bitcoin/electrs/db/bitcoin", daemon_dir: "/home/bitcoin/.bitcoin", daemon_auth: CookieFile("/home/bitcoin/.bitcoin/.cookie"), daemon_rpc_addr: 127.0.0.1:8332, daemon_p2p_addr: 127.0.0.1:8333, electrum_rpc_addr: 127.0.0.1:50001, monitoring_addr: 127.0.0.1:4224, wait_duration: 10s, jsonrpc_timeout: 15s, index_batch_size: 10, index_lookup_limit: Some(1000), reindex_last_blocks: 0, auto_reindex: true, ignore_mempool: false, sync_once: false, disable_electrum_rpc: false, server_banner: "Welcome to electrs 0.9.2 (Electrum Rust Server)!", args: [] }
[2021-11-08T10:53:39.950Z INFO  electrs::metrics::metrics_impl] serving Prometheus metrics on 127.0.0.1:4224
[2021-11-08T10:53:39.950Z INFO  electrs::server] serving Electrum RPC on 127.0.0.1:50001
[2021-11-08T10:53:40.000Z INFO  electrs::db] "/home/bitcoin/electrs/db/bitcoin": 37 SST files, 0.007328208 GB, 0.000209441 Grows
[2021-11-08T10:53:40.330Z INFO  electrs::chain] loading 58580 headers, tip=000000000da30781083d1ada5bc904c9959051293d1ce44583173109bc03e13a
[2021-11-08T10:53:40.656Z INFO  electrs::chain] chain updated: tip=000000000da30781083d1ada5bc904c9959051293d1ce44583173109bc03e13a, height=58580
[2021-11-08T10:53:40.714Z INFO  electrs::daemon] waiting for 2 blocks to download

Not sure if the one-time saving on build time is worth additional complications.

Just to make sure I actually installed the rocksdb packages, I ran this:
$ sudo apt install librocksdb-dev
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
librocksdb-dev is already the newest version (6.11.4-3).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Interesting! I suggest we remove dynamic linking for now and re-introduce it after it's fixed. Could you please comment with exact HW spec here? https://github.com/romanz/electrs/issues/616

https://www.raspberrypi.com/news/raspberry-pi-os-debian-bullseye/ :)

https://www.raspberrypi.com/news/raspberry-pi-os-debian-bullseye/ :)

This is only the 32bit release unfortunately with the 64bit option following after some unconfirmed time.

I tried to verify the build process on the current RaspiOS 32-bit and ran into unexpected issues. Not sure if I'm doing something wrong.
Dependencies
$ sudo apt install cargo cargo clang cmake build-essential
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
build-essential is already the newest version (12.9).
cargo is already the newest version (0.47.0-3).
clang is already the newest version (1:11.0-51+nmu5).
cmake is already the newest version (3.18.4-2+rpi1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

$ cargo --version
cargo 1.46.0

$ rustc --version
rustc 1.48.0 (471d696c7 2020-12-10)

$ gcc --version
gcc (Raspbian 10.2.1-6+rpi1) 10.2.1 20210110
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Build
admin@raspberrypi:~/rust/electrs $ git describe --tags
v0.9.2

$ cargo build --locked --release --verbose
...
Compiling electrs v0.9.2 (/home/admin/rust/electrs)
     Running `rustc --crate-name electrs --edition=2018 src/bin/electrs.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type bin --emit=dep-info,link -C opt-level=3 -Cembed-bitcode=no --cfg 'feature="default"' --cfg 'feature="metrics"' --cfg 'feature="prometheus"' --cfg 'feature="tiny_http"' -C metadata=f949e99b5918e810 -C extra-filename=-f949e99b5918e810 --out-dir /home/admin/rust/electrs/target/release/deps -L dependency=/home/admin/rust/electrs/target/release/deps --extern anyhow=/home/admin/rust/electrs/target/release/deps/libanyhow-4169296ea2f18c55.rlib --extern bitcoin=/home/admin/rust/electrs/target/release/deps/libbitcoin-66c4dd803b1a3882.rlib --extern bitcoincore_rpc=/home/admin/rust/electrs/target/release/deps/libbitcoincore_rpc-7687ac4084573ad7.rlib --extern configure_me=/home/admin/rust/electrs/target/release/deps/libconfigure_me-747f599fa7ad7812.rlib --extern crossbeam_channel=/home/admin/rust/electrs/target/release/deps/libcrossbeam_channel-4cde0645bacb55d0.rlib --extern dirs_next=/home/admin/rust/electrs/target/release/deps/libdirs_next-7f0b55c13328f49b.rlib --extern electrs=/home/admin/rust/electrs/target/release/deps/libelectrs-1b9ff3674d0d08d4.rlib --extern electrs_rocksdb=/home/admin/rust/electrs/target/release/deps/libelectrs_rocksdb-b787b487fe30e446.rlib --extern env_logger=/home/admin/rust/electrs/target/release/deps/libenv_logger-720a435709cad379.rlib --extern fs_extra=/home/admin/rust/electrs/target/release/deps/libfs_extra-d1040d378300470f.rlib --extern log=/home/admin/rust/electrs/target/release/deps/liblog-9569aa4143972a15.rlib --extern parking_lot=/home/admin/rust/electrs/target/release/deps/libparking_lot-696cd2a75cfddc09.rlib --extern prometheus=/home/admin/rust/electrs/target/release/deps/libprometheus-a0b8e90ac461568b.rlib --extern rayon=/home/admin/rust/electrs/target/release/deps/librayon-9ebaf8b5a008e70f.rlib --extern serde=/home/admin/rust/electrs/target/release/deps/libserde-f3c53bd24a3746ab.rlib --extern serde_derive=/home/admin/rust/electrs/target/release/deps/libserde_derive-6ee7d559ae36b8a9.so --extern serde_json=/home/admin/rust/electrs/target/release/deps/libserde_json-55a319a30494fd78.rlib --extern signal_hook=/home/admin/rust/electrs/target/release/deps/libsignal_hook-2fbf62b85e2a146d.rlib --extern tiny_http=/home/admin/rust/electrs/target/release/deps/libtiny_http-74a0f3f5115c4cb5.rlib -L native=/home/admin/rust/electrs/target/release/build/secp256k1-sys-9f45771ddfe3b22b/out -L native=/home/admin/rust/electrs/target/release/build/electrs-librocksdb-sys-48f1ff5c6ea5142e/out -L native=/home/admin/rust/electrs/target/release/build/electrs-librocksdb-sys-48f1ff5c6ea5142e/out -L native=/home/admin/rust/electrs/target/release/build/electrs-librocksdb-sys-48f1ff5c6ea5142e/out`
error: linking with `cc` failed: exit code: 1
...
...

Full log here: https://pastebin.com/Ue3LfSCQ

I also encountered the following error regarding `librocksdb-dev`. Maybe this package is not available for arm32?

```sh
sudo apt install librocksdb-dev
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package librocksdb-dev

Yes, librocksdb-dev is not in arm32 (I already found this in the past)
See https://github.com/romanz/electrs/issues/391#issuecomment-813064643 for 32 bit linking.
Note that I strongly advise against 32-bit version. It causes tons of problems.

I don't think I can address the issues today, hopefully tomorrow.

Note that I strongly advise against 32-bit version. It causes tons of problems.

Fully agree. But I think it's a necessary step for now if we want to fix the Electrs section quickly.
I'm already working on the 64bit version, and it's coming along nicely. But it might be a few weeks until it lands. There, we won't have many issues that are present here.

I don't think I can address the issues today, hopefully tomorrow.

No worries.

FYI, I incorporated all your improvements also in the RaspiBolt v3 guide, building on RaspiOS/Debian 64-bit. You can find the WIP here: https://stadicus.github.io/raspibolt-remote/raspibolt_35_electrs.html. Feedback welcome :)

You can find the WIP here: https://stadicus.github.io/raspibolt-remote/raspibolt_35_electrs.html. Feedback welcome :)

Looks great, many thanks for all the work!
Opened a small PR (to be merged after electrs 0.9.3 is released) -> https://github.com/raspibolt/raspibolt/pull/785

I think most proposed changes have been included in the update to RaspiBolt v3. Your input in this pull request was very valuable, thanks a lot!
I'll close this pr soonish unless you have some critical feedback on the v3 guide.

Closing this pull request. Thanks again for all the great input that allowed to improve the Electrs part of the RaspiBolt v3. Feel free to point out if anything's missing in your view.

authors: Kixunil Stadicus openoms romanz

repo: raspibolt/raspibolt


text:
docs(examples): update list example and list.tape

Issue: https://github.com/ratatui-org/ratatui/issues/846
This PR adds:
for list.rs

subjectively better-looking front
change list example to a todo list example
status of a TODO can be changed, further info can be seen under the list.

for list.tape

change to get better output from the new code

Here is the new output:

I'll take a look at the code a little bit later, just wanted to say that the gif looks awesome!

I'll take a look at the code a little bit later, just wanted to say that the gif looks awesome!

Thanks a lot! I'm not sure should we remove the events list or not. It is irrelevant with the TODO list but kinda useful to have in an example.

I think go ahead and remove the events list. A single good example is worth more than multiple of the same

I think we should also enable the option that always allocates space for the selection to avoid the display jumping.

This is how the example looks after removing events list

I think some of the contrast can be improved (the greens on darker colors particularly) but that's probably just me (I have color issues).

Great job improving all the examples! Excited for all the PRs!

This is the final GIF output.

The only thing that is not addressed is removing the unselecting option. It is cool to have tbh but simplicity is something important. I'm ready to make the needed changes depending on your opinion on this.

I think some of the contrast can be improved (the greens on darker colors particularly) but that's probably just me (I have color issues).

Here are some different greens.
c400:

c500:

c600 (currently used):

c700:

I personally liked the c600 most. An improvement could be also changing the selected text to green if it's completed. Which one do you find best among these?

Great job improving all the examples! Excited for all the PRs!

Thanks! First time contributing to open open-source. This is a big win for me because now I'm able to talk with and learn more from experienced developers. Happy to hear that you're also happy with my work :)

Thank you @Valentin271!

Here are some different greens.

Thanks for experimenting! c400 is the highest contrast and easiest to read for me, but c500 also seems good to me (hard to say exactly without seeing it in while using it in the terminal / seeing the colors change etc). c600 seems a little too washed out for me.
I did put these numbers into a contrast checker and was experimenting with a few values: e.g. https://coolors.co/contrast-checker/16a34a-0f172a
Here's c400:

And c600:

The website says this at the bottom:

Regarding colors, the standard defines two levels of contrast ratio: AA (minimum contrast) and AAA (enhanced contrast). The level AA requires a contrast ratio of at least 4.5:1 for normal text and 3:1 for large text (at least 18pt) or bold text. The level AAA requires a contrast ratio of at least 7:1 for normal text and 4.5:1 for large text or bold text.

It seems like the colors you have are good, it's just a question of how much better it can be in terms of contrast. Especially in the terminal with small text, if we wanted to optimize for readability, I'd recommend a contrast ratio of 7:1 or higher.

It seems like the colors you have are good, it's just a question of how much better it can be in terms of contrast. Especially in the terminal with small text, if we wanted to optimize for readability, I'd recommend a contrast ratio of 7:1 or higher.

I like darker colors in general so that might be the reason why I liked the c600 more. But let's meet in the middle and go with c500 then 👍🏻

Hmm @Emivvvvv I kind of messed up the rebase, could you push your branch again?

I force pushed and that messed up the whole PR I guess 💀

Do you still have the changes on your computer? If so just pushing should be fine. Otherwise I'm really sorry that's my bad ... :/

Should I open a new PR?

Do you still have the changes on your computer? If so just pushing should be fine. Otherwise I'm really sorry that's my bad ... :/

Yes I have the changes. I can open a new PR

Do you still have the changes on your computer? If so just pushing should be fine. Otherwise I'm really sorry that's my bad ... :/

I force pushed from the beginning so I think that messed up this PR. The changes are on the branch but nothing happening here

Probably because its closed, open a new one its fine (I can't reopen it)

Here is the new PR: https://github.com/ratatui-org/ratatui/pull/864

authors: Emivvvvv Valentin271 joshka kdheepak

repo: ratatui-org/ratatui


text:
windows-latest freeze when running jobs

The problem started when I added an additional job running zig build test.
I have done some tests on an old laptop with Windows 10.0.19044.0.
It seems the problem is Bash from  Git for Windows (I'm using PortableGit from scoop).
When running zig build -Dhealed from PowerShell, it works correctly.
When running zig build -Dhealed from Bash, sometimes it freeze, and sometimes it prints:
      0 [sig] patch 1829 wait_sig: garbled signal pipe data nb 62, sig 1920226088
   1968 [sig] patch 1829 wait_sig: garbled signal pipe data nb 52, sig 1668571504
   2325 [sig] patch 1829 wait_sig: garbled signal pipe data nb 43, sig 1634038312

However I was unable to find similar problem on Internet.
I will run some tests using github actions from my clone of ziglings.

PowerShell, it works correctly.

As far as I know the github actions uses PowerShell. That's why I am wondering about the errors in this repo.

Ok, than I was wrong.

Idea: When we split the steps for windows and linux/mac, than we could change from bash to PpowerShell. What do you think?

@chrboesch I think you are too fast to commit, without waiting for a review and run/check the github actions.
In #267 you tried to run a Bash script from PowerShell, and it is obviously wrong.
I ran the Eowyn workflow from my ziglings clone manually: https://github.com/perillo/ziglings/actions/runs/4830425751
The working time for windows-latest was 1m 6s, clearly suspicious.
The output from "Run Eowyn" step is simply:
patches/eowyn.sh

The script was not executed and PowerShell did not raise an error.

The cause of the problem may be https://lightrun.com/answers/httpie-httpie-hangs-up-on-git-bash-windows

I think you are too fast to commit

You are right, sorry.

The script was not executed and PowerShell did not raise an error.

That is bad.

The cause of the problem may be

I'm going to read that and try to understand how we can solve the issue.

Maybe we should go the same way as Ziglang and write a PS script?

After some time I finally fixed this issue; I will create a PR later.
@chrboesch I will need to update the workflows, and I noted that you added quotes to the workflow names and comments.
However I think that they are not very useful. I would like to remove the quotes and move the comments at the top of the files, improving them.  Is it ok for you?

and I noted that you added quotes to the workflow names and comments.
However I think that they are not very useful

According to gihub documentation, this is how you are supposed to do it.

and I noted that you added quotes to the workflow names and comments.
However I think that they are not very useful

According to gihub documentation, this is how you are supposed to do it.

The workflow file uses the YAML format, so quoting is not necessary, unless you need to force a builtin type like int or bool to a string.

authors: chrboesch perillo

repo: ratfactor/ziglings


text:
docs: update tsg

Update TSGs for notation verifier and KMP
Add new errors in error list.

Hi @junczhu, @shahramk64 , would you be able to do a initial review? thanks!

authors: binbin-li susanshi

repo: ratify-project/ratify-web


text:
chore: github workflow rebase staging(dev) with main on release

What would you like to be added?
When merging from staging to main, there is a extra commit in main that staging branch don't have. we have agreed that we should have a automated workflow to sync staging to the main branch.
Anything else you would like to add?
No response
Are you willing to submit PRs to contribute to this feature?

[ ] Yes, I am willing to implement it.

discussed offline, it is ok for main to contain extra merge commits as long as content is the same as dev branch. Will reopen this issue if there is a need to sync dev to main

repo: ratify-project/ratify


text:
Update lesson-10.md by fixing typo

Fix typo

@jeitnier Thanks :)

authors: jeitnier ratiw


text:
ESLint Config

Could you please provide your ".eslintrc" file?
I'd like to optimize your code, but without it, it's nearly impossible :/

Optimize my code? and there isn't one for this repo

But you're using eslint Oo
 /* eslint-disable  no-console */ is in ./js/main.js
Yes optimize:
you're mixing i.Ex. single and double quotes, a windows linebreak-style, weired semicolon placements. So there is a lot to optimize ;)

That's just due to the global eslint config of my editor, not an eslint for the repo. Yes I'm aware there are several mixing's of things. There is a lot of old code that existed before I forked it that I have not touched. It doesn't optimize or help the system to go and change those things. Also a person's preferred linebreak or semicolon placement doesn't make it not optimized or even necessarily wrong.

That's true, but however it's easier to read ;)

Uhm... ok. It's your project and your decision. But I recommend you start writing clean code. Not for nothing there are a lot of books for this purpose.

That's rather rude, I have a master's degree in a relevant field I am aware of what I am doing. Perhaps you should check out BDv2 or my plugin library for "clean code".

Also as a side note this isn't really my project, it is a fork of a project that fixes several issues, it is not meant to be an entire rewrite and cleanup.

I know, I saw the "forked from Jiiks/BetterDiscordApp" note ;)
OT:
I do not want to offend you now and please do not take this as a criticism of you. Just because you have a "master" in one area does not mean you're good at it. You can see such examples every day, whether it's economy, politics or other areas.
I looked at your "BetterDiscordAddons" -> "ReplySystem.plugin.js" but there are i.E. missing Tabs, wrong placed curly brackets, ... too
In summary: I just want to help, give tips and not criticize you

You do not receive a masters of science degree for being bad in a field. That's just not how the world works. You wouldn't pass the thesis defense.
That plugin you mentioned is transpiled from a properly formatted source. I don't want to take the time to format it myself on every build.
Helping is one thing, but you were just being rude.

Let me know if that is sufficient for you

authors: DatMayolein rauenzi

repo: rauenzi/BetterDiscordApp


text:
Disable Multiple detection of barcodes

Need help on this asap plz

Whats the problem. You can just ignore the callback, instead consider only single read callback.

can you explain

Need help on this asap plz
can you explain

If I correctly understood your question, then you should ignore the onScannedMultiple call, that is, do not perform any actions inside the method. Like this:
@Override
public void onScannedMultiple(List<Barcode> barcodes) {
Log.e(TAG, "onScannedMultiple: " + barcodes.size());
}

authors: AlekseyDanilov BKSINGHPASS jpabanil ravi8x


text:
Correctness of convex hull chart

Hi there!
In which chart does the bug happen? - Convex Hull
RAWGraphs Version 2.0

Web browser and version

129.0.6668.59 (Official Build) (64-bit) (cohort: Stable)
Operating System

Steps to reproduce this

Project file

Additional context

the issue is that at one point the graph is not as per the point highlighted in the image attached.

convex hull joins the points needed to create a convex area that contains all the points of the same category.
This is the expected behaviour.
At the moment RAWGraphs is not able to handle concave areas

repo: rawgraphs/rawgraphs-app


text:
Run checkdoc on Travis

This will prevent forgetting to document things.

Closed in 137f67230b0e62ec245aad7fd3324da959468648.


text:
[Bug] API Server makefile is using build version based on GIT tags, that might not work on the fork, that has no tags

Search before asking

[X] I searched the issues and found no similar issues.

KubeRay Component
apiserver
What happened + What you expected to happen
All of the make commands produces fatal: No names found, cannot describe anything. then it can't find tags. In general, because a makefile is used for local development, this functionality is not required
Reproduction script
run any make command
Anything else
Always, if the fork does not have tags
Are you willing to submit a PR?

[X] Yes I am willing to submit a PR!

@z103cb, will you take this?

repo: ray-project/kuberay


text:
[Feature] Support multi-version docs

Search before asking

[X] I had searched in the issues and found no similar feature requirement.

Description

We plan to cut v0.3.0 release pretty soon. Currently it's pointing to master and any doc changes will be deployed. In order to give user a stable site, we need to support a dropdown to allow user to choose the versions.
https://squidfunk.github.io/mkdocs-material/setup/setting-up-versioning/ seems there's a way to make it
Use case
Keep stable and nightly docs separate
Related issues
No response
Are you willing to submit a PR?

[ ] Yes I am willing to submit a PR!

KubeRay docs have moved to the Ray repository. The Ray website supports doc versioning.