Data not deleted by retenion policy in Influx2

I have a bucket with a retention policy of 7 days and a shard group duration of 1 day. I would expect that data is deleted after at most 8 days. But as you can see from the following output, they are persisted at least 10 days:
~ # influx query 'from(bucket: "bucky") |> range(start: 0) |> keep(columns: ["_time"]) |> first(column: "_time")'
Result: _result
Table: keys: []
                    _time:time
------------------------------
2022-11-14T00:00:00.000000000Z
~ # influx bucket ls
ID			Name		Retention	Shard group duration	Organization ID		Schema Type
7e02f9ae1c13e893	_monitoring	168h0m0s	24h0m0s			8b488c9c54ae5e94	implicit
056cba28a1421ad1	_tasks		72h0m0s		24h0m0s			8b488c9c54ae5e94	implicit
3aa35dd885a61aa7	bucky		168h0m0s	24h0m0s			8b488c9c54ae5e94	implicit
~ # date
Thu Nov 24 08:55:01 UTC 2022

Environment info:
I use the the official docker image set to latest.
~ # influxd version
InfluxDB v2.5.1 (git: 5b6fdbf05d) build_date: 2022-11-02T18:06:28Z
~ # influx version
Influx CLI 2.5.0 (git: 3285a03) build_date: 2022-11-01T16:32:06Z

I know that there are a lot of reports on similar behavior but all that I found were with regard to v1.x and I couldn't apply any tips from there to my problem. If you can give me any pointers on how else to obtain helpful information, that would be great.

Hi, facing the same issue, I am on version 2.6. Deb package using Linux systems to deploy

same on debian and v2.6
retention was set to 60 days and was working fine, but now seems to be 6 months
the growth seems to coincide with v2.4 release date

just downgraded to v2.3, no drop in usage for now

@Sergio-IME Just to clarify, you made no other changes to the instance other than downgrading to 2.3 and you saw retention begin to succeed?

@jeffreyssmith2nd
the original install and config were done with v2.0 (or maybe v2.1), the further upgrades were done regularly without changes to the config
the downgrade was: v2.6 > v2.3 that does not work because of v2.6 metadata > back to v2.6 + influxd downgrade 2.3 > v2.3
I gave it like 5 minutes, nothing was being removed, I tried flipping bucket retention between 60 and 90 days (also infinity but it was still showing 60 and 90 days, I think I saw a ticket about that though), nothing happened for another ~15 minutes and then it started

And what does the Partition Usage(%) represent exactly in you graphs? Do you have any logs that you can share? The important parts of the log would match one of these patterns:
Failed to delete shard group
Failed to delete shard
Problem pruning shard groups
One or more errors occurred during shard deletion and will be retried on the next check
Deleted shard group
Deleted shard
Starting retention policy enforcement service
Retention policy deletion check

It's the partition where bolt-path and engine-path live and represent 95%+ of the occupied space.
I checked the logs, they go back to October 23rd 2022 (so after upgrading from v2.3 the first time unfortunately):

the first matching patterns from your list are Deleted shard group and Deleted shard (right after), from Dec 29th (post downgrade to v2.3)
same with Starting retention policy enforcement service and Retention policy deletion check (start/end) (the latter appears regularly between Dec 29th and now)
no other mention of shard or policy between Oct 23rd and Dec 29th (other than multiples lines with ts=2022-10-23T23:59:59.360368Z lvl=info msg="Reindexing TSM data" log_id=0blCYZP0000 service=storage-engine engine=tsm1 db_shard_id=xxx and on Dec 29th only Opened shard)

Just noting: I restarted and updated the docker container in the meantime and it seems like the issue is gone with version 2.6.1 for me. Sadly I don't have any logs from the time when I had the problems anymore.

Interesting, I wonder if @Sergio-IME's was resolved too by the restart rather than by the downgrade to 2.3. That would imply that the retention service is getting blocked somewhere, my assumption would be in walking the filesystem to delete shards.

I also tried restarting prior to downgrading, but since it takes a while to start deleting shards, maybe I didn't give it enough time...
For now I upgraded back to 2.6.1 as per your suggestion, under 2.3 daily shard delete took place at night around same time, so we'll see tomorrow how that goes.
And speaking of restarting, does it not need restarting after upgrading? There was nothing about that in the logs until I manually restarted the service

looks like deletion still takes place after upgrading 2.3 to 2.6.1
...
ts=2023-01-11T00:14:21.006813Z lvl=info msg="Deleted shard group" service=retention op_name=retention_delete_check
...

That's good to hear, I was concerned why it would work on 2.3 and not 2.6.1 when we haven't touched that code in awhile.
I'm going to leave this issue open in case further issues are encountered with the current recommendation being to restart influxdb if this issue appears. I'm also going to look and see where we can add more logging to be able to diagnose it better in the future.
Thanks to @Sergio-IME and @NicholasTNG for the reports/help on this.

I have run into the problem again. The logs show me that the deletion actually happens (see below), but there are still entries older than the retention period. Interestingly my oldest datapoints are 9 days old (the retention period is 7 days). I have a recurring check (via a systemd timer, so externally) that looks if there are datapoints older than 9 days (retention period + shard group duration + a bit buffer). Can these queries somehow inhibit the deletion? This check is there since we had issues with deletion  not being carried out. It is linked to some other checks and hence carried out pretty frequently (every 10 minutes).
Current Infos:
Influx in via docker influxdb:latest, info on image:
"Created": "2023-01-11T17:51:34.167405605Z",
"GOSU_VER=1.12",
"INFLUXDB_VERSION=2.6.1",
"INFLUX_CLI_VERSION=2.6.1",

A part of the logs:
ts=2023-01-18T15:51:48.135181Z lvl=info msg="Retention policy deletion check (start)" log_id=0fTNOrSW000 service=retention op_name=retention_delete_check op_event=start
ts=2023-01-18T15:51:48.136197Z lvl=info msg="Deleted shard group" log_id=0fTNOrSW000 service=retention op_name=retention_delete_check db_instance=3aa35dd885a61aa7 db_shard_group=174 db_rp=autogen
ts=2023-01-18T15:51:48.136728Z lvl=info msg="Deleted shard group" log_id=0fTNOrSW000 service=retention op_name=retention_delete_check db_instance=3aa35dd885a61aa7 db_shard_group=177 db_rp=autogen
ts=2023-01-18T15:51:48.137268Z lvl=info msg="Deleted shard group" log_id=0fTNOrSW000 service=retention op_name=retention_delete_check db_instance=3aa35dd885a61aa7 db_shard_group=180 db_rp=autogen
ts=2023-01-18T15:51:48.137762Z lvl=info msg="Deleted shard group" log_id=0fTNOrSW000 service=retention op_name=retention_delete_check db_instance=3aa35dd885a61aa7 db_shard_group=183 db_rp=autogen
ts=2023-01-18T15:51:48.138486Z lvl=info msg="Cannot retrieve measurement cardinality" log_id=0fTNOrSW000 service=storage-engine service=store db_instance=3aa35dd885a61aa7 error="engine is closed"
ts=2023-01-18T15:51:48.140400Z lvl=info msg="Deleted shard" log_id=0fTNOrSW000 service=retention op_name=retention_delete_check db_instance=3aa35dd885a61aa7 db_shard_id=174 db_rp=autogen
ts=2023-01-18T15:51:48.142354Z lvl=info msg="Deleted shard" log_id=0fTNOrSW000 service=retention op_name=retention_delete_check db_instance=3aa35dd885a61aa7 db_shard_id=183 db_rp=autogen
ts=2023-01-18T15:51:48.144240Z lvl=info msg="Deleted shard" log_id=0fTNOrSW000 service=retention op_name=retention_delete_check db_instance=3aa35dd885a61aa7 db_shard_id=177 db_rp=autogen
ts=2023-01-18T15:51:48.145759Z lvl=info msg="Deleted shard" log_id=0fTNOrSW000 service=retention op_name=retention_delete_check db_instance=3aa35dd885a61aa7 db_shard_id=180 db_rp=autogen
ts=2023-01-18T15:51:48.145847Z lvl=info msg="Retention policy deletion check (end)" log_id=0fTNOrSW000 service=retention op_name=retention_delete_check op_event=end op_elapsed=10.690ms

