thanos compactor crashes with "write compaction: chunk 8 not found: reference sequence 0 out of range"

Thanos, Prometheus and Golang version used

thanos, version 0.5.0 (branch: HEAD, revision: 72820b3f41794140403fd04d6da82299f2c16447)
build user:       circleci@eeac5eb36061
build date:       20190606-10:53:12
go version:       go1.12.5
What happened
thanos compactor crashes with ""write compaction: chunk 8 not found: reference sequence 0 out of range"
What you expected to happen
Should work fine :-)
How to reproduce it (as minimally and precisely as possible):
Not sure :-/
Full logs to relevant components
Out of the list of objects dumped along with error message I've found one without chunks
$  gsutil ls -r gs://REDACTED/01DBZNNTM2557YW8T35RBM676P
gs://REDACTED/01DBZNNTM2557YW8T35RBM676P/:
gs://REDACTED/01DBZNNTM2557YW8T35RBM676P/index
gs://REDACTED/01DBZNNTM2557YW8T35RBM676P/meta.json

meta.json contents:

{
	"version": 1,
	"ulid": "01DBZNNTM2557YW8T35RBM676P",
	"minTime":<PHONE_NUMBER>000,
	"maxTime":<PHONE_NUMBER>000,
	"stats": {
		"numSamples": 35591778,
		"numSeries": 39167,
		"numChunks": 299446
	},
	"compaction": {
		"level": 2,
		"sources": [
			"01DB04S079GCEBKMTWZBH8HQA3",
			"01DB0BMQG3W7M12M8DE3V9QW5C",
			"01DB0JGEQD5RCZ50JAS2NENHQ6",
			"01DB0SC6071QW08JWQVG000AKF"
		],
		"parents": [
			{
				"ulid": "01DB04S079GCEBKMTWZBH8HQA3",
				"minTime":<PHONE_NUMBER>000,
				"maxTime":<PHONE_NUMBER>000
			},
			{
				"ulid": "01DB0BMQG3W7M12M8DE3V9QW5C",
				"minTime":<PHONE_NUMBER>000,
				"maxTime":<PHONE_NUMBER>000
			},
			{
				"ulid": "01DB0JGEQD5RCZ50JAS2NENHQ6",
				"minTime":<PHONE_NUMBER>000,
				"maxTime":<PHONE_NUMBER>000
			},
			{
				"ulid": "01DB0SC6071QW08JWQVG000AKF",
				"minTime":<PHONE_NUMBER>000,
				"maxTime":<PHONE_NUMBER>000
			}
		]
	},
	"thanos": {
		"labels": {
			"environment": "devint",
			"instance_number": "1",
			"location": "REDACTED",
			"prometheus": "monitoring/prometheus-operator-prometheus",
			"prometheus_replica": "prometheus-prometheus-operator-prometheus-1",
			"stack": "data"
		},
		"downsample": {
			"resolution": 0
		},
		"source": "compactor"
	}
}

It is an object created by compactor apparently.
We've been running compactor for some time, but after a while (due to lack of local disk storage) it was crashing constantly. After an extended period of crashing storage has been added and compactor was able to go further until it encountered problem described here.
I guess important part is how such object ended up in bucket, although I wonder if it is possible for thanos to ignore such objects and keep processing data rest of data? (exposing data about bad objects in metrics)
I'd guess that it was somehow created during constant crashes we've had earlier, but have nothing to support that.
Anything else we need to know
#688 describes similar issue, although it is about much older thanos than we use here.
We've been running 0.5 and 0.4 before that. I'm not sure, but it is possible that 0.3.2 (compactor) was used at the beginning.

Sounds like Thanos Compact has crashed midway during the upload and you got inconsistent data. Nowadays Thanos Compact removes old, malformed data that is older than the maximum of consistency delay and the minimum age for removal (30 minutes). Does that not work for you for some reason, @bjakubski?

Also, Thanos Compact now has metrics about failed compactions (in 0.6.0 which is soon to be released) so you can use that :P

I've just encountered the same problem on another object in bucket, but this time it was created by sidecar. I do not see any message in logs about sidecar ever uploading it, but this object is older (> week old) but according to GCP storage it was just created yesterday. I see messages in prometheus logs
2019-06-29 "write block"
2019-07-02 "found healthy block" (probably after prom restart)
2019-07-10 21:31 "found healthy block) (after prom restart)
object in bucket seems to have been created at 2019-07-10 21:25 - which is just after one of thanos sidecars successfully connected to prometheus (after pod restart). In logs I can see it uploading various objects, but nothing about this particular ulid
Now: I'm running unusual setup with thanos-sidecar: prometheus compaction is disabled, but retention is quite long: 15d IIRC It generally seems to work fine, although I wonder if it might cause problems like I have here?
What is the consistency delay? Should I've been expecting compactor to ignore/remove this object from bucket?

Also I met the same question about this , the error log is write compaction: chunk 8 not found: reference sequence 0 out of range, i found the compactor pods always crashoff , and then restart pod again, below is the pod information. and i don't know how to fix this question, could anyone know the issue?
prometheus-operator-57fc4686dc-gw8st   1/1     Running   2          17d
thanos-compactor-0                     1/1     Running   162        24h
thanos-query-596fd87fcc-2tmx8          1/1     Running   0          24h
thanos-store-0                         1/1     Running   0          24h

I'm seeing the same error for blocks uploaded with thanos-compactor 0.6.0 (and then processed by 0.6.0) myself. Backend storage is Ceph cluster via Swift API.
thanos, version 0.6.0 (branch: HEAD, revision: c70b80eb83e52f5013ed5ffab72464989c132883)
  build user:       root@fd15c8276e5c
  build date:       20190718-11:11:58
  go version:       go1.12.5

thanos-compactor has uploaded a compacted block yesterday:
Jul 29 14:03:47 thanos01 thanos[32452]: level=info ts=2019-07-29T14:03:47.456113025Z caller=compact.go:444 msg="compact blocks" count=4 mint=1561622400000 maxt=1561651200000 ulid=01DGZ0PDS2MFX25P9CKG1C1TA3 sources="[01DEC9F6B0BVQHFG7BZDS75N0V 01DECGAXK0CM9HC2QPZ7MMH8M0 01DECQ6MV0K0FR00HHY9906178 01DECY2C2ZX4F6N9GKHKM2PC61]" duration=9.524377767s
Jul 29 14:03:47 thanos01 thanos[32452]: level=warn ts=2019-07-29T14:03:47.752332697Z caller=runutil.go:108 compactionGroup="0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}" msg="detected close error" err="close file /var/lib/thanos/compactor/compact/0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}/01DGZ0PDS2MFX25P9CKG1C1TA3/meta.json: close /var/lib/thanos/compactor/compact/0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}/01DGZ0PDS2MFX25P9CKG1C1TA3/meta.json: file already closed"
Jul 29 14:03:55 thanos01 thanos[32452]: level=warn ts=2019-07-29T14:03:55.115560765Z caller=runutil.go:108 compactionGroup="0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}" msg="detected close error" err="close file /var/lib/thanos/compactor/compact/0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}/01DGZ0PDS2MFX25P9CKG1C1TA3/chunks/000001: close /var/lib/thanos/compactor/compact/0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}/01DGZ0PDS2MFX25P9CKG1C1TA3/chunks/000001: file already closed"
Jul 29 14:03:56 thanos01 thanos[32452]: level=warn ts=2019-07-29T14:03:56.472928348Z caller=runutil.go:108 compactionGroup="0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}" msg="detected close error" err="close file /var/lib/thanos/compactor/compact/0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}/01DGZ0PDS2MFX25P9CKG1C1TA3/index: close /var/lib/thanos/compactor/compact/0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}/01DGZ0PDS2MFX25P9CKG1C1TA3/index: file already closed"
Jul 29 14:03:56 thanos01 thanos[32452]: level=warn ts=2019-07-29T14:03:56.571187127Z caller=runutil.go:108 compactionGroup="0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}" msg="detected close error" err="close file /var/lib/thanos/compactor/compact/0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}/01DGZ0PDS2MFX25P9CKG1C1TA3/index.cache.json: close /var/lib/thanos/compactor/compact/0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}/01DGZ0PDS2MFX25P9CKG1C1TA3/index.cache.json: file already closed"
Jul 29 14:03:56 thanos01 thanos[32452]: level=warn ts=2019-07-29T14:03:56.72380147Z caller=runutil.go:108 compactionGroup="0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}" msg="detected close error" err="close file /var/lib/thanos/compactor/compact/0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}/01DGZ0PDS2MFX25P9CKG1C1TA3/meta.json: close /var/lib/thanos/compactor/compact/0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}/01DGZ0PDS2MFX25P9CKG1C1TA3/meta.json: file already closed"
Jul 29 14:03:56 thanos01 thanos[32452]: level=debug ts=2019-07-29T14:03:56.723861375Z caller=compact.go:906 compactionGroup="0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}" msg="uploaded block" result_block=01DGZ0PDS2MFX25P9CKG1C1TA3 duration=8.994729984s

