[Bug]: /var/lib/postgresql/data/pgdata: no such file or directory After Join Pod Renames Path

Is there an existing issue already for this bug?

[X] I have searched for an existing issue, and could not find anything. I believe this is a new bug.

I have read the troubleshooting guide

[X] I have read the troubleshooting guide and I think this is a new bug.

I am running a supported version of CloudNativePG

[X] I have read the troubleshooting guide and I think this is a new bug.

Contact Details
No response
Version
1.23.2
What version of Kubernetes are you using?
1.28
What is your Kubernetes environment?
Self-managed: kind (evaluation)
How did you install the operator?
YAML manifest
What happened?
After testing with 1 instance and all was fine (PVCs bound to PVS, cluster pod is running and accessible), I tried redeploying the cluster with 3 instances, and reproduced the following issue consistently:
After the initdb pod completes successfully, the first replica gets to a running state and writes the pgdata directory. Consequently a 2nd join pod starts running until it fails and drags the first replica with it. What happens is that the 2nd join replica renames the pgdata directory to a unique timestamped name (pg_controldata check on existing directory succeeded, renaming the folder) and then the first replica enters a crashloopbackoff with stat /var/lib/postgresql/data/pgdata: no such file or directory.
We are using Calico CSI, on bare-metal in an airgapped environment.
Attaching logs:
Logs from the test-1 pod before the 2nd join pod was spun up:
Defaulted container "postgres" out of: postgres, bootstrap-controller (init)
{"level":"info","ts":"2024-08-18T12:40:14Z","logger":"setup","msg":"Starting CloudNativePG Instance Manager","logging_pod":"test-1","version":"1.23.3","build":{"Version":"1.23.3","Commit":"2b489ad6","Date":"2024-07-29"}}
{"level":"info","ts":"2024-08-18T12:40:14Z","logger":"setup","msg":"starting tablespace manager","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:40:14Z","logger":"setup","msg":"starting external server manager","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:40:14Z","logger":"setup","msg":"starting controller-runtime manager","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Starting EventSource","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","source":"kind source: *v1.Cluster"}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Starting Controller","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster"}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Starting webserver","logging_pod":"test-1","address":":9187"}
{"level":"info","ts":"2024-08-18T12:40:14Z","logger":"roles_reconciler","msg":"starting up the runnable","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:40:14Z","logger":"roles_reconciler","msg":"setting up RoleSynchronizer loop","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Starting webserver","logging_pod":"test-1","address":"localhost:8010"}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Starting webserver","logging_pod":"test-1","address":":8000"}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Starting EventSource","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","source":"kind source: *v1.Cluster"}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Starting Controller","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster"}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Starting EventSource","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","source":"kind source: *v1.Cluster"}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Starting Controller","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster"}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Installed configuration file","logging_pod":"test-1","pgdata":"/var/lib/postgresql/data/pgdata","filename":"pg_ident.conf"}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Starting workers","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","worker count":1}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Starting workers","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","worker count":1}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Starting workers","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","worker count":1}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Refreshed configuration file","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluster":{"name":"test","namespace":"troubleshooting"},"namespace":"troubleshooting","name":"test","reconcileID":"52a9df4b-324d-4b79-95f5-32fb36ebf15e","logging_pod":"test-1","filename":"/controller/certificates/server.crt","secret":"test-server"}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Refreshed configuration file","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluster":{"name":"test","namespace":"troubleshooting"},"namespace":"troubleshooting","name":"test","reconcileID":"52a9df4b-324d-4b79-95f5-32fb36ebf15e","logging_pod":"test-1","filename":"/controller/certificates/server.key","secret":"test-server"}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Refreshed configuration file","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluster":{"name":"test","namespace":"troubleshooting"},"namespace":"troubleshooting","name":"test","reconcileID":"52a9df4b-324d-4b79-95f5-32fb36ebf15e","logging_pod":"test-1","filename":"/controller/certificates/streaming_replica.crt","secret":"test-replication"}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Refreshed configuration file","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluster":{"name":"test","namespace":"troubleshooting"},"namespace":"troubleshooting","name":"test","reconcileID":"52a9df4b-324d-4b79-95f5-32fb36ebf15e","logging_pod":"test-1","filename":"/controller/certificates/streaming_replica.key","secret":"test-replication"}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Refreshed configuration file","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluster":{"name":"test","namespace":"troubleshooting"},"namespace":"troubleshooting","name":"test","reconcileID":"52a9df4b-324d-4b79-95f5-32fb36ebf15e","logging_pod":"test-1","filename":"/controller/certificates/client-ca.crt","secret":"test-ca"}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Refreshed configuration file","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluster":{"name":"test","namespace":"troubleshooting"},"namespace":"troubleshooting","name":"test","reconcileID":"52a9df4b-324d-4b79-95f5-32fb36ebf15e","logging_pod":"test-1","filename":"/controller/certificates/server-ca.crt","secret":"test-ca"}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Installed configuration file","logging_pod":"test-1","pgdata":"/var/lib/postgresql/data/pgdata","filename":"pg_hba.conf"}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Installed configuration file","logging_pod":"test-1","pgdata":"/var/lib/postgresql/data/pgdata","filename":"custom.conf"}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Cluster status","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluster":{"name":"test","namespace":"troubleshooting"},"namespace":"troubleshooting","name":"test","reconcileID":"52a9df4b-324d-4b79-95f5-32fb36ebf15e","logging_pod":"test-1","currentPrimary":"","targetPrimary":"test-1","isReplicaCluster":false}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"First primary instance bootstrap, marking myself as primary","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluster":{"name":"test","namespace":"troubleshooting"},"namespace":"troubleshooting","name":"test","reconcileID":"52a9df4b-324d-4b79-95f5-32fb36ebf15e","logging_pod":"test-1","currentPrimary":"","targetPrimary":"test-1"}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Extracting pg_controldata information","logging_pod":"test-1","reason":"postmaster start up"}
{"level":"info","ts":"2024-08-18T12:40:14Z","logger":"pg_controldata","msg":"pg_control version number:            1300\nCatalog version number:               202307071\nDatabase system identifier:<PHONE_NUMBER>190509076\nDatabase cluster state:               shut down\npg_control last modified:             Sun 18 Aug 2024 12:40:10 PM UTC\nLatest checkpoint location:           0/2000028\nLatest checkpoint's REDO location:    0/2000028\nLatest checkpoint's REDO WAL file:<PHONE_NUMBER>00000000000002\nLatest checkpoint's TimeLineID:       1\nLatest checkpoint's PrevTimeLineID:   1\nLatest checkpoint's full_page_writes: on\nLatest checkpoint's NextXID:          0:732\nLatest checkpoint's NextOID:          16386\nLatest checkpoint's NextMultiXactId:  1\nLatest checkpoint's NextMultiOffset:  0\nLatest checkpoint's oldestXID:        722\nLatest checkpoint's oldestXID's DB:   1\nLatest checkpoint's oldestActiveXID:  0\nLatest checkpoint's oldestMultiXid:   1\nLatest checkpoint's oldestMulti's DB: 1\nLatest checkpoint's oldestCommitTsXid:0\nLatest checkpoint's newestCommitTsXid:0\nTime of latest checkpoint:            Sun 18 Aug 2024 12:40:10 PM UTC\nFake LSN counter for unlogged rels:   0/3E8\nMinimum recovery ending location:     0/0\nMin recovery ending loc's timeline:   0\nBackup start location:                0/0\nBackup end location:                  0/0\nEnd-of-backup record required:        no\nwal_level setting:                    logical\nwal_log_hints setting:                on\nmax_connections setting:              100\nmax_worker_processes setting:         32\nmax_wal_senders setting:              10\nmax_prepared_xacts setting:           0\nmax_locks_per_xact setting:           64\ntrack_commit_timestamp setting:       off\nMaximum data alignment:               8\nDatabase block size:                  8192\nBlocks per segment of large relation: 131072\nWAL block size:                       8192\nBytes per WAL segment:                16777216\nMaximum length of identifiers:        64\nMaximum columns in an index:          32\nMaximum size of a TOAST chunk:        1996\nSize of a large-object chunk:         2048\nDate/time type storage:               64-bit integers\nFloat8 argument passing:              by value\nData page checksum version:           0\nMock authentication nonce:            480b05d1d891b3d3f9ee29c29bb1d0c8686d61dbbdcfbc20c7f1254dc429183a\n","pipe":"stdout","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"postmaster started","logging_pod":"test-1","postMasterPID":20}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"DB not available, will retry","logging_pod":"test-1","err":"failed to connect to `user=postgres database=postgres`: /controller/run/.s.PGSQL.5432 (/controller/run): dial error: dial unix /controller/run/.s.PGSQL.5432: connect: no such file or directory"}
{"level":"info","ts":"2024-08-18T12:40:14Z","logger":"postgres","msg":"2024-08-18 12:40:14.777 UTC [20] LOG:  redirecting log output to logging collector process","pipe":"stderr","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:40:14Z","logger":"postgres","msg":"2024-08-18 12:40:14.777 UTC [20] HINT:  Future log output will appear in directory \"/controller/log\".","pipe":"stderr","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:40:14Z","logger":"postgres","msg":"2024-08-18 12:40:14.777 UTC [20] LOG:  ending log output to stderr","source":"/controller/log/postgres","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:40:14Z","logger":"postgres","msg":"2024-08-18 12:40:14.777 UTC [20] HINT:  Future log output will go to log destination \"csvlog\".","source":"/controller/log/postgres","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:40:14Z","logger":"postgres","msg":"record","logging_pod":"test-1","record":{"log_time":"2024-08-18 12:40:14.777 UTC","process_id":"20","session_id":"66c1ebae.14","session_line_num":"1","session_start_time":"2024-08-18 12:40:14 UTC","transaction_id":"0","error_severity":"LOG","sql_state_code":"00000","message":"ending log output to stderr","hint":"Future log output will go to log destination \"csvlog\".","backend_type":"postmaster","query_id":"0"}}
{"level":"info","ts":"2024-08-18T12:40:14Z","logger":"postgres","msg":"record","logging_pod":"test-1","record":{"log_time":"2024-08-18 12:40:14.777 UTC","process_id":"20","session_id":"66c1ebae.14","session_line_num":"2","session_start_time":"2024-08-18 12:40:14 UTC","transaction_id":"0","error_severity":"LOG","sql_state_code":"00000","message":"starting PostgreSQL 16.3 (Debian 16.3-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit","backend_type":"postmaster","query_id":"0"}}
{"level":"info","ts":"2024-08-18T12:40:14Z","logger":"postgres","msg":"record","logging_pod":"test-1","record":{"log_time":"2024-08-18 12:40:14.778 UTC","process_id":"20","session_id":"66c1ebae.14","session_line_num":"3","session_start_time":"2024-08-18 12:40:14 UTC","transaction_id":"0","error_severity":"LOG","sql_state_code":"00000","message":"listening on IPv4 address \"<IP_ADDRESS>\", port 5432","backend_type":"postmaster","query_id":"0"}}
{"level":"info","ts":"2024-08-18T12:40:14Z","logger":"postgres","msg":"record","logging_pod":"test-1","record":{"log_time":"2024-08-18 12:40:14.778 UTC","process_id":"20","session_id":"66c1ebae.14","session_line_num":"4","session_start_time":"2024-08-18 12:40:14 UTC","transaction_id":"0","error_severity":"LOG","sql_state_code":"00000","message":"listening on IPv6 address \"::\", port 5432","backend_type":"postmaster","query_id":"0"}}
{"level":"info","ts":"2024-08-18T12:40:14Z","msg":"Instance is still down, will retry in 1 second","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","Cluster":{"name":"test","namespace":"troubleshooting"},"namespace":"troubleshooting","name":"test","reconcileID":"52a9df4b-324d-4b79-95f5-32fb36ebf15e","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:40:14Z","logger":"postgres","msg":"record","logging_pod":"test-1","record":{"log_time":"2024-08-18 12:40:14.784 UTC","process_id":"20","session_id":"66c1ebae.14","session_line_num":"5","session_start_time":"2024-08-18 12:40:14 UTC","transaction_id":"0","error_severity":"LOG","sql_state_code":"00000","message":"listening on Unix socket \"/controller/run/.s.PGSQL.5432\"","backend_type":"postmaster","query_id":"0"}}
{"level":"info","ts":"2024-08-18T12:40:14Z","logger":"postgres","msg":"record","logging_pod":"test-1","record":{"log_time":"2024-08-18 12:40:14.792 UTC","process_id":"24","session_id":"66c1ebae.18","session_line_num":"1","session_start_time":"2024-08-18 12:40:14 UTC","transaction_id":"0","error_severity":"LOG","sql_state_code":"00000","message":"database system was shut down at 2024-08-18 12:40:10 UTC","backend_type":"startup","query_id":"0"}}
{"level":"info","ts":"2024-08-18T12:40:14Z","logger":"postgres","msg":"record","logging_pod":"test-1","record":{"log_time":"2024-08-18 12:40:14.797 UTC","process_id":"20","session_id":"66c1ebae.14","session_line_num":"6","session_start_time":"2024-08-18 12:40:14 UTC","transaction_id":"0","error_severity":"LOG","sql_state_code":"00000","message":"database system is ready to accept connections","backend_type":"postmaster","query_id":"0"}}
{"level":"info","ts":"2024-08-18T12:40:14Z","logger":"wal-archive","msg":"Backup not configured, skip WAL archiving via Barman Cloud","logging_pod":"test-1","walName":"pg_wal/000000010000000000000001","currentPrimary":"test-1","targetPrimary":"test-1"}

Scaling the cluster to 3 instances, test-1 logs continue with:
{"level":"info","ts":"2024-08-18T12:40:56Z","logger":"postgres","msg":"record","logging_pod":"test-1","record":{"log_time":"2024-08-18 12:40:56.923 UTC","process_id":"22","session_id":"66c1ebae.16","session_line_num":"1","session_start_time":"2024-08-18 12:40:14 UTC","transaction_id":"0","error_severity":"LOG","sql_state_code":"00000","message":"checkpoint starting: force wait","backend_type":"checkpointer","query_id":"0"}}
{"level":"info","ts":"2024-08-18T12:40:56Z","logger":"wal-archive","msg":"Backup not configured, skip WAL archiving via Barman Cloud","logging_pod":"test-1","walName":"pg_wal/000000010000000000000002","currentPrimary":"test-1","targetPrimary":"test-1"}
{"level":"info","ts":"2024-08-18T12:40:57Z","logger":"postgres","msg":"record","logging_pod":"test-1","record":{"log_time":"2024-08-18 12:40:57.878 UTC","user_name":"postgres","database_name":"postgres","process_id":"270","connection_from":"[local]","session_id":"66c1ebd9.10e","session_line_num":"1","command_tag":"SELECT","session_start_time":"2024-08-18 12:40:57 UTC","virtual_transaction_id":"5/3","transaction_id":"0","error_severity":"ERROR","sql_state_code":"58P01","message":"could not open file \"/var/lib/postgresql/data/pgdata/global/pg_control\" for reading: No such file or directory","query":"SELECT\n\t\t\t(pg_control_system()).system_identifier,\n\t\t\t-- True if this is a primary instance\n\t\t\tNOT pg_is_in_recovery() as primary,\n\t\t\t-- True if at least one column requires a restart\n\t\t\tEXISTS(SELECT 1 FROM pg_settings WHERE pending_restart),\n\t\t\t-- The size of database in human readable format\n\t\t\t(SELECT pg_size_pretty(SUM(pg_database_size(oid))) FROM pg_database)","application_name":"cnpg-instance-manager","backend_type":"client backend","query_id":"0"}}
{"level":"info","ts":"2024-08-18T12:40:57Z","logger":"postgres","msg":"record","logging_pod":"test-1","record":{"log_time":"2024-08-18 12:40:57.891 UTC","user_name":"postgres","database_name":"postgres","process_id":"271","connection_from":"[local]","session_id":"66c1ebd9.10f","session_line_num":"1","command_tag":"SELECT","session_start_time":"2024-08-18 12:40:57 UTC","virtual_transaction_id":"5/6","transaction_id":"0","error_severity":"ERROR","sql_state_code":"58P01","message":"could not open file \"/var/lib/postgresql/data/pgdata/global/pg_control\" for reading: No such file or directory","query":"SELECT\n\t\t\t(pg_control_system()).system_identifier,\n\t\t\t-- True if this is a primary instance\n\t\t\tNOT pg_is_in_recovery() as primary,\n\t\t\t-- True if at least one column requires a restart\n\t\t\tEXISTS(SELECT 1 FROM pg_settings WHERE pending_restart),\n\t\t\t-- The size of database in human readable format\n\t\t\t(SELECT pg_size_pretty(SUM(pg_database_size(oid))) FROM pg_database)","application_name":"cnpg-instance-manager","backend_type":"client backend","query_id":"0"}}
{"level":"info","ts":"2024-08-18T12:40:57Z","logger":"postgres","msg":"record","logging_pod":"test-1","record":{"log_time":"2024-08-18 12:40:57.946 UTC","user_name":"postgres","database_name":"postgres","process_id":"272","connection_from":"[local]","session_id":"66c1ebd9.110","session_line_num":"1","command_tag":"SELECT","session_start_time":"2024-08-18 12:40:57 UTC","virtual_transaction_id":"5/9","transaction_id":"0","error_severity":"ERROR","sql_state_code":"58P01","message":"could not open file \"/var/lib/postgresql/data/pgdata/global/pg_control\" for reading: No such file or directory","query":"SELECT\n\t\t\t(pg_control_system()).system_identifier,\n\t\t\t-- True if this is a primary instance\n\t\t\tNOT pg_is_in_recovery() as primary,\n\t\t\t-- True if at least one column requires a restart\n\t\t\tEXISTS(SELECT 1 FROM pg_settings WHERE pending_restart),\n\t\t\t-- The size of database in human readable format\n\t\t\t(SELECT pg_size_pretty(SUM(pg_database_size(oid))) FROM pg_database)","application_name":"cnpg-instance-manager","backend_type":"client backend","query_id":"0"}}
{"level":"info","ts":"2024-08-18T12:40:58Z","logger":"postgres","msg":"record","logging_pod":"test-1","record":{"log_time":"2024-08-18 12:40:58.214 UTC","user_name":"postgres","database_name":"postgres","process_id":"273","connection_from":"[local]","session_id":"66c1ebda.111","session_line_num":"1","command_tag":"SELECT","session_start_time":"2024-08-18 12:40:58 UTC","virtual_transaction_id":"5/12","transaction_id":"0","error_severity":"ERROR","sql_state_code":"58P01","message":"could not open file \"/var/lib/postgresql/data/pgdata/global/pg_control\" for reading: No such file or directory","query":"SELECT\n\t\t\t(pg_control_system()).system_identifier,\n\t\t\t-- True if this is a primary instance\n\t\t\tNOT pg_is_in_recovery() as primary,\n\t\t\t-- True if at least one column requires a restart\n\t\t\tEXISTS(SELECT 1 FROM pg_settings WHERE pending_restart),\n\t\t\t-- The size of database in human readable format\n\t\t\t(SELECT pg_size_pretty(SUM(pg_database_size(oid))) FROM pg_database)","application_name":"cnpg-instance-manager","backend_type":"client backend","query_id":"0"}}
{"level":"info","ts":"2024-08-18T12:40:58Z","logger":"postgres","msg":"record","logging_pod":"test-1","record":{"log_time":"2024-08-18 12:40:58.669 UTC","process_id":"22","session_id":"66c1ebae.16","session_line_num":"2","session_start_time":"2024-08-18 12:40:14 UTC","transaction_id":"0","error_severity":"PANIC","sql_state_code":"58P01","message":"could not open file \"/var/lib/postgresql/data/pgdata/global/pg_control\": No such file or directory","backend_type":"checkpointer","query_id":"0"}}
{"level":"info","ts":"2024-08-18T12:40:58Z","logger":"postgres","msg":"record","logging_pod":"test-1","record":{"log_time":"2024-08-18 12:40:58.939 UTC","process_id":"20","session_id":"66c1ebae.14","session_line_num":"7","session_start_time":"2024-08-18 12:40:14 UTC","transaction_id":"0","error_severity":"LOG","sql_state_code":"00000","message":"checkpointer process (PID 22) was terminated by signal 6: Aborted","backend_type":"postmaster","query_id":"0"}}
{"level":"info","ts":"2024-08-18T12:40:58Z","logger":"postgres","msg":"record","logging_pod":"test-1","record":{"log_time":"2024-08-18 12:40:58.939 UTC","process_id":"20","session_id":"66c1ebae.14","session_line_num":"8","session_start_time":"2024-08-18 12:40:14 UTC","transaction_id":"0","error_severity":"LOG","sql_state_code":"00000","message":"terminating any other active server processes","backend_type":"postmaster","query_id":"0"}}
{"level":"info","ts":"2024-08-18T12:40:58Z","logger":"postgres","msg":"record","logging_pod":"test-1","record":{"log_time":"2024-08-18 12:40:58.940 UTC","process_id":"20","session_id":"66c1ebae.14","session_line_num":"9","session_start_time":"2024-08-18 12:40:14 UTC","transaction_id":"0","error_severity":"LOG","sql_state_code":"00000","message":"shutting down because restart_after_crash is off","backend_type":"postmaster","query_id":"0"}}
{"level":"info","ts":"2024-08-18T12:40:58Z","logger":"postgres","msg":"record","logging_pod":"test-1","record":{"log_time":"2024-08-18 12:40:58.943 UTC","process_id":"20","session_id":"66c1ebae.14","session_line_num":"10","session_start_time":"2024-08-18 12:40:14 UTC","transaction_id":"0","error_severity":"LOG","sql_state_code":"00000","message":"database system is shut down","backend_type":"postmaster","query_id":"0"}}
{"level":"info","ts":"2024-08-18T12:40:58Z","msg":"postmaster exited","logging_pod":"test-1","postmasterExitStatus":"exit status 1","postMasterPID":20}
{"level":"info","ts":"2024-08-18T12:40:58Z","msg":"Extracting pg_controldata information","logging_pod":"test-1","reason":"postmaster has exited"}
{"level":"info","ts":"2024-08-18T12:40:58Z","logger":"pg_controldata","msg":"pg_controldata: error: could not open file \"/var/lib/postgresql/data/pgdata/global/pg_control\" for reading: No such file or directory\n","pipe":"stderr","logging_pod":"test-1"}
{"level":"error","ts":"2024-08-18T12:40:58Z","msg":"Error printing the control information of this PostgreSQL instance","logging_pod":"test-1","error":"exit status 1","stacktrace":"github.com/cloudnative-pg/cloudnative-pg/pkg/management/log.(*logger).Error\n\tpkg/management/log/log.go:125\ngithub.com/cloudnative-pg/cloudnative-pg/pkg/management/postgres.(*Instance).LogPgControldata\n\tpkg/management/postgres/instance.go:1058\ngithub.com/cloudnative-pg/cloudnative-pg/internal/cmd/manager/instance/run/lifecycle.(*PostgresLifecycle).runPostgresAndWait.func1\n\tinternal/cmd/manager/instance/run/lifecycle/run.go:120\ngithub.com/cloudnative-pg/cloudnative-pg/internal/cmd/manager/instance/run/lifecycle.(*PostgresLifecycle).runPostgresAndWait.func2\n\tinternal/cmd/manager/instance/run/lifecycle/run.go:128"}
{"level":"error","ts":"2024-08-18T12:40:58Z","msg":"PostgreSQL process exited with errors","logging_pod":"test-1","error":"exit status 1","stacktrace":"github.com/cloudnative-pg/cloudnative-pg/pkg/management/log.(*logger).Error\n\tpkg/management/log/log.go:125\ngithub.com/cloudnative-pg/cloudnative-pg/internal/cmd/manager/instance/run/lifecycle.(*PostgresLifecycle).Start.func1\n\tinternal/cmd/manager/instance/run/lifecycle/lifecycle.go:104\ngithub.com/cloudnative-pg/cloudnative-pg/internal/cmd/manager/instance/run/lifecycle.(*PostgresLifecycle).Start\n\tinternal/cmd/manager/instance/run/lifecycle/lifecycle.go:112\nsigs.k8s.io/controller-runtime/pkg/manager.(*runnableGroup).reconcile.func1\n\tpkg/mod/sigs.k8s.io/controller-runtime@v0.18.4/pkg/manager/runnable_group.go:226"}
{"level":"info","ts":"2024-08-18T12:40:58Z","msg":"Stopping and waiting for non leader election runnables"}
{"level":"info","ts":"2024-08-18T12:40:58Z","msg":"Stopping and waiting for leader election runnables"}
{"level":"error","ts":"2024-08-18T12:40:58Z","msg":"error received after stop sequence was engaged","error":"exit status 1","stacktrace":"sigs.k8s.io/controller-runtime/pkg/manager.(*controllerManager).engageStopProcedure.func1\n\tpkg/mod/sigs.k8s.io/controller-runtime@v0.18.4/pkg/manager/internal.go:499"}
{"level":"info","ts":"2024-08-18T12:40:58Z","logger":"Replicator","msg":"Terminated slot Replicator loop","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:40:58Z","msg":"Shutdown signal received, waiting for all workers to finish","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster"}
{"level":"info","ts":"2024-08-18T12:40:58Z","msg":"Shutdown signal received, waiting for all workers to finish","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster"}
{"level":"info","ts":"2024-08-18T12:40:58Z","msg":"Shutdown signal received, waiting for all workers to finish","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster"}
{"level":"info","ts":"2024-08-18T12:40:58Z","msg":"Exited log pipe","fileName":"/controller/log/postgres.json","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:40:58Z","logger":"roles_reconciler","msg":"Terminated RoleSynchronizer loop","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:40:58Z","msg":"Webserver exited","logging_pod":"test-1","address":":9187"}
{"level":"info","ts":"2024-08-18T12:40:58Z","msg":"Webserver exited","logging_pod":"test-1","address":"localhost:8010"}
{"level":"info","ts":"2024-08-18T12:40:58Z","msg":"Exited log pipe","fileName":"/controller/log/postgres","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:40:58Z","msg":"Exited log pipe","fileName":"/controller/log/postgres.csv","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:40:58Z","msg":"All workers finished","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster"}
{"level":"info","ts":"2024-08-18T12:40:58Z","msg":"All workers finished","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster"}
{"level":"info","ts":"2024-08-18T12:40:58Z","msg":"All workers finished","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster"}
{"level":"info","ts":"2024-08-18T12:40:58Z","msg":"Webserver exited","logging_pod":"test-1","address":":8000"}
{"level":"info","ts":"2024-08-18T12:40:58Z","msg":"Stopping and waiting for caches"}
{"level":"info","ts":"2024-08-18T12:40:58Z","msg":"pkg/mod/k8s.io/client-go@v0.30.3/tools/cache/reflector.go:232: watch of *v1.Cluster ended with: an error on the server (\"unable to decode an event from the watch stream: context canceled\") has prevented the request from succeeding"}
{"level":"info","ts":"2024-08-18T12:40:58Z","msg":"Stopping and waiting for webhooks"}
{"level":"info","ts":"2024-08-18T12:40:58Z","msg":"Stopping and waiting for HTTP servers"}
{"level":"info","ts":"2024-08-18T12:40:58Z","msg":"Wait completed, proceeding to shutdown the manager"}

Logs from the test-2-join-5v2nm:
Defaulted container "join" out of: join, bootstrap-controller (init)
{"level":"info","ts":"2024-08-18T12:40:56Z","msg":"pg_controldata check on existing directory succeeded, renaming the folder","pgdata":"/var/lib/postgresql/data/pgdata","out":"pg_control version number:            1300\nCatalog version number:               202307071\nDatabase system identifier:<PHONE_NUMBER>190509076\nDatabase cluster state:               in production\npg_control last modified:             Sun 18 Aug 2024 12:40:14 PM UTC\nLatest checkpoint location:           0/2000028\nLatest checkpoint's REDO location:    0/2000028\nLatest checkpoint's REDO WAL file:<PHONE_NUMBER>00000000000002\nLatest checkpoint's TimeLineID:       1\nLatest checkpoint's PrevTimeLineID:   1\nLatest checkpoint's full_page_writes: on\nLatest checkpoint's NextXID:          0:732\nLatest checkpoint's NextOID:          16386\nLatest checkpoint's NextMultiXactId:  1\nLatest checkpoint's NextMultiOffset:  0\nLatest checkpoint's oldestXID:        722\nLatest checkpoint's oldestXID's DB:   1\nLatest checkpoint's oldestActiveXID:  0\nLatest checkpoint's oldestMultiXid:   1\nLatest checkpoint's oldestMulti's DB: 1\nLatest checkpoint's oldestCommitTsXid:0\nLatest checkpoint's newestCommitTsXid:0\nTime of latest checkpoint:            Sun 18 Aug 2024 12:40:10 PM UTC\nFake LSN counter for unlogged rels:   0/3E8\nMinimum recovery ending location:     0/0\nMin recovery ending loc's timeline:   0\nBackup start location:                0/0\nBackup end location:                  0/0\nEnd-of-backup record required:        no\nwal_level setting:                    logical\nwal_log_hints setting:                on\nmax_connections setting:              100\nmax_worker_processes setting:         32\nmax_wal_senders setting:              10\nmax_prepared_xacts setting:           0\nmax_locks_per_xact setting:           64\ntrack_commit_timestamp setting:       off\nMaximum data alignment:               8\nDatabase block size:                  8192\nBlocks per segment of large relation: 131072\nWAL block size:                       8192\nBytes per WAL segment:                16777216\nMaximum length of identifiers:        64\nMaximum columns in an index:          32\nMaximum size of a TOAST chunk:        1996\nSize of a large-object chunk:         2048\nDate/time type storage:               64-bit integers\nFloat8 argument passing:              by value\nData page checksum version:           0\nMock authentication nonce:            480b05d1d891b3d3f9ee29c29bb1d0c8686d61dbbdcfbc20c7f1254dc429183a\n","newName":"/var/lib/postgresql/data/pgdata_20240818T124056Z","logging_pod":"test-2-join"}
{"level":"info","ts":"2024-08-18T12:40:56Z","msg":"Refreshed configuration file","logging_pod":"test-2-join","filename":"/controller/certificates/server.crt","secret":"test-server"}
{"level":"info","ts":"2024-08-18T12:40:56Z","msg":"Refreshed configuration file","logging_pod":"test-2-join","filename":"/controller/certificates/server.key","secret":"test-server"}
{"level":"info","ts":"2024-08-18T12:40:56Z","msg":"Refreshed configuration file","logging_pod":"test-2-join","filename":"/controller/certificates/streaming_replica.crt","secret":"test-replication"}
{"level":"info","ts":"2024-08-18T12:40:56Z","msg":"Refreshed configuration file","logging_pod":"test-2-join","filename":"/controller/certificates/streaming_replica.key","secret":"test-replication"}
{"level":"info","ts":"2024-08-18T12:40:56Z","msg":"Refreshed configuration file","logging_pod":"test-2-join","filename":"/controller/certificates/client-ca.crt","secret":"test-ca"}
{"level":"info","ts":"2024-08-18T12:40:56Z","msg":"Refreshed configuration file","logging_pod":"test-2-join","filename":"/controller/certificates/server-ca.crt","secret":"test-ca"}
{"level":"info","ts":"2024-08-18T12:40:56Z","msg":"Waiting for server to be available","logging_pod":"test-2-join","connectionString":"host=test-rw user=streaming_replica port=5432 sslkey=/controller/certificates/streaming_replica.key sslcert=/controller/certificates/streaming_replica.crt sslrootcert=/controller/certificates/server-ca.crt application_name=test-2-join sslmode=verify-ca dbname=postgres connect_timeout=5 options='-c wal_sender_timeout=0s'"}
{"level":"info","ts":"2024-08-18T12:40:56Z","logger":"pg_basebackup","msg":"pg_basebackup: initiating base backup, waiting for checkpoint to complete","pipe":"stderr","logging_pod":"test-2-join"}
{"level":"info","ts":"2024-08-18T12:40:58Z","logger":"pg_basebackup","msg":"pg_basebackup: error: could not initiate base backup: SSL SYSCALL error: EOF detected","pipe":"stderr","logging_pod":"test-2-join"}
{"level":"info","ts":"2024-08-18T12:40:58Z","logger":"pg_basebackup","msg":"pg_basebackup: removing data directory \"/var/lib/postgresql/data/pgdata\"","pipe":"stderr","logging_pod":"test-2-join"}
{"level":"error","ts":"2024-08-18T12:40:58Z","msg":"Error joining node","logging_pod":"test-2-join","error":"error in pg_basebackup, exit status 1","stacktrace":"github.com/cloudnative-pg/cloudnative-pg/pkg/management/log.(*logger).Error\n\tpkg/management/log/log.go:125\ngithub.com/cloudnative-pg/cloudnative-pg/pkg/management/log.Error\n\tpkg/management/log/log.go:163\ngithub.com/cloudnative-pg/cloudnative-pg/internal/cmd/manager/instance/join.joinSubCommand\n\tinternal/cmd/manager/instance/join/cmd.go:139\ngithub.com/cloudnative-pg/cloudnative-pg/internal/cmd/manager/instance/join.NewCmd.func2\n\tinternal/cmd/manager/instance/join/cmd.go:72\ngithub.com/spf13/cobra.(*Command).execute\n\tpkg/mod/github.com/spf13/cobra@v1.8.1/command.go:985\ngithub.com/spf13/cobra.(*Command).ExecuteC\n\tpkg/mod/github.com/spf13/cobra@v1.8.1/command.go:1117\ngithub.com/spf13/cobra.(*Command).Execute\n\tpkg/mod/github.com/spf13/cobra@v1.8.1/command.go:1041\nmain.main\n\tcmd/manager/main.go:66\nruntime.main\n\t/opt/hostedtoolcache/go/1.22.5/x64/src/runtime/proc.go:271"}
Error: error in pg_basebackup, exit status 1

Logs from the test-1 after the "pgdata" directory renaming:
Defaulted container "postgres" out of: postgres, bootstrap-controller (init)
{"level":"info","ts":"2024-08-18T12:44:01Z","logger":"setup","msg":"Starting CloudNativePG Instance Manager","logging_pod":"test-1","version":"1.23.3","build":{"Version":"1.23.3","Commit":"2b489ad6","Date":"2024-07-29"}}
{"level":"info","ts":"2024-08-18T12:44:01Z","logger":"setup","msg":"starting tablespace manager","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:44:01Z","logger":"setup","msg":"starting external server manager","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:44:01Z","logger":"setup","msg":"starting controller-runtime manager","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Starting EventSource","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","source":"kind source: *v1.Cluster"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Starting Controller","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Starting webserver","logging_pod":"test-1","address":":9187"}
{"level":"info","ts":"2024-08-18T12:44:01Z","logger":"roles_reconciler","msg":"starting up the runnable","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:44:01Z","logger":"roles_reconciler","msg":"setting up RoleSynchronizer loop","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Starting webserver","logging_pod":"test-1","address":"localhost:8010"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Starting webserver","logging_pod":"test-1","address":":8000"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Starting EventSource","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","source":"kind source: *v1.Cluster"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Starting Controller","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Starting EventSource","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","source":"kind source: *v1.Cluster"}
{"level":"error","ts":"2024-08-18T12:44:01Z","msg":"Error waiting on the PostgreSQL process","logging_pod":"test-1","error":"stat /var/lib/postgresql/data/pgdata: no such file or directory","stacktrace":"github.com/cloudnative-pg/cloudnative-pg/pkg/management/log.(*logger).Error\n\tpkg/management/log/log.go:125\ngithub.com/cloudnative-pg/cloudnative-pg/internal/cmd/manager/instance/run/lifecycle.(*PostgresLifecycle).Start.func1\n\tinternal/cmd/manager/instance/run/lifecycle/lifecycle.go:102\ngithub.com/cloudnative-pg/cloudnative-pg/internal/cmd/manager/instance/run/lifecycle.(*PostgresLifecycle).Start\n\tinternal/cmd/manager/instance/run/lifecycle/lifecycle.go:112\nsigs.k8s.io/controller-runtime/pkg/manager.(*runnableGroup).reconcile.func1\n\tpkg/mod/sigs.k8s.io/controller-runtime@v0.18.4/pkg/manager/runnable_group.go:226"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Starting Controller","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Stopping and waiting for non leader election runnables"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Stopping and waiting for leader election runnables"}
{"level":"error","ts":"2024-08-18T12:44:01Z","msg":"error received after stop sequence was engaged","error":"stat /var/lib/postgresql/data/pgdata: no such file or directory","stacktrace":"sigs.k8s.io/controller-runtime/pkg/manager.(*controllerManager).engageStopProcedure.func1\n\tpkg/mod/sigs.k8s.io/controller-runtime@v0.18.4/pkg/manager/internal.go:499"}
{"level":"info","ts":"2024-08-18T12:44:01Z","logger":"roles_reconciler","msg":"Terminated RoleSynchronizer loop","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Exited log pipe","fileName":"/controller/log/postgres","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Starting workers","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","worker count":1}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Shutdown signal received, waiting for all workers to finish","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"All workers finished","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Webserver exited","logging_pod":"test-1","address":":9187"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Exited log pipe","fileName":"/controller/log/postgres.json","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Exited log pipe","fileName":"/controller/log/postgres.csv","logging_pod":"test-1"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Webserver exited","logging_pod":"test-1","address":":8000"}
{"level":"error","ts":"2024-08-18T12:44:01Z","logger":"controller-runtime.source.EventHandler","msg":"failed to get informer from cache","error":"Timeout: failed waiting for *v1.Cluster Informer to sync","stacktrace":"sigs.k8s.io/controller-runtime/pkg/internal/source.(*Kind[...]).Start.func1.1\n\tpkg/mod/sigs.k8s.io/controller-runtime@v0.18.4/pkg/internal/source/kind.go:76\nk8s.io/apimachinery/pkg/util/wait.loopConditionUntilContext.func1\n\tpkg/mod/k8s.io/apimachinery@v0.30.3/pkg/util/wait/loop.go:53\nk8s.io/apimachinery/pkg/util/wait.loopConditionUntilContext\n\tpkg/mod/k8s.io/apimachinery@v0.30.3/pkg/util/wait/loop.go:54\nk8s.io/apimachinery/pkg/util/wait.PollUntilContextCancel\n\tpkg/mod/k8s.io/apimachinery@v0.30.3/pkg/util/wait/poll.go:33\nsigs.k8s.io/controller-runtime/pkg/internal/source.(*Kind[...]).Start.func1\n\tpkg/mod/sigs.k8s.io/controller-runtime@v0.18.4/pkg/internal/source/kind.go:64"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Starting workers","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","worker count":1}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Shutdown signal received, waiting for all workers to finish","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"All workers finished","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Starting workers","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster","worker count":1}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Shutdown signal received, waiting for all workers to finish","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"All workers finished","controller":"cluster","controllerGroup":"postgresql.cnpg.io","controllerKind":"Cluster"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Webserver exited","logging_pod":"test-1","address":"localhost:8010"}
{"level":"error","ts":"2024-08-18T12:44:01Z","logger":"controller-runtime.source.EventHandler","msg":"failed to get informer from cache","error":"Timeout: failed waiting for *v1.Cluster Informer to sync","stacktrace":"sigs.k8s.io/controller-runtime/pkg/internal/source.(*Kind[...]).Start.func1.1\n\tpkg/mod/sigs.k8s.io/controller-runtime@v0.18.4/pkg/internal/source/kind.go:76\nk8s.io/apimachinery/pkg/util/wait.loopConditionUntilContext.func1\n\tpkg/mod/k8s.io/apimachinery@v0.30.3/pkg/util/wait/loop.go:53\nk8s.io/apimachinery/pkg/util/wait.loopConditionUntilContext\n\tpkg/mod/k8s.io/apimachinery@v0.30.3/pkg/util/wait/loop.go:54\nk8s.io/apimachinery/pkg/util/wait.PollUntilContextCancel\n\tpkg/mod/k8s.io/apimachinery@v0.30.3/pkg/util/wait/poll.go:33\nsigs.k8s.io/controller-runtime/pkg/internal/source.(*Kind[...]).Start.func1\n\tpkg/mod/sigs.k8s.io/controller-runtime@v0.18.4/pkg/internal/source/kind.go:64"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Stopping and waiting for caches"}
{"level":"error","ts":"2024-08-18T12:44:01Z","logger":"controller-runtime.source.EventHandler","msg":"failed to get informer from cache","error":"Timeout: failed waiting for *v1.Cluster Informer to sync","stacktrace":"sigs.k8s.io/controller-runtime/pkg/internal/source.(*Kind[...]).Start.func1.1\n\tpkg/mod/sigs.k8s.io/controller-runtime@v0.18.4/pkg/internal/source/kind.go:76\nk8s.io/apimachinery/pkg/util/wait.loopConditionUntilContext.func1\n\tpkg/mod/k8s.io/apimachinery@v0.30.3/pkg/util/wait/loop.go:53\nk8s.io/apimachinery/pkg/util/wait.loopConditionUntilContext\n\tpkg/mod/k8s.io/apimachinery@v0.30.3/pkg/util/wait/loop.go:54\nk8s.io/apimachinery/pkg/util/wait.PollUntilContextCancel\n\tpkg/mod/k8s.io/apimachinery@v0.30.3/pkg/util/wait/poll.go:33\nsigs.k8s.io/controller-runtime/pkg/internal/source.(*Kind[...]).Start.func1\n\tpkg/mod/sigs.k8s.io/controller-runtime@v0.18.4/pkg/internal/source/kind.go:64"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Stopping and waiting for webhooks"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Stopping and waiting for HTTP servers"}
{"level":"info","ts":"2024-08-18T12:44:01Z","msg":"Wait completed, proceeding to shutdown the manager"}```

### Cluster resource

_No response_

### Relevant log output

_No response_

### Code of Conduct

- [X] I agree to follow this project's Code of Conduct

The issue was related to having all 3 PVs mounted onto the same directory. Changing the path in the storageClass and PVs (we don't have CSI provisioner) resolved the issue.


Add help text via tooltips to various controls

Using Bootstrap's tooltips seems like the easiest option (downside: will require adding Bootstrap JS, and popper.js, and jquery...)
This would be useful for explaining not-immediately-obvious behavior, e.g. when the "Categorical color scheme" is used, or explaining searching option behavior (#123), or detailing that tie-breaking behavior is undefined in autoselection (#189).
Could also use Bootstrap popovers for this, I guess.
edit -- small mockup from modifying bootstrap's docs. this looks super cool, and now that we're using jquery in #235 this should be totally doable in a future version of qurro (...not before monday but afterwards :P)

Since we already have Popper.js / Bootstrap's JS set up in Qurro, this is really just a matter of

finding places in the app where we'd want to add tooltips
adding tooltip text
initializing tooltips when the page loads, via something like this approach.

Most of the work will likely be in steps 1 and 2.
(As a sidenote, it would be nice if we could add in a "?" glyph that is what you can hover over to see the tooltip -- would make sense from a usability perspective, rather than seemingly random placements of tooltips. This is kinda analogous to how Bandage works.)

Ok, these are set up pretty cleanly. Whenever we want to add a new "further info/help" icon, we can just add a HTML <span> element like so:
<span class="questionmark" data-toggle="tooltip" data-placement="top"
    title="You can use this selection to change the sample metadata field used for the above plot's x-axis.">
</span>

... and the qurro.css will see the questionmark class and add in the icon, formatting, etc automatically. Furthermore, the JavaScript (in setUpDOM() in display.js) will use the questionmark class as a way to initialize the tooltips (this automatically takes care of step 3 in the above comment).
Here's what the above tooltip looks like in action:

There's some formatting wonkiness regarding where you put the <span> element -- currently things are set up in such a way that we expect these elements to be child elements of .input-group-text <label> elements, and keeping these elements in this way makes them smaller than they would be outside of these elements. So uh TLDR if you wanna move the question marks to outside of the labels, you'd need to adjust size accordingly or they'd look weirdly large I guess. (in practice that'd be doable by just creating multiple questionmark classes with slightly different sizing -- not a super elegant solution but it would work.)
ANYWAY LONG STORY SHORT all that's left is just adding a bunch of these tooltips, and that shouldn't be too bad. It might be cool to have these be programmatically set based on the sort of data the user provides (e.g. the tooltip for the Differential/Feature Loading field would change based on that?), but that might be a stupid amount of work so I might just table that idea for now.

Update: the one line of JS I added ($(".questionmark").tooltip();) broke the tests, life is suffering


Use tabby-mctabface to complete some parameters.

tabby-mctabface list must return a whitespace separated list of
parameter names with custom completion.
A parameter (example) has a corresponding function _example which is
available in the user's shell.

If tabby-mctabface is missing when the completions are generated, it is
not used in the generated completion files.

Can users of open-source {py}gradle ever have tabby-mctabface available?
If not, we should put this in the internal plugin as an override.
We've done that for some other features already.

This has been open for a year without any comments. Closing.


[Applications] - service and component upgrade

I don't see any changes for displaying the status "isBlocked' in the application card, so I think you forget to add it. I suggest checking *ngIf="application.isBlocked" for this code and id the applications is blocked, then display blocked status and its reason


Resize volume: add pool capacity disablethreshold for resize and allow volume auto migration

Description
Currently, when resize a volume, ACS checks if the current storage pool can accommodate the new size, and simply return true if pool has enough capacity, or false if there are not enough capacity.
This PR

add global and zone setting volume.resize.allowed.beyond.allocation and pool.storage.allocated.resize.capacity.disablethreshold
add API parameter automigrate to resizeVolume API.

when resize a volume

check if the pool capacity (with new volume size) is above disable threshold pool.storage.allocated.capacity.disablethreshold
if  pool capacity is below disable threshold, operation succeeds.
if  pool capacity is above disable threshold

if volume.resize.allowed.beyond.allocation is false, go to migration step
if volume.resize.allowed.beyond.allocation is true, it will check pool capacity for resize threshold pool.storage.allocated.resize.capacity.disablethreshold.

if yes, operation succeeds.
if not, go to migration step

migrate volume to another pool

find storage pools by tags, storage types, pool allocation capacity (consider current volume size), and etc
filter storage pool by resize capacity threshold (consider new volume size)
if no pool found, operation fails.
if automigrate is false, operation fails
if automigrate is true, try to migrate volume to another pool

if migration succeeds (for example vm is stopped), operation succeeds
if migration fails (for example vm is running on KVM), operation succeeds

prior to this change

With this change

Types of changes

[ ] Breaking change (fix or feature that would cause existing functionality to change)
[ ] New feature (non-breaking change which adds functionality)
[ ] Bug fix (non-breaking change which fixes an issue)
[x] Enhancement (improves an existing feature and functionality)
[ ] Cleanup (Code refactoring and cleanup, that may add test cases)
[ ] build/CI
[ ] test (unit or integration test code)

Feature/Enhancement Scale or Bug Severity
Feature/Enhancement Scale

[ ] Major
[ ] Minor

Bug Severity

[ ] BLOCKER
[ ] Critical
[ ] Major
[ ] Minor
[ ] Trivial

Screenshots (if appropriate):
How Has This Been Tested?

How did you try to break this feature and the system with this change?

@weizhouapache a [SL] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: ✔ el8 ✔ el9 ✔ debian ✔ suse15. SL-JID 11261

@blueorangutan test

@weizhouapache a [SL] Trillian-Jenkins test job (ol8 mgmt + kvm-ol8) has been kicked to run smoke tests

@blueorangutan package

@weizhouapache a [SL] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

 SL-JID 11264

@blueorangutan test

@sureshanaparti a [SL] Trillian-Jenkins test job (ol8 mgmt + kvm-ol8) has been kicked to run smoke tests

@blueorangutan test

@weizhouapache a [SL] Trillian-Jenkins test job (ol8 mgmt + kvm-ol8) has been kicked to run smoke tests

[SF] Trillian test result (tid-11607)
Environment: kvm-ol8 (x2), Advanced Networking with Mgmt server ol8
Total time taken: 52087 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr9761-t11607-kvm-ol8.zip
Smoke tests completed. 140 look OK, 1 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test
Result
Time (s)
Test File

test_01_secure_vm_migration
Error
377.75
test_vm_life_cycle.py

[SF] Trillian test result (tid-11603)
Environment: kvm-ol8 (x2), Advanced Networking with Mgmt server ol8
Total time taken: 65044 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr9761-t11603-kvm-ol8.zip
Smoke tests completed. 139 look OK, 2 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test
Result
Time (s)
Test File

test_01_secure_vm_migration
Error
134.20
test_vm_life_cycle.py

test_01_secure_vm_migration
Error
134.21
test_vm_life_cycle.py

test_04_deploy_vnf_appliance
Error
477.32
test_vnf_templates.py

test_04_deploy_vnf_appliance
Error
477.32
test_vnf_templates.py

test_05_delete_vnf_template
Error
1.22
test_vnf_templates.py

ContextSuite context=TestVnfTemplates>:teardown
Error
1.43
test_vnf_templates.py

@blueorangutan package

@sureshanaparti a [SL] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: ✔ el8 ✔ el9 ✔ debian ✔ suse15. SL-JID 11284

@blueorangutan test

@rohityadavcloud a [SL] Trillian-Jenkins test job (ol8 mgmt + kvm-ol8) has been kicked to run smoke tests

[SF] Trillian test result (tid-11643)
Environment: kvm-ol8 (x2), Advanced Networking with Mgmt server ol8
Total time taken: 53040 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr9761-t11643-kvm-ol8.zip
Smoke tests completed. 141 look OK, 0 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test
Result
Time (s)
Test File

[SF] Trillian test result (tid-11645)
Environment: kvm-debian12 (x2), Advanced Networking with Mgmt server d12
Total time taken: 52845 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr9761-t11645-kvm-debian12.zip
Smoke tests completed. 140 look OK, 1 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test
Result
Time (s)
Test File

ContextSuite context=TestClusterDRS>:setup
Error
0.00
test_cluster_drs.py

[SF] Trillian test result (tid-11646)
Environment: kvm-ubuntu24 (x2), Advanced Networking with Mgmt server u24
Total time taken: 52213 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr9761-t11646-kvm-ubuntu24.zip
Smoke tests completed. 141 look OK, 0 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test
Result
Time (s)
Test File

@blueorangutan package

@blueorangutan package

@weizhouapache a [SL] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: ✔ el8 ✔ el9 ✖ debian ✔ suse15. SL-JID 11617

@blueorangutan package

@weizhouapache a [SL] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: ✖ el8 ✖ el9 ✖ debian ✖ suse15. SL-JID 11625

Packaging result [SF]: ✖ el8 ✖ el9 ✖ debian ✖ suse15. SL-JID 11630

@blueorangutan test

@weizhouapache a [SL] Trillian-Jenkins test job (ol8 mgmt + kvm-ol8) has been kicked to run smoke tests

[SF] Trillian Build Failed (tid-11811)

@weizhouapache does the migration take flexible tags into account (not only normal tags)?

@weizhouapache does the migration take flexible tags into account (not only normal tags)?

To be frank, I have not tested flexible tags.
This PR calls an existing method listStoragePoolsForSystemMigrationOfVolume to list suitable storage pools.
If there are some issues with the method, we can fix it in a separated PR.

@blueorangutan package

@weizhouapache a [SL] Jenkins job has been kicked to build packages. It will be bundled with  KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

Packaging result [SF]: ✖ el8 ✖ el9 ✖ debian ✖ suse15. SL-JID 11647

Packaging result [SF]: ✔ el8 ✔ el9 ✔ debian ✔ suse15. SL-JID 11650

@blueorangutan test

@weizhouapache a [SL] Trillian-Jenkins test job (ol8 mgmt + kvm-ol8) has been kicked to run smoke tests

@weizhouapache does the migration take flexible tags into account (not only normal tags)?

To be frank, I have not tested flexible tags. This PR calls an existing method listStoragePoolsForSystemMigrationOfVolume to list suitable storage pools.
If there are some issues with the method, we can fix it in a separated PR.

@weizhouapache from what I have gathered reviewing the code. If the volume is attached to a running VM, flexible tags will be considered. Otherwise not... This should be fixed.

@weizhouapache from what I have gathered reviewing the code. If the volume is attached to a running VM, flexible tags will be considered. Otherwise not... This should be fixed.

@JoaoJandre
thanks for looking into it. Agree it should be fixed.
since you are the author of flexible tags (PR #7489), could you please have a look ?
I am not familiar with flexible tags.

[SF] Trillian test result (tid-11823)
Environment: kvm-ol8 (x2), Advanced Networking with Mgmt server ol8
Total time taken: 57637 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr9761-t11823-kvm-ol8.zip
Smoke tests completed. 140 look OK, 1 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test
Result
Time (s)
Test File

test_01_secure_vm_migration
Error
134.14
test_vm_life_cycle.py

test_01_secure_vm_migration
Error
134.15
test_vm_life_cycle.py


Correct download link & update zap paths

Also adhered to rubocop style recommendations.

Please amend the commit message to include the name of the updated cask.

Double quotes are reserved for cases where string interpolation is needed. Please change all of those that don’t need it to single quotes.
If rubocop is letting those pass, it is wrong in this repo.

sorted @vitorgalvao

Thank you.


Changing archived link to Google Code with Github link

It's probably safer to link to Github incase Google decide to start deprecating links to Google code.
Seeing as it's now archived anyway, it makes more sense for potential contributors to see the Github link.

Good call!


proposal: database/sql: validation check db connection object before use.

from issue
https://github.com/go-sql-driver/mysql/issues/1290
in my case
Network is one of unstable environment.
This project already has lots of techniques to detect and handle network problems,
however I sometimes meet unhandled network problem such as network closed without notice to driver.
In this case, developers need to check error type and decide retry or not.
proposal
So...... How about add feature pre-ping process like ping or SELECT 1+1 at JDBC(hibernates JPA), ActiveRecord(rails ORM).
For adding the above feature, I think this BeforeAcquire hook option is needed.
Adding the hook at pool config:
    BeforeAcquire   func(*Conn) error // function to call on every connection checkout to validate the connection

CC @kardianos

@drakejin I understand. One change in 1.18 will allow drivers to correctly wrap errors returned from the driver. If a connection is bad, the driver can return an error that implements interface{ Is(error) bool } and if the Is driver.ErrBadConn returns true, it will discard it.
One of the challenges with a Preflight check is that it still doesn't handle issues where the connection fails between the preflight and the "real" query, so you still have to handle "real" query failures to be robust (though I understand pragmatically that doing so may reduce the number of errors in practice).
I'm would prefer not to add additional features to the existing database/sql; the current design is too brittle. I would prefer to decline this proposal.

@kardianos Oh~~~ driver.ErrBadConn It's such a good idea. I agree with that.
I told the feature about a BeforeAcquire option.
I think this option is more support high logical level. However, I think golang's philosophy doesn't support logically functional features. I understand that's why I like golang.
Okay. I'll ask to other project to sqlx, entd and gorm.
Have a good day :)


Bugfix: Health-check flakiness

A couple of the node health-checks were failing intermittently in Windows. This is an attempt to refactor to use our NodeTask API (which should be reliable - we are using it to run various node scripts) to compare the reliability.

/azp run

/azp run

/azp run


proposal: net/http: return error for proxy CONNECT errors

What version of Go are you using (go version)?

$ go version
go version go1.15.8 linux/amd64

Does this issue reproduce with the latest release?
yes
What operating system and processor architecture are you using (go env)?
(actually using golang:latest eba5d0436b0b from dockerhub to compile)
go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOENV="/root/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build988829932=/tmp/go-build -gno-record-gcc-switches"

What did you do?
main.go
package main

import (
        "fmt"
        "net/http"
)

func main() {
        url := "https://google.com"
        req, err := http.NewRequest("GET", url, nil)
        if err != nil {
                fmt.Println(err)
                return
        }

        resp, err := http.DefaultTransport.RoundTrip(req)
        if err != nil {
                fmt.Println(err)
        }
        if resp == nil {
                fmt.Println("Response is nil")
        }
}

# Proxy server returns 407 to unauthenticated requests
export https_proxy=http://proxy.example.com:3128
go run main.go

What did you expect to see?
I would like to make a contribution to update the error returned on non 200 response on CONNECT request from https proxy to be a new error type such that I can interrogate the response from the proxy, instead of having to handle the error based on the text of the error message.
So I'm able to do something like:
 switch e := err.(type) {
 case ProxyConnectError:
         handleProxyError(e.Response)
 default:
 return err
 }

Currently a basic error type is returned:
https://github.com/golang/go/blob/8869086d8f0a31033ccdc103106c768dc17216b1/src/net/http/transport.go#L1719
I'm happy to raise a PR if this is something that would be accepted
What did you see instead?
Proxy Authentication Required
Response is nil

I don't think RoundTrip should be returning an error for successfully getting a valid http response

Hi Sean, just to confirm, are you saying you think RoundTrip should return the non 200 reponse instead of the error it's currently returning?

I was going to make an alternative suggestion in this issue that RoundTrip return the error and the response;
seeing as it would be returning an error for a request you didn't explicitly make (i.e the CONNECT request)

Dupe of https://github.com/golang/go/issues/38143

let's keep it there


lib_hierarchical_mm_float32_cuda.so

Error when loading. so file，Check failed: (lib_handle_ != nullptr) is false: Failed to load dynamic shared library

We used Ubuntu to generate the library function 'lib_hierarchical_mm_float32_cuda.so', so executing in Windows may cause problems. You can compile TVM on windows as described in the TVM documentation (https://tvm.apache.org/docs/install/from_source.html#building-on-windows) and then compile the library function. Note that this repo uses TVM 0.8.0.
If you feel too troubled to compile, as an alternative, you can find a compiled TVM docker image from https://tvm.apache.org/docs/install/docker.html#docker-source. Then delete files under 'pyraformer/lib' and run the code again.


Document language type

On this page, https://code.visualstudio.com/docs/extensionAPI/activation-events, specifically: activationEvents.onLanguage
How does one determine the string that is valid for onLanguage? For example, in my CSS file, would I use:
css
CSS
stylesheet
etc?

That isn't a finite list but depends on the installed extensions. Use languages.getLanguages (https://code.visualstudio.com/docs/extensionAPI/vscode-api#_languages) to get a list of all installed languages

Fair enough, but could the docs mention that?
On Thu, Nov 19, 2015 at 1:51 AM, Johannes Rieken<EMAIL_ADDRESS>wrote:

That isn't a finite list but depends on the installed extensions. Use
languages.getLanguages (
https://code.visualstudio.com/docs/extensionAPI/vscode-api#_languages) to
get a list of all installed languages
—
Reply to this email directly or view it on GitHub
https://github.com/Microsoft/vscode/issues/90#issuecomment-158006992.

--
Raymond Camden, Developer Advocate for MobileFirst at IBM
Email<EMAIL_ADDRESS>Blog : www.raymondcamden.com
Twitter: raymondcamden


[1 of 2 Debug Tab] Add service debug tab

Desktop:

Mobile:

Task with no statistics (the scenario will happen for each section, when information is not available):

Note: The table in the images will be added in an upcoming PR.

Reviewer: @philipnrmn

This is looking great!

Also, should this h4 have the inverse class?

in your first screenshot the table headers look vertically mis-aligned

@kennyt: Sorry... this wasn't obvious. The table is not introduced here, but in the follow up PR: https://github.com/dcos/dcos-ui/pull/384#issue-159485603
The headers have been adjusted there to not have that bug

@jfurrow I didn't really add the configuration tab, but I have changed it to inverse now.

All comments have been addressed: Ping @kennyt @jfurrow (since you already looked through it)

LGTM! :ship:


Security type for crypto has some white space.

Very small bug found.
https://github.com/stoqey/ib/blob/a8a8cc35a31308d307f00446a01f4db71fff663c/src/api/data/enum/sec-type.ts#L63

Thanks for reporting


[Bug]: Clicking on autocomplete suggestion causes the box/canvas blink

Is there an existing issue for this?

[X] I have searched the existing issues

Current Behavior
Clicking on autocomplete causes the box/canvas blink

Steps To Reproduce
1. Click on autocomplete suggestion on JS editor and observe the box blink
2. Click on autocomplete suggestion on widget and observe the canvas blink

Environment
Release
Version
Cloud

Reopening this since this seems to have been partially solved. onClick of suggestion on widgets does not cause the blink anymore but in JS Objects, onClick of autocomplete suggestion does not select the option, only cursor shifts position.
https://www.loom.com/share/2a599cadb12944ec89d3202834b63e64

@ramsaptami can we verify and close this please?

Tested and verified on release. Closing this


Its own cmake.buildDirectory for each build type

Hi everyone,
If I understand correctly, currently there can be only one build folder for each build type, like Release, Debug.
Is there a way to build in different folders, for example, Release in ${workspaceRoot}/build.release and Debug in ${workspaceRoot}/build.debug?
I simply don't want to rebuild every time I switch build type.
I hope my question is clear.
Regards,
Sergii Zaiets

Hey,
You should be able to use ${buildType} when defining the build directory.

Super. Great. It works :)


Fix handling of optional options parameter in Passport shim

Prior, if no callback was given, the logic would assume that options was the callback. Now, it checks to make sure that options is a function first before making that same assumption.

Reviewed.


enhancement: structured block array

Hi,
I have an idea for an additional functionality in classy blocks: a multiHex object. This is a structured 3d array of blocks. I’ve attached a proof of concept in python. This is not yet linked to classy blocks. It creates the points and blocks and shows how one can interact with these.
The advantage of creating a separate class over having multiple lofts is the ease of selecting and editing the location of the vertices. In this class one can select vertices and blocks based on their location in the blocking structure; i.e. (1,2,3) means the second vertex in x direction, the third vertex in y direction and the fourth vertex in z direction. When selecting this vertex it can be translated or rotated afterwards. Since the hexblocks have an index to the vertices in the multiHex class, all the hexBlocks are updated automatically when the vertex is moved. For a Cartesian mesh this procedure is far easier than the current method in classy blocks of selecting vertices in the mesh by looking at their location within a sphere or box.
The idea is based on blockmeshbuilder: https://github.com/NauticalMile64/blockmeshbuilder/blob/master/blockmeshbuilder/blockstructures/cartesian.py . However, I’ve built the code from scratch and added more features. In the attached file, you can see what the code is currently capable of and what I still would like to add.
My question is: would this be interesting for you to add? If so, I could integrate this code to classy blocks. However, I suppose it would need some final editing by you since you know all the ins and outs of the class blocks framework.
What would be your idea to integrate this code to classy blocks. Should this code create multiple loft operations which can be added to the mesh, or should this code be directly added to the mesh class?
multiHex.zip

This multi-block idea falls under you other proposal of universal sketches that users will define. Editing is done afterwards (see examples) but finding which vertex by their location in blocking structure is a yet-to-be-done "Finder" object. Will definitely consider. Do you have an example geometry (possibly something real-life-ish, a bit more serious than the attached multiHex) that I can use as a reference and example?

You are right, that another way of creating such a multi hex block is via an user defined sketch. For an end user, this would still be more work than defining the block with its x,y,z vertex coordinates.
I don’t know what your plans are for the Finder object. I think the ease of finding an index would still be more work than via the proposed indexing method. This method gives the user a different way of designing a mesh. Namely by starting with all the blocks and deleting/editing these.
Some real life examples are
• Flow over an inclined plate (modeling using Finite Area or VOF)
• Flow in an enlarged duct
• Flow in a diffusor
• Modeling flow around a body:
◦ Sphere/cylinder
◦ Multiple spheres/cylinders
• Flow around buildings
• Heat sink
Let me know if you are interested in implementing this and if you would like my help in any way.

If I understand you correctly, you'd like something like this:
array = cb.CartesianArray(point_1, point_2, count_x=3, count_y=3, count_z=3)
array.lofts[1][1][1].points[0].translate(0, 0, 0.1)
array.delete(1, 1, 0)

Apart from "cartesian addressing" and block deletion, is there anything else this array should be capable of?

There is a vertex finder in hexmesh - would you like me to break this code out into stand alone pay file

What do you mean, something like that? https://github.com/damogranlabs/classy_blocks/blob/master/src/classy_blocks/modify/find/geometric.py

This does the find_in_sphere using scipy.spacial kdtree  (I used this for
duplicate vertex finding in hexmesh)
you need to add the positions property to the vertexlist class (copy paste
and remove comments)
The find_in_box and find_in_box_center - i have just thrown them
together and not tested
It uses the sphere find to get list of vertices then checks if each of
these are in a box as
shown in
https://math.stackexchange.com/questions/1472049/check-if-a-point-is-inside-a-rectangular-shaped-area-3d
There may be a better way to do this but i could not find it quickly
( There is a request for this functionality on scipy on github
(rectangle-range-query for scipy.spatial.KDTree #7822)
but this is from 2017 so I'm not convinced its going to make it into scipy
anytime soon)
I apologize for not writing a test for this
(my working classy blocks is now buried in a finite element solver and not
easy to do one offs - but this was welcome distraction)
I am sure you will change this quite a bit before release
and yes if i could remember how to use github i would have created a pull
request - but i don't and its too much effort to relearn for 1 file
Regards
Malcolm
On Fri, 12 Jul 2024 at 07:08, Nejc Jurkovič @.***>
wrote:

What do you mean, something like that?
https://github.com/damogranlabs/classy_blocks/blob/master/src/classy_blocks/modify/find/geometric.py
—
Reply to this email directly, view it on GitHub
https://github.com/damogranlabs/classy_blocks/issues/42#issuecomment-2224821937,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABKSK2IXQDUGE6MRZEIAPXTZL5XFNAVCNFSM6AAAAABKXTGEOCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDEMRUHAZDCOJTG4
.
You are receiving this because you commented.Message ID:
@.***>

...ahem, where is the code?

Sorry
On Mon, 15 Jul 2024 at 08:39, Nejc Jurkovič @.***>
wrote:

...ahem, where is the code?
—
Reply to this email directly, view it on GitHub
https://github.com/damogranlabs/classy_blocks/issues/42#issuecomment-2227873976,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABKSK2JSACIGYEX5WZARUXLZMN4EHAVCNFSM6AAAAABKXTGEOCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDEMRXHA3TGOJXGY
.
You are receiving this because you commented.Message ID:
@.***>


1.2.0 can't download in environments that don't have external services available

The download task fails if the Elixir application can't fully start when using ua_inspector 1.2.0.
If the Elixir application depends on external services to boot (for example a postgres database), and the database is not reachable, then the download task fails.
This appears to be a new requirement in 1.2.0, as in 1.1.0 this didn't happen.
This breaks my build process because it involves building docker images.  The docker image runs mix ua_inspector.download during build, but allows no external connections, therefore the application fails to boot and the build fails.

Can you try if running the download without the mix task fixes your problem?
mix run --no-start -e "UAInspector.Downloader.download()"

Depending on your configuration this should work without starting any applications. Until there is a fix to have a configuration of "applications required for the mix task to work" in place instead of just starting everything.

I think I have a fix that does not require any configuration changes but this time it should get some proper verification before breaking other things: https://github.com/elixir-inspector/ua_inspector/tree/v1.2
This should only try to load the code required for the initializer modules without starting the complete application. Can you verify this is the case?
/ping @smaximov it would be great if you could also test this as it might affect you and I do no longer trust my simple local test app for this stuff :)

@mneudert, 9ac280b1992cb62cb8d21011d1dbd1b203e4d9d4 works for me.

@mneudert thanks for jumping on this so quickly!
Unfortunately, https://github.com/elixir-inspector/ua_inspector/commit/9ac280b1992cb62cb8d21011d1dbd1b203e4d9d4 still starts my entire umbrella application.
On the other hand, manually running the download function does work for me for now.  I will change my dockerfile build script to use that for now.
Thanks!

Closing as this should be no issue anymore since release v2.0.0. I just missed mentioning it outside of the Changelog :sweat_smile:


Problems with SmartScreen on macOS

Creating a new issue from this comment: https://github.com/kiliman/operator-mono-lig/issues/1#issuecomment-330352057
The problem exists at os level, as the following screenshot shows:

What files can I send you to help with this problem?

Have you pulled the most recent version? I've verified that the generated fonts work fine in both Windows and macOS.
I even pushed Operator Mono SSm Medium Italic.

I can confirm that I had already pulled from master as of yesterday evening (GMT+2), so that was not the problem.
I had already suspected that the problem may have been with my source font file since I had to manually rename the ScrenSmart versions to match the form expected by your scripts.
However, I was able to obtain a different copy of the SSm otf files from https://github.com/stephenp/dotfiles/tree/master/Fonts/HCo_OperatorMonoSSm/OpenType and it turns out that everything works as expected when using those files as inputs!
The difference is clear:

(invalid version)

(correct version)

I'm glad you got it working. I had to remove the link to the original fonts since technically they shouldn't be posted online as they are not free fonts.
That's the whole point of this project, otherwise I would have just posted the ligature versions directly.


Add support for appending multiple events to event sequence in same transaction

This should be considered transactional, either all of the events or none of the events are appended.

We now have AppendMany(), closing this.
When we have full support in storage with #1252, we would then fix the EventSequence grain to use this.


Collect python version to use in pythonpath hook.

Initially this was hardcoded. Since the python minor version depends on the target platform this will fetch it from the available python3 binary.
Replaces #3

cc @mikaelarguedas.

It shouldn't matter much here as this is currently used only on Ubuntu, but it would be nicer to abstract the python interpreter as well for platform not naming it python3. We can do it in a follow-up, this is not a blocker to merge this.
It would look like (not tested):
find_package(PythonInterp 3 REQUIRED)
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils import sysconfig; print(sysconfig.get_python_version())" OUTPUT_VARIABLE PYTHON_MAJOR_MINOR OUTPUT_STRIP_TRAILING_WHITESPACE)

it would be nicer to abstract the python interpreter as well for platform not naming it python3

Yeah I agree. This can be a future enhancement at some point. Thanks!


Add person pages and lab pages with a curation summary

From https://github.com/pombase/website/issues/328#issuecomment-300785820

Also, just a thought, could the name link to a person page with perhaps a curation summary for
the person (number of annotations added for number of publications)
even further into the future..
People could be able to claim pages (like on the biosharing resource) to add info like contact details,
affiliations, or whatever (and link a pombase account with canto account....then you can have the
option of snazzy customization of gene pages etc etc)

kmr: and links to https://orcid.org/ once we have the ORC IDs in Canto/Chado.

kmr: and links to https://orcid.org/ once we have the ORC IDs in Canto/Chado.

Now I've thought about it, I think we should only have person pages for users with ORCIDs.  I think that's the best way to uniquely identify users.

Eventually we could also offer a web form for people to opt in to having a person page, inspired by and similar to what SGD and WormBase do (we can make ORCID a mandatory field).
at SGD:
http://www.yeastgenome.org/cgi-bin/colleague/colleagueSearch
if none of the matches are you, you can enter a new record - results link to http://www.yeastgenome.org/cgi-bin/colleague/colleagueUpdate
WormBase is a little more opaque, much like the rest of their interface, but it starts here:
http://www.wormbase.org/resources/person
it's a lot less obvious how to add a completely new Person record there, so let's not copy them

This is essentially what Jurg's group asked about @Antonialock  add anything  to this ticket

Essentially we thought that it could act as an incentive for community curation if the name specified in the community curation "attribution" linked to a persons page showing the number of papers curated by said person and the number of annotations they contributed.

yep... that would work and is along the lines we were thinking for people to use in their grant "data dissemination" sections too...

I think this issue has some overlap with the APICURON project.

Yes,  if you spot any tickets related to attribution, ORIDs etc tag with APICURON. We can discuss on Monday Morning.


feat!: migrate to shiki v1

This PR removes highlighter: shikiji support. Use highlighter: shiki instead. Breaking changes between shiki v0.x to shiki v1 applies. For example, if you are using loadTheme in shiki setup, change it to manual fs reads instead.
This PR also improves the TwoSlash support by using floating-vue

I was using shikji as a highlighter as it had a nicer theme.
Do you happen to know how I can get the theme back in Shiki ?
Before (transparent background)

After


Bug: What happend to useInterpret on xstate v5? on react

Description
There are major changes on this,
But sadly the team did not document on how to replace useInterpret when using react context,
I see that there is a context example but thats not the main goal I wanted to acheive
Expected result
useInterpret on version 5
Actual result
useInterpret on version 5
Reproduction
awdawd
Additional context
No response

This is documented in the migration guide: https://stately.ai/docs/migration#useinterpret-is-now-useactorref
import { useActorRef } from '@xstate/react';

// instead of:
// const actorRef = useInterpret(machine);
const actorRef = useActorRef(machine); // or any other logic

Ah, just read the context part. You can use the the createActorContext helper (also documented), or just create the actor in module scope and use normal React context to pass it down to components.

I guess this is a full documentation, I just lazy to read it all
https://xstate.js.org/docs/recipes/react.html#global-state-react-context

Xstate v5 is not usefull, it take too much time,
There are less examples on how it should be used
If there are examples, it is not in one place,
Its time consuming, though they suggest better performance
BUT it is not a good documentation, tsk tsk
Will stick to older version
Instead of using useSelection, there is useMemo instead
What a disapointment

Thank you for sharing your opinion @allestaire. Feel free to use any other library if this one doesn't suit your needs. Happy holidays!

Thanks for understanding @davidkpiano 😄
Probabbly if I have extra time, will try to study more on the newer version


Build warnings and errors on UWP

When building 0.9.0 on UWP, there's some additional warnings and errors that surface! I am currently trying to switch from calling msbuild directly on Windows (which did work) to calling cmake instead, so I suspect these popped up now for me because of some different flags in use between the two.
This error pops up in a dozen or so locations, this one should be possible for me to avoid with some arcane cmake, but would be nice if I didn't have to.
C:\Temp\StereoKitBuild\reactphysics3d\include\reactphysics3d/utils/DefaultLogger.h(109,58): error C4996: 'localtime': This function or variable may be unsafe. Consider using localtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. (compiling source file C:\Temp\StereoKitBuild\reactphysics3d\src\utils\DefaultLogger.cpp) [C:\Temp\StereoKitBuild\reactphysics3d\build_x64_UWP_Release\reactphysics3d.vcxproj ]

And then there's these two errors, which I didn't trace too far, but could be valid complaints.
C:\Temp\StereoKitBuild\reactphysics3d\src\systems\CollisionDetectionSystem.cpp(537): error C4703: potentially uninitialized local pointer variable 'shape1' used [C:\Temp\StereoKitBuild\reactphysics3d\build_x64_UWP_Release\reactphysics3d.vcxproj]
C:\Temp\StereoKitBuild\reactphysics3d\src\systems\CollisionDetectionSystem.cpp(537): error C4703: potentially uninitialized local pointer variable 'shape2' used [C:\Temp\StereoKitBuild\reactphysics3d\build_x64_UWP_Release\reactphysics3d.vcxproj]

This warning also pops up a dozen times or so in different places. It does mention a pretty specific solution, but I'm still trying to wrap my head around it, so I'm just sharing it here for completeness.
C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.32.31326\include\ostream(770,1): warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc (compiling source file C:\Temp\StereoKitBuild\reactphysics3d\src\utils\DefaultLogger.cpp) [C:\Temp\StereoKitBuild\reactphysics3d\build_x64_UWP_Release\reactphysics3d.vcxproj]
C:\Temp\StereoKitBuild\reactphysics3d\include\reactphysics3d/utils/DefaultLogger.h(107): message : see reference to function template instantiation 'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const char *)' being compiled (compiling source file C:\Temp\StereoKitBuild\reactphysics3d\src\utils\DefaultLogger.cpp) [C:\Temp\StereoKitBuild\reactphysics3d\build_x64_UWP_Release\reactphysics3d.vcxproj]

And for reference, here's approximately my cmake commands:
cmake -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS=/MP -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0 -DDYNAMIC_LOADER=OFF .. -Wno-dev
cmake --build . --config Release -- /m

Hello. Thanks a lot for your feedback.
Just to let you know that it took me some time to setup a similar environment with Visual Studio and WindowsStore/UWP (I am mostly developing on Linux) but I am working on this issue.
I will let you know when it's done.

Cool, I will. Thanks.

I have merged the fix into the master branch.
All the errors should be gone except the following one:
warning C4530: C++ exception handler used, but unwind semantics are not enabled
To fix this, you should probably apply the /EHsc parameter as described here.
Let me know if it fixes your issue.


French and German keymaps

Surprised to see that keymaps for two very popular languages are missing.
Adding French (azerty) and German (qwertz) keymaps.
In my tests, AltGr keys don't work reliably across platforms, so I omitted them.
Anyways, keymaps are supposed to be used for colloquial text entry with few special symbols.

I would appreciate feedback about these keymaps.

Just to confirm, you're awaiting feedback from someone else, not me?
Otherwise, it's not clear what kind of feedback I can provide.

Feedback from anybody that might want to use these keymaps.

as a german user (who does not use keymaps), please mention why those would be needed?

Your question is ambiguous but I will try to answer nevertheless.

if you are doubtful if keymaps are a useful feature then, yes, they shine for non-Latin alphabet languages. However, they can still be quite useful even for Latin alphabet based languages. For example, the German keyboard layout has @, {}, [] symbols accessible only with Right Alt. It is painful to type for touch typist. These symbols correspond to quite frequently used VIM functions in Normal and Visual modes, e.g. running macros or jumping around paragraphs. Even worse, back quote is a dead key. So, if you need to go to position before last jump, you need to press Shift+=, Space, Shift+=, Space. Four key presses instead of two. French keyboard layout is similarly inconvenient.

you might say that one can simply change OS keyboard layout. But that's is even more inconvenient, because every time you switch to normal mode you must remember to also change OS layout back to US English and vice versa.

I know that many Germans are so used to standard German layout that they type even English texts with that layout. However, programmers, sysadmins and other technical people still often use standard US QWERTY layout because of the easily accessible special symbols.

Well, since they are small files and can be ignored if not using them, let me just include them.


Can't convert String to Duration in Spring Boot 1

Motivation:
Can't convert String to Duration in Spring Boot 1.
Modifications:

Fork DurationStyle provided by Spring Boot 2.
Add ConversionService that includes a converter that can convert String to Duration.

Result:

Fix test
Fix bug in SpringBoot 1.5.x

ConversionService realized that when registering as a bean, the name should only be conversionService. 🤔
I am aware that this may cause problems for the user and try to fix it again. 😅

I've just found that the registration of an additional converter can be as simple as the following: https://stackoverflow.com/a/41205653 Could you take a look, @heowc ?

@heowc I found this change simplifies things a lot:
diff --git spring/boot1-autoconfigure/src/main/java/com/linecorp/armeria/spring/ArmeriaSpringBoot1ConversionServiceConfiguration.java spring/boot1-autoconfigure/src/main/java/com/linecorp/armeria/spring/ArmeriaSpringBoot1ConversionServiceConfiguration.java
deleted file mode 100644
index ccfe19c66..000000000
--- spring/boot1-autoconfigure/src/main/java/com/linecorp/armeria/spring/ArmeriaSpringBoot1ConversionServiceConfiguration.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2020 LINE Corporation
- *
- * LINE Corporation licenses this file to you under the Apache License,
- * version 2.0 (the "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at:
- *
- *   https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-
-package com.linecorp.armeria.spring;
-
-import org.springframework.beans.factory.BeanFactory;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.convert.ConversionService;
-import org.springframework.core.convert.converter.Converter;
-import org.springframework.format.support.FormattingConversionService;
-import org.springframework.format.support.FormattingConversionServiceFactoryBean;
-
-import com.google.common.collect.Sets;
-
-/**
- * Provides useful {@link ConversionService}.
- */
-@Configuration
-public class ArmeriaSpringBoot1ConversionServiceConfiguration {
-
-    /**
-     * Create an {@link ConversionService} bean.
-     */
-    @Bean
-    @ConditionalOnMissingBean(ConversionService.class)
-    public FormattingConversionService conversionService() {
-        final FormattingConversionServiceFactoryBean factoryBean = new FormattingConversionServiceFactoryBean();
-        factoryBean.setFormatterRegistrars(Sets.newHashSet(new ArmeriaSpringBoot1FormatterRegistrar()));
-        factoryBean.afterPropertiesSet();
-        return factoryBean.getObject();
-    }
-
-    /**
-     * Create an {@link StringToDurationConverter} bean. If {@link ConversionService} is already registered,
-     * it is provided so that {@link Converter} can be taken out from {@link BeanFactory} and used.
-     */
-    @Bean
-    public StringToDurationConverter armeriaSpringBoot1StringDurationConverter() {
-        return new StringToDurationConverter();
-    }
-}
diff --git spring/boot1-autoconfigure/src/main/java/com/linecorp/armeria/spring/ArmeriaSpringBoot1FormatterRegistrar.java spring/boot1-autoconfigure/src/main/java/com/linecorp/armeria/spring/ArmeriaSpringBoot1ConverterConfiguration.java
similarity index 57%
rename from spring/boot1-autoconfigure/src/main/java/com/linecorp/armeria/spring/ArmeriaSpringBoot1FormatterRegistrar.java
rename to spring/boot1-autoconfigure/src/main/java/com/linecorp/armeria/spring/ArmeriaSpringBoot1ConverterConfiguration.java
index 8a7fbedc8..b311b561a 100644
--- spring/boot1-autoconfigure/src/main/java/com/linecorp/armeria/spring/ArmeriaSpringBoot1FormatterRegistrar.java
+++ spring/boot1-autoconfigure/src/main/java/com/linecorp/armeria/spring/ArmeriaSpringBoot1ConverterConfiguration.java
@@ -16,20 +16,15 @@

 package com.linecorp.armeria.spring;

-import org.springframework.format.FormatterRegistrar;
-import org.springframework.format.FormatterRegistry;
+import java.time.Duration;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.core.convert.converter.Converter;

 /**
- * Configures useful formatting system for use with Spring.
+ * Registers a {@link Converter} that converts a {@link String} into a {@link Duration}.
  */
-class ArmeriaSpringBoot1FormatterRegistrar implements FormatterRegistrar {
-
-    @Override
-    public void registerFormatters(FormatterRegistry registry) {
-        registerConverters(registry);
-    }
-
-    private static void registerConverters(FormatterRegistry registry) {
-        registry.addConverter(new StringToDurationConverter());
-    }
-}
+@Configuration
+@Import(StringToDurationConverter.class)
+public class ArmeriaSpringBoot1ConverterConfiguration {}
diff --git spring/boot1-autoconfigure/src/main/resources/META-INF/spring.factories spring/boot1-autoconfigure/src/main/resources/META-INF/spring.factories
index 7fcd7fa02..a121e9013 100644
--- spring/boot1-autoconfigure/src/main/resources/META-INF/spring.factories
+++ spring/boot1-autoconfigure/src/main/resources/META-INF/spring.factories
@@ -1,5 +1,5 @@
 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+  com.linecorp.armeria.spring.ArmeriaSpringBoot1ConverterConfiguration,\
   com.linecorp.armeria.spring.ArmeriaAutoConfiguration,\
   com.linecorp.armeria.spring.ArmeriaSpringBoot1MeterBindersConfiguration,\
-  com.linecorp.armeria.spring.ArmeriaSpringBoot1BeanPostProcessorConfiguration,\
-  com.linecorp.armeria.spring.ArmeriaSpringBoot1ConversionServiceConfiguration
+  com.linecorp.armeria.spring.ArmeriaSpringBoot1BeanPostProcessorConfiguration

Simply using @Import with the converter class seems to work. :smile:

@heowc I found this change simplifies things a lot:
// ...
Simply using @Import with the converter class seems to work. 😄

Hmm... I couldn't get the results I wanted.
As far as I know, you must have spring-boot-web dependency to work correctly. here

@heowc Isn't ApplicationConversionService independent from Spring Web? It looks like it's part of the Spring Boot core.

@heowc Isn't ApplicationConversionService independent from Spring Web? It looks like it's part of the Spring Boot core.

Ah... I misunderstood. However, the parts that actually use it are WebFluxAutoConfiguration and WebMvcAutoConfiguration. In addition, since ApplicationConversionService was introduced since 2.0, it must be implemented separately.
So I handle it like this:

Register StringToDurationConverter as bean
If ConversionService does not exist, create ConversionService and import Converters registered in BeanFactory to register in FormatterRegistry.

since ApplicationConversionService was introduced since 2.0, it must be implemented separately.

I tried my patch on :spring:boot1-autoconfigure:test and all tests passed. Why do they pass, then? 🤔

since ApplicationConversionService was introduced since 2.0, it must be implemented separately.

I tried my patch on :spring:boot1-autoconfigure:test and all tests passed. Why do they pass, then? 🤔

Hmm.. I kept trying, but still had the same error. 🤔 a1ce21f

@heowc Doh! Let's revert, then. :bow:

Fixed 393fabb

@heowc Could you remove spring/boot1-autoconfigure/src/test/resources/.gitkeep?

Thanks for the many reviews, even though it is a simple process. 😄


Get rid of unnecessary code

I wanted to speed up this app when multiple concurrent users are rendering videos, so I used shinyloadtest to load test Loqui and profvis to see what's making Loqui slow.

I found that showing the example videos were wasting time, so they were removed.
I didn't need to load the voice datasets since Loqui is only using a couple voices, so they were removed.
I noticed Loqui was downloading the Google Slides a second time just to extract the title of the slides, which seemed unnecessary and took up lots of time. I deleted the code to download the slides a second time and used the first download to extract the title of the slides.
I moved the code to display the Loqui-rendered video inside the observeEvent(), though I have to admit, this change doesn't make a huge difference.

Event waterfall for original code:

Event waterfall for modified code:

There is no automated testing for this app. I just manually test by seeing if the video renders. I have been thinking about automated testing for this Shiny app and I can take a look at this article for more info: https://shiny.posit.co/r/articles/improve/testing-overview/


Pytorch Dataset Class that Reads From Zarr Archive

Summary
Since the weather community and especially ECMWF moved towards a single zarr archive that contains all the data in the state (domain), and one that contains all the data in the boundary, this project should follow the same approach. Zarr has many advantages like parallel computing with dask, lazy loading with xarray, efficient compression with different algorithms and chunking.
Specifics
There are three main data-processing steps happening in the current pipeline. This is a proposal how the work would be split between the three:

Data-Preprocessing

Usually some format like GRIB2 is converted into xarray->zarr. This step is out of scope
Pre-computation of forcings, static and grid features
Computation of normalization constants (stats) and inverse variances
Generating the boundary mask

Pytorch Dataset [on CPU]:

Reshaping of 3D variables into stacked 2D variables
Split data into train/val/test based on some indicator (e.g. time)
Generate the windowed indices for forcing and boundary

Pytorch Model [on GPU]

Normalization of the data

Interfaces

Data-Preprocessing

Input: out of scope
Output: one or multiple zarr files

Pytorch Dataset [on CPU]:

Input:  one or multiple zarr files
Output: 5 pytorch tensors with the following dimensions:

      init_states: (2, N_grid, features_dim),
      target_states: (sample_length - 2, N_grid, features_dim),
      forcing: (sample_len - 2, N_grid, forcing_dim)
      boundary: (sample_len - 2, N_grid, boundary_dim)
      batch_times: (1)

Pytorch Model [on GPU]

Input: 5 pytorch tensors (batched with Pytorch DataLoader)
Output: out of scope

Implementation
One example for such a pytorch dataset and dataloader can be found here for inpisration: https://github.com/MeteoSwiss/neural-lam/blob/main/neural_lam/weather_dataset.py It needs however quite a bit of work:

Handle multiple zarrs properly
Use the YAML from #
Remove temporal forcing calculation
Add boundary to dataflow
...

Draw IO

Could very nicely use https://lightning.ai/docs/pytorch/stable/common/lightning_module.html#on-after-batch-transfer to normalize once data is on GPU. Makes sure that you never forget about it (all batches on GPU are normalized).


Display the 24 hours format instead of the 12 hours

Hi,
Adding an option to display the 24-hour format would be nice.

This will be implemented in v0.10.3!
I just fixed the time handling logic - so this is now feasible