Influxdb 2.6.1, retention 1 day
"Retention policy deletion check (start)" and "Retention policy deletion check (end)"  are appeared in the log every 30 minutes at the begining. But after 2 or 3 days,  They are never appeared again.
The last "Retention policy deletion check (start)" in the log is without following "Deleted shard" and "Retention policy deletion check (end)" .
ts=2023-03-22T05:17:42.853558Z lvl=info msg="Retention policy deletion check (start)" log_id=0ggTwD2G000 service=retention op_name=retention_delete_check op_event=start
ts=2023-03-22T05:17:42.982092Z lvl=info msg="Deleted shard group" log_id=0ggTwD2G000 service=retention op_name=retention_delete_check db_instance=22626916da9871ce db_shard_group=3145 db_rp=autogen
ts=2023-03-22T06:00:00.923236Z lvl=info msg="index opened with 8 partitions" log_id=0ggTwD2G000 service=storage-engine index=tsi
ts=2023-03-22T06:00:00.923561Z lvl=info msg="loading changes (start)" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 op_name="field indices" op_event=start
ts=2023-03-22T06:00:00.923609Z lvl=info msg="loading changes (end)" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 op_name="field indices" op_event=end op_elapsed=0.064ms
ts=2023-03-22T06:00:00.923938Z lvl=info msg="Reindexing TSM data" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 db_shard_id=3172
ts=2023-03-22T06:00:00.923952Z lvl=info msg="Reindexing WAL data" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 db_shard_id=3172
ts=2023-03-22T06:00:01.084323Z lvl=info msg="TSI log compaction (start)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=6 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=start
ts=2023-03-22T06:00:01.084459Z lvl=info msg="TSI log compaction (start)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=4 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=start
ts=2023-03-22T06:00:01.084517Z lvl=info msg="TSI log compaction (start)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=5 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=start
ts=2023-03-22T06:00:01.084635Z lvl=info msg="TSI log compaction (start)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=8 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=start
ts=2023-03-22T06:00:01.084323Z lvl=info msg="TSI log compaction (start)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=2 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=start
ts=2023-03-22T06:00:01.084901Z lvl=info msg="TSI log compaction (start)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=7 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=start
ts=2023-03-22T06:00:01.084323Z lvl=info msg="TSI log compaction (start)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=1 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=start
ts=2023-03-22T06:00:01.085613Z lvl=info msg="TSI log compaction (start)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=3 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=start
ts=2023-03-22T06:00:01.229628Z lvl=info msg="saving field index changes (start)" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 op_name=MeasurementFieldSet op_event=start
ts=2023-03-22T06:00:01.385201Z lvl=info msg="saving field index changes (end)" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 op_name=MeasurementFieldSet op_event=end op_elapsed=155.586ms
ts=2023-03-22T06:00:01.385282Z lvl=info msg="Log file compacted" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=1 op_name=tsi1_compact_log_file tsi1_log_file_id=1 elapsed=300ms bytes=3702 kb_per_sec=12
ts=2023-03-22T06:00:01.385288Z lvl=info msg="Log file compacted" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=2 op_name=tsi1_compact_log_file tsi1_log_file_id=1 elapsed=300ms bytes=3010 kb_per_sec=9
ts=2023-03-22T06:00:01.385348Z lvl=info msg="TSI log compaction (end)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=1 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=end op_elapsed=301.048ms
ts=2023-03-22T06:00:01.385283Z lvl=info msg="Log file compacted" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=7 op_name=tsi1_compact_log_file tsi1_log_file_id=1 elapsed=300ms bytes=3402 kb_per_sec=11
ts=2023-03-22T06:00:01.385356Z lvl=info msg="TSI log compaction (end)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=2 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=end op_elapsed=301.053ms
ts=2023-03-22T06:00:01.385351Z lvl=info msg="Log file compacted" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=5 op_name=tsi1_compact_log_file tsi1_log_file_id=1 elapsed=300ms bytes=3242 kb_per_sec=10
ts=2023-03-22T06:00:01.385355Z lvl=info msg="Log file compacted" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=4 op_name=tsi1_compact_log_file tsi1_log_file_id=1 elapsed=300ms bytes=3565 kb_per_sec=11
ts=2023-03-22T06:00:01.385404Z lvl=info msg="TSI log compaction (end)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=7 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=end op_elapsed=300.512ms
ts=2023-03-22T06:00:01.385407Z lvl=info msg="TSI log compaction (end)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=5 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=end op_elapsed=300.893ms
ts=2023-03-22T06:00:01.385407Z lvl=info msg="TSI log compaction (end)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=4 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=end op_elapsed=300.972ms
ts=2023-03-22T06:00:01.385440Z lvl=info msg="Log file compacted" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=8 op_name=tsi1_compact_log_file tsi1_log_file_id=1 elapsed=300ms bytes=3624 kb_per_sec=11
ts=2023-03-22T06:00:01.385298Z lvl=info msg="Log file compacted" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=6 op_name=tsi1_compact_log_file tsi1_log_file_id=1 elapsed=300ms bytes=3132 kb_per_sec=10
ts=2023-03-22T06:00:01.385472Z lvl=info msg="TSI log compaction (end)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=8 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=end op_elapsed=300.859ms
ts=2023-03-22T06:00:01.385495Z lvl=info msg="TSI log compaction (end)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=6 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=end op_elapsed=301.195ms
ts=2023-03-22T06:00:01.385528Z lvl=info msg="Log file compacted" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=3 op_name=tsi1_compact_log_file tsi1_log_file_id=1 elapsed=299ms bytes=3780 kb_per_sec=12
ts=2023-03-22T06:00:01.385558Z lvl=info msg="TSI log compaction (end)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=3 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=end op_elapsed=299.953ms
ts=2023-03-22T06:10:02.241649Z lvl=info msg="Cache snapshot (start)" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 op_name=tsm1_cache_snapshot op_event=start
ts=2023-03-22T06:10:02.778913Z lvl=info msg="Snapshot for path written" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 op_name=tsm1_cache_snapshot path=/var/lib/influxdb2/engine/data/22626916da9871ce/autogen/3171 duration=537.219ms
ts=2023-03-22T06:10:02.778963Z lvl=info msg="Cache snapshot (end)" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 op_name=tsm1_cache_snapshot op_event=end op_elapsed=537.352ms
ts=2023-03-22T07:00:02.232052Z lvl=info msg="index opened with 8 partitions" log_id=0ggTwD2G000 service=storage-engine index=tsi
ts=2023-03-22T07:00:02.232471Z lvl=info msg="loading changes (start)" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 op_name="field indices" op_event=start
ts=2023-03-22T07:00:02.232516Z lvl=info msg="loading changes (end)" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 op_name="field indices" op_event=end op_elapsed=0.048ms
ts=2023-03-22T07:00:02.233179Z lvl=info msg="Reindexing TSM data" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 db_shard_id=3173
ts=2023-03-22T07:00:02.233196Z lvl=info msg="Reindexing WAL data" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 db_shard_id=3173

Influxdb 2.6.1, retention 1 day
"Retention policy deletion check (start)" and "Retention policy deletion check (end)" are appeared in the log every 30 minutes at the begining. But after 2 or 3 days, They are never appeared again. The last "Retention policy deletion check (start)" in the log is without following "Deleted shard" and "Retention policy deletion check (end)" .
ts=2023-03-22T05:17:42.853558Z lvl=info msg="Retention policy deletion check (start)" log_id=0ggTwD2G000 service=retention op_name=retention_delete_check op_event=start
ts=2023-03-22T05:17:42.982092Z lvl=info msg="Deleted shard group" log_id=0ggTwD2G000 service=retention op_name=retention_delete_check db_instance=22626916da9871ce db_shard_group=3145 db_rp=autogen
ts=2023-03-22T06:00:00.923236Z lvl=info msg="index opened with 8 partitions" log_id=0ggTwD2G000 service=storage-engine index=tsi
ts=2023-03-22T06:00:00.923561Z lvl=info msg="loading changes (start)" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 op_name="field indices" op_event=start
ts=2023-03-22T06:00:00.923609Z lvl=info msg="loading changes (end)" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 op_name="field indices" op_event=end op_elapsed=0.064ms
ts=2023-03-22T06:00:00.923938Z lvl=info msg="Reindexing TSM data" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 db_shard_id=3172
ts=2023-03-22T06:00:00.923952Z lvl=info msg="Reindexing WAL data" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 db_shard_id=3172
ts=2023-03-22T06:00:01.084323Z lvl=info msg="TSI log compaction (start)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=6 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=start
ts=2023-03-22T06:00:01.084459Z lvl=info msg="TSI log compaction (start)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=4 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=start
ts=2023-03-22T06:00:01.084517Z lvl=info msg="TSI log compaction (start)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=5 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=start
ts=2023-03-22T06:00:01.084635Z lvl=info msg="TSI log compaction (start)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=8 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=start
ts=2023-03-22T06:00:01.084323Z lvl=info msg="TSI log compaction (start)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=2 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=start
ts=2023-03-22T06:00:01.084901Z lvl=info msg="TSI log compaction (start)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=7 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=start
ts=2023-03-22T06:00:01.084323Z lvl=info msg="TSI log compaction (start)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=1 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=start
ts=2023-03-22T06:00:01.085613Z lvl=info msg="TSI log compaction (start)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=3 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=start
ts=2023-03-22T06:00:01.229628Z lvl=info msg="saving field index changes (start)" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 op_name=MeasurementFieldSet op_event=start
ts=2023-03-22T06:00:01.385201Z lvl=info msg="saving field index changes (end)" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 op_name=MeasurementFieldSet op_event=end op_elapsed=155.586ms
ts=2023-03-22T06:00:01.385282Z lvl=info msg="Log file compacted" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=1 op_name=tsi1_compact_log_file tsi1_log_file_id=1 elapsed=300ms bytes=3702 kb_per_sec=12
ts=2023-03-22T06:00:01.385288Z lvl=info msg="Log file compacted" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=2 op_name=tsi1_compact_log_file tsi1_log_file_id=1 elapsed=300ms bytes=3010 kb_per_sec=9
ts=2023-03-22T06:00:01.385348Z lvl=info msg="TSI log compaction (end)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=1 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=end op_elapsed=301.048ms
ts=2023-03-22T06:00:01.385283Z lvl=info msg="Log file compacted" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=7 op_name=tsi1_compact_log_file tsi1_log_file_id=1 elapsed=300ms bytes=3402 kb_per_sec=11
ts=2023-03-22T06:00:01.385356Z lvl=info msg="TSI log compaction (end)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=2 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=end op_elapsed=301.053ms
ts=2023-03-22T06:00:01.385351Z lvl=info msg="Log file compacted" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=5 op_name=tsi1_compact_log_file tsi1_log_file_id=1 elapsed=300ms bytes=3242 kb_per_sec=10
ts=2023-03-22T06:00:01.385355Z lvl=info msg="Log file compacted" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=4 op_name=tsi1_compact_log_file tsi1_log_file_id=1 elapsed=300ms bytes=3565 kb_per_sec=11
ts=2023-03-22T06:00:01.385404Z lvl=info msg="TSI log compaction (end)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=7 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=end op_elapsed=300.512ms
ts=2023-03-22T06:00:01.385407Z lvl=info msg="TSI log compaction (end)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=5 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=end op_elapsed=300.893ms
ts=2023-03-22T06:00:01.385407Z lvl=info msg="TSI log compaction (end)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=4 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=end op_elapsed=300.972ms
ts=2023-03-22T06:00:01.385440Z lvl=info msg="Log file compacted" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=8 op_name=tsi1_compact_log_file tsi1_log_file_id=1 elapsed=300ms bytes=3624 kb_per_sec=11
ts=2023-03-22T06:00:01.385298Z lvl=info msg="Log file compacted" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=6 op_name=tsi1_compact_log_file tsi1_log_file_id=1 elapsed=300ms bytes=3132 kb_per_sec=10
ts=2023-03-22T06:00:01.385472Z lvl=info msg="TSI log compaction (end)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=8 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=end op_elapsed=300.859ms
ts=2023-03-22T06:00:01.385495Z lvl=info msg="TSI log compaction (end)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=6 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=end op_elapsed=301.195ms
ts=2023-03-22T06:00:01.385528Z lvl=info msg="Log file compacted" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=3 op_name=tsi1_compact_log_file tsi1_log_file_id=1 elapsed=299ms bytes=3780 kb_per_sec=12
ts=2023-03-22T06:00:01.385558Z lvl=info msg="TSI log compaction (end)" log_id=0ggTwD2G000 service=storage-engine index=tsi tsi1_partition=3 op_name=tsi1_compact_log_file tsi1_log_file_id=1 op_event=end op_elapsed=299.953ms
ts=2023-03-22T06:10:02.241649Z lvl=info msg="Cache snapshot (start)" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 op_name=tsm1_cache_snapshot op_event=start
ts=2023-03-22T06:10:02.778913Z lvl=info msg="Snapshot for path written" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 op_name=tsm1_cache_snapshot path=/var/lib/influxdb2/engine/data/22626916da9871ce/autogen/3171 duration=537.219ms
ts=2023-03-22T06:10:02.778963Z lvl=info msg="Cache snapshot (end)" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 op_name=tsm1_cache_snapshot op_event=end op_elapsed=537.352ms
ts=2023-03-22T07:00:02.232052Z lvl=info msg="index opened with 8 partitions" log_id=0ggTwD2G000 service=storage-engine index=tsi
ts=2023-03-22T07:00:02.232471Z lvl=info msg="loading changes (start)" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 op_name="field indices" op_event=start
ts=2023-03-22T07:00:02.232516Z lvl=info msg="loading changes (end)" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 op_name="field indices" op_event=end op_elapsed=0.048ms
ts=2023-03-22T07:00:02.233179Z lvl=info msg="Reindexing TSM data" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 db_shard_id=3173
ts=2023-03-22T07:00:02.233196Z lvl=info msg="Reindexing WAL data" log_id=0ggTwD2G000 service=storage-engine engine=tsm1 db_shard_id=3173

I encountered the same problem. At the beginning, I could also perform expiration checks according to the configuration. A few days later, the check task seemed to disappear, and after restarting, I started executing correctly again
Environment info:
version: v2.7.0

I experienced this issue a week or two back running 2.7.4. A bucket with 6h retention and the default shard group duration of 1h filled up my disk over the course of a couple of days. When I searched the logs, I had pairs of op_name=retention_delete_check op_event=start and op_name=retention_delete_check op_event=end every thirty minutes until I reached a point where there was one last op_name=retention_delete_check op_event=start with no corresponding end. After that, I never saw another delete check until I restarted Influx, at which point the deletion policy kicked back in and cleared out the old shards.


material-ui - updated definitions for v0.12.1

