Cluster is stuck in fail-over state after a node termination

Overview
On GKE (possibly other services), the cluster is forever stuck in a fail-over state after a node where a database pod is scheduled is preempted. During this condition, the pods exist in a Completed / Terminated state and the reconciliation loop doesn't recognize this as a pod Eviction and keeps waiting for the Pod to come back online.
Description
We are running a few different database on a GKE cluster and when a given node goes down (most often due to spot instance preemption), the pod is marked as Completed and the operator does not recognize that these pods are failed and keeps waiting for this pod to come back. I believe this could be happening because K8s does not recognize that these pods are managed by an external controller and hence marks the pods as Completed instead of Failed.
While I recognize that it is not a good practice to schedule database to run on pre-emptible nodes, we have many services that mostly perform occasional read-only operations on a database where we mostly prioritize RTO. These are non-critical services where brief downtime is more than acceptable and the underlying data is more or less static. We would also like to re-use a PVC if at-all possible since the database is big and a recovery from a WAL could take a long time.
Quick Fix
Manually deleting the given pod (while not touching the PVC) causes the operator to re-create the pod and the database comes back online within a few seconds. However, this does require operator intervention.
Expected Behavior
The operator should recognize that the pod was shut-down, and delete and re-create the pod while re-using the previous PVC. I think the expectation here that the operator behavior is  identical to how Evicted pods are handled.
Logs

 Operator Log
{
  "insertId": "i8qv9ac22xnplf2g",
  "jsonPayload": {
    "status": {
      "podIPs": [
        {
          "ip": "[redacted]"
        }
      ],
      "message": "Pod was terminated in response to imminent node shutdown.",
      "conditions": [
        {
          "type": "Initialized",
          "lastTransitionTime": "2023-02-28T02:06:23Z",
          "lastProbeTime": null,
          "status": "True"
        },
        {
          "lastTransitionTime": "2023-02-28T14:33:52Z",
          "type": "Ready",
          "reason": "PodFailed",
          "lastProbeTime": null,
          "status": "False"
        },
        {
          "lastTransitionTime": "2023-02-28T14:33:52Z",
          "status": "False",
          "reason": "PodFailed",
          "lastProbeTime": null,
          "type": "ContainersReady"
        },
        {
          "type": "PodScheduled",
          "lastProbeTime": null,
          "status": "True",
          "lastTransitionTime": "2023-02-28T02:06:11Z"
        }
      ],
      "reason": "Terminated",
      "startTime": "2023-02-28T02:06:11Z",
      "containerStatuses": [
        {
          "state": {
            "terminated": {
              "finishedAt": "2023-02-28T14:33:51Z",
              "exitCode": 0,
              "reason": "Completed",
              "containerID": "containerd://7f6913ec42f5d4d560f6da99d1e8c5ccd3347d34cab84a1299c87791b2632308",
              "startedAt": "2023-02-28T02:06:33Z"
            }
          },
          "name": "postgres",
          "containerID": "containerd://7f6913ec42f5d4d560f6da99d1e8c5ccd3347d34cab84a1299c87791b2632308",
          "started": false,
          "imageID": "ghcr.io/cloudnative-pg/postgresql@sha256:303e84637bd5f9cfffb4454a93be0006106f21fa48dc8404374ac7003c5b96e1",
          "ready": false,
          "image": "ghcr.io/cloudnative-pg/postgresql:15.1",
          "restartCount": 0,
          "lastState": {}
        }
      ],
      "hostIP": "[redacted]",
      "qosClass": "BestEffort",
      "podIP": "[redacted]",
      "phase": "Failed",
      "initContainerStatuses": [
        {
          "state": {
            "terminated": {
              "exitCode": 0,
              "containerID": "containerd://12229216606763edfa999fe917d8320c4050f9cf64644f2fdef22c2b8a5452a3",
              "finishedAt": "2023-02-28T02:06:23Z",
              "reason": "Completed",
              "startedAt": "2023-02-28T02:06:22Z"
            }
          },
          "containerID": "containerd://12229216606763edfa999fe917d8320c4050f9cf64644f2fdef22c2b8a5452a3",
          "image": "ghcr.io/cloudnative-pg/cloudnative-pg:1.19.0",
          "restartCount": 0,
          "imageID": "ghcr.io/cloudnative-pg/cloudnative-pg@sha256:7b00f732fa5d3ff20fdc2e1ca931cb7eb1612854b42ed8ca4862e749b8f40d17",
          "name": "bootstrap-controller",
          "ready": true,
          "lastState": {}
        }
      ]
    },
    "ts": "2023-02-28T18:04:49Z",
    "reconcileID": "d90496d1-016a-46ab-ace5-1210f4cba91a",
    "controllerKind": "Cluster",
    "Cluster": {
      "namespace": "[redacted]",
      "name": "[redacted]-db"
    },
    "namespace": "[redacted]",
    "uuid": "6496c50f-b792-11ed-9b4a-2647bd45b262",
    "controllerGroup": "postgresql.cnpg.io",
    "controller": "cluster",
    "level": "info",
    "pod": "[redacted]-db-4",
    "name": "[redacted]-db",
    "msg": "Ignoring not active Pod during label update"
  },
  "resource": {
    "type": "k8s_container",
    "labels": {
      "container_name": "manager",
      "cluster_name": "[redacted]",
      "pod_name": "cloudnative-pg-58ff594f87-q9ccc",
      "project_id": "[redacted]",
      "location": "[redacted]",
      "namespace_name": "postgres"
    }
  },
  "timestamp": "2023-02-28T18:04:49.906538224Z",
  "severity": "INFO",
  "labels": {
    "compute.googleapis.com/resource_name": "[redacted]-ac198-95d89dda-gus2",
    "k8s-pod/pod-template-hash": "58ff594f87",
    "k8s-pod/app_kubernetes_io/name": "cloudnative-pg",
    "k8s-pod/app_kubernetes_io/instance": "cloudnative-pg"
  },
  "logName": "projects/[redacted]/logs/stderr",
  "receiveTimestamp": "2023-02-28T18:04:50.210369665Z"
}

Pod Yaml
apiVersion: v1
kind: Pod
metadata:
  annotations:
    cluster-autoscaler.kubernetes.io/safe-to-evict: "true"
    cnpg.io/nodeSerial: "4"
    cnpg.io/operatorVersion: 1.19.0
    cnpg.io/podEnvHash: 8768cc9f
    container.seccomp.security.alpha.kubernetes.io/bootstrap-controller: runtime/default
    container.seccomp.security.alpha.kubernetes.io/postgres: runtime/default
    seccomp.security.alpha.kubernetes.io/pod: runtime/default
  creationTimestamp: "2023-02-28T02:06:11Z"
  labels:
    cnpg.io/cluster: ${db.name}
    cnpg.io/instanceName: ${db.name}-4
    cnpg.io/podRole: instance
    postgresql: ${db.name}
    role: primary
  name: ${db.name}-4
  namespace: ${db.namespace}
  ownerReferences:
  - apiVersion: postgresql.cnpg.io/v1
    blockOwnerDeletion: true
    controller: true
    kind: Cluster
    name: ${db.name}
    uid: ae61d547-1ed5-42c3-852f-8c70d264ff2b
  resourceVersion: "55152177"
  uid: 59d25d02-6712-4dec-aa33-ffd5748e03dc
spec:
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: cnpg.io/cluster
              operator: In
              values:
              - ${db.name}
          topologyKey: kubernetes.io/hostname
        weight: 100
  containers:
  - command:
    - /controller/manager
    - instance
    - run
    - --log-level=info
    env:
    - name: PGDATA
      value: /var/lib/postgresql/data/pgdata
    - name: POD_NAME
      value: ${db.name}-4
    - name: NAMESPACE
      value: ${db.namespace}
    - name: CLUSTER_NAME
      value: ${db.name}
    - name: PGPORT
      value: "5432"
    - name: PGHOST
      value: /controller/run
    image: ghcr.io/cloudnative-pg/postgresql:15.1
    imagePullPolicy: IfNotPresent
    livenessProbe:
      failureThreshold: 3
      httpGet:
        path: /healthz
        port: 8000
        scheme: HTTP
      initialDelaySeconds: 30
      periodSeconds: 10
      successThreshold: 1
      timeoutSeconds: 5
    name: postgres
    ports:
    - containerPort: 5432
      name: postgresql
      protocol: TCP
    - containerPort: 9187
      name: metrics
      protocol: TCP
    - containerPort: 8000
      name: status
      protocol: TCP
    readinessProbe:
      failureThreshold: 3
      httpGet:
        path: /readyz
        port: 8000
        scheme: HTTP
      periodSeconds: 10
      successThreshold: 1
      timeoutSeconds: 5
    resources: {}
    securityContext:
      allowPrivilegeEscalation: false
      capabilities:
        drop:
        - ALL
      privileged: false
      readOnlyRootFilesystem: true
      runAsNonRoot: true
      seccompProfile:
        type: RuntimeDefault
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /var/lib/postgresql/data
      name: pgdata
    - mountPath: /run
      name: scratch-data
    - mountPath: /controller
      name: scratch-data
    - mountPath: /dev/shm
      name: shm
    - mountPath: /etc/superuser-secret
      name: superuser-secret
    - mountPath: /etc/app-secret
      name: app-secret
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: [redacted]
      readOnly: true
  dnsPolicy: ClusterFirst
  enableServiceLinks: true
  hostname: ${db.name}-4
  initContainers:
  - command:
    - /manager
    - bootstrap
    - /controller/manager
    - --log-level=info
    image: ghcr.io/cloudnative-pg/cloudnative-pg:1.19.0
    imagePullPolicy: IfNotPresent
    name: bootstrap-controller
    resources: {}
    securityContext:
      allowPrivilegeEscalation: false
      capabilities:
        drop:
        - ALL
      privileged: false
      readOnlyRootFilesystem: true
      runAsNonRoot: true
      seccompProfile:
        type: RuntimeDefault
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    volumeMounts:
    - mountPath: /var/lib/postgresql/data
      name: pgdata
    - mountPath: /run
      name: scratch-data
    - mountPath: /controller
      name: scratch-data
    - mountPath: /dev/shm
      name: shm
    - mountPath: /etc/superuser-secret
      name: superuser-secret
    - mountPath: /etc/app-secret
      name: app-secret
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: [redacted]
      readOnly: true
  nodeName: [redacted]
  preemptionPolicy: PreemptLowerPriority
  priority: 0
  restartPolicy: Always
  schedulerName: default-scheduler
  securityContext:
    fsGroup: 26
    runAsGroup: 26
    runAsNonRoot: true
    runAsUser: 26
    seccompProfile:
      type: RuntimeDefault
  serviceAccount: ${db.name}
  serviceAccountName: ${db.name}
  subdomain: ${db.name}-any
  terminationGracePeriodSeconds: 15
  tolerations:
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
    tolerationSeconds: 300
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
    tolerationSeconds: 300
  volumes:
  - name: pgdata
    persistentVolumeClaim:
      claimName: ${db.name}-4
  - emptyDir: {}
    name: scratch-data
  - emptyDir:
      medium: Memory
    name: shm
  - name: superuser-secret
    secret:
      defaultMode: 420
      secretName: ${db.name}-superuser
  - name: app-secret
    secret:
      defaultMode: 420
      secretName: ${db.name}-app
  - name: [redacted]
    projected:
      defaultMode: 420
      sources:
      - serviceAccountToken:
          expirationSeconds: 3607
          path: token
      - configMap:
          items:
          - key: ca.crt
            path: ca.crt
          name: kube-root-ca.crt
      - downwardAPI:
          items:
          - fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
            path: namespace