and now it's choking on that block:
Jul 30 11:25:38 thanos01 thanos[22465]: level=debug ts=2019-07-30T11:25:38.310116816Z caller=compact.go:252 msg="download meta" block=01DGZ0PDS2MFX25P9CKG1C1TA3
Jul 30 11:25:47 thanos01 thanos[22465]: level=debug ts=2019-07-30T11:25:47.039193509Z caller=compact.go:840 compactionGroup="0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}" msg="downloaded and verified blocks" blocks="[/var/lib/thanos/compactor/compact/0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}/01DEBE09AZXVCNWKYCWP43A7G4 /var/lib/thanos/compactor/compact/0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}/01DGZ0PDS2MFX25P9CKG1C1TA3]" duration=7.277184353s
Jul 30 11:25:47 thanos01 thanos[22465]: level=error ts=2019-07-30T11:25:47.214649027Z caller=main.go:199 msg="running command failed" err="error executing compaction: compaction failed: compaction failed for group 0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}: compact blocks [/var/lib/thanos/compactor/compact/0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}/01DEBE09AZXVCNWKYCWP43A7G4 /var/lib/thanos/compactor/compact/0@{datacenter=\"p24\",environment=\"internal\",replica=\"02\"}/01DGZ0PDS2MFX25P9CKG1C1TA3]: write compaction: chunk 8 not found: reference sequence 0 out of range"

First, I'd expect it to survive broken blocks, but what's more concerning is that the block has been uploaded successfully before (unless those warning messages are not there just for show, and there is indeed something wrong).
What's uploaded:
$ swift list prometheus-storage | grep 01DGZ0PDS2MFX25P9CKG1C1TA3
01DGZ0PDS2MFX25P9CKG1C1TA3/chunks/000001
01DGZ0PDS2MFX25P9CKG1C1TA3/index
01DGZ0PDS2MFX25P9CKG1C1TA3/index.cache.json
01DGZ0PDS2MFX25P9CKG1C1TA3/meta.json
debug/metas/01DGZ0PDS2MFX25P9CKG1C1TA3.json

and meta.json:
{
	"ulid": "01DGZ0PDS2MFX25P9CKG1C1TA3",
	"minTime":<PHONE_NUMBER>000,
	"maxTime":<PHONE_NUMBER>000,
	"stats": {
		"numSamples": 271799367,
		"numSeries": 141915,
		"numChunks": 2265057
	},
	"compaction": {
		"level": 2,
		"sources": [
			"01DEC9F6B0BVQHFG7BZDS75N0V",
			"01DECGAXK0CM9HC2QPZ7MMH8M0",
			"01DECQ6MV0K0FR00HHY9906178",
			"01DECY2C2ZX4F6N9GKHKM2PC61"
		],
		"parents": [
			{
				"ulid": "01DEC9F6B0BVQHFG7BZDS75N0V",
				"minTime":<PHONE_NUMBER>000,
				"maxTime":<PHONE_NUMBER>000
			},
			{
				"ulid": "01DECGAXK0CM9HC2QPZ7MMH8M0",
				"minTime":<PHONE_NUMBER>000,
				"maxTime":<PHONE_NUMBER>000
			},
			{
				"ulid": "01DECQ6MV0K0FR00HHY9906178",
				"minTime":<PHONE_NUMBER>000,
				"maxTime":<PHONE_NUMBER>000
			},
			{
				"ulid": "01DECY2C2ZX4F6N9GKHKM2PC61",
				"minTime":<PHONE_NUMBER>000,
				"maxTime":<PHONE_NUMBER>000
			}
		]
	},
	"version": 1,
	"thanos": {
		"labels": {
			"datacenter": "p24",
			"environment": "internal",
			"replica": "02"
		},
		"downsample": {
			"resolution": 0
		},
		"source": "compactor"
	}
}

This also breaks when running with --wait.
I was expecting it to fail, but not quit... but it did crashloop with that error.
After some time I deleted the pod and it seems to be running fine now... maybe that 30m mentioned above?

OK that was quick, just crashlooped again

Are you hitting this maybe? https://github.com/thanos-io/thanos/issues/1331
Essentially partial upload and empty or missing chunk files in <block ulid>/chunks folder?

You have 01DGZ0PDS2MFX25P9CKG1C1TA3/chunks/000001 but it might be partiall uploaded. I think we should focus on that issue then.
Thanks all for reporting let's investigate this upload path with minio client. Essentially this might be some assumption: https://github.com/thanos-io/thanos/issues/1331#issuecomment-519855917

Let's continue on one of the issues. This looks like a duplicate of https://github.com/thanos-io/thanos/issues/1331
This one was first but I think it does not matter much - let's continue on one (: Hope this is ok with you guys!

Are you hitting this maybe? #1331

not sure, I'm using GCS...  that issue seems to be specific to S3...

hm, maybe we are wrong and GCS is affected as well. What about other question about chunk folder?

sorry, didn't see that question...
So, the log says:
level=error ts=2019-08-09T14:09:55.107857264Z caller=main.go:199 msg="running command failed" err="error executing compaction: compaction failed: compaction failed for group 0@{server=\"central\"}: compact blocks [/var/thanos/compact/compact/0@{server=\"central\"}/01DB9JXXFE1HE1CYQM171PRMFK /var/thanos/compact/compact/0@{server=\"central\"}/01DBFCAMBRRMRT0SJAT516AVF4 /var/thanos/compact/compact/0@{server=\"central\"}/01DBN5QC3G1ZJXQZJ6MXZNPMV2 /var/thanos/compact/compact/0@{server=\"central\"}/01DBTZ3WZY9VR0T3MDZRTP5Z95 /var/thanos/compact/compact/0@{server=\"central\"}/01DC0RGG6EK3BMK96YVRBDQT6E]: write compaction: chunk 8 not found: reference sequence 0 out of range"

01DB9JXXFE1HE1CYQM171PRMFK:

01DBFCAMBRRMRT0SJAT516AVF4:

01DBN5QC3G1ZJXQZJ6MXZNPMV2:

01DBTZ3WZY9VR0T3MDZRTP5Z95: is empty, index and meta files exists though
01DC0RGG6EK3BMK96YVRBDQT6E:

It seems to be the problem is 01DBTZ3WZY9VR0T3MDZRTP5Z95? Should I just delete the entire folder?

anything I can do as a workaround so compact works again?

You should delete the blocks which have duplicated data and only leave one copy. It's up to you to decide which one it is (: It sounds like you need to delete the one you've mentioned but please double check.

You should delete the blocks which have duplicated data and only leave one copy. It's up to you to decide which one it is (: It sounds like you need to delete the one you've mentioned but please double check.

yeah, did that and it seems to be running now