@ngbrown, can you review this?

@use-strict
In ThemePalette, there is now an alternateTextColor and canvasColor has been removed.
With the new ThemeManager, the call to getMuiTheme(rawTheme: RawTheme) none of the fields in RawTheme.palette or RawTheme.spacing are optional.  The application breaks if they are left out.  I'm not sure how to correlate that with the modifyThemePalette() and modifySpacing() having those same fields be optional.

@ngbrown, I added the alternateTextColor property. canvasColor is still referenced in theme-manager.js, so I didn't remove it. Made the spacing property mandatory. I'm not sure what you mean about modify*() methods.

@ngbrown looks good :ship:

very nice :+1: thank you

@vvakame , can you merge this?

sure, thanks mate!

@vvakame Thanks for merging this, I love it <3 <3


$object.put() method doesn't work as expected

var oneReal = Restangular.one('company',5).get();
// after it will be loaded in controller
$scope.company = oneReal.$object; // {id:5,name:'company 5'}
$scope.company.name = "company 5 edited";
$scope.company.put();
// sends old name 'company 5' not 'company 5 edited'
// Do I have to use method "then(c)" to get loaded object, why I can't use $object that I put in template?

this lib is full of dirty bugs and none of them are getting fixed :(

I'm also running into this problem.
When I do this:
restObj.save().then((response)->
    console.log(response)
)

The old version is sent off and console.log response shows the unedited original object.
(NOTE: The API responds with the saved object)
@chilly90's fix worked for me.
Restangular.copy(restObj).save().then((response) ->
    console.log(response)
)

The new correct version is sent of and console.log(response) shows the proper new object.

+1

Yup, same issue here.

Copy definitely works, is there any traction on an actual fix for this issue?  This had me stuck for quite a while before I found this issue.

Given the severity of the issue and lack of action for quite a long time, I wonder if the project is still being actively supported / developed.
Looking at the commit history of master branch I don't see any commit by the original author @mgonto in months. Though I do some see some recent actively on couple of branches by @grabbou.
Would be nice if the community was updated on the status of the project so that just in case the author / contributors of the project are not longer able to maintain it people can move on.

@ADmad - I am working with @mgonto to fix all the bugs pretty soon. He's not available at the moment to maintain the project actively as he's giving few talks (e.g. ng-conf). We are in touch all the time having weekly Hangouts so we are pretty on the way to release 1.5 soon.
New release should come out in ~2 weeks with most bugs fixed. We have actually reduced number of opened issues from 180 to around 110 which is a great progress. There are still few PRs waiting to be merged which takes some time as they've been done ages ago so they need some extra loving in order to make them master ready.

Thank you for the update @grabbou. The lack of response for this ticket and lull in actively in past few months had me concerned. Great to hear you are picking up the ball and the project is moving ahead.

Thanks for bumping this up! The thing is - with so many issues it's quite hard to prioritise them quickly. I do realise we might have missed some serious bugs so Ill pencil down this particular bug on our must-to-fix list as well.

Since working w/ Restangular for a while now, I've moved past the fact that the $object is not reflecting changes as it should.  Instead I have opted for the more traditional approach of using the parameter passed to the then callback like so:
Restangular.one( 'foo' ).get().then( function( rsp ){ $scope.foo = rsp; return rsp })

This works for both singular resources and resource lists (e.g. .getList()).  While it would be nice to have access to $object, if you think about using a promise chain, you might not always be working on the same object as $object, therefore this isn't as big a deal to me as it once was.
It's good to hear an update will be coming soon though.  Thanks for the good enws @grabbou

Good for you. But the rest of us would love to get this bug fixed
Dňa 26 Feb 2015, o 16:16, jusopi<EMAIL_ADDRESS>napísal:

Since working w/ Restangular for a while now, I've moved past the fact that the $object is not reflecting changes as it should. Instead I have opted for the more traditional approach of using the parameter passed to the then callback like so:
Restangular.one( 'foo' ).get().then( function( rsp ){ $scope.foo = rsp; return rsp })
This works for both singular resources and resource lists (e.g. .getList()). While it would be nice to have access to $object, if you think about using a promise chain, you might not always be working on the same object as $object, therefore this isn't as big a deal to me as it once was.
It's good to hear an update will be coming soon though. Thanks for the good enws @grabbou
—
Reply to this email directly or view it on GitHub.

+1
This bug is so annoying

+1 Same issue here.
Code below sends the model correctly. Using $scope.ledger.save() or $scope.ledger.put() directly sends the old value.
$scope.submit = function submit() {
        Restangular
          .copy($scope.ledger)
          .save()
          .then(function () {
            growl.success(gettext('Updated successfully.'));
          });
      };

I can't even get it working with the .copy technique

Copy method works in my case. Thanks community :D
Restangular.copy(resourceToUpdate).put();

In my scenerio, inspecting with Chrome dev tools i could see r"esourceToUpdate" had the updated info from the ng-model binding just before calling ".put()", but in the network inspector the http request was sending the original data. Copy solved the issue :-/

@gonzofish Can I get an example of how you used Restangular.restangularizeElement?

Someone with a bit more knowledge might come up with a better solution but my pull request #1091 fixed the problem for me.
Based off @gonzofish .restanularizeElement solution

@garhbod I just do the following before a .save()
restElement = Restangular.restangularizeElement(base, data, urlRoute);
isFromServer = !!data.fromServer || angular.isDefined(data.id);
restElement.fromServer = isFromServer;

where (if I was trying to access /api/people/12)
 base === my base Url (`/api`)
 data === the data object (which has an `id` field with a value of 12)
 urlRoute === the sub-url I'm trying to get to (`/people`)

I set the .fromServer attribute, which let's Restanguar know to do a POST or PUT.

Thanks @gonzofish I did work it out in the end.
But your example is very helpful and would be nice to something like it in the documentation.

No problem @garhbod the only problem is that the isServer variable is specific to my data...that is, I know that only the data coming from the server could have an ID field on it...while this is probably common for a lot of projects, it isn't necessarily universal.

@mgonto, do you have any update on if this will be soon fixed? Was it included in the recent versions?
PUT requests are somewhat important... :)

+1

+1

+1, any news?

+1, but the using Restangular.copy instead of angular.copy is a working workaround for me.

+1
When to fix?????

+1

i'm unsubscribing this thread.
tired of +1s but no solution.
here is my way to wrap RESTful api for angular:

return $resource(BACKEND_URL, {parameter: '@parameter'}, {/** custom methods **/})