status:
  conditions:
  - lastProbeTime: null
    lastTransitionTime: "2023-02-28T02:06:23Z"
    status: "True"
    type: Initialized
  - lastProbeTime: null
    lastTransitionTime: "2023-02-28T14:33:52Z"
    reason: PodFailed
    status: "False"
    type: Ready
  - lastProbeTime: null
    lastTransitionTime: "2023-02-28T14:33:52Z"
    reason: PodFailed
    status: "False"
    type: ContainersReady
  - lastProbeTime: null
    lastTransitionTime: "2023-02-28T02:06:11Z"
    status: "True"
    type: PodScheduled
  containerStatuses:
  - containerID: containerd://7f6913ec42f5d4d560f6da99d1e8c5ccd3347d34cab84a1299c87791b2632308
    image: ghcr.io/cloudnative-pg/postgresql:15.1
    imageID: ghcr.io/cloudnative-pg/postgresql@sha256:303e84637bd5f9cfffb4454a93be0006106f21fa48dc8404374ac7003c5b96e1
    lastState: {}
    name: postgres
    ready: false
    restartCount: 0
    started: false
    state:
      terminated:
        containerID: containerd://7f6913ec42f5d4d560f6da99d1e8c5ccd3347d34cab84a1299c87791b2632308
        exitCode: 0
        finishedAt: "2023-02-28T14:33:51Z"
        reason: Completed
        startedAt: "2023-02-28T02:06:33Z"
  hostIP: [redacted]
  initContainerStatuses:
  - containerID: containerd://12229216606763edfa999fe917d8320c4050f9cf64644f2fdef22c2b8a5452a3
    image: ghcr.io/cloudnative-pg/cloudnative-pg:1.19.0
    imageID: ghcr.io/cloudnative-pg/cloudnative-pg@sha256:7b00f732fa5d3ff20fdc2e1ca931cb7eb1612854b42ed8ca4862e749b8f40d17
    lastState: {}
    name: bootstrap-controller
    ready: true
    restartCount: 0
    state:
      terminated:
        containerID: containerd://12229216606763edfa999fe917d8320c4050f9cf64644f2fdef22c2b8a5452a3
        exitCode: 0
        finishedAt: "2023-02-28T02:06:23Z"
        reason: Completed
        startedAt: "2023-02-28T02:06:22Z"
  message: Pod was terminated in response to imminent node shutdown.
  phase: Failed
  podIP: [redacted]
  podIPs:
  - ip: [redacted]
  qosClass: BestEffort
  reason: Terminated
  startTime: "2023-02-28T02:06:11Z"

Cluster Configuration
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: ${db.name}
  namespace: ${namespace}
spec:
  instances: ${db.replicas}
  primaryUpdateStrategy: unsupervised
  inheritedMetadata:
    annotations:
      cluster-autoscaler.kubernetes.io/safe-to-evict: "true"
  nodeMaintenanceWindow:
    inProgress: true
    reusePVC: true
  stopDelay: 15 # gke node premption is 30s, so we need to stop much before that
  switchoverDelay: 15
  storage:
    size: ${db.size}
  bootstrap:
    initdb:
      database: ${db.name}
      owner: ${db.user}

@pratheekrebala hi!
It's this like the thing discussed here? https://github.com/cloudnative-pg/cloudnative-pg/discussions/1552
Regards,

Hey @sxd!
Not exactly, the discussion in #1552 relates to instances where the auto-scaler doesn't scale down nodes because a database pod is running. This is a more general issue that prevents recovery after any node-termination (including due to scale-in).
In this case, I think the issue is that there are edge cases where the CNPG pods are effectively Evicted (because the node is being terminated) but the API provides a different status (Completed). I think the fix here would be to update the logic in https://github.com/cloudnative-pg/cloudnative-pg/blob/aaec93aea68c72db3254baf7154ef5c0204e1e31/pkg/utils/pod_conditions.go#L69-L73 to handle this edge case.

Hi @sxd, any thoughts on a potential fix for this? I'm happy to work on implementation but I don't know enough about the operator design to confidently propose something...
Right now, every single time node is terminated (e.g. auto-upgrade, preemption, scaling) causes the cluster to get stuck.
I think the easy fix here is to add a pod condition to handle Completed pods the same way Evicted pods are handled.

+1 to this, it happens on my small microk8s cluster where I have individual nodes patch + reboot themselves (with kubelet configured for graceful node shutdown) - If I catch things in time and delete the Completed pods the cluster recovers OK, but if I wait too long I can end up in a state where CNPG can't recover my 2 replica database because it's trying to bring up a pod in order to fail-over to it, but that pod won't start up because it's waiting for the primary.

Some more details after this happened today, kubectl describe pod shows an overall status of 'Succeeded' and  this Container State for the postgres container-
  State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Wed, 17 May 2023 23:03:54 -0400
      Finished:     Thu, 18 May 2023 01:00:00 -0400

and these conditions:
 Conditions:
  Type               Status
  DisruptionTarget   True
  Initialized        True
  Ready              False
  ContainersReady    False
  PodScheduled       True

@sxd I think it should, as completed and terminated both count as "unscheduled" afaik.

On first glance, this should work. I can test this over the weekend and circle back..

Also experiencing this issue, are there any workarounds that don't involve manually deleting Completed pods?

Note: this may be related to #2843 , #2844 , #2845

I'm having the same issue in my cluster. Pod will sit in Completed state until I manually delete it. Eventually, this could cause my cluster to go down if not picked up by an operator.

Hit by this also. Pod in Succeeded state. Manual deletion of pod required.
Is this not a critical defect for Level V operator?

In case this helps anyone else - my current workaround is to have 'kubectl drain' run at shutdown via systemd instead of relying on graceful node shutdown (plus kube-janitor configured to delete any completed pods just in case).

It looks like the Kubernetes StatefulSet controller was updated to handle "Completed" pods last year, but the CNPG controller does not handle this state.
See discussion: https://github.com/kubernetes/kubernetes/issues/122122#issuecomment-1846930001
Code example from StatefulSet: https://github.com/kubernetes/kubernetes/commit/1058a06f256102d8425a410771cc4f838b73f3bd
This is a dangerous interaction, where a rolling node restart for updates can take a cluster offline because CNPG does not know to restart the pods. From what little I understand, CNPG's pod controller should probably adopt StatefulSet's pod status logic here.

this has stung me a couple times now,
Any idea on ow best to recover from this?

This is a dangerous interaction, where a rolling node restart for updates can take a cluster offline because CNPG does not know to restart the pods. Correct me if I'm wrong, but it seems that CNPG's pod controller should probably adopt StatefulSet's pod status logic here.

@gbartolini With all due respect, I don't think "backlog" fits the severity of what @JustinLex highlighted here

Very offline in my case.
Does anyone know how to get a cluster to try to recover the 2 dead pods?
Sent from Outlook for Androidhttps://aka.ms/AAb9ysg