Hi, I am having this issue using thanos 0.8.1. I have tried moving the directories for blocks it complains about out of the bucket but then every time I run the compactor it just finds some more to be sad about :-(
This is crashing the compactor with 0.8.1 even with --wait flag.
Any help to further debug this would be appreciated! (@bwplotka maybe?)

Hi, we started some doc when we discussed another potential cause of this, which is the false assumption of partial block upload: https://docs.google.com/document/d/1QvHt9NXRvmdzy51s4_G21UW00QwfL9BfqBDegcqNvg0/edit#

Reopening as it still occurs. The mentioned doc above states potential issue (however quite unlikely) of compactor removing a block when it is being still uploaded for some reason (long upload / old block upload). We are working on fix for that particular case

To compliment the last comment:
thanosio/thanos:v0.9.0
Compactor logs:
level=warn ts=2020-01-03T10:30:29.887625771Z caller=prober.go:117 msg="changing probe status" status=not-ready reason="error executing compaction: compaction failed: compaction failed for group 0@3883330991078906199: gather index issues for block /thanos-compact-data/compact/0@3883330991078906199/01DXKWN08YHZQMCHHJ3VQVVDSP: open index file: try lock file: open /thanos-compact-data/compact/0@3883330991078906199/01DXKWN08YHZQMCHHJ3VQVVDSP/index: no such file or directory"
level=info ts=2020-01-03T10:30:29.888132722Z caller=http.go:78 service=http/server component=compact msg="internal server shutdown" err="error executing compaction: compaction failed: compaction failed for group 0@3883330991078906199: gather index issues for block /thanos-compact-data/compact/0@3883330991078906199/01DXKWN08YHZQMCHHJ3VQVVDSP: open index file: try lock file: open /thanos-compact-data/compact/0@3883330991078906199/01DXKWN08YHZQMCHHJ3VQVVDSP/index: no such file or directory"

Meantime in the bucket (there is the only file meta.json in the bucket indeed):
{
	"ulid": "01DXKWN08YHZQMCHHJ3VQVVDSP",
	"minTime":<PHONE_NUMBER>000,
	"maxTime":<PHONE_NUMBER>000,
	"stats": {
		"numSamples": 954058569,
		"numSeries": 906289,
		"numChunks": 8144375
	},
	"compaction": {
		"level": 2,
		"sources": [
			"01DXJYK0WNNX8WKK3KXSK2JR6S",
			"01DXK5ER4N46ST170D3D8JX1FS",
			"01DXKCAFCYHS2Z94XP5QYBFJHA",
			"01DXKK66MG06PDAQAQD1YNS8AX"
		],
		"parents": [
			{
				"ulid": "01DXJYK0WNNX8WKK3KXSK2JR6S",
				"minTime":<PHONE_NUMBER>000,
				"maxTime":<PHONE_NUMBER>000
			},
			{
				"ulid": "01DXK5ER4N46ST170D3D8JX1FS",
				"minTime":<PHONE_NUMBER>000,
				"maxTime":<PHONE_NUMBER>000
			},
			{
				"ulid": "01DXKCAFCYHS2Z94XP5QYBFJHA",
				"minTime":<PHONE_NUMBER>000,
				"maxTime":<PHONE_NUMBER>000
			},
			{
				"ulid": "01DXKK66MG06PDAQAQD1YNS8AX",
				"minTime":<PHONE_NUMBER>000,
				"maxTime":<PHONE_NUMBER>000
			}
		]
	},
	"version": 1,
	"thanos": {
		"labels": {
                             ....
		},
		"downsample": {
			"resolution": 0
		},
		"source": "compactor"
	}
}```

So it seems compactor failed to upload itself and not crashing against it.

We merged fix for the case of: https://github.com/thanos-io/thanos/issues/1919 which potentially might cause such chunk file to be missing.


add hdfs_doc_mapper.json

I recommend renaming hdfslogsdataset_doc_mapper.json or something like that to make sure people don't think it is a conf to use hdfs as a storage.

I recommend renaming hdfslogs_doc_mapper.json or something like that to make sure people don't think it is a conf to use hdfs as a storage.

ah yeah true

Codecov Report

Merging #216 (82d5406) into main (06223d4) will decrease coverage by 1.33%.
The diff coverage is 49.14%.

:exclamation: Current head 82d5406 differs from pull request most recent head 93411f6. Consider uploading reports for the commit 93411f6 to get more accurate results

@@            Coverage Diff             @@
##             main     #216      +/-   ##
==========================================
- Coverage   75.07%   73.74%   -1.34%
==========================================
  Files          64       71       +7
  Lines        5457     5827     +370
==========================================
+ Hits         4097     4297     +200
- Misses       1360     1530     +170

Impacted Files
Coverage Δ

quickwit-cli/tests/helpers.rs
100.00% <ø> (ø)

...ping/src/default_doc_mapper/field_mapping_entry.rs
84.05% <ø> (-0.07%)
:arrow_down:

quickwit-proto/src/quickwit.rs
0.00% <ø> (ø)

quickwit-search/src/client.rs
0.00% <ø> (ø)

...ckwit-search/src/client_pool/search_client_pool.rs
0.00% <0.00%> (ø)

quickwit-search/src/lib.rs
93.65% <0.00%> (-4.69%)
:arrow_down:

quickwit-search/src/rendezvous_hasher.rs
100.00% <ø> (ø)

quickwit-search/src/root.rs
0.00% <0.00%> (ø)

quickwit-search/src/service.rs
4.34% <0.00%> (-5.66%)
:arrow_down:

quickwit-serve/src/error.rs
68.75% <ø> (ø)

... and 48 more

Continue to review full report at Codecov.

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


go/types: race condition due to lazy initialization of universeError

This program triggers a race condition in go/types on dev.typeparams since 24f9eb2de34d8d92dac4c6ffaa55ff2234c639d2:
package main

import (
	"go/types"
	"sync"
)

func main() {
	var wg sync.WaitGroup

	for i := 0; i < 2; i++ {
		wg.Add(1)
		go func() {
			defer wg.Done()
			types.Universe.Lookup("error").Type().Underlying().(*types.Interface).NumMethods()
		}()
	}

	wg.Wait()
}

/cc @findleyr @griesemer

@mdempsky thanks for that repro!
This is because we lazily write the interface type set. We should eagerly add an empty type set for interfaces in the universe.

It seems that gopherbot did not find the 'fixes' line on the previous CL, because it was not the first mention of this issue? In any case, closing as fixed.

FWIW, gopherbot did, but GitHub won't close issues via commits until those commits are merged back to the main branch of the repo (so for dev. branches you have to wait or close manually).


Prevent model selection synchronizing to DOMSelection during selection.

Current behavior: Now there are some selection issues that are bothering me, e.g.
A NodeView with margin(margin-left and margin-right), when select from NodeView's right to left,  the selection is collapsed accidentally.

A NodeView that regardless of margin, when select from NodeView's right to left, and shuffling between text and NodeView, the anchor of the selection was be collapse to NodeView left.

A NodeView that has content in the schema but does not set with contentDOM, when select from NodeView's right to left, and shuffling between text and NodeView, the anchor of the selection was be collapse to NodeView left.

Expected behavior: The selection should not be affected by the element style and "anchor" should be fixed while moving the "focus"
Through some experiments, I found that when I set the selection in the selectionChange callback triggered by mouse interaction, when the set selection is not the "legal" position considered by the browser, the browser may readjust the selection. Therefore, I boldly submitted a PR  -  In the callback of selectionChange triggered by mouse interaction, do not synchronize selection from model to DOM. I think there might be some unexpected effects, so I'm looking forward to your insight.
Demo to reproduce the issue: Glitch.

This is unlikely to be merged as-is, since indeed, it'll probably break some stuff. Could you set up a demo that allows me to reproduce the behavior in your screencasts? I assume this is Chrome, behaving like that?


Split correct/incorrect fix tests

[!WARNING]
This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

#1254  👈
#1253
#1252
main

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @CatChen and the rest of your teammates on  Graphite

Merge activity

Jul 21, 7:43 PM EDT: @CatChen started a stack merge that includes this pull request via Graphite.


Fix Win32 shared lib build

Hi! I created a port for nanopb in vcpkg one month ago: https://github.com/Microsoft/vcpkg/pull/5057
I found there are two problems with the shared lib building support on Win32 with MSVC:

The generated DLL file exports no symbols, so a corresponding export lib will not be created. And the user of this lib has nothing to link to.
In MSVC, functions may be exported from a DLL by two ways:

Exporting from a DLL Using __declspec(dllexport).
oniguruma is an example: https://github.com/winlibs/oniguruma/blob/master/src/oniguruma.h#L58-L60

Exporting from a DLL Using DEF Files
Since we use CMake here, I think we can set CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS to ON:

Enable this boolean property to automatically create a module definition (.def) file with all global symbols found in the input .obj files for a SHARED library (or executable with ENABLE_EXPORTS) on Windows. The module definition file will be passed to the linker causing all symbols to be exported from the .dll. For global data symbols, __declspec(dllimport) must still be used when compiling against the code in the .dll. All other function symbols will be automatically exported and imported by callers. This simplifies porting projects to Windows by reducing the need for explicit dllexport markup, even in C++ classes.

The generated DLL file installed to a wrong path.
It is similar to: https://stackoverflow.com/questions/22278381/cmake-add-library-followed-by-install-library-destination

Hmm, just a general note: I haven't been maintaining a stable ABI. So shared libraries are a bit risky effort.
Because of the embedded systems background, it is expected that nanopb is statically linked to the executable and headers and code are always in sync.

Hi! @PetteriAimonen Sorry for non-replying for such a long time.
After reading a discussion about the disadvantage of CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS, I think this PR is not so good to get the shared lib build work out on windows. So I am going to close it.
As for the port in vcpkg, I have added a warning message before: https://github.com/Microsoft/vcpkg/blob/master/ports/nanopb/portfile.cmake#L3-L9 . Maybe I will create a new PR to make it static only someday.


Included some C# Keywords

Included some Clojure Extensions
Included one Powershell Extension
Included some Csharp Keywords
Reorganization of the language.main.js define call (To match the folders order)

Hi @lucaslra, I'm your friendly neighborhood Microsoft Pull Request Bot (You can call me MSBOT). Thanks for your contribution!
You've already signed the contribution license agreement. Thanks!
The agreement was validated by Microsoft and real humans are currently evaluating your PR.
TTYL, MSBOT;

@lucaslra Thanks for the contribution. Only the change to src/vs/editor/standalone-languages/csharp.ts is valid. If you remove the other changes I can accept and merge the pull request.

Hi @aeschli, thanks for the feedbacks. Is there a document where the architecture of the VS Code source is described? That should help me to avoid these type of pull requests.

@lucaslra Sorry, except for the extension API extension we currently have no further documentation on API or architecture. But it's a good point, we should definitly start a high level overview in the wiki.

I think it will greatly improve the quality of the contributions.
I made the changes you requested, please let me know if its OK now.

@lucaslra Please make only minimal changes. In this case, only have a change in src/vs/editor/standalone-languages/csharp.ts.

@lucaslra Thanks a lot, sorry for the back and forth.
Good point on providing more guidelines and documentation. I started by updating https://github.com/Microsoft/vscode/wiki/How-to-Contribute


Use REST interface for AppVeyor

The use of a blocking command-line tool per test is quite slow.  It caused my tests to be canceled at the 60 minute limit with only 2,559 completed.
The changes use a Async queue and HTTP batch POST to minimize the time impact on builds with a large number of tests.  With these changes, all 5,781 test complete in 19 minutes.

@ngbrown : Thank you for your contribution 👍. I will take a look on this weekend.

@Faizan2304 I found an issue with how I was handling the Aync at the Flush point.
I also fixed up the build script quite a bit to perform two-phase compilation so that the NuGet packages just built will be the ones tested.  The TastResult.xml or loggerFile.xml are deleted before test and then if they aren't created the AppVeyor build should fail.
I've re-based everything for a clean set of commits.


Optimize new id creation with a large number of parent ids

When creating a new set of ids with a large number of parent_ids (say >500), uuid-api would cause timeout issues. Currently I was able to create a new id with 400 parents. But we'll definitely need to be able to handle more (>2500 or 5000).
Identify the bottleneck and optimize the necessary Python handling or MySQL queries. Including, but not limited to the following two possible places:

Can we use one MySQL query to check the existence of multiple ids?
https://github.com/x-atlas-consortia/uuid-api/blob/7d4625be32b9694dbbca10dab8bd50a8fd0c9a4e/src/uuid_worker.py#L500-L502

Change to batch insert using one query:
https://github.com/x-atlas-consortia/uuid-api/blob/7d4625be32b9694dbbca10dab8bd50a8fd0c9a4e/src/uuid_worker.py#L753-L755

For testing on DEV, attached file contains 2500 dataset uuids that can be used as parent_ids of a new dataset.
2500-dataset-parent-uuids.txt

FYI @kburke I added more details at https://github.com/hubmapconsortium/search-api/issues/788#issuecomment-2136403516


How to use lxd to provide containers (VPS) like digital ocean droplets?

I have to set up a public cloud like digital ocean that can offer virtual private servers by using LXD. I have gone through LXD rest api but it requires authentication by ssl certs. Suppose lets assume that i have a server with lxd installed how can a user create a containers through web interface. Please guide me how can i acheive this?

Not really in scope for the upstream LXD bug tracker.
If you want to build a full VPS solution on top of LXD, you'll most likely want to create your own API service which your customers would talk to and would handle billing, instance types, ... for you, then dispatching the actual LXD container creation to the right physical host behind the scenes.
You'll also need that custom code to handle things like public IPs, routing, firewall rules, ... all of which would be kinda expected from a public VPS provider.
One way to do all that at large scale would be to use OpenStack with nova-lxd, OpenStack supports creating API keys for users with different resource limits and then allow them to spawn containers themselves as they want.
A very simple of a standalone API client which offers its own minimal API for people to create and use containers is what we're using at https://linuxcontainers.org/lxd/try-it the code of which can be found at:

https://github.com/lxc/lxd-demo-server (the daemon)
https://github.com/lxc/linuxcontainers.org (the client)

Closing this issue as it's out of scope for the LXD issue tracker.

Please explain me about https://github.com/lxc/linuxcontainers.org (the client)

https://github.com/lxc/linuxcontainers.org/blob/master/static/js/tryit.js is the javascript code that talks over the public REST API exported by lxd-demo-server.


Rules might need to be updated now that contraband marking exists

Description

https://github.com/space-wizards/space-station-14/pull/28688 was merged
As per the Reduced Metagaming mechanics doc that covers the Disguised Items problem: https://github.com/space-wizards/docs/pull/214/files

Rule change: Crew have knowledge about stealth items.
Non-stealth items can now be determined to be contraband upon being examined.
Rule change: Security can only confiscate non-contraband items that they can confirm was used in a crime. Security can not keep an item from being returned to a crewmate on suspicion of it being contraband. Normal rules on Captain outlawing a specific item still apply.

This is to ensure Security does not overextend and confiscate an unscanned stealth item.

Reproduction

Screenshots

Additional context

Although it requires the hidden contraband scanner machine to be implementeddddd........ so maybe not

CE said they were gonna look into it

fixed https://github.com/space-wizards/space-station-14/pull/30937

wait, partial fixed, I'll still leave this open


[MKLDNN] use dim_t instead of int in slice/transpose operators

Description
When mxnet is built with large tensor support, int or unsigned int cannot properly handle some large value which is exceed 2^32. So just change to use dim_t to avoid overflow issue.
@pengzhao-intel @TaoLv @rongzha1
Checklist
Essentials
Please feel free to remove inapplicable items for your PR.

[ ] The PR title starts with [MXNET-$JIRA_ID], where $JIRA_ID refers to the relevant JIRA issue created (except PRs with tiny changes)
[ ] Changes are complete (i.e. I finished coding on this PR)
[ ] All changes have test coverage:
Unit tests are added for small changes to verify correctness (e.g. adding a new operator)
Nightly tests are added for complicated/long-running ones (e.g. changing distributed kvstore)
Build tests will be added for build configuration changes (e.g. adding a new build option with NCCL)
[ ] Code is well-documented:
For user-facing API changes, API doc string has been updated.
For new C++ functions in header files, their functionalities and arguments are documented.
For new examples, README.md is added to explain the what the example does, the source of the dataset, expected performance on test set and reference to the original paper if applicable
Check the API doc at https://mxnet-ci-doc.s3-accelerate.dualstack.amazonaws.com/PR-$PR_ID/$BUILD_ID/index.html
[ ] To the my best knowledge, examples are either not affected by this change, or have been fixed to be compatible with this change

Changes

[ ] Feature1, tests, (and when applicable, API doc)
[ ] Feature2, tests, (and when applicable, API doc)

Comments

If this change is a backward incompatible change, why must this change be made.
Interesting edge cases to note here

Nice catch! Could you please review all mkldnn supported ops to see if any other implementations have same issue? Thanks.

@ZhennanQin Sure. I will do that.

@access2rohit did you have a chance to try this patch?

@pengzhao-intel @ZhennanQin  Now, except for these three ops, no similar issue is found in other mkldnn implementations. Please help review again. Thanks.

@wuxun-zhang  thank you for your contribution and providing a quick fix.

@ChaiBapchya can you also verify ?

I am merging this PR first and feel free to ping us if other issues are found.

Tested for master with commit a37dcd4 (1 commit after this PR got merged)
nosetests tests/nightly/test_large_array.py:test_slice
.
----------------------------------------------------------------------
Ran 1 test in 2.320s

OK
(master) ubuntu@ip-172-31-36-173:~/incubator-mxnet$ nosetests tests/nightly/test_large_array.py:test_transpose
.
----------------------------------------------------------------------
Ran 1 test in 23.275s

OK

Now testing for CUDA


UI align on Settings Page

"Beep for new blocks" & "Sync when not on WiFi"  need align with Others.

can you attach a screenshot

https://sm.ms/image/aolTYJAsu7t2fg5


error in node modules

Hello, my name is Donald, and I am currently working on the development of a social media app. I am utilizing this specific library for my project, and I have encountered a few issues that I would like you to address. Please kindly review the details below, and I would appreciate any assistance or guidance you can provide. Thank you.

it clearly says React does not exist
when i enter the folder directory in the node modules and import react, it works fine. but I don't think that solution will help me in the long run since i dont push node-modules to production. is there any other way to resolve this?

@AbdullahAnsarii thank you very much for the reply. and sorry fro responding late. I solved it. but now there's a feature I want to add, I want the onAllStoriesEnd  function to move to the next user stories. it says in the readme that I have to update the index but I don't know which index to update. and I was hoping if you could help. it would make my work easier, thank you


Flag/undefined objects

[x] I have searched the tracker for similar issues (including closed ones)
[x] I have provided a detailed example for how this feature should work
[x] I have provided a use case for this feature

There are often times where you have to use an object as a flag. So why not allow this to be more simple? If an object is created by some rule, but is not defined anywhere in the file, have it be transparent and either with no layer or on a separate layer. This way you can make a flag without having to define it in multiple places. This also prevents the issue of accidentally leaving random unused blank objects in a game in case you decide you don't need it.

I'm not a fan of declaration by use. Too easy to make a simple typo.
But I do agree with the idea that simple objects should be declared simply. Maybe an object flag like layer:own or layer:player? Dunno.

Honestly, your choice. I still would prefer having it as simple as possible, but either way might work.


RepositoriesService.DownloadContents should handle response codes

To download the contents of a file the DownloadContents method is using a http.Client to request it and then returns only the body of the response.
			resp, err := s.client.client.Get(*contents.DownloadURL)
			if err != nil {
				return nil, err
			}
			return resp.Body, nil

The http.Client docs state that A non-2xx response doesn't cause an error. If the download request returns a failed response code then resp.Body most likely doesn't contain the content you wanted and there is no way to tell that something went wrong.
I'd suggest using github.CheckResponse on the response or perhaps a simpler 2XX check since raw.githubusercontent.com may have different behavior than the api.

Thanks for the report, @mctofu.
I'm thinking that using github.CheckResponse is probably not going to be a good option here due to the overhead of it slurping in an entire copy of the body (which could be upwards of 50MB).
Possibly a simpler approach would just be to additionally return the response itself like most of the other endpoints in this repo do.  That way the client can check it directly.  This would obviously be a breaking API change, but we already have two breaking API changes in the queue for the next release.
So instead of return resp.Body, nil, we would have return resp.Body, resp, nil.
Thoughts?

Yeah, I think it could make sense to also return the response since that would be consistent with the other endpoints. What's interesting is that DownloadContents is more of a convenience helper that makes multiple calls so could the returned response actually be from GetContents if that returned an error?
Being able to check the status code on the response myself would solve this issue. It's not as consistent with other endpoints which would return an error on a bad status code though. That might make it easier to miss that the response code should be checked manually.

Maybe return resp, nil  would be a better option? Then it could be a little more clear that you are getting the raw response and should be checking the status code?

Possibly.
I do like the return of the io.ReadCloser to make it clear that clients really need to read it and then close it...  so I would lean toward the return resp.Body, resp, nil solution. Also, the three return values also is highly consistent with the rest of the repo... so that is my vote.  Feel free to let this issue stay open and see if anyone else has opinions on how to address this issue and we can get a discussion going if so.

Ok! Any option that allows detecting a bad response is ok with me. I was hoping to save others from running into this same issue since it was pretty tricky to track down. Making it clear in the docs that you should check the response code would be appreciated!

So I think a PR needs to be written that exposes the response code to the end user.
@mctofu - are you interested in owning this issue and submitting a PR, or would you like me to open it up for other volunteers to address?

@gmlewis: I could submit a PR within the next week (hopefully sooner) but if someone else was interested in tackling this that would be fine by me as well.

OK, then I'll just leave this open, and if you or anyone else reports that they are starting work on it, I'll assign it to them.  Thank you, @mctofu !


Unable to debug window inside of Rider

When I am using JetBrains Rider to debug my Photino app I an error. I don't get the error when running in Visual Studio.
System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

I suspect that it is something to do with the Photino.Native part of the app. Should this question be posted there?

Usually this error is an indication of a missing WebView installation. Maybe Rider doesn't have access to it? Have you tried running Rider in Admin mode? Since it does run in VS, the requirements seem to all be met and an issue to access them persists for Rider.

Progress. I tried running as admin and get the following error. Is there a way to change the path the WebView is looking at? Or is the process that Rider is using that needs access to that directory?

@drewkill32 This is an unrelated issue that has to do with installing into the Program Files folder. It is slated for development asap. See https://github.com/tryphotino/photino.Native/issues/58 for details.


QoL: Add selection visibility on minimap

Currently selected arrows / selected regions are not visible on the chart minimap, and having a region visible would be helpful!

Added in next update


Adds support for 'danger-swift ci' and 'danger-swift pr'

Blocked by https://github.com/danger/danger-js/pull/697

Warnings

:warning:

Big PR, try to keep changes smaller if you can

  Generated by :no_entry_sign: dangerJS

Don't you tell me what to do

OK, this is getting shipped


Update custom-analytics.md

Removed the following part

If your organization implemented custom processing (on top of the Marketing export) which relies on the blobs' immutability or names, the process may need to be updated. Contact customer support for more details or for switching the export feature to the previous non-optimized mode.

Merged to current repo here: https://github.com/MicrosoftDocs/customer-insights-pr/pull/1094


Add initial documentation for Ambiences.

Hello Sailors,
This is a pull request to add some initial documentation for Ambiences.
The documentation for Ambiences is scattered around, sparse or non-existing. This is meant as an effort to build up and concentrate that documentation.
It feels a bit like stabbing in the dark :)
If you need any changes before merging, please let me know. I can imagine the place in the tree of documentation is up for debate, as it's not an app, and it's not the platform.

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

Thank you very much for the feedback :)
I addressed the requested changes. I added a few more changes and updates that I saw fit.
I haven't managed to make the browser use dark mode, not with the other ambiences aither, like airy and glacial. And yes, this started with a support question :) I hope someone manages to clarify how to do that.

I haven't managed to make the browser use dark mode, not with the other ambiences aither, like airy and glacial

What do you mean? Just select an ambience with "darkonlight" color scheme and the browser will use light mode, and ambience with "lightondark" will cause it to use dark mode. Works on e.g. github.com.

And I must be confused, I tested on duckduckgo.com, which works on my desktop but not my phone.

duckduckgo.com works on my phone.
There's still that one '/' missing from the link in line 10. I suppose I can commit it as well - if you are satisfied with this I'm ready to merge this.

Thank you, I had missed that.
And yes, I would be happy if you can merge this. I will try to add some updates, I found some more scattered docs :)

Thank you!


Add about dialog

Still kinda learning the code base. I figured the about dialog would be an easy start.
There are a couple things that probably need to be touched up. I wasn't clear on where to get the version string, so I hard-coded it. The copyright notice may also need the year updated.
I rolled a couple of other minor changes in too.

You're right about the copyright year - could you change it to 2016, and also update the text in the renderdocui project? Just a one character change in AboutDialog.Designer.cs
As a general note, I see you've set up the dialog entirely in code. For a trivial dialog like this it doesn't really matter much in practice, but I think I'd prefer to use .ui files for all windows just for the sake of consistency - those files can be edited with the qt creator WYSIWYG editor, which makes it easier for myself or anyone else to make changes in future without knowing exactly how Qt's layout and widget code works.

which makes it easier for myself or anyone else to make changes in future without knowing exactly how Qt's layout and widget code works.

I don't think you can really get away from understanding layouts, but the UI designer certainly does make it easier to visualize the end result. Would you like me to rework the About dialog to use a .ui file?

I notice you fixed that linux_specific.h issue already. I'll rebase against master after I get the version query in.

I don't think you can really get away from understanding layouts, but the UI designer certainly does make it easier to visualize the end result. Would you like me to rework the About dialog to use a .ui file?

Yeh this example is a bit of a strawman in a sense because the dialog is so trivial and most people would understand a single vertical layout with nothing fancy in it, but in general people can use a UI to modify a window where it'd be slower going with the manual creation code. I mostly just want to keep the barrier to entry low and also as much as possible I only want to have to write glue/logic code, not layout code :smile:.
I don't mind if you rework the dialog or not since it's not a lot of work, but if not then don't be surprised/offended if I rework it myself.

I notice you fixed that linux_specific.h issue already. I'll rebase against master after I get the version query in.

I cherry-picked over the "	Fix platform defines for qrenderdoc" commit too, since it's needed to get linux compiling again. Thank you for that!

Ok. Want to take another look? The changes were pretty substantial, but I think I covered everything. I haven't checked it out on Windows, though. I'm having (probably unrelated) build problems there.
While I was implementing the version string function, I noticed what looked like a memory leak, so I included a fix for that as well.

Looks good, thank you!


Issue with isExpanded

Both ExpandableLinearLayout and ExpandableRelativeLayout are incorrectly reporting their isExpanded() state after you expand, collapse and expand again. The layout always reports that it is expanded.

This is something that was introduced with 1.5.0. Reverting back to 1.4.3 removes the issue.

@Jawnnypoo
Thank you for reporting.
The cause of this issue is the layout is calculated asynchronous on requestLayout.
Fix it #69 and release v1.5.1.

Nice quick fix! Thanks!


Add support for Rocky distribution

This PR enables running role against Rocky distributions. I personally tested this role with Rocky8 and it works without issues.

I was wondering about the fact that the test exists only for Centos7. I'll rework the molecule code as it is in the ansible-consul repository and will add ones for Rocky 8. Maybe later I'll also add tests for other distros stated in meta.

Technical debt surfaces in the linter

I'll fix that as well.

Oh no, I see that it boils to https://github.com/ansible-community/ansible-vault/pull/155. Do you have a proposal on how to solve this?
I see, that there is an ansible-lint skip_list for this, but it is ignored. I'll try to refactor it to use 'role-name' instead of deprecated '106'.

That did not work. I'll set meta role_name to 'vault', to resolve this.
Currently, the role is not published to the Ansible galaxy, so discussion about the role name may be put aside for later.

It's failing at lint issues, which will be fixed by #308 , so I'll wait for it and rebase after it will be merged.

I rebased it and removed my non-related work.

Looks good but minor nitpicking. I think it would be preferable to have the molecule scenario named in a similar fashion to the others, rocky-8 instead of rocky8... Or even call it rockylinux-8 so that it's in line with the platform names. Also don't forget to update the supported distros in the readme.

Of course, I will rename it & add info to README.

Thanks!


What is the purpose of this plugin on android?

Hello again,
Was wondering what is the advantage of using this plugin on android (with cordova)?
For IOS it is obvious as it permit to use the wkwebview, but for android, what did it bring compared to cordova without it?
Thanks ! :)

Thanks for the clarification @ghenry22 , i'll close the issue.


package.json: Update shortid package dependency

Check for any outstanding update of point version of any outstanding NPM package dependency

[ ] npm-update

npm-update in progress on 2-cockpit-8.
Log: https://<IP_ADDRESS>:8493/logs/npm-update-777-20190909-014141/

npm-update in progress on 3-cockpit-9.
Log: https://<IP_ADDRESS>:8493/logs/npm-update-777-20190909-014141/

npm-update shortid done: https://github.com/cockpituous/welder-web/commits/npm-update-shortid-20190909-014242

npm-update shortid done: https://github.com/cockpituous/welder-web/commits/npm-update-shortid-20190909-014242

Please manually check features related to these files:
components/ListView/ComponentInputs.js:import shortid from "shortid";
components/ListView/ComponentInputs.js:            key={shortid.generate()}
package.json:    "shortid": "2.2.15",

Codecov Report

:exclamation: No coverage uploaded for pull request base (master@c86541c). Click here to learn what that means.
The diff coverage is n/a.

@@            Coverage Diff            @@
##             master     #777   +/-   ##
=========================================
  Coverage          ?   78.51%
=========================================
  Files             ?       67
  Lines             ?     3379
  Branches          ?      707
=========================================
  Hits              ?     2653
  Misses            ?      726
  Partials          ?        0

Continue to review full report at Codecov.

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


Performance Monitor causes crash on iOS 13.4

Description
Opening the Performance Monitor causes a crash as of iOS 13.4
React Native version:
System:
    OS: macOS 10.15.3
    CPU: (8) x64 Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz
    Memory: 148.41 MB / 16.00 GB
    Shell: 5.7.1 - /bin/zsh
  Binaries:
    Node: 10.16.0 - ~/.nvm/versions/node/v10.16.0/bin/node
    Yarn: 1.21.1 - /usr/local/bin/yarn
    npm: 6.9.0 - ~/.nvm/versions/node/v10.16.0/bin/npm
    Watchman: 4.9.0 - /usr/local/bin/watchman
  SDKs:
    iOS SDK:
      Platforms: iOS 13.4, DriverKit 19.0, macOS 10.15, tvOS 13.4, watchOS 6.2
    Android SDK:
      API Levels: 22, 23, 25, 26, 27, 28, 29
      Build Tools: 25.0.3, 26.0.3, 27.0.3, 28.0.2, 28.0.3, 29.0.2
      System Images: android-22 | Intel x86 Atom_64, android-23 | Google APIs Intel x86 Atom, android-25 | Android TV Intel x86 Atom, android-26 | Google APIs Intel x86 Atom_64, android-27 | Google Play Intel x86 Atom, android-28 | Google Play Intel x86 Atom, android-29 | Google APIs Intel x86 Atom, android-29 | Google Play Intel x86 Atom
      Android NDK: 21.0.6113669
  IDEs:
    Android Studio: 3.6 AI-192.7<IP_ADDRESS>41897
    Xcode: 11.4/11E146 - /usr/bin/xcodebuild
  Languages:
    Python: 2.7.15 - /usr/local/bin/python
  npmPackages:
    @react-native-community/cli: Not Found
    react: 16.11.0 => 16.11.0
    react-native: 0.62.0 => 0.62.0
  npmGlobalPackages:
    *react-native*: Not Found

Steps To Reproduce

Start react-native on an iOS 13.4 simulator

npx react-native init PerfCrash
cd PerfCrash
yarn ios

Open debug-menu
Tap on "Show Perf Monitor"

Expected Results
Shows Performance Monitor; and doesn't crash.
Additional info
I've debugged the issue and seem to have found the problem. JavaScriptCore has been updated in iOS 13.4 and it seems it is no longer possible to set the JavaScript Core options after initializing the VM.
The RCTJSCSetOption function now causes an EXC_BAD_ACCESS exception. The setOption function is resolved correctly but when calling it, it throws the exception. I've debugged the assembly and providing invalid values (logGC2=1 and logGC=3) do not produce a crash. So it doesn't appear to be a parsing issue, and the crash seems to occur when actually updating the option to 1.
static BOOL RCTJSCSetOption(const char *option)
{
  static RCTJSCSetOptionType setOption;
  static dispatch_once_t onceToken;

  dispatch_once(&onceToken, ^{
    /**
     * JSC private C++ static method to toggle options at runtime
     *
     * JSC::Options::setOptions - JavaScriptCore/runtime/Options.h
     */
    setOption = dlsym(RTLD_DEFAULT, "_ZN3JSC7Options9setOptionEPKc");

    if (RCT_DEBUG && setOption == NULL) {
      RCTLogWarn(@"The symbol used to enable JSC runtime options is not available in this iOS version");
    }
  });

  if (setOption) {
    return setOption(option); // <-- This throws EXC_BAD_ACCESS exception
  } else {
    return NO;
  }
}

After inspection on the JavaScriptCore code it was found that the JavaScriptCore options can no longer be changed after the VM was initialized.
https://github.com/WebKit/webkit/blob/master/Source/JavaScriptCore/runtime/OptionsList.h#L74
https://raw.githubusercontent.com/WebKit/webkit/master/Source/JavaScriptCore/ChangeLog
2019-09-12  Mark Lam<EMAIL_ADDRESS>
        Harden JSC against the abuse of runtime options.
        https://bugs.webkit.org/show_bug.cgi?id=201597
        <rdar://problem/55167068>

        Reviewed by Filip Pizlo.

        Linux parts contributed by Carlos Garcia Campos<EMAIL_ADDRESS>
        1. Introduce a JSC::Config struct that will be protected as ReadOnly once the
           first VM instance is constructed.  The end of the VM constructor calls
           Config::permanentlyFreeze() which will make the Config ReadOnly.

Additionally I noticed that the GC metric in the Performance Monitor also doesn't update in iOS 13.1. So it might be broken in earlier versions as well.

@IjzerenHein good job, i have tried your solutions and works fine, would you mind submit a pr ?

@IjzerenHein good job, i have tried your solutions and works fine, would you mind submit a pr ?

@gorhom Done! 👊

This is crashing at React Native 0.60.4 , is this only fixed at latest version of react native?


Fingerprint from example in docs is always differnet for same Browser

PC 1 ip <IP_ADDRESS>
PC 2 ip: <IP_ADDRESS>
I have the same broswer google chrome installed with same version.
I run the example and i get different fingerprints.
Any idea?

Isn't detecting that you are on 2 different PCs what is supposed to happen?


[Proposal] Add render? method to allow conditional rendering

The idea is the same as this one:
https://viewcomponent.org/guide/conditional_rendering.html
I know that with phlex you can do something like:
def template
  return if my_method?

  ...
end

But with built-in support, we can ensure consistency between components and encourage a framework pattern. What do you think?
My use case:
class Toast < ApplicationView
  def initialize(flash)
    @type, @message = flash.first
  end

  private

  attr_reader :type, :message

  def template
    ... # template code here
  end

  def render?
    message.present?
  end
end

I solved this problem in my project with:
class ApplicationView < Phlex::View
  def call(...)
    return unless render?

    super(...)
  end

  private

  def render?
    true
  end
end

Based on my benchmarks for #259, my guess is this will add a ~1-3% performance overhead even when the feature is unused. I wonder if we could make it opt-in with module inclusion, like how callbacks were implemented.

Actually, it doesn't look like it's that significant. I wonder if YJIT will inline stuff like this eventually anyway.

My two cents from the sidelines... If the overhead is negligible, I for one would love this. I've used this with view_component in the past, and I found it really useful. I had to use a lot of conditional rendering in an app, and just being able to put the conditional logic in the component itself in a basically self-documenting render? method is so much better than the if-o-rama my templates were turning into. One of my favourite features of view_component, easily.

That’s weird. I think we should ship this once you've removed the benchmark change. We should definitely return the buffer instead of nil too.

That’s weird. I think we should ship this once you've removed the benchmark change. We should definitely return the buffer instead of nil too.

Ok, I'm removing the benchmark code now and returning buffer instead nil.


Revert "Merge pull request #29 from JioCloud/revert-28-rebase"

This reverts commit 890bf4f03cd8ae4af90fd3c3cd922f76fbbc699f, reversing
changes made to 2d84a6bd54637ba6635f45cd9c7e165af5f37a74.

phew! reverting a revert! Can we just do a merge again instead please? else the commit history would be real messy to track.

We have more than 100 conflicts from the files we never touched on rebasing with upstream. Seems like something went wrong in the last commit.
After reverting the last revert , conflicts are gone and we are getting only  expected 8-9 conflicts on rebasing so we are going ahead with this revert.

And this change again broke rjil-cicd! reverting this again! This repo is now gonna be in a messy state. We need to fix this.


inconsistent kwarg klist/kvect/gains in rlocus doc

The first line of the docstring for rlocus suggests that there's a kwarg klist,
"""rlocus(sys[, klist, xlim, ylim, ...])

https://github.com/python-control/python-control/blob/e4a03e8419231b040d846ef089babd029e18168c/control/matlab/wrappers.py#L200
but in the list of parameters it's kvect.
https://github.com/python-control/python-control/blob/e4a03e8419231b040d846ef089babd029e18168c/control/matlab/wrappers.py#L212
They're all just passed on to root_locus_plot anyway
https://github.com/python-control/python-control/blob/e4a03e8419231b040d846ef089babd029e18168c/control/matlab/wrappers.py#L247
and it's expecting kvect, or, really, gains
https://github.com/python-control/python-control/blob/e4a03e8419231b040d846ef089babd029e18168c/control/rlocus.py#L163

This is miscalled in pymoca/pymoca test/notebooks/Spring,ipynb:
    "control.rlocus(ss[0,0], klist=pl.logspace(-2,1,1000));\n",

The first line of the docstring for rlocus suggests that there's a kwarg klist,

Only for the MATLAB wrapper though. The MATLAB docs call the parameter k by the way.
Using a MATLAB wrapper with a python kwarg is somehow unusual.
PR welcome.

This is miscalled in pymoca/pymoca test/notebooks/Spring,ipynb:

The MATLAB wrapper is not part of that call. The kwarg for control.rlocus has been kvect for 13 years: 8ebb73b76b856b257a51c15b3c6eda2eac6e6c68.

Ah, yes, sorry I see now that control.rlocus doesn't call control.matlab.wrappers.rlocus at all but rather control.root_locus_plot; I had overlooked this:
https://github.com/python-control/python-control/blob/e4a03e8419231b040d846ef089babd029e18168c/control/rlocus.py#L452
My real problem was pymoca/pymoca#324 so I'll look over there at fixing that.  I'm not presently concerned with control.matlab, but I'll turn in the PR as requested, while I'm at it.


Better Handling of uBlock Syntax

Example: https://github.com/uBlockOrigin/uAssets/blob/master/filters/badware.txt
It contains entries ending with ^$all or ^$doc but none of these entries are included in the converted list
https://github.com/hectorm/hmirror/blob/master/data/ublock-badware/list.txt
Ref: https://github.com/gorhill/uBlock/wiki/Strict-blocking

Thanks for letting me know! I have just added support for it.


build: various improvements

determine git SHA automatically
more explicit variable to trigger bosun build
allow no GitHub access token that still builds binaries for all archs

Aren't all of these changes also in the solaris pr?

Yes, but git knows that and will only commit them once. It's a branch on a branch.


Question to change the service

Hey,
I have a question related to this tool. is it possible to search for appointments for a specific service I am looking for? I am looking to book an appointment to change my passport info on the blue card. Thanks in advance
https://service.berlin.de/dienstleistung/326798/en/

You must change this line to match the appointment type and location that you are looking for.
The exact URL is the URL of the "Termin Berlinweit suchen" button on the page of the service you are looking for. For example: https://service.berlin.de/dienstleistung/120686/

Thanks for your help :)

Hey @nicbou
Thank you for the swift response and wish you are having a pleasant time during this time of the year.
I adjusted the code for email, script_id, and appointments_url as follows and was able to run the script and got a 200 response code, on top, I tried to console log the response body to see if it's attempting to parse the right page, etc however I couldn't confirm myself as I am not great at reading HTML, especially with german text in it.
would you be able to see if the following script is rightly attempting to fetch the appointments for service https://service.berlin.de/dienstleistung/326798/en/
Thanks in advance
adjusted sections :
appointments_url = 'https://service.berlin.de/terminvereinbarung/termin/tag.php?termin=1&anliegen[]=326798&dienstleisterlist=122210,122217,327316,122219,327312,122227,327314,122231,122243,327348,122252,329742,122260,329745,122262,329748,122254,329751,122271,327278,122273,327274,122277,327276,330436,122280,327294,122282,327290,122284,327292,327539,122291,327270,122285,327266,122286,327264,122296,327268,150230,329760,122301,327282,122297,327286,122294,327284,122312,329763,122314,329775,122304,327330,122311,327334,122309,327332,122281,327352,122279,329772,122276,327324,122274,327326,122267,329766,122246,327318,122251,327320,122257,327322,122208,327298,122226,327300&herkunft=https%3A%2F%2Fservice.berlin.de%2Fdienstleistung%2F326798%2F'
script_id = 'rockey-dev'
email =<EMAIL_ADDRESS>
from bs4 import BeautifulSoup, SoupStrainer
from datetime import datetime
import asyncio
import json
import logging
import os
import pytz
import requests
import time
import websockets

logging.basicConfig(
    datefmt='%Y-%m-%d %H:%M:%S',
    format='[%(asctime)s] %(levelname)s [%(name)s.%(funcName)s:%(lineno)d] %(message)s',
    level=logging.INFO,
)
logger = logging.getLogger(__name__)

# Disable websocket connection log spam
logging.getLogger('websockets.server').setLevel(logging.ERROR)

server_port = 80

try:
    # Berlin.de requires the user agent to include your email
    # email = os.environ['BOOKING_TOOL_EMAIL']
    email =<EMAIL_ADDRESS>
    # This allows Berlin.de to distinguish different people running the same tool
    # script_id = os.environ['BOOKING_TOOL_ID']
    script_id = 'rockey-dev'
except KeyError:
    exception_message = "You must set the BOOKING_TOOL_EMAIL and BOOKING_TOOL_ID environment variables."
    logger.exception(exception_message)
    raise Exception(exception_message)

timezone = pytz.timezone('Europe/Berlin')
# appointments_url = 'https://service.berlin.de/terminvereinbarung/termin/tag.php?termin=1&anliegen[]=120686&dienstleisterlist=122210,122217,327316,122219,327312,122227,327314,122231,122243,327348,122252,329742,122260,329745,122262,329748,122254,329751,122271,327278,122273,327274,122277,327276,330436,122280,327294,122282,327290,122284,327292,327539,122291,327270,122285,327266,122286,327264,122296,327268,150230,329760,122301,327282,122297,327286,122294,327284,122312,329763,122314,329775,122304,327330,122311,327334,122309,327332,122281,327352,122279,329772,122276,327324,122274,327326,122267,329766,122246,327318,122251,327320,122257,327322,122208,327298,122226,327300&herkunft=http%3A%2F%2Fservice.berlin.de%2Fdienstleistung%2F120686%2F'
appointments_url = 'https://service.berlin.de/terminvereinbarung/termin/tag.php?termin=1&anliegen[]=326798&dienstleisterlist=122210,122217,327316,122219,327312,122227,327314,122231,122243,327348,122252,329742,122260,329745,122262,329748,122254,329751,122271,327278,122273,327274,122277,327276,330436,122280,327294,122282,327290,122284,327292,327539,122291,327270,122285,327266,122286,327264,122296,327268,150230,329760,122301,327282,122297,327286,122294,327284,122312,329763,122314,329775,122304,327330,122311,327334,122309,327332,122281,327352,122279,329772,122276,327324,122274,327326,122267,329766,122246,327318,122251,327320,122257,327322,122208,327298,122226,327300&herkunft=https%3A%2F%2Fservice.berlin.de%2Fdienstleistung%2F326798%2F'
delay = 180  # Minimum allowed by Berlin.de's IKT-ZMS team

def datetime_to_json(datetime_obj):
    return datetime_obj.strftime('%Y-%m-%dT%H:%M:%SZ')

connected_clients = []
last_message = {
    'time': datetime_to_json(datetime.now()),
    'status': 200,
    'appointmentDates': [],
    'connectedClients': len(connected_clients)
}

def get_appointments():
    today = timezone.localize(datetime.now())
    next_month = timezone.localize(datetime(today.year, today.month % 12 + 1, 1))
    next_month_timestamp = int(next_month.timestamp())

    session = requests.Session()
    headers = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Upgrade-Insecure-Requests': '1',
        'User-Agent': f"Mozilla/5.0 AppointmentBookingTool/1.1 (https://github.com/nicbou/burgeramt-appointments-websockets; {email}; {script_id})",
        'Accept-Language': 'en-gb',
        'Accept-Encoding': 'gzip, deflate',
        'Connection': 'keep-alive',
    }

    # Load the first two months
    response_p1 = session.get(appointments_url, headers=headers)
    response_p1.raise_for_status()
    time.sleep(1)

    # Load the next two months
    response_p2 = session.get(
        f'https://service.berlin.de/terminvereinbarung/termin/day/{next_month_timestamp}/',
        headers=headers
    )
    response_p2.raise_for_status()

    logger.info(response_p1)

    return sorted(list(set(parse_appointment_dates(response_p1.text) + parse_appointment_dates(response_p2.text))))

def parse_appointment_dates(page_content):
    appointment_strainer = SoupStrainer('a', title='An diesem Tag einen Termin buchen')
    bookable_cells = BeautifulSoup(page_content, 'lxml', parse_only=appointment_strainer).find_all('a')
    appointment_dates = []
    for bookable_cell in bookable_cells:
        timestamp = int(bookable_cell['href'].rstrip('/').split('/')[-1])
        appointment_dates.append(timezone.localize(datetime.fromtimestamp(timestamp)))

    return appointment_dates

def look_for_appointments():
    global delay
    try:
        appointments = get_appointments()
        delay = 180
        logger.info(f"Found {len(appointments)} appointments: {[datetime_to_json(d) for d in appointments]}")
        return {
            'time': datetime_to_json(datetime.now()),
            'status': 200,
            'message': None,
            'appointmentDates': [datetime_to_json(d) for d in appointments],
            'connectedClients': len(connected_clients),
        }
    except requests.HTTPError as err:
        delay = 360
        logger.warning(f"Got {err.response.status_code} error. Checking in {delay} seconds")
        return {
            'time': datetime_to_json(datetime.now()),
            'status': 502,
            'message': f'Could not fetch results from Berlin.de - Got HTTP {err.response.status_code}.',
            'appointmentDates': [],
            'connectedClients': len(connected_clients),
        }
    except Exception as err:
        logger.exception("Could not fetch results due to an unexpected error.")
        return {
            'time': datetime_to_json(datetime.now()),
            'status': 500,
            'message': f'An unknown error occured: {str(err)}',
            'appointmentDates': [],
            'connectedClients': len(connected_clients),
        }

async def on_connect(websocket, path):
    global last_message
    connected_clients.append(websocket)
    last_message['connectedClients'] = len(connected_clients)
    try:
        websockets.broadcast(connected_clients, json.dumps(last_message))
        await websocket.wait_closed()
    finally:
        connected_clients.remove(websocket)

async def main():
    global last_message
    async with websockets.serve(on_connect, port=server_port):
        logger.info(f"Server is running on port {server_port}...")
        while True:
            last_message = look_for_appointments()
            websockets.broadcast(connected_clients, json.dumps(last_message))
            await asyncio.sleep(delay)

if __name__ == "__main__":
    asyncio.run(main())

Is there some programmatic way to narrow down the list of locations, so one could specify the offices of interest?

The dienstleiterlist parameter in the URL is a list of Bürgeramt locations by ID. You can narrow it down as needed.
The URL in appointments_url is the URL you get when you right click the "Termin Berlinweit suchen" button on service.berlin.de pages.

When you look at the URL of a location's page on Berlin.de, you can see its ID. I think it's the only way.


[BUG] type and attributeCodes are sent twice in the URL

Describe the bug
ditto
To Reproduce
Steps to reproduce the behavior:

Using node  'VRM API'
Select Installation stats and Consumption
Enable verbose
Get an URL like: https://vrmapi.victronenergy.com/v2/installations/XXX/stats?type=custom&attributeCodes[]=consumption&type=custom&attributeCodes%5B%5D=consumption&...

Expected behavior
The two fields are sent once
Software (please complete the following information):

victron-vrm-api version: 0.2.6
Venus OS version: v3.42

Additional context
Add any other context about the problem here.

Resolved in version 0.2.8.


Feat: Prevent infinite loop by adding max_steps

Time spent on this PR:2.5d
Pull Request type
Please check the type of change your PR introduces:

[ ] Bugfix
[x] Feature
[ ] Code style update (formatting, renaming)
[ ] Refactoring (no functional changes, no API changes)
[ ] Build-related changes
[ ] Documentation content changes
[ ] Testing
[ ] Other (please describe):

What is the current behavior?
if there is an infinite loop in a test, program wont stop
Issue Number: 43
What is the new behavior?
introduced max_steps parameter in cli, program will stop when max_step is reached in cairo vm
Does this introduce a breaking change?

[ ] Yes
[x] No

Also run cargo +nightly fmt in order for the CI to pass


throw error during data parsing

fix: the following request will cause uncatched error when parsed by formidable.
const fs = require('fs');
const path = require('path');
const request = require('request');
const multipartData = [
  {name: 'my_field', body: 'my_value'},
  {name: 'my_number', body: 1000},
  {name: 'my_buffer', body: Buffer.from([1, 2, 3])},
  {name: 'my_file', body: fs.createReadStream(path.resolve(__dirname, 'multipart.js'))},
  // {name: 'remote_file', body: request(url + '/file')}
];

var reqOptions = {
  url,
  multipart: multipartData
}
request.post(reqOptions, function (err, res, body) {
  console.log(body);
})

Thanks, we should merge this as a temporary workaround.
I will investigate further.

@xifeiwu great, thanks! If you can add a tests would be even greater :)
Let's not merge for now, or at least we should not foget to write a test like above.

What is inside multipart.js ?

@GrosSacASac it doesn't really matter. It's demo of showing stream body.


Added basic test cases for k8 workflow relating to add/edit/delete of service/rc/pod from remote kubectl client.

@alena1108: can you review ?

@cloudnautique , can you review the changes made to scripts/bootstrap for making the drone builds to succeed , which otherwise encountered the following error:
   error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
 x86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -DUSE__THREAD -I/usr/include/ffi -I/usr/include/libffi -I/usr/include/python2.7 -c c/_cffi_backend.c -o build/temp.linux-x86_64-2.7/c/_cffi_backend.o

    c/_cffi_backend.c:15:17: fatal error: ffi.h: No such file or directory

     #include <ffi.h>

                     ^

    compilation terminated.

LGTM on the test; can be merged after @cloudnautique confirms that the changes to bootstrap scripts are legit.


#1172, start SkyWalking configurable

Pull Request Test Coverage Report for Build 5245

1 of 7 (14.29%)  changed or added relevant lines in 3 files are covered.
3 unchanged lines in 1 file lost coverage.
Overall coverage decreased (-0.04%) to 62.831%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

sharding-proxy/src/main/java/io/shardingsphere/proxy/config/ProxyContext.java
0
1
0.0%

sharding-proxy/src/main/java/io/shardingsphere/proxy/Bootstrap.java
0
5
0.0%

Files with Coverage Reduction
New Missed Lines
%

sharding-orchestration/sharding-orchestration-reg/src/main/java/io/shardingsphere/orchestration/reg/newzk/client/zookeeper/base/Holder.java
3
70.49%

Totals

Change from base Build 5243:
-0.04%

Covered Lines:
8060

Relevant Lines:
12828

💛  - Coveralls


Adding example projects

Adding example projects

One question: how is the counter example here different from motoko/counter? Is it because it includes a frontend? Just wanted to check you hadn't overlooked the existing example.


Component > Text Field: Customization text color doesn't change on light or dark switch

This was an accompanist HorizontalPager issue. Using the official Compose pager fixes the issue.


Adding the ability to detect and save PackageDependencies for a Run

Resolves
Fixes #316
Description
This PR adds the ability to automatically identify and log any Microsoft.ML dependencies during a run. This is important not only for auditability to know what version of ML.NET and what dependencies we used, but also as we can then install all of these dependencies automatically later when building out Docker container.

@AnoojNair  / @Brett-Parker / @willvelida  - this PR is ready for a review. Thanks!

Thank you for the review @Brett-Parker!


Link to binaries broken

http://www.lanterneq.com/extractor/ 404s, I assume since the new site was launched this since repo was made

New site is up and link should be fixed. Thanks for the heads up.


attachTooltip: Flow tooltip towards top, unless it overflows viewport and there's space below to accommodate tooltip

Haven't fully explored every use case, but it seems like a better user experience if the tooltip is above the cursor at all times, except when it overflows (towards the top) and there's space below it to accommodate it.
So, if I were to have a super-tall tooltip that doesn't fit the entire height of viewport, the tooltip would never flow over at the bottom, but may flow over at the top. There's probably no ideal solution (and could be parametrized), but it works well for regular bottom-aligned bar charts, where the bars trigger the tooltip.
Going to submit a PR in a sec. cc: @1wheel

Actually, the new code doesn't force tooltip to be above cursor... It just avoids having the tooltip overflow at the bottom when it is taller than 200px.


Does not work correctly if there are multiple excludes

:wrench: Summary

As the title says.
(Thank you very much for your support of multiple excludes!)
Lefthook version

1.7.5 d7ae5f70b1af1fef5e8d9d1cd9b38886b367240f
Steps to reproduce

Repository: https://github.com/pvcresin/lefthook-exclude-test
package.json
{
  "devDependencies": {
    "lefthook": "^1.7.5",
    "prettier": "^3.3.3"
  }
}

lefthook.yml
---
pre-commit:
  parallel: true
  commands:
    format:
      glob: "*.js"
      # exclude: "b.js|c.js" # worked correctly
      exclude:
        - b.js
        - c.js
      run: |
        echo {staged_files}
        npx prettier --write {staged_files}
      stage_fixed: true

If I try to commit a.js, b.js, c.js, I want to format only a.js by prettier.
exclude: “b.js|c.js” # worked correctly.

exclude: # did not seem to work correctly.
  - b.js
  - c.js

Expected results

exclude:
  - b.js
  - c.js

If I try to commit a.js, b.js, c.js, only a.js is formatted
Actual results
exclude:
  - b.js
  - c.js

If I try to commit a.js, b.js, c.js, all a.js, b.js, c.js are formatted. 😢

Possible Solution

It might be more correct to append if v did not match all globs
https://github.com/evilmartians/lefthook/pull/777/files#diff-95baf66be56f3f284ac7a6f45870dbff51131728ff6cfa163e9eac9721229697R94-R97
Logs / Screenshots

LEFTHOOK_VERBOSE=true git ...

@mrexox seems to know more about it.

Hey @pvcresin! Thank you for submitting a request. The fix will be ready soon


Drop CLA and relicense under BSD/Apache

Please ask your bosses to adopt Swift/WebKit-style licensing and contributing for CUPS as well, i.e. no CLA/Copyright Assignment and no weird "GPLv2 for everybody but Apple" licensing.

Sorry, that ship sailed about 18 years ago.

WebKit.org and Swift.org did not exist 18 years ago.
Did you already ask your boss and got a reply within one hour?

CUPS has existed publicly since 1998. This is the CUPS project, not WebKit or Swift.
As for "talking with my boss", this has been discussed many times, in particular when I sold CUPS to Apple in 2007, and the consensus has been that we keep CUPS licensed under GPL2/LGPL2. So I don't need to talk to anyone - we are not changing how CUPS is licensed nor the contributor's agreement.


Changelog containts same ticket twice

1.2.6 -- April 28, 2019

Fixed #166: Support RSS & Atom feeds

1.2.5 -- April 25, 2019

Fixed #165: Xmpp account creation
Fixing #166: Support RSS & Atom feeds

I use fixing and fixed when an existing ticket is re-opened and I have to re-fix or fix something new or a side effect issue.