you can build a factory, let's say API,  return something like:
return {
users: { //assuming you have a api called users like i do
}
};
```.
and i think this is way much easier..

Tired of this as well. We switched to restmod instead.
Dňa 20 Jul 2015, o 06:45, Ya Zhuang<EMAIL_ADDRESS>napísal:

i'm unsubscribing this thread.
tired of +1s but no solution.
here is my way to wrap RESTful api for angular:
return $resource(BACKEND_URL, {parameter: '@parameter'}, {/** custom methods **/})
you can build a factory, let's say API, return something like:
return {
users: { //assuming you have a api called users like i do
}
};
and i think this is way much easier..
—
Reply to this email directly or view it on GitHub.

hmm.. looks good to me, worth trying

I've created a solution. I don't know why it hasn't being pulled yet

@picitujeromanov, thak you for the suggestion. In few minutes I migrated from restangular, that was with this bug, to restmod and now my app is working fine.

You're welcome
Dňa 21 Jul 2015, o 12:50, Arthur Silva<EMAIL_ADDRESS>napísal:

@picitujeromanov, thak you for the suggestion. In few minutes I migrated from restangular, that was with this bug, to restmod and now my app is working fine.
—
Reply to this email directly or view it on GitHub.

i'm going back to $http & $q...

I had the same problem. Using:
Restangular.copy(resourceToUpdate).save();

solved the issue. Thanks to the community!

Restangular.copy(resourceToUpdate).save() makes PUT request all the time however save should distinguish between POST and PUT

looks like project is kind of abandoned!
This seems to be like an important bug fix.

Restangular v1.5.1
Same problem for me, using .then(), it works fine.

Hey all,
I discovered that (at least in my case) this is actually not a bug with Restangular.  My problem was that I was using angular.copy() instead of Restangular.copy() to copy an element into a scope prior to editing it.  I have a feeling many of you may have been doing the same, since this is common (and usually good) practice in Angular.  This IS pointed in the documentation, but I have been missing it up until now...
https://github.com/mgonto/restangular#copying-elements

Before modifying an object, we sometimes want to copy it and then modify the copied object. We can't use angular.copy for this because it'll not change the this binded in the functions we add to the object. In this cases, you must use Restangular.copy(fromElement).

I hope this helps!

Closing as a duplicate of #579. Tracking changes there…

Had to settle for the Restangular.copy(vm.record).save() solution. Frankly, I don't follow what @hartz89 mean by that last comment, but I know that I just passed the object to a component (<whatever record="$restangularObject"></whatever>) and inside that component I have a ng-model pointed to the object.
The interesting thing is that if I console.log(vm.record) RIGHT BEFORE vm.record.save() I can see the data changed, but the PUT send the wrong data.

@Deleugpn The comment was pointing out the fact that you need to copy an element using Restangular.copy or calling clone() on the element in question, not angular.copy or something else.  All I know is that I pass the object from one Angular Component to another through a scope variable scope: { object: "=" } .


file-loader doesn't work correctly for AoT builds

In AoT builds, if Angular component style files contain url(...), the referenced resources never show up in dist.
E.g., add background-image: url("../assets/icon/favicon-16x16.png"); to src/app/app.component.css, then run build:aot:prod.
=> The generated code has background-image:url(cd975b64fd102830af00a0b8d8755b9c.png) but there's no cd975b64fd102830af00a0b8d8755b9c.png in dist!
For non-AoT builds (build:prod) this works like expected:

The generated code has background-image:url("+e(340)+")} and 340:function(t,n,e){t.exports=e.p+"cd975b64fd102830af00a0b8d8755b9c.png"}
The image actually has been emitted to dist/cd975b64fd102830af00a0b8d8755b9c.png

(For stuff in src/styles both build:prod and build:aot:prod work correctly.)

This is caused by ngc-webpack:
   * ### resourceOverride and assets
   * If you reference assets in your styles/html that are not inlined and you expect a loader (e.g. url-loader)
   * to copy them, don't use the `resourceOverride` feature as it does not support this feature at the moment.
   * With `resourceOverride` the end result is that webpack will replace the asset with an href to the public
   * assets folder but it will not copy the files. This happens because the replacement is done in the AOT compilation
   * phase but in the bundling it won't happen (it's being replaced with and empty file...)

After removing resourceOverride: helpers.root('config/resource-override.js') it works like expected.


refactor(cli): update required Node.js version

What/Why?

💡 This PR is part of the CLI refactor changes described in #1430

Previously, we allowed any Node.js version 20 or greater. We have been experiencing issues with people using less-stable odd-numbered Node.js versions (like 21) or Node.js versions that are still new and not something we have fully tested with Catalyst (like 22)
Testing
Locally

We can refactor this later, but ideally it would handle a range and just adjust the message if the current range was singular.


Style touches

Arial Narrow for social boxes
blocked out nav-social to allow for flexbox

Better changes forthcoming


Centralise code to map between UTF-8 and UTF-16 on Windows.

In various places we need to call the Windows API, and because Swift uses UTF-8 for its string representation, we can’t call the ANSI API functions (because the code page used for the ANSI functions varies depending on the system locale setting). Instead, we need to use the wide character APIs.
This means that we need to convert UTF-8 to wide character and vice-versa in various places in the runtime.
rdar://103397975

@swift-ci Please smoke test

Since @grynspan and I both had essentially the same code in #62462 and #62577 respectively, it made sense to pull it out into a separate PR (before anyone else starts adding another copy to their PR :-D).
While @compnerd suggested using the LLVM ConvertUTF16ToUTF8 function, calling LLVM code from the runtime isn't possible unless we copy the code into the LLVMSupport folder, and I'm keen that we minimise the amount of that that happens. Another alternative that wasn't mentioned is using the C++ library to do the conversion — but that causes allocation using std::new which is undesirable in the runtime (for the reason that new can be overridden by the user, which can create problems where user code gets called in contexts where some things might not work).

(Worth noting that presently these functions generate a fatal error when they fail. I'm not sure if that's desirable everywhere; maybe they shouldn't.)

Does this really centralise it? It seems that we should simultaneously update the symbolication codepath.

@grynspan is doing that in a separate PR. The point of this is to provide the functions in one place, in one PR.

@swift-ci Please smoke test

A fatal error makes sense when malloc fails. It doesn't seem right when the conversion fails, though.

Fixed it to return nullptr when it fails. malloc() failing in a recoverable way is in some sense more likely on Windows (it doesn't overcommit — at least, it isn't supposed to), so I think returning nullptr there too makes some sense.

A fatal error makes sense when malloc fails. It doesn't seem right when the conversion fails, though.

Fixed it to return nullptr when it fails. malloc() failing in a recoverable way is in some sense more likely on Windows (it doesn't overcommit — at least, it isn't supposed to), so I think returning nullptr there too makes some sense.

I think we should return nullptr and let the caller—oh, you just did that. Never mind!

@swift-ci Please smoke test

@swift-ci Please smoke test

@swift-ci Please smoke test Windows platform

@swift-ci Please smoke test

@swift-ci Please smoke test

How would you feel about exposing String.init(_wcs:) and String._asWCS(_:) rethrows functions for slightly higher-level access to these interfaces? Obviously a permanent API would go through swift-evolution, but as an experimental/underbarred feature specific to Win32 interop, the utility of such interfaces cannot be understated.

How would you feel about exposing String.init(_wcs:) and String.asWCS(:) rethrows functions for slightly higher-level access to these interfaces?

That's more a question for the standard library folks, I think. I don't think that's necessarily the right thing anyway. IMO it'd be better to allow the Windows wide character APIs to be imported in a way such that we can pass Strings to them directly, as we can with the narrow string APIs. But that's probably a discussion for elsewhere.

@swift-ci Please smoke test

How would you feel about exposing String.init(_wcs:) and String.asWCS(:) rethrows functions for slightly higher-level access to these interfaces?

That's more a question for the standard library folks, I think. I don't think that's necessarily the right thing anyway. IMO it'd be better to allow the Windows wide character APIs to be imported in a way such that we can pass Strings to them directly, as we can with the narrow string APIs. But that's probably a discussion for elsewhere.

Since String(decodingCString: $0, as: UTF16.self) does the thing already, I retracted my previous statement. :)


Use of /deep/ selector is deprecated, must be replaced

According to angular web site, the use of /deep/, >>> and ::ng-deep is deprecated and must not be used.
See: https://angular.io/guide/component-styles
Note that this also causes issues when deploying applications that use ng2-smart-table. (see issue 290, https://github.com/akveo/ng2-smart-table/issues/291)
Regards

This is affecting the build in Angular 8 ! Please

Any updates on this issue?

I'm afraid this library is not maintained anymore, which is a shame regarding its quality and popularity.


Issue with updating to latest sbt version

Situation
Updating to latest sbt version fails with an exception when running tests.
[info] Run completed in 2 minutes, 23 seconds.
[info] Total number of tests run: 169
[info] Suites: completed 36, aborted 0
[info] Tests: succeeded 169, failed 0, canceled 0, ignored 0, pending 0
[info] All tests passed.
[success] Total time: 190 s (03:10), completed Jun 15, 2021, 11:52:24 AM
sbt appears to be exiting abnormally.
  The log file for this session is at /mnt/devel/git/EXASOL/releases/release/cloud-storage-extension/target/global-logging/sbt-global-log14788932046163710743.log
java.lang.ClassCastException: class java.util.concurrent.TimeoutException cannot be cast to class xsbti.FullReload (java.util.concurrent.TimeoutException is in module java.base of loader 'bootstrap'; xsbti.FullReload is in unnamed module of loader 'app')
        at sbt.internal.XMainConfiguration.run(XMainConfiguration.java:59)
        at sbt.xMain.run(Main.scala:46)
        at xsbt.boot.Launch$.$anonfun$run$1(Launch.scala:149)
        at xsbt.boot.Launch$.withContextLoader(Launch.scala:176)
        at xsbt.boot.Launch$.run(Launch.scala:149)
        at xsbt.boot.Launch$.$anonfun$apply$1(Launch.scala:44)
        at xsbt.boot.Launch$.launch(Launch.scala:159)
        at xsbt.boot.Launch$.apply(Launch.scala:44)
        at xsbt.boot.Launch$.apply(Launch.scala:21)
        at xsbt.boot.Boot$.runImpl(Boot.scala:78)
        at xsbt.boot.Boot$.run(Boot.scala:73)
        at xsbt.boot.Boot$.main(Boot.scala:21)
        at xsbt.boot.Boot.main(Boot.scala)
[error] [launcher] error during sbt launcher: java.lang.ClassCastException: class java.util.concurrent.TimeoutException cannot be cast to class xsbti.FullReload (java.util.concurrent.TimeoutException is in module java.base of loader 'bootstrap'; xsbti.FullReload is in unnamed module of loader 'app')

Acceptance Criteria

Issue is resolved
Sbt is updated to latest version

Fixed in #158.


Add loop peeling utility

The loop peeler util takes a loop as input and create a new one before.
The iterator of the duplicated loop then set to accommodate the number
of iteration required for the peeling.
The loop peeling pass that decided to do the peeling and profitability
analysis is left for a follow-up PR.

@s-perron I updated the PR, much more comments and with the description of approach in the class descriptions.
Small a note: there is a few "Fixme" but they will be removed with the peeling pass.

There was something bothering me about the OpPhi.  The has to do with the check for a do_while_form.  You seem to be creating a false dichotomy.  You seem to assume that when leaving the loop, you have either fully executed the current iteration or you have not done any "work" for the current iteration.  When you get the "exit_value" for an OpPhi, you are using this assumption, but it is not always true.
In particular if the peel the first two iterations of the following example, I believe that o gets incremented one extra time:
#version 450

layout(location = 0)out float o;

void main()
{
        o = 0.0;
	for( int i = 0; true; i++ ) {
	  o += 1.0;
	  if (i > 10) break;
        }
}

@s-perron I added the test you talked about and the merge instruction fix

Please fix the conflicts, and I'll merge the PR.

Rebased, squashed and merged as bdf421cf.


[Android] Remove double focus from TextBlocks in selectAction

Related Issue
Fixes #7864
Description
When a TextBlock is the only element within a selectAction block, focus was going to the element twice.
We need to fix this by removing focus from the TextBlock if its parent container already has focus.
Sample Card
{
    "type": "AdaptiveCard",
    "version": "1.0",
    "speak": "Test Meeting title",
    "body": [
        {
            "type": "Container",
            "items": [
                {
                    "type": "TextBlock",
                    "size": "small",
                    "color": "accent",
                    "text": "Change meeting settings"
                }
            ],
            "selectAction": {
                "type": "Action.Submit",
                "data": {
                    "intent:confirm": true,
                    "change_settings": "true"
                },
                "title": "Change meeting settings"
            }
        }
    ]
}

How Verified
Verified on the Android Visualizer app.
(Tab key is pressed twice in this gif)

Microsoft Reviewers: Open in CodeFlow

@almedina-ms could you help review this pull request?

regular text won't be focusable? will it cause voice over not to announce a11y labels of regular text without links?

@almedina-ms Do you have any thoughts here?
Regular text should not be focusable in the general case. Tab order only includes elements that have an interaction.
That being said, I'm not sure what the impact would be on TalkBack and why this was added originally.

Hi @anna-dingler I pulled your branch and build locally, I can still reproduce these two issues #7864, #7959, so I'm wondering whether this PR can fix them.

Hi @anna-dingler I pulled your branch and build locally, I can still reproduce these two issues #7864, #7959, so I'm wondering whether this PR can fix them.

Hi @longlong-cs,
Can you provide any information about how you are testing the change locally (test app, etc.)?
I am attaching gifs here of what I am seeing on my machine running code from the branch anna/androidDoubleFocus and using the sample payloads provided in the bugs.
Issue 7864 - TextBlock receiving double focus with selectAction
Once we are focused on the "Options" button:

Pressing tab moves focus to "Change meeting settings" link
Pressing tab again moves focus to "Join" button

Issue 7864 - TextBlocks without links receiving focus
Once we are focused on the "Options" button:

Pressing tab moves focus to the "Last, First" EditText

None of the prior TextBlocks receive focus.

regular text won't be focusable? will it cause voice over not to announce a11y labels of regular text without links?

I reverted back to the original approach to fix this :)


Issues from discord (3)

[x] fix symbol view.

the current implementation is bug prone, so I would like to reimplement one instead of fixing current one. I may start to reimplement it after fixing tons of bugs and rough edges reported by andrew.

[x] After opening the file it doesn't show the error unless I save the file (no-op).

vscode invokes lsp's focus command but neovim doesn't. should add an issue, and discuss a suitable behavior to change focus file if the client is neovim.

[ ] Field selection doesn't seem to work in neovim.

I need an approach to invoke editor.action.triggerSuggest and editor.action.triggerParameterHints at the same time, after a field completion, but I don't find a way other than letting client provide an extra commands, https://github.com/Myriad-Dreamin/tinymist/blob/f167ad152449c631e5946187efd2ba1772612f02/editors/vscode/src/extension.ts#L161. This is because https://github.com/microsoft/language-server-protocol/issues/1117.
I looked at rust-analyzer, and find that the parameter hints (signature help) keeps until exiting a function autocompletion. That is, if tinymist does same thing as ra, when I type text, tinymist will complete text(${content-arg}, fill: ${fill-arg}, stroke: ${stroke-arg}, ..), and I will continue finishing my function call for tabs and go to ${content-arg}, ${fill-arg}, and so on. however it is probably not what we would like to have, as we usually write text(fill: blue) and then add a content arguments by []. I may look at python lsps then.

Convert the last issue to an individual issue.


Add support for workspace

When a user right-click > Browse with Git Extensions in a workspace, the script should open the clicked repository instead of the first folder in that workspace. Replace vscode.workspace.rootPath by something that finds the right directory.

Done and deployed with 1.1.0


on tab change swiper did not load image in visible slides

I am having number of tabs and on each different tab different swiper with lazy load image is visible.
So when I click on tab it shows swiper with all slides perfectly but image is not loading on visible slide.
When I swipe or change the slide then only it loads image in visible slides.

I guess it is because sliders in other tabs were hidden. Run this for the relative Swiper when tab with Swiper becomes visible swiper.lazy.load()

Ok, I will try this swiper.lazy.load() at the place of below code:
$(".swiper-slide-visible img,.swiper-slide-active img").each(function (index) {
	        var src = $(this).attr("data-src");
	        $(this).attr("src", src);
	        $(this).parent().find('.swiper-lazy-preloader').remove();
});

Sorry, to tell you that the method which you shared is not working in my code.
So is it ok if I will continue with code which I mentioned in previous comment.

So is it ok if I will continue with code which I mentioned in previous comment.

Didn't check it, but if it works for you, then it is ok)


Loop Sequence

Is there an built in option to make a sequence loop?

unfortunately, not at the moment. i might try to add this soon

+1 for nice to have, and could use right now :)

Any way to trigger itself when the sequence ends? @Rycochet @julianshapiro

Not sure - but I'd think a complete callback to start it again might work - a delayed re-start would do it...
Having sequences treated like "normal" animations for options such as loop might become part of v2, going to reopen this as a reminder :-)

@Rycochet any chance you have a working example of loops a sequence through a complete callback?

Sadly not - a setTimeout restarting it would be the first thing I checked though...

The old style sequences have been removed. New style sequences are defined in a similar way to css animations. You can provide any options you wish to them, including loops, repeats, callbacks etc


https://github.com/flutter/engine/compare/2a22019a8dd8...9ae1c14c3515

git log 2a22019a8dd8..9ae1c14c3515 --no-merges --oneline
9ae1c14c3 Update observatory-port default behavior description. (flutter/engine#6365)
5550fdbc2 Remove cull_rects_ from SceneBuilder (flutter/engine#6352)
75e404f39 Roll src/third_party/skia 656cefe65d62..b726c89ff8a8 (8 commits) (flutter/engine#6370)

LGTM


Write Deprecation Policy page for our docs

We do not currently tell users what our deprecation policy is in our docs. This is a requirement for users, and we should try to explicitly state what our deprecation policy should be moving forward.

Duplicate of https://github.com/hirosystems/docs/issues/260


bugfix: should not expose EncodedValue / EncodedValues

Coverage remained the same at 67.749% when pulling d1b3be1102c332ac2b1e78ffa1334f6093364194 on bugfix into 93b70058d6a83bc27d0f351cc1f962dcb6a1fdb9 on master.


[FEATURE REQ:] - Would like to be able to screenshot a TAB into an image file.

As the title says.
I am requesting a feature for Terminal.
To be able to right click a TAB of my choosing and screenshot the tab into an image file.
Thank you.
😋

See also #1084.

I mean, yea I'm inclined to call this a dupe of 1084. Would you want this to screenshot the whole buffer? Or just the visible viewport?
There's also the "Export Buffer" action, for just exporting as .txt, and #469 for asciinema recordings

Just the part that is visible in the current tab being shown when using the Terminal,
to be saved as an image (.png)(.jpg)(.svg) NOT as text  please.

Coincidentally, I wrote all the code we need for saving a swap chain (the terminal contents) as a PNG in #14959. However, I don't think I personally will have any time soon to hook it up as a feature like this (nor any other team member most likely). If you or anyone else would like to see this through though, I'd be more than happy to guide them and explain how it could be done. 🙂

The code in wic.h? Cant seem to find that file in the current repo.

The code in wic.h? Cant seem to find that file in the current repo.

@jamespack That file was added in PR #14959, but that hasn't been merged into the main branch yet. You'll need to checkout the branch dev/lhecker/atlas-engine-remastered.

Ahh. Thanks.

Alrighty thanks for the elaboration here. I'm gonna combine this with the feature request we're already tracking in /dup #1084, since they're largely the same idea. Thanks for the discussion all!


plugin crashes ardour 5

i've tried using the plugin (dowlnoaded today) with ardour 5 (5.3.4-1kxstudio2) on (k)ubuntu 16.04. shortly after adding the plugin to the bus, ardour crashes. it fires up the web browser, that remais open with a closed websocket.

Can you test this version:
https://github.com/Studio-Link-v2/backend/releases/download/v16.04.1-beta/studio-link-plugin-linux-fix-sslv2.zip

yes, this fixes the crash!
is there documentation on how to properly use all of the nice knobs somewhere?


Tab completion features do not work in PowerShell or Windows command prompt.

az feedback auto-generates most of the information requested below, as of CLI version 2.0.62

Describe the bug

Installed AZ CLI from  https://aka.ms/installazurecliwindows on Windows 10 Enterprise version 1909 (OS Build 18363.1854).
Control Panel shows Azure CLI verison installed is 2.29.0
Open Command Prompt (Run as administrator or even without administrator mode).
Execute command "az --ver" and hit tab for auto-completion.
No results.

Howver if we complete the command as "az --version" then it does return the installed version as shown in Control Panel output.
Get a similar issue when attempting to access from PowerShell (5.1) or PowerShell (7.1.0)
Expected behavior

Tab completion of commands should display command options, both in Command Prompt and PowerShell.
Environment summary

Installed AZ CLI from  https://aka.ms/installazurecliwindows on Windows 10 Enterprise version 1909 (OS Build 18363.1854)
Additional context

Can the autocompletion be achieved with git bash?

Azure CLI actually doesn't officially support Git Bash. We recommend using WSL where tab completion works correctly:

Thank you!
Are there plans for CLI to be updated to provide auto-completion?

@ashokgop, we does support Linux and MacOS.

Thanks, I made it work with WSL2:


Out-of-band verification of sigchain with revoked PGP keys

When a user never revokes any PGP keys, it's easy for me to manually verify all the sigchain links that have been signed by that key with GPG or a comparable tool.  However, once a PGP is revoked, it doesn't seem to be possible to retrieve the public key from Keybase anymore.  How, then, can I verify sigchain links signed by that revoked PGP key?  How does the keybase client verify such links, for that matter?
The closest answer I've found is #4263, but I'm less concerned about the appearance of that graph and more concerned about actually verifying the sigchain.

Just as an example, a sigchain has this sibkey link:
"sibkey": {
  "fingerprint": "72c198e7316119296c374055a45d2f4cc0a6dacc",
  "full_hash": "0ad4eab7a7db4bf558d8b3946601dbbf08d9162ecfacd974d4956fd7ed8abcb4",
  "key_id": "A45D2F4CC0A6DACC",
  "kid": "0101e6911303dc5fbea8ea957fc40d1c725c5f1cf0cf70d73c8595f7fdce410f62a90a",
  "reverse_sig": "..."
}

That key was then allegedly used to sign this link:
{
  "body": {
    "key": {
      "eldest_kid": "0120aeb671ead772c1fa9be4f81adb80a4b11ad5731602cb03cba8b34cd341b117ab0a",
      "fingerprint": "72c198e7316119296c374055a45d2f4cc0a6dacc",
      "host": "keybase.io",
      "key_id": "a45d2f4cc0a6dacc",
      "kid": "0101e6911303dc5fbea8ea957fc40d1c725c5f1cf0cf70d73c8595f7fdce410f62a90a",
      "uid": "021308501d8d3ce358a5dc2f63745f19",
      "username": "mftrhu"
    },
    "service": {
      "name": "twitter",
      "username": "mftrhu"
    },
    "type": "web_service_binding",
    "version": 1
  },
  "ctime":<PHONE_NUMBER>,
  "expire_in": 157680000,
  "prev": "36c93504e4100384de4bd41b5a362ddf07210dae0b00a6dccdb38b6de6180f29",
  "seqno": 7,
  "tag": "signature"
}

Notice that the KID in the latter link begins with 0101, which indicates to me that it's an RSA PGP key, not one of Keybase's ECC keys.  This means I have the KID and the PGP fingerprint, but I can't find any way to actually obtain the public key so I can verify the signature.

This API endpoint is what the client hits to load all keys for that user. Note that the PGP key's full hash (see full_hash) is signed into the sigchain, so the server is powerless to muck with the PGP packets of the key.
In this case, that endpoint has the PGP key:
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: Keybase Go 1.0.20 (linux)
Comment: https://keybase.io/download

xsFNBFkUW60BEAC2EetpEGNVW+ZTa/9yZ2QPrS1a/T03mztlw4sT1IGOQXxTff1F
Xohicw2nypFsKB+44MdtmX3PaorUbqhb3HnG3ZpIJ06afANTJlfa3ZYLk1ekANmu
2/J4QJfWzZIQmKV9Nex81CojSumwoHdHZFj78JmISaPoLbck1u0fTWOJA9KYgFT+
v0XztZmLjq7M/qBWXK0HP9CPg2sbqj7sbHqrXWX85iw9wr/Em0OQRUzaoRmZCSTC
InW8YoA1qgRCLOs6NCkGkTMi7YbYHeVRkpmRvdCGxXgfORDDggm9RhPq34i7JXEd
9uqO1SMun6OFiQzTlgZYyrvPZYNK0cFVhUnvu5b/SyqHpb5VbnJuYEIrIug8QVTx
TG89pjdfwARFnE6wlbyXVm63xFTVSf/q4Tp3ZmDnFaiMEb9hIasi3OgP4YELPfFV
RABsbkkb1KZ4huoCJcT0a6KbVAWhRlNxl+KDllXnbwfTluUDaR0+Aw+hySIHXWz7
fCWnRaH7HX5ObckH/ZkXdstvHj47JaKhFEp2qgA2iGK4LaJPt/TEirKY8ceY5o0x
18GoTu5TCgEIkniCQkhb0SzwPIvCEyXX0TgUNln+SKSD8ByTU0RfieDDUFs1ABvX
oeOK/X7nlQVQQ4Ltoy/X02u5tRIS9ApGCJOgbEtyKZv6pFVZC+BJs1UkMwARAQAB
zR1tZnRyaHUgPG1mdHJodUBpbnZlbnRhdGkub3JnPsLBeAQTAQgALAUCWRRbrQkQ
pF0vTMCm2swCGwMFCR4TOAACGQEECwcJAwUVCAoCAwQWAAECAABs0xAAX2giIVnV
xhfoUYuDiHn4V22Ta0xzHeGv0ZjJz2UOpEBsRnj0DHhHqkmztgkbJm4vQZR3aVhs
tPxIGU9BimN3DuhyC2lgprXIti/EZCpA6DOAipaM9uX8PwLZS3/a9vW4Oa67UOh8
7MTkNipsfDHGmpYWsRP/rEdp18iFVST6hGsBre1SgV4j//u1YTAFs0SdJkckAwCv
BGtAxPRipIFML2c9ijHfyl/lZbIvvdi74+Zon5Gwry/ygHl2zSNjfymvm6wT0h8j
DrUGv18vR355Fxd1OVADh9DeptsYWM3ytFA0rplu2XnpGOlGLQJMEHbOZ5FhEu8t
EzhHiNZBFuxOxa0jOrjc4xzUUlVT2ajAPh2jcsNJGE3FlMiNExePEhkCSKmfSY98
XjxfWbxy+4PoF+FNbuj560+TJPaIKB9MghhMPHYmnuYEpmEBKdFWxkPWhcVqpMzI
QPhuD+TNceKWdKyvDtD6R+JY5guzY2EMJCGZmAo67okGsyyrOhQzdINpuLxfHX0g
e9DZlTeO2Ya36sJL8efzXudGVUpQtg+eamjSI4BnvsNcI4qosP3Z8BHyrGaqoyz9
rmuYNxtASg7sD6kOOgKns8okpAtNI884Pn34bWvvSXg7X2PMR8iXK+wXS+ABirff
DSqVBJlofgpXNUxewDo6VsB7AQi2vutmppnOwU0EWRRbrQEQAOdo24/LdG44ewOS
UtWTL72gI6/lliu5JYvH5CNqG7r3Cy7bOX/+74ojjlK3Vf27TTEqDoTwqRdRU/Zw
XpOB9MunpRW/4f54UeAtSgjIMPXd6Io9vAoGuUPdc4JxjU4TrrYfRaGdhaIZs60K
RM1mtmAeVLSiMkdln4QeM4KkcNjUD3gHdK73UqyqHpkrrQKpEhC0fYmcnCMN4uVm
3bAAq6oVGO4Hfmk7pLNK4Y0POzRbuHf9dMY+FBsvsQM5vWGbkuQkQ5E71BzoLN56
CXLv8EPODAr7FD4sR9P7VZEknWTE2Yb18FjPLcTzuAKwhg8GqgLftLBXElZ3CUhA
+dyqetWjD3F+f9nkJZ6EaXj01fVm/9Q8cgdWXO8BXYuwPtzJkoR72pb99lAPwdbe
NEoPpJ4RiASmQzqHvBxutTvU+B/xFML2oYFhI6YD/MbGL4I3qQPQYsSv0UzbzZCN
VU+dF8PoTClwE0r94d8oI0MEICWE0PXEaKhvdXZSjdsZV2TfCAZyLpcdqnZrS0Y6
yqqbzXQXdlBKGLGl+TeRumcRizmBspTAPuHpAGOBQ3UiVjxgWA+NetPnY4H7jMir
+u7cYscbvrPL8DjuMCU3oEFLWTsSMtrrt+tH2EKvGPRNzYm9XoS71f5IdN7H3XZv
Ykum4DL87hTiFhFax1hec51TXHcbABEBAAHCwXUEGAEIACkFAlkUW60JEKRdL0zA
ptrMAhsMBQkeEzgABAsHCQMFFQgKAgMEFgABAgAAbyMQACbBE92MaulgTDKHHoh1
P5JZ//YAGDvZr28sjbC1qJaMr5JwnptbWg14u4CZmXn4zwZCnncnYuJuwFsvzsMj
vZwDMt2XJNyfSx1GzIZFyT74k2k17k7mEIp8AGfDsE517YhRnPENAjPcugzp9x7v
32ceyNz8m700XPuDJE+Br423GqKrO5JCMdxr/drr/uRlTiyzLYaBsTCini2N01zu
Vwf1MylRJCLnl/6kAiiA8KmKfVYLJ346HeNNopepQThU8pnl6TXhmF7jyd+e4vsS
DwGjP4ol7Jt5i5Fd1FDwJkh2OAb1XH5bJzGjfBTxITWP4AfxI5TrKHa81pPeBt3l
O/N4s/qSD0sE6yyuMBYsMIunhhCaS4xoRjSZSNsENfFc/8G0AZq2eDG/hIkeEcbt
htZXPOnL8cMwPxsziUxecPkPdJCIeHwCp7GiZ5NDAi7SNk4HJ9E/bCE0SCeIwEiw
MtNZN/svpemeGdEu7S/HkEx2GPhw3/K+qps9G5w1ynv5nfvm1ybFnnLmcTXb7Yku
C7II4cUI06Ix5kkieY8y+tV+Xb+uZzJxDT/CSEZCOz24AsYld/tjNFDz1wqfoXUC
DiDX0xlrVutDf97LkxgWdaeeD1LCIVx/B+ZBDmYuSZmzVT3zGRQuQtDe2+lXYY6n
TEjbgJKGUv7OxAuEYc9Z39yi
=DRw9
-----END PGP PUBLIC KEY BLOCK-----

If you SHA2 that whole ASCII text blob, headers and all, you'll get 0ad4eab7a7db4bf558d8b3946601dbbf08d9162ecfacd974d4956fd7ed8abcb4

Got it.  Is there any particular reason old keys can be loaded through that API, but not user/pgp_keys.asc or key/fetch?

It's probably an accident of history. As we developed that app, we just shoved more data into user/lookup that we needed to load a sigchain and play it back for a given use, to save RTTs.  I'm guessing those other API endpoints date back to our PGP-only client, and we've never retired them.


Scaffold the repository

initialize the rust project and maybe a CI?

@goodhoko I can look into this tomorrow unless you're faster and this is already done at the time.

I'll take it


Trifling idea PR

What/Why/How?
Reference
Testing
Screenshots (optional)
Check yourself

[ ] Code is linted
[ ] Tested with redoc/reference-docs/workflows (internal)
[ ] All new/updated code is covered with tests

Security

[ ] Security impact of change has been considered
[ ] Code follows company security practices and guidelines

Change not accepted this time but we'll look forward to your next contribution - you're always welcome :smile:


remove @typescript-eslint/indent rule

What version of this package are you using?
23.0.0
Rules set contains the @typescript-eslint/indent rule (https://github.com/standard/eslint-config-standard-with-typescript/blob/master/src/index.ts#L9 + https://github.com/standard/eslint-config-standard-with-typescript/blob/master/src/index.ts#L63) which is broken
Maybe it's a good idea to remove it, as using this config without manual tweaking might be annoying (otherwise it's pretty cool config, thanks for your work!)

Interesting, I've never seen this myself and we using this in several large code bases 🤔
There is also a work around posted that maybe we could use?
        "@typescript-eslint/indent": [
          "error",
          2,
          {
            "ignoredNodes": [
              "PropertyDefinition[decorators]",
              "TSUnionType",
              "TSTypeParameterInstantiation",
              "TSIntersectionType"
            ]
          }
        ],

Yeah, this workaround might work. I wonder though how you've never encountered any problems with this rule, I've noticed it straight away after I started using config from this repo :)

Hehe, interesting, could you give an example that fails?

In my project I've seen this one https://github.com/typescript-eslint/typescript-eslint/issues/455, but probably others too

Removing this rule doesn't seem reasonable, because it's one of the primary style rules.
By the way, whether style rules are appropriate in Standard in light of the increasing popularity of deterministic formatters such as Prettier, is a different conversation.
Regarding a possible workaround, we need some concrete examples in order to consider it. If you care enough, please provide those.
Otherwise, we'll close this issue with this comment. Feel free to comment if you still disagree.

By the way, whether style rules are appropriate in Standard in light of the increasing popularity of deterministic formatters such as Prettier, is a different conversation.

e.g. being discussed here https://github.com/standard/standard/issues/1868

Removing this rule doesn't seem reasonable

We can't relay on a broken rule


Delete octave-app.rb

Reasoning: https://github.com/caskroom/homebrew-cask/pull/37764#issuecomment-329039752
Will leave open for a bit, for disagreements.

:+1:


SDN-3721: migrate to rhel9 base images

rhel9 container images causing the following runtime issue causing daemonset crashloop
/usr/bin/daemon: /lib64/libc.so.6: version `GLIBC_2.32' not found (required by /usr/bin/daemon)
/usr/bin/daemon: /lib64/libc.so.6: version `GLIBC_2.34' not found (required by /usr/bin/daemon)

Signed-off-by: msherif1234<EMAIL_ADDRESS>
- What this PR does and why is it needed

- Special notes for reviewers

- How to verify it

- Description for the changelog

/retest

blocked on having eqv of registry.ci.openshift.org/ocp/4.13:base for rhel9

/hold cancel

/test ingress-node-firewall-e2e-metal-ipi

/retest

/hold
waiting for rhel9 host clusters

/hold waiting for rhel9 host clusters

it seems nodes are now running rhel9
sh-4.4# uname -a
Linux worker-2.ostest.test.metalkube.org 5.14.0-282.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Feb 23 14:35:36 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

/hold cancel

/retest


Feature request -- print elapsed time

Ninja is so fast that I always run it under the time command to see how fast it actually is.
Can ninja please print the time it's been working for itself?

You can use "-t stats" to print some timing information.

There does not seem to be such a tool. It says a unknown tool 'stats', and doing a ninja -t list does not show anything that would seem to be statistics-related.

The flag you are looking for is -d stats.
$ ninja -d stats
ninja: no work to do.
metric          	count 	avg (us) 	total (ms)
.ninja parse    	1     	438.0   	0.4
.ninja_log load 	1     	193.0   	0.2
.ninja_deps load	1     	1585.0  	1.6
node stat       	1078  	2.4     	2.6
node stat       	1078  	2.3     	2.5

path->node hash load 0.99 (1102 entries / 1109 buckets)


Inline image isn't scaled in Android version

When I use inline Image component with static image resources with different densities, I'll have problem in Android version with scaling of image. It looks like the app uses 1x instead of 3x image, but iOS version works fine.
Part of my code:
<Text>
  <Image source={ require('./imgs/my_icon.png') } /> with some text here
</Text>

My static image resources:
./imgs
|----> my_icon.png
|----><EMAIL_ADDRESS>|----><EMAIL_ADDRESS>|----><EMAIL_ADDRESS>+----><EMAIL_ADDRESS>
ReactNative v0.40.0

after some debugging on my own I found the reason why text inline image is not getting scaling properly, here my findings:
During this commit change: https://github.com/facebook/react-native/commit/68c6d71cea4e37f0360453be6e7f792ed12f6f3a
The way width and height are used to generate TextInlineImageSpan was changed:
from:
public TextInlineImageSpan buildInlineImageSpan() {
     Resources resources = getThemedContext().getResources();
int height = (int) Math.ceil(getStyleHeight());
int width = (int) Math.ceil(getStyleWidth());
 return new FrescoBasedReactTextInlineImageSpan(
   resources,
   height,
 ...

to:
public TextInlineImageSpan buildInlineImageSpan() {
  Resources resources = getThemedContext().getResources();
  int height = (int) Math.ceil(mWidth);
  int width = (int) Math.ceil(mHeight);
  return new FrescoBasedReactTextInlineImageSpan(
    resources,
    height,
    ...

so before it was getting set from getStyle*() methods, that returns a value stored based on the result of the setStyle*() call, which transform the value of width to the pixel unit based of resolution.
public void setWidth(float width) {
   setStyleWidth(CSSConstants.isUndefined(width) ? width : PixelUtil.toPixelFromDIP(width));
 }

currently, this class does not apply any transformation to the width/height value so it ends up rendering without any notion of the current resolution.
a workaround for now is doing something like this:
class App extends Component {

  render() {
    const width = 80 * (Platform.OS === 'ios' ? 1 : PixelRatio.get());
    const height = 80 * (Platform.OS === 'ios' ? 1 : PixelRatio.get());
    return (
      <View style={{flex: 1}}>
        <Text style={{backgroundColor: 'red'}}>
          <Image
            style={{width, height}}
            source={{uri: 'http://s3.hilariousgifs.com/displeased-cat.jpg'}}
          />
        </Text>
      </View>
    );
  }
}

I hope this info is helpful to clarify this issue so we can expect a fix for this soon. Let me know if you guys need any more information.
I also noticed that iOS is rendering inline image a little off.
ReactNative v0.41.2
iOS:

before workaround:

after workaround:

@christopherdro is there any news/progress around this issue?

Hi there! This issue is being closed because it has been inactive for a while.
But don't worry, it will live on with Canny! Check out its new home: https://react-native.canny.io/feature-requests/p/inline-image-isnt-scaled-in-android-version

thx @yloeza .this work around for me

@alexustinovsm
Still not fixed - could you re-open this issue?

I won't be reopening this issue as it does not contain sufficient information as required by the template. You may open a new one.

@hramos
The problem is simple:  inside  on Android are not calculated according to "device pixels" but according to "real pixels" (which is wrong on high resolution devices).
A new issue would loose the information in the thread.

You can always link back to the thread and make sure the new issue summarizes any relevant information from this thread.


Completion not giving correct completion based on seed

Seems very broken - hard to know what to give as an example (* means complete)
Sometimes it gives the correct completions for something like tv.* or strings.* but doesn't use the seed which follows but sometimes it gives completions for the wrong string entirely, e.g. if I previously typed tv.* and now I type strings.* I get the completions for tv.*

Yes, sure.

Working now that I am trying to debug but this makes 3 mysterious problems. The other two are the depth coloring coming on and your parse errors that shouldn't be appearing.

ok, new tickets filed under gide.


User does not have LastSharingCheck property in profile causing error

The issue is that - for some reason - this user does not have the LastSharingCheck property in their profile.
Please adjust code to handle this case.
ERROR: The DATETIME value &startdt. must have the format ddmmmyyyy:hh:mm:ss.
<EMAIL_ADDRESS>

fixed with commit https://github.com/sassoftware/sas-portal-app/commit/204565a2af5cd070fc746d12e8ba2e41f5a7417b


Magento 2: Only set maintenance mode once if needed

Also:

by adding magento:maintenance:enable-if-needed to the task list instead of invoking it directly, it is now possible to use after() to add custom tasks to be performed in maintenance mode

the maintenance_mode_status_active check was removed because it is unnecessary and can return wrong results because of caching

[ ] Bug fix #…?

[x] New feature?

[x] BC breaks?

[ ] Tests added?

[x] Docs added?
Please, regenerate docs by running next command:
$ php bin/docgen

@peterjaap PTAL

Perfect!

@schmengler could you resolve the magento2.md conflicts? Then it's good to go.

Done @peterjaap @antonmedv

@antonmedv merge at will


Add a flag to tag -SNAPSHOT builds as 'latest'

If the tag ends in -SNAPSHOT as from ${project.version} adjust to latest to more match Docker convention.

I guess that's an open question, should we tag every build as latest when we build it, given the semantic of time only that would seem to be correct.
I guess it would make sense to tag a SNAPSHOT as latest as a release version as both latest and it's release number?

In your example if we had a project 1.0.0-SNAPSHOT and we went to produce a RC we might bump to 1.0.0-rc1-SNAPSHOT, then release this as 1.0.0-rc1, which would be tagged as that, then changing the next development version to either 1.0.0-SNAPSHOT or 1.0.0-rc2-SNAPSHOT that would be tagged as latest.
Thinking alternatively I could just remove the -SNAPSHOT and tag as the version number, but that doesn't feel semantically correct either.
My main goal was to avoid cluttering docker repos with ephemeral -SNAPSHOT images that can't be guaranteed to contain any specific version of the software as is the nature of a snapshot.

@davidxia I've tried to make this more flexible by creating a snapShotTag value to allow you to specify a tag for snapshots rather than just latest, so you could tag your snapshots as unstable for example.
Additionally add a flag to configure if release versions are also tagged as latest when built, so they're both foo/bar:1.2.3 and foo/bar:latest.
I think this makes it more flexible for more use cases, again the default behaviour shouldn't change.

You're correct, it's a fair amount more config to do so than what I've proposed here, but I can see why wouldn't want to add more weight to the plugin.


Ability to copy and save others playlists

Fixes
Issue Number: closes #1879

Copy: makes a new private playlist from another existing playlist
Save: Adds someone's public playlist to a saved list and displays them on your playlists page. Basically allows to "follow" future updates and always have the most recent version of the playlist, but can't edit or publish it (unless copied).

🟢  https://salt.odysee.com

b96b0c9 to 512e10d

Squash to minimal; prune discarded ideas. Backup available in backup/ branch.


Error building static files

Hi guys, im trying to build slate for static deployment. After running into the issues with middleman on and ruby 2.4.0. I followed the recommendations in #674 and am working off the dev branch
I haven't added any of my source files yet so this is running directly off the dev branch.
bundle exec middleman build --clean
Assertion failed: (!STR_EMBED_P(shared)), function str_new_frozen, file string.c, line 1075.

I see that im running 2.3.0 still. changed versions and it worked. closing

just to help, I also had the same problem since ruby on CentOS 7 PM is v2.3.0, I installed the RVM, some nice instructions here: https://noteits.net/2015/07/20/install-ruby-1-9-3-or-any-other-version-on-centos/


Skip rancher from building

the build is completely messed up, even going back to an older release no longer works. disable it for now

well it xfail succeeded now, so I guess it was resolved


Report region data is incorrect for energy counters

I'm seeing wildly varying data for energy in the new reports.  The energy reporting for regions appears to be an entire order of magnitude smaller utilizing the new code path.
This command was used to generate data with the new code path:
$ GEOPM_RM="SLURM" GEOPM_AGENT="energy_efficient" GEOPM_KEEP_FILES=true GEOPM_RUN_LONG_TESTS=true ./geopm_test_integration.py -v TestIntegration.test_plugin_efficient_freq_offline

The resulting report data for dgemm at sticker looks like the following with the new code path:
##### geopm 0.5.0+dev4gb1531e0 #####
Profile: test_plugin_efficient_freq_offline_freq_2200000000.0
Agent: energy_efficient
Policy Mode: deprecated
Tree Decider: deprecated
Leaf Decider: deprecated
Power Budget: -1

Host: quartz17
Final freq map:
... <OTHER REGIONS OMITTED>
Region dgemm (0x00000000a74bbf35):
    runtime (sec): 9.76876
    sync-runtime (sec): 0.980965
    energy (joules): 71.6641
    frequency (%): 117.014
    frequency (Hz): 2.45729e+09
    mpi-runtime (sec): 0
    count: 10
... <OTHER REGIONS OMITTED>

The same data utilizing the old code path (by dropping GEOPM_AGENT= from the above command):
##### geopm 0.5.0+dev4gb1531e0 #####
Profile: test_plugin_efficient_freq_offline_freq_2200000000.0
Policy Mode: DYNAMIC
Tree Decider: static_policy
Leaf Decider: efficient_freq
Power Budget: 400

Host: quartz17
... <OTHER REGIONS OMITTED>
Region dgemm<PHONE_NUMBER>3):
    runtime (sec): 10.1416
    energy (joules): 2660.76
    frequency (%): 111.705
    mpi-runtime (sec): 0.1402
    count: 10
... <OTHER REGIONS OMITTED>

So the fact that we see 71.6 Joules in the new code path and 2660.7 in the old code path is a problem given that the runtimes/frequencies are comparable.
To top it off, the energy data is highly variable in the new code path:
------------------------------------------------------------------------------------------------------------------------
Region : dgemm
                   energy   runtime  mpi_runtime  frequency  count      power  energy_savings  runtime_savings
region freq_mhz
dgemm  2200       71.6641   9.76876          0.0   117.0140     10   7.336049      -54.449718       -71.234630
       2100      214.2650  10.85000          0.0    99.9999     10  19.747926       48.342006       -54.170507
       2000      103.2270  10.65970          0.0    95.2385     10   9.683856       -7.224854       -56.922803
       1900      112.2010  11.79040          0.0    90.4752     10   9.516301        1.351147       -41.873897
       1800      105.3340  11.94850          0.0    85.7144     10   8.815667       -5.080031       -39.996652
       1700      112.1910  12.94230          0.0    80.9507     10   8.668552        1.342354       -29.246734
       1600      197.7510  12.94480          0.0    76.1904     10  15.276482       44.028096       -29.221772
       1500      204.9880  13.69540          0.0    71.4287     10  14.967653       46.004156       -22.139551
       1400       86.0456  15.06910          0.0    66.6653     10   5.710069      -28.635282       -11.005302
       1300      119.2880  17.05070          0.0    61.9047     10   6.996076        7.211958         1.895523
       1200      136.9350  18.13110          0.0    57.1429     10   7.552493       19.169679         7.741395

That data is not as variable, and seems valid in the old code path:
------------------------------------------------------------------------------------------------------------------------
Region : dgemm
                  energy  runtime  mpi_runtime  frequency  count       power  energy_savings  runtime_savings
region freq_mhz
dgemm  2200      2660.76  10.1416     0.140200   111.7050     10  262.360969       -0.640419        -2.487773
       2100      2708.71  10.2680     0.209060    99.9998     10  263.801130        1.141134        -1.226139
       2000      2712.47  11.4023     0.204586    95.2378     10  237.887970        1.278171         8.843830
       1900      2726.94  11.9181     0.207437    90.4760     10  228.806605        1.802020        12.788951
       1800      2702.34  11.9875     0.163365    85.7141     10  225.429823        0.908102        13.293848
       1700      2682.88  12.1119     0.173344    80.9524     10  221.507773        0.189349        14.184397
       1600      2763.56  13.2495     0.210122    76.1905     10  208.578437        3.103244        21.552511
       1500      2837.74  14.3384     0.203234    71.4285     10  197.911901        5.636175        27.510043
       1400      2831.55  14.6065     0.245878    66.6667     10  193.855475        5.429888        28.840585
       1300      2841.29  15.7289     0.216183    61.9048     10  180.641367        5.754076        33.918456
       1200      2871.28  17.6608     0.210809    57.1429     10  162.579272        6.738458        41.147060

I've been running the test_counters test like this:
$ git clean -fd . ; GEOPM_RM="SLURM" GEOPM_AGENT="energy_efficient" GEOPM_KEEP_FILES=true GEOPM_RUN_LONG_TESTS=true ./geopm_test_integration.py -v TestIntegration.test_counters

You should not have to set GEOPM_AGENT on the cmdline since it's being set in the Python code explicitly.

Setting the following in the Python has no discernible effect on the report data:
os.environ['GEOPM_REGION_BARRIER'] = 'true'

On BDX, I added the energy for the two sockets and two DRAMs as separate region signals in the report.  I see a lot of energy for specific regions being attributed to the unmarked region.
Data for tutorial 2 with all2all removed (report is below):
region    board energy    total pkg + dram energy
stream    2749.76         3660.66
dgemm     317.91          736.2936
sleep     129.767         286.5424
unmarked  1631.96	  145.9054
-------------------------------------------
          4829.397        4829.4014

epoch     4935.93
application  4938.25

Unfortunately, it looks like #268 is going to be as easy to fix as I originally thought.  The signal index passed to push_region_signal_total() might already be a combined signal, and we don't have access to the original domain of that index.  It might easier to do the separation into packages and dram in the Reporter itself for now.
Host: quartz2391
Region tutorial_stream (0x000000008a1e10cd):
    runtime (sec): 48.4436
    sync-runtime (sec): 35.195
    energy (joules): 2749.76
    pkg0 energy: 1059.71
    pkg1 energy: 1027.32
    dram0 energy: 779.724
    dram1 energy: 793.906
    frequency (%): 121.623
    frequency (Hz): 2.55409e+09
    mpi-runtime (sec): 0
    count: 20
Region tutorial_dgemm (0x00000000c82f28bd):
    runtime (sec): 11.4615
    sync-runtime (sec): 4.81618
    energy (joules): 317.91
    pkg0 energy: 267.554
    pkg1 energy: 275.831
    dram0 energy: 91.5246
    dram1 energy: 101.384
    frequency (%): 123.515
    frequency (Hz): 2.59382e+09
    mpi-runtime (sec): 0
    count: 10
Region tutorial_sleep (0x000000009803a79a):
    runtime (sec): 10.0007
    sync-runtime (sec): 4.57106
    energy (joules): 129.767
    pkg0 energy: 121.738
    pkg1 energy: 67.8481
    dram0 energy: 72.8128
    dram1 energy: 24.1435
    frequency (%): 133.738
    frequency (Hz): 2.80849e+09
    mpi-runtime (sec): 0
    count: 10
Region unmarked-region (0x2000000000000000):
    runtime (sec): 0.830744
    sync-runtime (sec): 26.1063
    energy (joules): 1631.96
    pkg0 energy: 45.8457
    pkg1 energy: 43.3051
    dram0 energy: 29.0767
    dram1 energy: 27.6779
    frequency (%): 123.712
    frequency (Hz): 2.59796e+09
    mpi-runtime (sec): 0
    count: 0
Region epoch (0x8000000000000000):
    runtime (sec): 70.6882
    sync-runtime (sec): 0
    energy (joules): 4935.93
    pkg0 energy: 0
    pkg1 energy: 0
    dram0 energy: 0
    dram1 energy: 0
    frequency (%): 0
    frequency (Hz): 0
    mpi-runtime (sec): 0
    count: 10
Application Totals:
    runtime (sec): 70.7488
    energy (joules): 4938.25
    mpi-runtime (sec): 0
    ignore-time (sec): 0
    geopmctl memory HWM: 48740 kB
    geopmctl network BW (B/sec): 0

Another observation that may be related: dram_power calculated by test_power_consumption is much higher with the new code path.  This means that the PowerGovernorAgent is setting the package power too low.
Old code path:
Power stats from mr-fusion4 :
       pkg_energy-0  dram_energy-0  elapsed_time  socket_power    dram_power  combined_power
count  34499.000000   34499.000000  34499.000000  34499.000000  34499.000000    34499.000000
mean       0.629812       0.092118      0.005039    125.012259     18.279863      143.292122
std        0.035661       0.011998      0.000209      5.008140      2.184784        6.013367
min        0.424255       0.016006      0.004251     84.175843      3.167558       89.360195
25%        0.621216       0.086975      0.004981    123.582553     17.308418      141.860013
50%        0.628479       0.092773      0.005020    125.321168     18.470292      143.743081
75%        0.636780       0.097885      0.005057    127.090035     19.502354      145.615627
max        3.555176       0.630341      0.029355    168.229446     27.134881      187.082938

New code path:
Power stats from mr-fusion4 :
       pkg_energy-0  dram_energy-0  elapsed_time  socket_power    dram_power  combined_power
count  11120.000000   11120.000000  11120.000000  11120.000000  11120.000000    11120.000000
mean       5.114180       2.049280      0.051632    100.212922     40.724075      140.936998
std        2.248777       0.796504      0.024497      5.653610      5.411243       10.074201
min        0.621521       0.136963      0.007284     62.798389     16.875578       88.106139
25%        3.906937       1.615112      0.038542     98.175190     38.721556      137.606252
50%        4.425476       1.824554      0.044191    100.293620     41.074132      141.714073
75%        5.444366       2.207748      0.055695    102.007892     43.076482      144.752890
max       25.912903       8.842773      0.282382    204.670129    110.097180      313.564808

If the above numbers are measured on KNL, is it possible that on-package-memory is being used in one case and not in the other?  The usual way of directing the application to use on-package-memory is with "numactl -m1" preceding the application call.

This is fixed with v0.5.1, https://github.com/geopm/geopm/tree/v0.5.1.


Screen size does not adjust to display size

If opened on Linux-System (Debian GNU/Linux 12 (bookworm)) the size of the program window adapts to the screen size but the size of the displayed program doesn't, so parts of the program aren't visible.
Version: commit 6645bba5c9069d0ac80439ca67fa6fcfaaa97782

Yes the window size is hard coded at the moment.
This should be changed. The reason it isn`t implemented yet, is that it was a little bit problematic to get a function to return the right work area size of the monitor.