From: Kjeld Schouten @.>
Sent: Friday, June 7, 2024 1:43:58 PM
To: cloudnative-pg/cloudnative-pg @.>
Cc: 8ball030 @.>; Comment @.>
Subject: Re: [cloudnative-pg/cloudnative-pg] Cluster is stuck in fail-over state after a node termination (Issue #1593)
This is a dangerous interaction, where a rolling node restart for updates can take a cluster offline because CNPG does not know to restart the pods. Correct me if I'm wrong, but it seems that CNPG's pod controller should probably adopt StatefulSet's pod status logic here.
@gbartolinihttps://github.com/gbartolini With all due respect, I don't think "backlog" fits the severity of what @JustinLexhttps://github.com/JustinLex highlighted here
—
Reply to this email directly, view it on GitHubhttps://github.com/cloudnative-pg/cloudnative-pg/issues/1593#issuecomment-2154760450, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AIREHM4NSJW6OGTXQ462JR3ZGGTI5AVCNFSM6AAAAAAVLCSRHGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNJUG43DANBVGA.
You are receiving this because you commented.Message ID: @.***>

Very offline in my case. Does anyone know how to get a cluster to try to recover the 2 dead pods? Sent from Outlook for Androidhttps://aka.ms/AAb9ysg
…
________________________________ From: Kjeld Schouten @.> Sent: Friday, June 7, 2024 1:43:58 PM To: cloudnative-pg/cloudnative-pg @.> Cc: 8ball030 @.>; Comment @.> Subject: Re: [cloudnative-pg/cloudnative-pg] Cluster is stuck in fail-over state after a node termination (Issue #1593) This is a dangerous interaction, where a rolling node restart for updates can take a cluster offline because CNPG does not know to restart the pods. Correct me if I'm wrong, but it seems that CNPG's pod controller should probably adopt StatefulSet's pod status logic here. @gbartolinihttps://github.com/gbartolini With all due respect, I don't think "backlog" fits the severity of what @JustinLexhttps://github.com/JustinLex highlighted here — Reply to this email directly, view it on GitHub<#1593 (comment)>, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AIREHM4NSJW6OGTXQ462JR3ZGGTI5AVCNFSM6AAAAAAVLCSRHGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNJUG43DANBVGA. You are receiving this because you commented.Message ID: @.***>

Spamming for help on issues is really not acceptable.

Ok thanks for the feedback.
Apologises, I was trying draw additional attention to the issue.
It is quite a significant blocker for me, and I am finding the complexity of the deployment and lack of documentation for these kind of failure modes quite frustrating.
Apologies again for spamming the issue and look forward to a resolution.

I tried to reproduce this behavior on GKE and AWS without any success.
From https://cloud.google.com/kubernetes-engine/docs/concepts/spot-vms#termination-graceful-shutdown I read:

Note: For clusters running version 1.27.2-gke.1800 or later, GKE automatically deletes Pods that were evicted during node termination. Use the following instructions to manually delete terminated Pods for earlier GKE versions.

That means the issue has been solved by GKE internally. If anyone has experienced this behavior recently, I would need the environment's specifications, so we can reproduce it.

That means the issue has been solved by GKE internally. If anyone has experienced this behavior recently, I would need the environment's specifications, so we can reproduce it.

I would suggest doing testing primarily with something that resembles stock/normal kubernetes instead of opinionated propietry forks. Because, as you state themselves, those platforms might or might not contain fixes that are non-standard.

I've had this happen to me in Talos Linux.

That means the issue has been solved by GKE internally. If anyone has experienced this behavior recently, I would need the environment's specifications, so we can reproduce it.

I would suggest doing testing primarily with something that resembles stock/normal kubernetes instead of opinionated propietry forks. Because, as you state themselves, those platforms might or might not contain fixes that are non-standard.

My point is that I've tried on stock Kubernetes and cloud providers' flavors and could not reproduce it. I'm searching for an environment I can use to test a fix.

That means the issue has been solved by GKE internally. If anyone has experienced this behavior recently, I would need the environment's specifications, so we can reproduce it.

I would suggest doing testing primarily with something that resembles stock/normal kubernetes instead of opinionated propietry forks. Because, as you state themselves, those platforms might or might not contain fixes that are non-standard.

My point is that I've tried on stock Kubernetes and cloud providers' flavors and could not reproduce it. I'm searching for an environment I can use to test a fix.

Ahh I didn't understand you meant to say "I tried those AND stock"

The environment I had issues with was
Baremetal typhoon deployed on aws.
There is a very simple terraform provider
The author is
posiden/typhoon
Additionally talos os is quite low level however I haven't yet experienced this issue on my talos clusters

The environment I had issues with was Baremetal typhoon deployed on aws.
There is a very simple terraform provider
The author is
posiden/typhoon
Additionally talos os is quite low level however I haven't yet experienced this issue on my talos clusters

I think I've seen this once on Talos half a year ago or so.
But besides that Talos OS is relatively solid!

Here is our reproducible setup : https://github.com/zifeo/terraform-openstack-rke2 with 2 agent nodes at minimum + Infomaniak free trial, then overload the disk agent where the database instance is located.

Can you please test #2056 and see if it solves the issue?

This happened to me on Talos Linux as well. I have no idea how to reproduce it though...


[question] Which characters are valid for single-character variable names?

given
😎 ∈ ℝ

a = 😎

complains about the symbol choice
Error on line 2 at column 1. Failed to parse None: no available options
😎 ∈ ℝ
^

Is the list of valid single-symbol names located in the wiki someplace?

This page says ASCII but that doesn't seem to be accurate:
given
φ ∈ ℝ

a = φ

works fine...

It's basically Unicode letters with optional marks. We use character categories from here: https://www.compart.com/en/unicode/category

Thanks. so the long thing in the wiki:
identifier_alone = !KEYWORDS (/[A-Za-z\p{Ll}\p{Lu}\p{Lo}]\p{M}*([A-Z0-9a-z\p{Ll}\p{Lu}\p{Lo}]\p{M}*)*/ | '`' /[^`]*/ '`')

contains Ll, Lu and Lo (as well as A-Z0-9a-z, are this superfluous?). Does that mean that we can use characters in
https://www.compart.com/en/unicode/category/Ll
https://www.compart.com/en/unicode/category/Lu
https://www.compart.com/en/unicode/category/Lo ?

Yes and yes.


Update the chart to math minute by minute history, not just latest readings

Right now the chart uses LIMIT to pull the last 10, 30, 60, 240, 480 readings. These may or may not correspond to consecutive minutes.

@krook  - a suggestion... Since every chart shows the 'live' values over time, how about we just make all the charts show 8 hours (or whatever is the longest configured window). Then when you look at a chart, you always get the same experience - "this chart shows me how X has behaved over the last 8 hours" - doesn't matter whether X is the live sensor readings, or the 4 hour average - they all change minute-to-minute.

then the SQL is always the same : where timestamp_mins <= (UTC now - longest window in hours)

Ah, I see what you mean. So this works great for a device that has readings in this time period of the last 8 hours. But won't show anything if the device hasn't reported in that timeframe. For this case, it might be helpful to fall back to last fixed number of readings.

Ok, I added switching logic based on whether the device is active

@albertum1 this is related to the issue we've been discussing.


Use a loop to populate cms

As we loop on the size of the configmap template search we populate the
cms slice with pointers to the different configmap structs.  With the
interator we point to the same part of the iterator multiple times,
effectivly pointing to the last item to be iterated on multiple times.
I doubt this is the best way to solve this, but this should
effectivly illistrate a possible solution to the issue.
Issue #3

Looks like it was a shadowing bug. Fixed in https://github.com/kelseyhightower/konfd/commit/9cb93d87409e7c7375e802a6887e6a2b4e1d4d5d


Using git-cop with Travis

From the readme

Calculation of commits is done by reviewing all commits made on the current feature branch since branching from master. Some CI servers don't respect this and blow away any branch information, most notibly, Travis CI. For that reason, Travis CI is not supported or recommended as they use git clone --depth= cloning which can't be customized and destroys any knowledge of master and feature branch information.

Does that mean that git-cop can not be used in Travis?

I'm afraid so. If it's any consolation, I reached out to the Travis CI support team prior to the 1.0.0 release trying to get them to allow anyone to configure their .travis.yml file where the --depth option could be removed when doing a git clone --depth. They said they'd look into it. While they do allow you to customize the Git cloning process they do not allow you to remove the --depth option. Due to the --depth option being used, feature branch commits can't be calculated properly. 😢

Closing this issue for now. Would like to be able to support Travis CI but we can't proceed until Travis CI adds better Git cloning support.

I think you should close it.
I am already using git-cop in Travis. You can see here two examples (in a local branch and in a PR) and it is working perfectly after some workarounds in Travis: :tada:
https://travis-ci.org/Ana06/open-build-service/jobs/250334265
https://travis-ci.org/openSUSE/open-build-service/jobs/250334288
I have to finish some things (some test are broken after the changes) but I will send a PR for supporting Travis in the following days.

Oh, nice. Actually, I'll re-open and assign to you. This'll be nice to have.


Break the documentation down into smaller subsection

Fixes #264

When running just serve-docs the following warnings appear:
WARNING  -  Documentation file 'resources/architecture/components-inheritance.md' contains a link to 'images/kpops-components-class-diagram.png' which is not found in the documentation files.
WARNING  -  Documentation file 'user/what-is-kpops.md' contains a link to 'user/references/components/streams-app.md' which is not found in the documentation files.
WARNING  -  Documentation file 'user/what-is-kpops.md' contains a link to 'user/references/components/producer-app.md' which is not found in the documentation files.
WARNING  -  Documentation file 'user/core-concepts/config.md' contains a link to 'user/core-concepts' which is not found in the documentation files.
WARNING  -  Documentation file 'user/core-concepts/variables/substitution.md' contains a link to 'user/core-concepts/components.md' which is not found in the documentation files.
WARNING  -  Documentation file 'user/core-concepts/variables/substitution.md' contains a link to 'user/core-concepts/cli-commands.md' which is not found in the documentation files.


opsgenie: Add visible_to

Add visible_to with the same support for templating and fields as the
existing responders field.
Opsgenie documentation:

Teams and users that the alert will become visible to without sending
any notification. type field is mandatory for each item, where possible
values are team and user. In addition to the type field, either id or
name should be given for teams and either id or username should be given
for users. Please note: that alert will be visible to the teams that are
specified within responders field by default, so there is no need to
re-specify them within visibleTo field. You can refer below for example
values.

The functionality has been tested with unit tests, and with the following
configuration:
  route:
    receiver: og
    group_wait: 30s
    group_interval: 5m
    repeat_interval: 12h
  receivers:
  - name: og
    opsgenie_configs:
    - send_resolved: true
      api_key: ...top secret...
      api_url: https://api.eu.opsgenie.com/
      message: 'Lab message'
      description: 'Static description'
      source: lab
      details:
        foo: bar
      priority: P4
      visible_to:
      - type: user
        username<EMAIL_ADDRESS>
Fixes #3953

@grobinson-grafana Could you take another look? Or should we involve the authors of the original code? Alternatively I could make a stripped down version of the PR but that would make this field behave differently from receivers


[Error Analysis]: True class and predicted class missing from what if

closing as fixed with PR https://github.com/microsoft/responsible-ai-widgets/pull/322
note this issue only occurred for categorical values


Default UI actions stopped working

Hi, first of all, thanks for this plugin!
For some reason, my default UI actions stop working on my joypads after activating the plugin.
In the game, the actions I handle with MultiplayerInput work great.
Keyboard inputs continue to work fine.
System information
Godot 4.1.1
Windows 10
1 XBOX Series Controller
1 XBOX Elite Series 2
Steps to reproduce

Create 2 buttons.
Add a script to grab focus.
Install the plugin and activate it.

Minimal reproduction project
TestGround.zip

hi thank you for making an issue. i am chewing on this now. that block of code is to make sure controller input from device 0 does not activate those default actions because then MultiplayerInput would read it as a keyboard/mouse event happening. I'll have to rethink something, not sure what yet. I wonder id there is some way to identify a built-in action and not run that block on those. or perhaps there is a more comprehensive solution that could work with the focus system. i briefly looked into it once and decided there is not because i believe there can only be one focus. hmmmmmmm

Adding to this, a way to transfer the UI controls from one player to another would be useful. In my use case, each player enters a "shop" phase where they can buy items, and I don't want the other players to have control during that moment.
I'll take a deeper look into this over the weekend, maybe we can figure something out 👍

Relevant Godot Issue
https://github.com/godotengine/godot-proposals/issues/4295
Relevant PR
https://github.com/godotengine/godot/pull/62421

Ok I think I have a solution in mind. Thank you for your idea on switching players, that was good info. I was worried there would be no way to identify a built-in action because there is no "is_builtin" function or anything in InputMap, but I think a better solution will be to define UI actions as any action that starts with "ui_" and only have them connected to one device at a time, like you suggested. I think keeping the option to have default behaviour would be good. In fact I think I'm going to keep the default behavior by default, and add a single method called MultiplayerInput.set_ui_action_device(device: int) that restricts all actions that start with "ui_" to only that device.  At first I was thinking of calling it "set_builtin_action_device()" but I like "ui_action" better because then devs can define their own ui_ actions that inherit this behavior. Not to mention, that allows me to actually do it, since there is no way to detect a built-in action, per se.  Let me know your thoughts on that solution. I should have some time tonight.
I'll want to add a function to DeviceInput, too. Something like input.take_ui_actions() or input.enable_ui_actions().
note to self: allow going back to default behavior after a call to set_ui_action_device(). Maybe passing a -2, or another function.
I'll keep my eye on those PRs, thanks for finding and linking those.

Sounds good to me 👍.
There has to be something for the built-in actions because of this toggle:

I guess there is just no way to access that information.
Thanks for taking the time to work on this :)

@KANAjetzt Would you mind testing branch 1-ui-actions? I am not super familiar with the UI actions so I'm not sure what are some good use cases, but if it works for you then I will merge it into main. Thanks!

It works for me now. Thanks!

Yes! It's working great! Thank you 😃

https://github.com/matjlars/godot-multiplayer-input/blob/1914d971eaa6cdd5e6d831a9c72be876d3bf4d6f/addons/multiplayer_input/multiplayer_input.gd#L39-L42
Maybe it makes sense to insert this if-statement in line 39/40:
if is_ui_action(action): continue

While trying out that branch I found I wasn't able to capture the ui_ inputs via:
func _unhandled_input(event):
	get_viewport().set_input_as_handled()
	var item = get_focused_item()

	if item:
		if event.is_action_pressed("ui_accept"):
			actioned.emit(item)
		elif event.is_action_pressed("ui_cancel"):
			cancelled.emit()

Either supporting this method or including an intended method of using UI actions would be great!
Is the intended method to loop through all devices in _process?

I'm not sure if this is related (it probably is), but if I do something like this:
func handle_join_input():
    for device in get_unjoined_devices():
        if MultiplayerInput.is_action_just_pressed(device, "ui_accept"):
            print("Joined ", device)
            join(device)

I get this printed:
Joined 0
Joined -1

While if I use any non-ui input action, only the joystick joins without the keyboard.


EasyFullscreen

#EasyFullscreen
A simple extension to allow you to toggle between windowed and fullscreen in your game.
#Parameters 1:
Keyboard Text: allow to pick which key you want to use to toggle fullscreen.
Scene variable: __EasyFullscreen_fullscreen - type(bool)
Use a bool scene variable to check if the the game is windowed or fullscreen

If true: go fullscreen.
If false: go windowed.

Preview: https://www.youtube.com/watch?v=_3OYLCOOQs8
Example: https://github.com/UlisesFreitas/EasyFullscreen-GDevelop-Extension-
Checklist

[x] Extension has a proper name and description.
[x] Extension has tags (for example: "platform, brick, breakable").
[x] All behaviors have a description.
[x] All functions (actions, conditions, expressions) have descriptions.
[x] I confirm that this extension can be intergrated to this GitHub repository, distributed and MIT licensed.

Extension file
As JSON: https://github.com/UlisesFreitas/EasyFullscreen-GDevelop-Extension-/blob/main/EasyFullscreen.json
As .zip: https://github.com/UlisesFreitas/EasyFullscreen-GDevelop-Extension-/blob/main/EasyFullscreen.zip
Sample project:
https://github.com/UlisesFreitas/EasyFullscreen-GDevelop-Extension-/blob/main/gd-project-EasyFullscreen.zip
Preview:
https://www.youtube.com/watch?v=_3OYLCOOQs8
Finally, attach the .json file of your extension here.
As JSON: https://github.com/UlisesFreitas/EasyFullscreen-GDevelop-Extension-/blob/main/EasyFullscreen.json
As .zip: https://github.com/UlisesFreitas/EasyFullscreen-GDevelop-Extension-/blob/main/EasyFullscreen.zip
You also may have to create an account on GitHub before posting.
If your extension is high quality and useful, it will be added to the list of GDevelop community extensions.
When you're ready, remove this last paragraph and click on "Submit new issue". Thanks 🙌

I don't think we should accept this extension, it's reduced to a toggle of two actions and completely hides the conditions that affect them.
The gain is not obvious, it's rather recommended to educate users to do this kind of simple thing.
A page in the documentation explains this.


add button to rebuild specific service

equivalent to
docker-compose up --build service_name

Thanks for your contribution!


Add support for mounting volumes with local driver and options

Volumes with the local driver and mount options specified are mounted using the mount command, instead of being plain directories. The volumes are mounted as the first container using them is started, and unmounted when the last container using them exits.
Given the mount/unmount behavior, we need to add a mount counter to volumes to know when to mount/unmount. This requires adding a mutable state to volumes, with associated methods in the DB to update and save the state.
Missing tests right now, but I've tested locally with tmpfs and btrfs with positive results.

@rhatdan PTAL - you said this was blocking your work on overlay volumes

I think not, but thought I'd ask.  Any anticipated db upgrade issues?

The first commit should address most of them.
The bigger issue was the locks PR that went in earlier - we'll need a podman system renumber if any volumes were present when the upgrade happened.

Thanks @mheon.  A quick browse and the code LGTM.  The podman system renumber bit I'm assuming will be loud and proud in the appropriate release announcement and out on the Podman mailing list for starters.

lgtm other than nit question ... have you measured any perf impact to overall container running with this?

Should be 0 on containers that do not mount shared volumes.
On those with volumes requiring a full mount call, on first mount, it's pretty substantial - around 1s extra for a tmpfs, in my measurements. This about matches what I saw with Docker, though - was how I figured out they had to be doing the mount on container launch.

I would like to see @vrothberg questions addressed, as well as squash the PRs, and add some tests.  Examples in man pages would also be nice.
Looks very good.

Addressed review comments

@mheon can you squash your commits.

Sure

Added tests

Assuming things go green, I think we're good for final review and merge

/retest

Going green. @rhatdan @baude @vrothberg @TomSweeneyRedHat @giuseppe PTAL

/lgtm


Consider bazel --repository_cache and/or --distdir

These flags might help us prefetch and cache our external deps. We may be able to even store these directories in ~/.cache/google-cloud-cpp/bazel-repo-cache, and they'll automatically be cached in our GCS build cache.
I'm not 100% certain of how this works or if it would even be helpful. We'd need to do a little experimentation to make sure we understand it. But it's something to consider.
https://docs.bazel.build/versions/master/guide.html#distdir
https://docs.bazel.build/versions/master/guide.html#repository-cache

Closing. We're currently using --remote_cache and it works fine.


[feature-1] Added Binary Search in Kotlin

Have you read the Contributing Guidelines on Pull Requests?
Yes
Description
Added Iterative Binary Search Algorithm in Kotlin.
Checklist

[x] I've read the contribution guidelines.
[x] I've checked the issue list before deciding what to submit.
[x] I've edited the README.md and link to my code.

Related Issues or Pull Requests
Closes: #2312

@HarshCasper and @bhav09 Please review this.

@bhav09 I have added it👍

Great!

@HarshCasper @bhav09 Please add the level and gssoc label


Can't create questions for templates

Please complete the following fields as applicable:
Expected behaviour:
When testing bug issue #1777 I noticed that I cannot create questions for an existing or new section of a template. I should be able to Add Question, enter question text, click Save and see the new question added to a section.
Actual behaviour:
When I click 'Add Question' then enter question text and click 'Save' I receive the error message below "unable to create a new version of this template." This happens when I attempt to add a question to an existing template. I can't create a new template at all to see if it's also occurring for new templates (separate but issue ...)

duplicate issue #1817


chore: add default reviewers

What kind of change does this PR introduce? (Bug fix, feature, docs update, ...)

What is the current behavior? (You can also link to an open issue here)

What is the new behavior (if this is a feature change)?

Other information:

Status

[ ] Code documentation for the relevant parts in the code have been added/updated by the PR author
[ ] The functionality has been tested by the PR author
[ ] The functionality has been tested by NRK

Codecov Report
Patch coverage has no change and project coverage change: -0.30 :warning:

Comparison is base (2c1eb15) 68.36% compared to head (318a39c) 68.07%.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
Additional details and impacted files
@@            Coverage Diff             @@
##           master     #869      +/-   ##
==========================================
- Coverage   68.36%   68.07%   -0.30%
==========================================
  Files         265      280      +15
  Lines       32152    34916    +2764
  Branches     4458     4659     +201
==========================================
+ Hits        21980    23768    +1788
- Misses       9721    10696     +975
- Partials      451      452       +1

Impacted Files
Coverage Δ

packages/corelib/src/mongo.ts
34.79% <0.00%> (ø)

packages/corelib/src/lib.ts
50.87% <0.00%> (ø)

packages/corelib/src/playout/ids.ts
57.89% <0.00%> (ø)

packages/shared-lib/src/lib/JSONBlob.ts
100.00% <0.00%> (ø)

packages/corelib/src/protectedString.ts
100.00% <0.00%> (ø)

packages/corelib/src/hash.ts
36.00% <0.00%> (ø)

...ckages/corelib/src/settings/objectWithOverrides.ts
93.22% <0.00%> (ø)

packages/corelib/src/dataModel/Timeline.ts
91.05% <0.00%> (ø)

packages/corelib/src/error.ts
76.19% <0.00%> (ø)

packages/corelib/src/dataModel/PieceInstance.ts
84.82% <0.00%> (ø)

... and 6 more

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

:umbrella: View full report at Codecov.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


ddl(ticdc): Add error handling for mismatched Job.Query and Job.BinlogInfo.MultipleTableInfos in TiCDC

What problem does this PR solve?

Issue Number: close #11507
What is changed and how it works?
Description:
This PR addresses an issue in TiCDC where a mismatch between the number of queries in Job.Query and the number of TableInfo entries in Job.BinlogInfo.MultipleTableInfos leads to an index out of range panic. This issue originates from TiDB's fast create table functionality, which previously merged multiple DDL jobs into a single batch but failed to correctly merge their corresponding queries. As a result, the length of Job.Query did not match the number of tables in Job.BinlogInfo.MultipleTableInfos, causing TiCDC to panic during DDL job processing.
This issue has been fixed in TiDB (see issue tidb#53076 and PR tidb#53515). However, since TiCDC relies on external systems to provide consistent metadata, it is essential to add error handling to ensure these fields match before processing DDL jobs.
Changes:

Added error handling in TiCDC's puller to validate that the number of queries in Job.Query matches the number of TableInfo entries in Job.BinlogInfo.MultipleTableInfos.
If a mismatch is detected, TiCDC will log an error and panic to prevent further processing with inconsistent metadata. This allows easier identification of the root cause and ensures stability during job handling.

if strings.Count(job.Query, ";") != len(job.BinlogInfo.MultipleTableInfos) {
    log.Panic("the number of queries in `Job.Query` is not equal to "+
        "the number of `TableInfo` in `Job.BinlogInfo.MultipleTableInfos`, ",
        zap.String("Job.Query", job.Query),
        zap.Any("Job.BinlogInfo.MultipleTableInfos", job.BinlogInfo.MultipleTableInfos),
        zap.Error(cerror.ErrTiDBUnexpectedJobMeta.GenWithStackByArgs()))
}

Context:
This bug surfaced due to TiDB's optimization in fast create table, which performs DDL batching by merging multiple jobs. The issue arose because TiDB did not correctly merge the associated queries for each job in this scenario. Since TiCDC directly consumes the metadata from TiDB, any inconsistency in the data structure leads to downstream errors.
By adding this validation, we ensure that TiCDC processes jobs only when the metadata is consistent and structured as expected. This is critical because TiCDC depends on external systems like TiDB to provide correct metadata for reliable replication. Adding error handling ensures that we detect anomalies earlier and prevent unexpected behavior that could potentially affect data replication.
Check List
Tests

Unit test
Integration test
Manual test (add detailed scripts or steps below)

make prepare_test_binaries community=true ver=v8.1.0
make integration_test_build
make integration_test CASE=batch_add_table

Questions
Will it cause performance regression or break compatibility?
No.
Do you need to update user documentation, design documentation or monitoring documentation?
No.
Release note
None

/test dm-integration-test

/test cdc-integration-mysql-test

/test cdc-integration-storage-test

/test cdc-integration-kafka-test

/test verify

/test cdc-integration-kafka-test

TiDB accelerates create tables: PR

related implementation: #11262


videojs-contrib-hls deprecated

videojs-contrib-hls is deprecating. We should either upgrade our videojs version or move to videojs-http-streaming. I need it for the dash video support.

vue-video-player will update to video.js 7.x and reconsitution.

Still not update to video.js7？


Improve Ethereum and Bitcoin metrics and diagnostics

The client exposes the Ethereum connectivity metric which is helpful to diagnose some problems with the connection but it is not enough to say if the client is up to date with the global Ethereum state (it has access to the chain tip).
For Bitcoin, we do not have the Electrum connectivity metric at all.
We could:

[x] Add Ethereum diagnostic reading the most recent Ethereum block number.
[x] Add Electrum connectivity metric.
[x] Add Electrum diagnostic reading the most recent Bitcoin block number.
[ ] Update Grafana dashboard at status.threshold.network to include Ethereum and Bitcoin connectivity metrics for nodes.

### Tasks
- [ ] https://github.com/keep-network/keep-core/pull/3637
- [ ] https://github.com/keep-network/keep-core/pull/3648

@tomaszslabon Please take care of updating Grafana once this version is deployed to testnet/mainnet.

In #3705 we updated the test Grafana dashboard with BTC Connectivity and ETH Connectivity.
The updated dashboard can be seen here: https://monitoring.test.threshold.network.
Only the test dashboard was updated.
Things to consider in the future:

Update the production Grafana dashboard with BTC Connectivity and ETH Connectivity in the similar manner.
(must be done by somebody with edit privileges cc @pdyraga, @nkuba).
Discuss if we should display Latest ETH block and Latest BTC block in the dashboard.
If we want to display them, we need to move these two measurements from the \diagnostics endpoint  into \metrics   so that it can be picked by Prometheus.


style: avoiding npx for devDependencies

npm adds devDependencies executables to PATH when running scripts. So we don't need to use npx.
Moreover, in this way the devs share the same lerna version. The same thing happens for publishing, it's better to use the same version we're using to develop. So I've also added a new npm task: publish.
More info here: https://firstdoit.com/no-need-for-globals-using-npm-dependencies-in-npm-scripts-3dfb478908

Closing, new PR here: https://github.com/IBM/kui/pull/1328


v4.0: One-dimensional brush.extent() should accept single pair of values

Took me a bit of stepping through the debugger to figure out why I was getting invalid attribute values for a <rect> when setting up a brushY() -- I incorrectly assumed that one-dimensional brushes only required a single pair of values for extent().
If it's possible/logical, seems like it would be simpler to allow just a single pair of values in this case. In fact, I'm not even clear on what the values for the cross axis are for...I supplied [0, width] for my vertical slider and I think it's ok.
Also, better error reporting would be helpful -- maybe just param validation in extent().

The brush’s selection can be one-dimensional, but the user interface is always two-dimensional, and so a brush always requires a two-dimensional extent. It defines the brush’s interactive region on-screen.
In most cases, you shouldn’t need to specify the extent because it can be computed using the default definition to cover the entire element:
function extent() {
  var svg = this.ownerSVGElement || this;
  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];
}

While I do some input validation in D3, it’s impossible to do input validation exhaustively, and so I do it based on a combination of how easy it is to check and how common the error is. The weakly-typed nature of JavaScript also makes this hard: types are typically implicitly coerced, and often objects are allowed in place of arrays (e.g., {0: "0", 1: "42"} in place of [0, 42]). TypeScript, for example, makes it much easier.

Ah ok, makes sense, and good tip re: default extent(). Still wrapping my head around the semantic changes in brush between v3 & v4 -- extent() is a particularly tricky one since it went from meaning "extent of the selection" to "selection bounds". I think the new semantics are clearer but I'm still getting used to it.

Yeah, sorry about that. “Extent” is kind of a generic word, like “selection”, which also has a double meaning. :(


Can you kindly explain how to play online encrypted video?

search the issues for similar questions, i've answered this a couple times.  thanks


Mapping from output bam to raw signals

Hi,
I have some questions about the tags added to the .bam output file after running uncalled4 align. I would like to write a custom script, that reads the alignments from the uncalled4 .bam file and uses them to extract specific signal measurements from a .pod5 file.
I read the preprint and examined the uncalled4 outputs with pysam but faced some issues. Firstly, the preprint says that “us:” tag encodes the raw signal measurements. However, in my uncalled4 output file, there is no “us:” tag. I found the “ul:” tag, which seems to be formatted similarly to “us:” so are these two the same?
Secondly, it is said that “The total span of the reference coordinate blocks should be equal to the number of non-zero elements in the “us:” tag, and the sum of the absolute values of “us:” should equal the length of the raw signal.” I tried to validate this with the code snippet below, but I could not get either of these values to match.
import numpy as np
import pysam
import pod5

alignment = pysam.AlignmentFile(uncalled4_out_path)
pod5_dr = pod5.DatasetReader(pod5_path)

for i, read in enumerate(alignment.fetch(until_eof=True)):
    read_id = read.query_name
    evlens = np.array(read.get_tag('ul'))
    pod5_read = pod5_dr.get_read(read_id)
    reflens = read.get_tag('ur')
    full_rl = 0
    for k in range(0, len(reflens), 2):
        full_rl += reflens[k+1] - reflens[k]

    print(f"Reference length from uncalled: {full_rl}")
    print(f"Length of the alignment array: {len(evlens)}")
    print(f"Length of the nonzero alignment array: {len(evlens[evlens != 0.])}")
    print(f"Length of the non-negative alignment array: {len(evlens[evlens >= 0])}") # Maybe it should be non-negative, since negative values are skipped signal values, while zeros are skipped reference positions
    print(f"Length of signal alignment: {sum(np.abs(evlens))}")
    print(f"Length of the basecalled signal: {read.get_tag('ns') - read.get_tag('ts')}\n")

    if i >= 5:
        break

With output:
Reference length from uncalled: 1405
Length of the alignment array: 1398
Length of the nonzero alignment array: 1381
Length of the non-negative alignment array: 1397
Length of signal alignment: 23165
Length of the basecalled signal: 23250

Reference length from uncalled: 4172
Length of the alignment array: 4167
Length of the nonzero alignment array: 4086
Length of the non-negative alignment array: 4164
Length of signal alignment: 112238
Length of the basecalled signal: 112848

Reference length from uncalled: 3413
Length of the alignment array: 3408
Length of the nonzero alignment array: 3336
Length of the non-negative alignment array: 3405
Length of signal alignment: 98218
Length of the basecalled signal: 98948

Reference length from uncalled: 4023
Length of the alignment array: 4017
Length of the nonzero alignment array: 3931
Length of the non-negative alignment array: 4015
Length of signal alignment: 62072
Length of the basecalled signal: 117645

Reference length from uncalled: 416
Length of the alignment array: 409
Length of the nonzero alignment array: 356
Length of the non-negative alignment array: 408
Length of signal alignment: 5266
Length of the basecalled signal: 56435

Reference length from uncalled: 5872
Length of the alignment array: 5866
Length of the nonzero alignment array: 5738
Length of the non-negative alignment array: 5864
Length of signal alignment: 66244
Length of the basecalled signal: 90737

I am confused as to why the non-negative "ul:" array has a different length than the span of the reference positions. Due to this length difference, I am unsure how to map the signal values to the reference positions.
Another question that I have is: can I safely ignore the rest of the signal values (which have a higher index than the sum of absolute values of “ul:”)?  Are these assumed to be not aligned to the reference and hence to be trimmed?
The version of uncalled4 that I used was 4.0.1a.
Best regards,
Yrjö Koski

@skovaka this is super nice! Is there a way to iterate only the reads for particular reference id? I tried to look at the code to deduce it, but it wasn't very clear to me. The iter_reads methods accept a read_filter parameter, but it seems to me it is ignored.
I wrote a whole parser that reads this data from the bam tags, but this approach is much simpler and less error-prone, so I would be happy if I can use that instead.

Yes! Just add the line conf.tracks.ref_bounds = "<ref_id>" before initializing the Tracks object to filter based on reference name. ref_id can be in the form "chr1" or "chr1:100-200", for example.
read_filter should filter on read_id, and if adding that to iter_reads doesn't work, then you can try conf.read_index.read_filter = [<read_ids>]. The Config object is the main way I pass around parameters, and the priority of function arguments is a bit messed up in some cases, which is part of why I haven't provided a public API yet.

Thanks, that worked! But it seems to be significantly slower than parsing the bam directly. I'll try to profile it and see where the issue is and if I can optimize it when I have a bit of time.


Column matching problem of hive external table with csv format

Steps to reproduce the behavior (Required)
For hive external table with CSV format, the column content display is based on the column order in the text file, not the corresponding content based on the field name of the hive table
Expected behavior (Required)
The content of the hive external table with CSV format field is the content of the field in the corresponding hive table.
Real behavior (Required)
For hive external table with CSV format, the column content display is based on the column order in the text file.
StarRocks version (Required)

You can get the StarRocks version by executing SQL select current_version()

mysql> select current_version();
+-------------------+
| current_version() |
+-------------------+
| UNKNOWN e8f11970  |
+-------------------+
1 row in set (0.01 sec)

user may need to give <column name , column id number> when create external table for this
@imay @DorianZheng
Do you have any idea?


Switched broken pypip.in badges to shields.io

Hello, this is an auto-generated Pull Request. (Feedback?)
Some time ago, pypip.in shut down. This broke the badges for a bunch of repositories, including pygments-markdown-lexer. Thankfully, an equivalent service is run by shields.io. This pull request changes the badges to use shields.io instead.

Coverage remained the same at 90.0% when pulling 10be852aef977d4019b49202a3b9525e760ad376 on movermeyer:fix_badges into 0f5b3dd05f835e8ab92cac2dc2df8ad53a6e6441 on jhermann:master.

Coverage remained the same at 90.0% when pulling 10be852aef977d4019b49202a3b9525e760ad376 on movermeyer:fix_badges into 0f5b3dd05f835e8ab92cac2dc2df8ad53a6e6441 on jhermann:master.


ref: moved accelerator router

Hello @williamFalcon! Thanks for opening this PR.

In the file pytorch_lightning/accelerators/accelerator_connector.py:

Line 6:1: W293 blank line contains whitespace
Line 9:1: W293 blank line contains whitespace

Do see the Hitchhiker's guide to code style


SAM crashes when UI widgets set to NaN

SAM will crash if a numeric UI widget is set to either nan() or 1./0. inside of a $MIMO$. Other types of widgets and regular functions instead of $MIMO$s were not tested.

@Matthew-Boyd was this fixed in one of our patches? If so, can you close this issue?

I don't know. I only vaguely remember the issue, but my guess is that no one has looked into it. I see it as outside my purview, but it can be ignored if you don't think it's a significant problem.

I had a vague memory that perhaps @sjanzou looked into this, but perhaps that was a different issue?

I was not aware of this issue. I have never tried to set a widget to NaN. What is the desired behavior if a value is undefined? Throw or exit?


Normalize TFM platform versions when determining computed compatibility

Addresses https://github.com/NuGet/NuGetGallery/issues/9711
Problem:
TFMs that contain platform monikers and versions, like net6.0-android31.0, were not showing the net7.0-android and net8.0-android TFMs as users expected.
https://www.nuget.org/packages/Xamarin.AndroidX.Lifecycle.Common/<IP_ADDRESS>#supportedframeworks-body-tab

If the TFM didn't have a platform version, say just net6.0-android, then the corresponding net7.0 and net8.0 TFMs show up as expected.
https://www.nuget.org/packages/Microsoft.CognitiveServices.Speech.Extension.ONNX.Runtime/1.33.0#supportedframeworks-body-tab

Solution:
Currently, if a TFM (.NET 5+) has a platform version, it does not show any computed compatible TFMs. Our compatibility matrix only includes TFMs without platform versions.
To fix this, if we see a TFM with a platform version:

Create a normalized copy of the TFM, using an empty platform version
net6.0-windows7.0 -> net6.0-windows
Use this normalized TFM to find computed compatible TFMs
net6.0-windows -> net6.0-windows, net7.0-windows, net8.0-windows
Add the original platform version to the computed TFMs
net6.0-windows7.0, net7.0-windows7.0, net8.0-windows7.0

i.e. net6.0-windows7.0 -> net6.0-windows7.0, net7.0-windows7.0, net8.0-windows7.0
Similarly,

Asset TFM
Computed TFMs

net6.0-windows
net6.0-windows, net7.0-windows, net8.0-windows

net6.0-windows7.0
net6.0-windows7.0, net7.0-windows7.0, net8.0-windows7.0

net6.0-windows99.0
net6.0-windows99.0, net7.0-windows99.0, net8.0-windows99.0

net7.0-windows7.0
net7.0-windows7.0, net8.0-windows7.0

net6.0-ios
net6.0-ios, net7.0-ios, net8.0-ios

net6.0-ios15.0
net6.0-ios15.0, net7.0-ios15.0, net8.0-ios15.0

So if my understanding is correct, this is change is made where it is because it would not be feasible for the CompatibilityMatrix to contain every possible iteration of a platform and version, right? :shipit:

Yes, that's my understanding too.
Also, the CompatibilityMatrix uses a list of 'supported frameworks' that we maintain ourselves https://github.com/NuGet/NuGetGallery/blob/main/src/NuGetGallery.Core/Frameworks/SupportedFrameworks.cs#L66, so we would need to manually update this list with every platform and platform version combo in order to cover it that way.

This seems reasonable. Would it be possible to get a TFM compat expert on client to sign off on the concept here? It makes sense based on my understanding but I was not involved in the design or implementation of net5.0+ platform specific TFMs.

If the TFM didn't have a platform version, say just net6.0-android, then the corresponding net7.0 and net8.0 TFMs show up as expected.

In  the .NET world with platforms, TargetPlatformVersion is mandatory.
For the NuGetFramework type, no platform version means 0.0 (common pattern throughout), but it's restore and pack that prevent platform version-less packages/projects.
It is unusual that there are packages without a target platform in their package. In fact we have pack validation that should prevent that: https://learn.microsoft.com/en-us/nuget/reference/errors-and-warnings/nu1012.
Packages that contain assets like that were probably manually edited, and since restore tries not to be too opinionated and break it can work.
I'm wondering if we should've blocked these packages from getting uploaded to nuget.org, but it's too late now I guess.
Now focusing on the issue is that we want to show net8.0-android as a computed framework for net7.0-android31, I'm not really familiar with what versions are used, and how often people downgrade the default SDK platform version etc.
In general, if the SDK defaults to net7.0-android31, for net8.0 it is likely the platform version is 32.0 or something like.
If someone manually specifies net8.0-android30.0, then it'll be incompatible, but I don't think there'd be as much confusion as those people likely understand the platform version.
The real concern is what is 31.0 wasn't the default, but a bumped version, and net8.0 defaults to a version 30.0, then this is a problem.
I'd involve .NET folks here, as while I can speak on the technical correctness, they're the better authorities on what people would expect.
Given net7.0-android31.0, I think showing net8.0-android31.0 is a good idea as a computed framework, which seems to what this PR is proposing.

@nkolev92 i talked to daniel and immo on this. but while you point out these problems, the android team will never publish a TFM with a lesser value as a TPV. they build against the latest version of android APIs.

also i think uno or some other groups do the manual creation b/c they have the net8.0-android TFM:
https://www.nuget.org/packages?q=&tfms=net8.0-android&prerel=true&sortby=relevance

I'm wondering if we should've blocked these packages from getting uploaded to nuget.org, but it's too late now I guess.

Should we track this issue to ensure people are using proper tooling that packs TPV?

My only feedback here is to double check that the default major .NET version platform TPVs are right.
this:

looks wrong to me initially. i think it is perfectly fine to compute and normalize them too if we don't have a good way of getting mappings. they can lookup docs or similar.
https://github.com/dotnet/docs/issues/38554

Note that for iOS, we're planning on supporting multi-targeting, where both of these would be valid (at the same time):

net8.0-ios17.0
net8.0-ios17.1

The Android platform version for each subsequent release of .NET will be >= to the previous .NET.

Same for iOS.

I think for Android (and perhaps iOS is the same), you are going to have to know the explicitly valid combinations

That's not really feasible for iOS, we ship new versions with updated TPVs all year, depending on what Apple does. I'd really like to avoid a solution where someone would have to (remember to) update NuGet's knowledge all the time about which .NET versions supports which iOS versions.
We'll also change the default TPV even though we're not supposed to according to the spec, because the alternative is worse (customers' projects will stop compiling because Xcode was auto-updated by Apple, and they'd have to add the TPV manually to their project files to use the new Xcode, and we don't want people to use explicit TPV because then they'd have to update the TPV again for the subsequent version of Xcode, and now the whole point of having a default value becomes useless because nobody can use it).

We encourage users (via project templates and docs examples) to use the aliases that do not specify Android version.

I've seen more projects with the TPV than I'd expect, so I've wondered if the IDEs have been writing it out when saving csprojs without customers explicitly choosing it?

I think there are a few alternatives here though.

Given a netX.0-iosY.Z, then all versions of net(X+1).0-ios should support iOS Y.Z, so you don't need the Y.Z for X+1.
In other words, given net6.0-ios15.4, it can be expanded to list net7.0-ios and net8.0-ios.

The above solution isn't guaranteed (and I don't have a crystal ball), so a safer way to render it would be to somehow express that the version has a minimum:

net6.0-ios15.4 ->

net7.0-iosX [where X is at least 15.4, but the iOS SDK may require it to be higher]
net8.0-iosX [where X is at least 15.4, but the iOS SDK may require it to be higher]

This is more accurate, but certainly wordier, if not straight out uglier.

@rolfbjarne

I've seen more projects with the TPV than I'd expect, so I've wondered if the IDEs have been writing it out when saving csprojs without customers explicitly choosing it?

Yeah I believe this was by design when packing w/ dotnet tooling.
What we will likely do in this case then @advay26 correct if wrong is that we will show:
net6.0-android<TPV> or net6.0-android and compute the normalized simplified compatible frameworks i.e. net7.0-android and net8.0-android. Similar story for iOS here. We will not add TPVs to computed compatible frameworks for now.

As @JonDouglas said, I've changed the proposal so that we're just showing the normalized compatible frameworks, rather than asserting a specific platform version. So a package targeting net6.0-androidY.Z will be mapped to net6.0-androidY.Z, net7.0-android, net8.0-android.
It would be difficult to continually keep track of all supported TPVs for each platform, so we'll instead try to point to docs somewhere once they're set up: https://github.com/dotnet/docs/issues/38554.


Update nuget package versions

rc2-23910 build disappeared from the nuget servers. Updating to rc3-24012-00 (version used by corefx currently).

@dotnet-bot test OSX Debug please


bigquery_operator.py does not allow large results

When you are query a large amount of data you have to turn on the flag allowLargeResults . This is not possible with the current bigquery_operator.
Depending on our available time we might submit a pull. For now have implemented a workaround by creating our own operator.

Just curious, how big is largeResults?

I found the answer here. 128MB compressed. In our case we are retrieving 10+ mjn rows which accounts for around 2GB uncompressed csv.

@criccomini See above.

I think that this has been fixed already. https://github.com/airbnb/airflow/blob/master/airflow/contrib/operators/bigquery_operator.py#L20


Newbies question

On a brand new angular projet, If I whant to test Sheriff, do I have to install ESLINT? I don't have eslintrc.json mon my projet.

Hi, at the moment, you have to use ESLint, but we will soon provide an alternative CLI that runs without ESLint.


#3407 add the logic of annotation on the splicing class for tars client

Make sure that:

[x] You have read the contribution guidelines.
[ ] You submit test cases (unit or integration tests) that back your changes.
[ ] Your local test passed ./mvnw clean install -Dmaven.javadoc.skip=true.

Codecov Report

Merging #3503 (54deca5) into master (b869882) will decrease coverage by 0.36%.
The diff coverage is 76.66%.

@@             Coverage Diff              @@
##             master    #3503      +/-   ##
============================================
- Coverage     62.81%   62.45%   -0.37%
+ Complexity     5556     5529      -27
============================================
  Files           840      841       +1
  Lines         23273    23301      +28
  Branches       2115     2118       +3
============================================
- Hits          14620    14552      -68
- Misses         7305     7392      +87
- Partials       1348     1357       +9

Impacted Files
Coverage Δ

...enyu/client/tars/TarsServiceBeanPostProcessor.java
81.57% <76.66%> (-7.31%)
:arrow_down:

...plugin/logging/rocketmq/LoggingRocketMQPlugin.java
22.72% <0.00%> (-72.73%)
:arrow_down:

...ache/shenyu/plugin/grpc/cache/GrpcClientCache.java
75.00% <0.00%> (-25.00%)
:arrow_down:

...controller/ShenyuClientHttpRegistryController.java
77.77% <0.00%> (-22.23%)
:arrow_down:

...ogging/rocketmq/body/LoggingServerHttpRequest.java
0.00% <0.00%> (-20.00%)
:arrow_down:

...rter/sync/data/http/HttpSyncDataConfiguration.java
81.25% <0.00%> (-18.75%)
:arrow_down:

...yu/sync/data/http/refresh/AbstractDataRefresh.java
68.96% <0.00%> (-14.37%)
:arrow_down:

...ruptor/RegisterClientServerDisruptorPublisher.java
52.94% <0.00%> (-11.77%)
:arrow_down:

...a/org/apache/shenyu/common/utils/VersionUtils.java
67.85% <0.00%> (-10.72%)
:arrow_down:

.../apache/shenyu/admin/model/dto/BatchCommonDTO.java
50.00% <0.00%> (-7.15%)
:arrow_down:

... and 50 more

Continue to review full report at Codecov.

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


Prepare 4.0.0 release

Since html5ever appears in the public API, this needs a semver-incompatible version bump.

Don't get me wrong, I'm a fan! I've just seen that many maintainers aren't quite so careful about hiding private dependencies.
But, what about the notice in the changelog that says "breaking change" (change lifetimes on UrlRelative)? That's from 32e12a0577fd9013712d40db4b06955b41214579 (which doesn't seem to carry an affiliation with any PR).


Mentee apply form, question issue

This question is showing incorrect error message, to be checked if this question can be removed.

ok


ReadMe complete

The Readme is rewritten with installation instruction.

@AayushPokharel Please submit separate PR's for docs folder update and readme.md update.


Accessing Files

Hello - First I want to say Thank You and I'm really looking forward to this.. In the industry a long time across many areas of tech but still new to .net maui / c# but rapidly moving. I have a starter / free account setup in Figma. I've built and can run the figma to maui tool, input my API token but when trying to access content, I'm receiving the below output.

I'm not sure that I'm using the right file ID as I can only see a url in Figma as /design and not /file.
I also came across some figma community conversations mentioning a change last month and moving of content in their UI.

Appreciate any help/guidance.. eager to get going!
Thanks again!

same problem here, i only see design url and not file url

@a-iafrate  - were you able to resolve?

no :(

@a-iafrate - Stavo cercando di inviarti un messaggio direttamente al tuo blocco, ma ho ricevuto un errore nel modulo di contatto. Mi piacerebbe entrare in contatto e discutere di alcune cose con te.

@jsuarezruiz any solution for this?

not sure if its the same issue, but I used the ID after /design/[id]   and I was able to get the generated codes


Update Regex testing for Time class

Codecov Report

Merging #92 (137b94d) into master (e5b049a) will increase coverage by 0.08%.
The diff coverage is 0.00%.

@@             Coverage Diff              @@
##             master      #92      +/-   ##
============================================
+ Coverage     60.90%   60.98%   +0.08%
  Complexity      417      417
============================================
  Files            90       90
  Lines          1522     1520       -2
  Branches        150      149       -1
============================================
  Hits            927      927
+ Misses          549      547       -2
  Partials         46       46

Impacted Files
Coverage Δ

src/main/java/manageezpz/model/task/Time.java
33.33% <0.00%> (+6.06%)
:arrow_up:

Continue to review full report at Codecov.

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


Fail to load the function with compile arguments in IPython

I succeeded to import the function without the compile arguments
%%cython
cpdef void hello_world_no_args():
  print('hello world')

but failed to import it back with the compile arguments option (without any exception)
%%cython -c "-Os"
cpdef void hello_world():
  print('hello world')

For details, please refer to the following notebook
https://colab.research.google.com/drive/1xjRBmLPFYm_b8YG_kXUzc7EfER20E_T6
The version used is 0.29.16.

Sorry I just found out -c=-Os rather than -c="-Os" works well.


docs(ffe-core-react): documentatin SmallText

typedefinisjonen og doc for SmallText

Coverage remained the same at 81.988% when pulling a8f97cf0b5263eeb2c9cc93ead531ce8fc2cdc54 on develop_fix-documentation-small-text into d2748fc1d4b6cad0bf7168475f377f0342742310 on develop.


Swift 2.2 Error: Use of unresolved identifier _stdlib_getDemangledTypeName

After upgrading to Swift 2.2 with Xcode 7.3, I've run into this build error
…/Pods/EasyTipView/Source/EasyTipView.swift:189:20: Use of unresolved identifier '_stdlib_getDemangledTypeName'
Any hints to fix it would be much appreciated.

Updating to 0.1.7 fixed it.


Added SetTitleBarColor() for mac only

I couldn't create a transparent titlebar because then the window would become undraggable. So I created this function to set the titlebar color so my app background and titlebar background match and looks like it is transparent.

Window customization APIs will only be merged if they are supported by the majority of the platforms. Since this is macOS only, and the code of the webview has changed a lot since then (webview-x branch), I have to close this. But thanks for your work anyway, a similar PR for all three platforms (if it's possible) for the webview-x API could be a nice-to-have feature.


GC Status checks subscription queries against current types, instead of future types

 Issue by do4gr
Friday Sep 08, 2017 at 09:24 GMT
Originally opened as https://github.com/graphcool/api-bugs/issues/271

When validating a local project with gc status it checks subscription queries against the current project state instead of the future state including the type changes. GC deploy already does the correct thing. They both should do the correct thing.

This is fixed now.


Adapt to netty changes for CharsetUtil

Motivation:
The codec-extra module needs to be adapted to the following netty PR:
Remove Charset constants from CharsetUtil (https://github.com/netty/netty/pull/12741)
Modification:
Netty CharsetUtil constants need to be replaced by the ones from java.nio.charset.StandardCharsets
Result:
The codec-extra module can be built again, and this will unblock the reactor-netty build based on netty5

@chrisvest , @normanmaurer ,
Could you please take a look ?
thanks !

@chrisvest , thanks for the review.


Run integration tests on Travis

That.

@isaacseymour - FYI, your integration tests will now run on travis. Will take a cut at cleaning up the gemfile so not everything's required in development in a sec.

@isaacseymour - FYI, your integration tests will now run on travis. Will take a cut at cleaning up the gemfile so not everything's required in development in a sec.


Correct way to add an app probably needs to be documented

🤔 Issue:
Because of the project structure, creating a new app requires (slightly) more than just using ./manage.py createapp <my app name> - specifically, updating the name in the new apps.py to include the parent package name.
It is also not immediately clear that the parent package name should be included when adding the new app to INSTALLED_APPS.
This should probably be in the documentation.
(This uses the bug template because originally I thought I'd hit a catch-22 where I couldn't get both mypy and pytest working with the same app setup)
📝Steps to reproduce:
Once the template is set up, it is not obvious (to me) the correct way to create a new app and set it up.
For example, I create the project using:
django-admin startproject --template ../ackama/django-template/template/ --extension py,env,toml,yml myfunproject

I set up the basics:
cd myfunproject
poetry install
cp example.env .env
poetry shell

I run inv check and it passes type checking and 'test views'. (It fails playwright because of my Chromium, but that's irrelevant)
I then do a Django check.
cd src/myfunproject
./manage.py check

That comes out file as well (except staticfiles dir doesn't exist - again, not relevant)
Now I want to create an app to make some functionality. In the same folder as the ./manage.py file, I create the app:
./manage.py startapp myexcitingapp
# I could equally use `django-admin startapp myexcitingapp` - the effect is exactly the same.

Now I need to update the INSTALLED_APPS in main/settings.py to include the app. I can potentially here either include the parent package name (myfunproject) or not. i.e. I can do (including above and below line for context):
    # Local
    "myfunproject.myexcitingapp",
]

or
    # Local
    "myexcitingapp",
]

Other lines, like the root URL config include the prefix (i.e. ROOT_URLCONF = "myfunproject.main.urls"). Based on that, I'd expect to include it.
Both of them will pass a ./manage.py check.
In order to test which works, I update my myexcitingapp.py to contain:
from django.db import models

class MyModel(models.Model):
    my_text = models.CharField(max_length=100)

With that model in place, both values in the settings.py file will result in migrations being generated for the model. That is, both are being included.
However, if I go up two folders and run inv check again, both will fail the pytest stage with. If I use just "myexcitingapp", in the settings I get:
ModuleNotFoundError: No module named 'myexcitingapp'
```.
If I instead use `myfunproject.myexcitingapp` in the `settings.py` then I get the error:

django.core.exceptions.ImproperlyConfigured: Cannot import 'myexcitingapp'. Check that 'myfunproject.myexcitingapp.apps.MyexcitingappConfig.name' is correct.

I need to go and edit the `src/myfunproject/myexcitingapp/apps.py` and update the app name from `myexcitingapp` to `myfunproject.myexcitingapp`.

Once I have done that, then the tests will pass and the `./manage.py check` will also pass.

## ✅ Expected Result:

There are clear instructions on how to add a new app (i.e. what values need to go where in `settings.py` and `apps.py`

## ➕Additional Information:

<!--
Links to additional reference sources, people to talk to or information that doesn't fit within the above
-->

The actual origin of this was me getting an error:
RuntimeError: Model class myexcitingapp.models.MyModel doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
The reason I got the error, which took me a bit longer to track down than I would have liked, was that in my urls.py I had missed the parent package name - i.e.
urlpatterns = [
    path("myexcitingapp/", include("myexcitingapp.urls"),
]

As soon as myexcitingapp/urls.py contained a FormView that used my model, it failed - but I didn't notice the timing relationship immediately.
I can imagine not being the last to clumsily trip over this, but I'm not sure how to prevent others clumsily tripping over this either. Maybe something in the docs so the error is super-searchable.


AUX-09J2O/I can't connect

I have the app up and running under a docker container but seems it can not connect to the AC.
Logs below:
broadlinkac2mqtt  | {"level":"debug","time":"2023-06-22T16:44:32+02:00","caller":"/go/src/broadlinkac/app/config/config.go:47","message":"Start reading a config file"}
broadlinkac2mqtt  | {"level":"info","time":"2023-06-22T16:44:32+02:00","caller":"/go/src/broadlinkac/app/app/mqtt/mqtt.go:42","message":"Connected to MQTT"}
broadlinkac2mqtt  | {"level":"error","error":"read udp <IP_ADDRESS>:50757-><IP_ADDRESS>:80: i/o timeout","time":"2023-06-22T16:44:42+02:00","caller":"/go/src/broadlinkac/app/app/webClient/client.go:43","message":"Failed to read the response"}
broadlinkac2mqtt  | {"level":"error","input":{"Command":101,"Payload":"RTRS5/ku2pWDRJMINe+abftpLcNwuQRDrFzWP7tTrfoIgUyn+M9BcQAyjlcMO4bJTQVwhEmjieKa4QRUNqBb3dwCwWGvEyXofhmw99HOBo0=","Mac":"ec0baed30ddb"},"device":"ec0baed30ddb","time":"2023-06-22T16:44:42+02:00","caller":"/go/src/broadlinkac/app/app/service/service.go:703","message":"failed to send a command"}
broadlinkac2mqtt  | {"level":"error","error":"read udp <IP_ADDRESS>:50757-><IP_ADDRESS>:80: i/o timeout","input":{"Mac":"ec0baed30ddb"},"time":"2023-06-22T16:44:42+02:00","caller":"/go/src/broadlinkac/app/app/service/service.go:140","message":"failed to send command"}
broadlinkac2mqtt  | {"level":"error","error":"read udp <IP_ADDRESS>:50757-><IP_ADDRESS>:80: i/o timeout","device":"ec0baed30ddb","time":"2023-06-22T16:44:42+02:00","caller":"/go/src/broadlinkac/app/main.go:170","message":"Failed to Auth device ec0baed30ddb. Reconnect in 3 seconds..."}

BTW, not sure how to chose a correct port number of AC. I tries to scan it by nmap, it does return nothing. Seems every port are closed.
My current config
service:
  update_interval: 10 # In seconds. Default: 10
  log_level: error    # Supported: info, disabled, fatal, debug, error. Default: error

mqtt:
  broker: "mqtt://mqtt-broker-address:1883"
  auto_discovery_topic: homeassistant

devices:
  - ip: ac-ip-address
    mac: ac-mac-address
    name: Livingroom AC
    port: 80

Any thoughts?

This ingegration works onWe can see how the Acfreedom application and your air conditioner communicate by scanning the network via Wireshark. If they communicate via TCP, then my integration will definitely not support your air conditioner. There is only UDP support here.


Investigate why command manual generation is failing.

This script to generate our manual is failing
https://github.com/build-trust/ockam-documentation/blob/command/manual/template/mdbook/build.sh
thread 'main' panicked at 'Failed to load the local Ockam configuration: Serde(Error("data did not match any variant of untagged enum IdentityConfigs", line: 0, column: 0))', implementations/rust/ockam/ockam_command/src/lib.rs:241:44
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

It works after a reset which is needed because of changes in release v0.93.0

I just did a fresh install on Ubuntu and got the same error.
ockam enroll thread 'main' panicked at 'Failed to load the local Ockam configuration: Serde(Error("data did not match any variant of untagged enum IdentityConfigs", line: 0, column: 0))', implementations/rust/ockam/ockam_command/src/lib.rs:241:44 note: run with RUST_BACKTRACE=1 environment variable to display a backtrace

Thank you for telling us.
Did you try an ockam reset? Many objects we serialized changed in this release.

yes

Try rm -rf ~/.ockam

that worked

That likely means the reset sub command should be even more forgiving of failures to parse existing config files. Could you file another issue please, so we can track a fix. cc: @adrianbenavides @nazmulidris


dts: intel_s1000: update SRAM size to 4MB

Intel S1000 has 4MB of internal memory while it was defined as 3MB in DTS.

Codecov Report

Merging #11269 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master   #11269   +/-   ##
=======================================
  Coverage    53.1%    53.1%
=======================================
  Files         218      218
  Lines       26887    26887
  Branches     5954     5954
=======================================
  Hits        14277    14277
  Misses      10174    10174
  Partials     2436     2436

Continue to review full report at Codecov.

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


Fix issues blocking Scala.js' master from migrating to sbt-crossproject

With these changes, the following branch of Scala.js works: https://github.com/scala-js/scala-js/compare/master...sjrd:sbt-crossproject

Review by @densh, please. It's not strictly urgent, but if I could have a release of 0.2.0 with these fixes published within ~2 weeks, that would be nice.

CI is green :)

LGTM, thanks @sjrd ! Looking forward to unified cross projects in Scala.js 1.0 👏


Request for advice/help with debugging

@jrsquared,
I have been trying to understand how the left-to-right tree layout works in hope of figuring out why when sometimes when I drill down to level-3 (focusedChild style) the node drilled into has all of its incoming and outgoing connected nodes stacked directly on top of the node (i.e., all the little circle nodes are stacked on top of the donut graph node), but for the life of me I cannot find a way to debug in to the ltrTreeLayout code from my top-level wrapper.
The vizceral-example is the bases of my top-layer, then I make use of vizceral-react and vizceral all locally linked using npm.  I've made sure to generate source-maps and load them in to Chrome, but they only point to the vizceral-react "bundle" and I can't seem to get all the way down into the vizceral library bundle.
I've even tried configuring VS code as the debugging interface/iDE, but at this point after 5 frustrating days of failed configurations and settings in VS code and webpack.  I'm ready to stop being stubborn and ask for help.

What do you use for debugging (i.e. an IDE?, a browser?, something else entirely?)
How would you debug, specifically set breakpoints, in ltrTreeLayout?
Is it even possible to set a breakpoint that can be reached in say  ltrTreeLayout or ltrTreeLayoutWorker when running vizceral-example as the top-level?
Do you "disable" the web-worker so that the position setting code isn't webpack'ed into an obfuscated nightmare?

Any advice would be greatly appreciated.
Thanks

That is unfortunate that you are running into that situation... We don't have any circular dependencies in our graphs so maybe that could be causing some problems? I'm not sure.
As far as debugging a local project, the workflow that I use (if anyone can think of a better one, please give suggestions)

In vizceral run npm link (Create a link to the vizceral project)
In vizceral-react run npm link vizceral (Use the linked vizceral project)
In vizceral-react run npm link (Create a link to the vizceral-react project)
Modify vizceral-react/src/vizceral.jsx to import vizceral source
Line 5: import VizceralGraph from 'vizceral' --> import VizceralGraph from 'vizceral/src/vizceral.js'
In vizceral-example run npm link vizceral-react (Use the linked vizceral-react project)
Modify vizceral-example/src/components/trafficFlow.jsx to import vizceral-react source
Line 7: import Vizceral from 'vizceral-react' -> import Vizceral from 'vizceral-react/src/vizceral.jsx'

Now, when you run npm run dev in the example project, it should transpile all the code and generate a source map for everything, making debugging in Chrome straightforward.
As far as debugging the layout worker, that's a little more tricky because the worker is only loaded on demand, so it's difficult to put breakpoints.  You can either put in debugger statements in the worker so Chrome will break on them, or move the code out of a worker for development, then put it back in the worker when you're done.
Justin

@jrsquared
Thanks so much!  Your steps plus "un-web-worker-ing" the worker code allows full debug via Chrome.  It let me find where things go haywire and all the nodes get stacked on top of each other in the level-3 node detail "zoom" level.  It is a relief to have a where, now just to figure out the why it is happening.
Again, thank you for your work and assistance.


Sort and Add Missing

Sorted list of cursors and added missing types, updated total count from 36 to 39. Added note about using auto (default) with URL cursor in case file is unavailable on page load.

[x] I have read freeCodeCamp's contribution guidelines.
[x] My pull request has a descriptive title (not a vague title like Update index.md)
[x] My pull request targets the master branch of freeCodeCamp.
[x] None of my changes are plagiarized from another source without proper attribution.
[x] My article does not contain shortened URLs or affiliate links.

If your pull request closes a GitHub issue, replace the XXXXX below with the issue number.
Closes #XXXXX

@Ninjirate Awesome! Thanks! Congrats on your first open source contribution to this repository!