This funktion is depending on whether DWM (Windows), X11 or Wayland (both Linux) is utilized. I guess ImGui is using X11 in our example, @NP199?
Potential solutions:
Windows solution:
#include <windows.h>
int screenWidth = GetSystemMetrics(SM_CXSCREEN);
int screenHeight = GetSystemMetrics(SM_CYSCREEN);

X11 solution:
#include <X11/Xlib.h>
Display* display = XOpenDisplay(NULL);
int screenWidth = DisplayWidth(display, DefaultScreen(display));
int screenHeight = DisplayHeight(display, DefaultScreen(display));
XCloseDisplay(display);

Wayland solution:
#include <gtk/gtk.h>
gtk_init(&argc, &argv);
GdkScreen* screen = gdk_screen_get_default();
int screenWidth = gdk_screen_get_width(screen);
int screenHeight = gdk_screen_get_height(screen);

No guarantees. I am just spitballing here.
We should then decide at compile-time which implementation shall be used.
@dominicpoeschko do you agree?

The problem is not getting the right screen size. It is getting the proper working area. Sometimes you have toolbars (i think in windows the taskbar) and they would be overlapped with the window from omniview. The function for glw to get the working area did not work properly, but maybe i used it the wrong way

I see.
One approach to resolve this issue would be to maximize the window right after creation, then getting the window size and rerendering everything.

For devices with more than 1280x760 pixels this works fine now.


Fix GetFullyQualifiedName()

Don't expect GetComputerName() (hostname) and FQDN to be the same. They may not be!

Hi @andschwa, I'm your friendly neighborhood Microsoft Pull Request Bot (You can call me MSBOT). Thanks for your contribution!

It looks like you're a Microsoft contributor (Andy Schwartzmeyer). If you're full-time, we DON'T require a Contribution License Agreement. If you are a vendor, please DO sign the electronic Contribution License Agreement. It will take 2 minutes and there's no faxing! https://cla.microsoft.com.

TTYL, MSBOT;


Policyfile Revision ID Validation.

:construction: Corresponding Changes to Pedant in Progress
In the Policyfile draft RFC, revision_id is a required field. Add this validation to Chef Zero. This works locally with changes to pedant, but I can't commit those because erchef's policyfile validation is broken.
See Also:

ChefDK PR: https://github.com/chef/chef-dk/pull/323
Pedant: https://github.com/chef/chef-pedant/pull/100
Policyfile Draft RFC: https://github.com/chef/chef-rfc/pull/91

:+1: for code.  Let's see what the failures are though ...

Oh, right.  Corresponding pedant changes in progress :)  :+1: once you update the pedant SHA to a passing one :)

Thanks for review. Now that I got pedant merged, I'll update that.

Ugh, this is a weird one. When I give a policy with a 255 character name, Zero gets this error:
[2015-02-26T21:56:22+00:00] ERROR: #<Errno::ENAMETOOLONG: File name too long @ rb_sysopen - /tmp/d20150226-2418-ftq19p/repo/policies/some_policy_group/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json>

Which is really weird, because:
'/tmp/d20150226-2418-ftq19p/repo/policies/some_policy_group/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json'.size
#=> 319

And yet the manual states:
ENAMETOOLONG
The length of the path argument exceeds {PATH_MAX} or a pathname component is longer than {NAME_MAX}.

And the internet says that on Linux, PATH_MAX is 4096.


Elements above the 256th position in a list cannot be null

Steps to reproduce
import kuzu
import pandas as pd
import random

db = kuzu.Database("tmpdatabase")
conn = kuzu.Connection(db)

df = pd.DataFrame({'col1': [[random.randint(-(1<<60), (1<<60)) if random.randint(0, 5) == 0 else None for i in range(2048)] for x in range(2)]})

print(df['col1'][0])
print(conn.execute("CALL READ_PANDAS(df) RETURN col1").get_next())

By examining the output, you can see that after the 256th position, None is replaced by 0, meaning we don't register values as being null after the 256th position in a list.
This is likely not a bug with the pandas scanner; the pyarrow scanner exhibits the same behaviour, and I can confirm that the null values after position 256 were correct set by the scanner. At some point afterwards, the null was lost. Strangely, the row afterwards maintains its null values.

import kuzu
import pandas as pd
import random

db = kuzu.Database("tmpdatabase")
conn = kuzu.Connection(db)

df = pd.DataFrame({'col1': [[random.randint(-(1<<60), (1<<60)) if random.randint(0, 5) == 0 else None for i in range(2048)] for x in range(2)]})

tp = conn.execute("LOAD FROM df RETURN col1").get_next()[0]
assert(tp == df['col1'][0])

The bug should has been solved


Hide empty header

The functionality has been implemented (I am not sure if this is the best approach, any comments are welcome).
I will add some test next week.
Fixes: #120.

Updated. I have added some unit tests. I have also tested it manually and it seems to work.

was there a reason this didnt get merged or was it just forgotten?

Not from my side. But I can not do this as I don't have write permissions over this repository.


animation for react-router-native?

I have the same question as the following
https://stackoverflow.com/questions/48806300/is-it-possible-to-apply-animation-for-react-router-native
Is there a recommended way to apply navigate animation when using react-router-native ?

This is a bug tracker, not a support system. For usage questions, please use Stack Overflow or Reactiflux where there are a lot more people ready to help you out. Thanks!


[JS] feat: add Streaming support

Linked issues
closes: #1593
Details
Updated JS OpenAIModel class to support streaming and updated ActionPlanner to support streaming chunks to the client.
Change details

Added a new StreamingResponse class that implements the new activity based chunking protocol.
Added a new optional set of events that prompt completion models can implement.
Updated the OpenAIModel class to implement the new prompt completion model events.
Updated the OpenAIModel class to use the official node library and added streaming support.
Added a new StreamingLLMClient which manages the task of streaming chunks from the model to the client using the new StreamingResponse class.
Updated the ActionPlanner class to use the new StreamingLLMClient instead of the LLMClient class directly.
Updated the ActionPlanner to return an empty plan anytime streaming is used.
Added a new TestModel class to simplify testing of things like streaming support.
Added basic unit tests for the StreamingResponse, TestModel, LLMClient, and StreamingLLMClient classes. `

Attestation Checklist

[x ] My code follows the style guidelines of this project

I have checked for/fixed spelling, linting, and other errors

I have commented my code for clarity

I have made corresponding changes to the documentation (updating the doc strings in the code is sufficient)

My changes generate no new warnings

I have added tests that validates my changes, and provides sufficient test coverage. I have tested with:

Local testing
E2E testing in Teams

New and existing unit tests pass locally with my changes

Additional information

I started basic unit tests for the LLMClient class. These tests should be extended to provider better coverage. We should also add unit tests for the ActionPlanner class now that the TestModel class exists.

@Stevenic could you mark the class/methods in LLMClient as deprecated?

@Stevenic could you mark the class/methods in LLMClient as deprecated? Notes indicating to use StreamingLLMClient instead would be great.

It's not really deprecated though. You should just generally use the derived class. It will trigger warnings if I mark it as deprecated since it's a base class

It's not really deprecated though. You should just generally use the derived class. It will trigger warnings if I mark it as deprecated since it's a base class

Okay so maybe marking it as deprecated isn't the right answer, but I find it confusing that the base class is only being used by one derived class. This is specifically done for backwards compatibility, correct? In that case there should be remarks to that effect, and what scenarios you would want to use the base class. Feel free to let me know if this is just misconception from my functions oriented brain, but personally the extra comments would be beneficial.

It's not really deprecated though. You should just generally use the derived class. It will trigger warnings if I mark it as deprecated since it's a base class

Okay so maybe marking it as deprecated isn't the right answer, but I find it confusing that the base class is only being used by one derived class. This is specifically done for backwards compatibility, correct? In that case there should be remarks to that effect, and what scenarios you would want to use the base class. Feel free to let me know if this is just misconception from my functions oriented brain, but personally the extra comments would be beneficial.

I can merge the two classes