Issue occurs intermittently in a highly concurrent program making HTTP requests using Go's http.Client. The issue manifests as a deadlock in the program.
What did you see happen?
goroutine 2270 gp=0xc0003e01c0 m=nil [sync.Mutex.Lock, 180 minutes]:
runtime.gopark(0x2?, 0x0?, 0xb0?, 0x89?, 0x4500c6?)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/runtime/proc.go:402 +0xce fp=0xc000048880 sp=0xc000048860 pc=0x43e76e
runtime.goparkunlock(...)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/runtime/proc.go:408
runtime.semacquire1(0xc000002354, 0x0, 0x3, 0x1, 0x15)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/runtime/sema.go:160 +0x225 fp=0xc0000488e8 sp=0xc000048880 pc=0x450c05
sync.runtime_SemacquireMutex(0x4?, 0x0?, 0xd5d8c0?)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/runtime/sema.go:77 +0x25 fp=0xc000048920 sp=0xc0000488e8 pc=0x46d6e5
sync.(*Mutex).lockSlow(0xc000002350)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/sync/mutex.go:171 +0x15d fp=0xc000048970 sp=0xc000048920 pc=0x47a6dd
sync.(*Mutex).Lock(...)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/sync/mutex.go:90
net/http.(*http2clientStream).abortStream(0xc000048a68?, {0xf98f60, 0x1578700})
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/h2_bundle.go:7438 +0x5d fp=0xc0000489c0 sp=0xc000048970 pc=0x65851d
net/http.(*http2ClientConn).RoundTrip(0xc000002300, 0xc000db4c60)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/h2_bundle.go:8340 +0x4f9 fp=0xc000048b00 sp=0xc0000489c0 pc=0x65c9b9
net/http.(*http2Transport).RoundTripOpt(0xc0004c2750, 0xc000db4c60, {0xf0?})
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/h2_bundle.go:7591 +0x1b1 fp=0xc000048c30 sp=0xc000048b00 pc=0x659131
net/http.(*http2Transport).RoundTrip(...)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/h2_bundle.go:7540
net/http.http2noDialH2RoundTripper.RoundTrip({0xc00025f040?}, 0xc000db4c60?)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/h2_bundle.go:10167 +0x1a fp=0xc000048c70 sp=0xc000048c30 pc=0x666f1a
net/http.(*Transport).roundTrip(0xc00025f040, 0xc000db4c60)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/transport.go:553 +0x39c fp=0xc000048e98 sp=0xc000048c70 pc=0x68dedc
net/http.(*Transport).RoundTrip(0xc000db4c60?, 0xf98de0?)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/roundtrip.go:17 +0x13 fp=0xc000048eb8 sp=0xc000048e98 pc=0x673813
net/http.send(0xc000db4b40, {0xf98de0, 0xc00025f040}, {0x1?, 0x496233?, 0x1510f40?})
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/client.go:259 +0x5e4 fp=0xc000049098 sp=0xc000048eb8 pc=0x6381a4
net/http.(*Client).send(0xc0009e88d0, 0xc000db4b40, {0x8?, 0xc000049180?, 0x1510f40?})
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/client.go:180 +0x98 fp=0xc000049110 sp=0xc000049098 pc=0x637a58
net/http.(*Client).do(0xc0009e88d0, 0xc000db4b40)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/client.go:724 +0x8dc fp=0xc000049300 sp=0xc000049110 pc=0x639d3c
net/http.(*Client).Do(...)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/client.go:590
<PRIVATE CODE>

goroutine 2377 gp=0xc000318700 m=nil [sync.Mutex.Lock, 180 minutes]:
runtime.gopark(0xd94b80?, 0xc000b87b60?, 0x60?, 0x92?, 0x23?)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/runtime/proc.go:402 +0xce fp=0xc00001c968 sp=0xc00001c948 pc=0x43e76e
runtime.goparkunlock(...)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/runtime/proc.go:408
runtime.semacquire1(0xc000002354, 0x0, 0x3, 0x1, 0x15)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/runtime/sema.go:160 +0x225 fp=0xc00001c9d0 sp=0xc00001c968 pc=0x450c05
sync.runtime_SemacquireMutex(0xc000618a90?, 0xa0?, 0xc0009e8c98?)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/runtime/sema.go:77 +0x25 fp=0xc00001ca08 sp=0xc00001c9d0 pc=0x46d6e5
sync.(*Mutex).lockSlow(0xc000002350)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/sync/mutex.go:171 +0x15d fp=0xc00001ca58 sp=0xc00001ca08 pc=0x47a6dd
sync.(*Mutex).Lock(...)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/sync/mutex.go:90
net/http.(*http2clientConnReadLoop).cleanup(0xc000318700?)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/h2_bundle.go:9241 +0x145 fp=0xc00001cb70 sp=0xc00001ca58 pc=0x6618e5
net/http.(*http2ClientConn).readLoop.deferwrap1()
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/h2_bundle.go:9197 +0x25 fp=0xc00001cb88 sp=0xc00001cb70 pc=0x661685
panic({0xd9e2a0?, 0x14ac430?})
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/runtime/panic.go:770 +0x132 fp=0xc00001cc38 sp=0xc00001cb88 pc=0x43acf2
runtime.panicmem(...)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/runtime/panic.go:261
runtime.sigpanic()
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/runtime/signal_unix.go:881 +0x378 fp=0xc00001cc98 sp=0xc00001cc38 pc=0x4537f8
net/http.(*http2pipe).Write(0xb100000000000009?, {0xc0001a0340?, 0xc0000de6e0?, 0xc00001cde0?})
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/h2_bundle.go:3751 +0x176 fp=0xc00001cd20 sp=0xc00001cc98 pc=0x648e56
net/http.(*http2clientConnReadLoop).processData(0xc00001cfa8, 0xc000dbff20)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/h2_bundle.go:9748 +0x21e fp=0xc00001cdf0 sp=0xc00001cd20 pc=0x66485e
net/http.(*http2clientConnReadLoop).run(0xc00001cfa8)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/h2_bundle.go:9337 +0x446 fp=0xc00001cf60 sp=0xc00001cdf0 pc=0x662306
net/http.(*http2ClientConn).readLoop(0xc000002300)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/h2_bundle.go:9198 +0x65 fp=0xc00001cfc8 sp=0xc00001cf60 pc=0x661565
net/http.(*http2Transport).newClientConn.gowrap1()
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/h2_bundle.go:7848 +0x25 fp=0xc00001cfe0 sp=0xc00001cfc8 pc=0x65adc5
runtime.goexit({})
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/runtime/asm_amd64.s:1695 +0x1 fp=0xc00001cfe8 sp=0xc00001cfe0 pc=0x4712e1
created by net/http.(*http2Transport).newClientConn in goroutine 2376
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/h2_bundle.go:7848 +0xca6

goroutine 2672 gp=0xc00081b500 m=nil [sync.Mutex.Lock, 180 minutes]:
runtime.gopark(0xf98f60?, 0x1578700?, 0x40?, 0xe5?, 0xc000002300?)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/runtime/proc.go:402 +0xce fp=0xc001070e30 sp=0xc001070e10 pc=0x43e76e
runtime.goparkunlock(...)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/runtime/proc.go:408
runtime.semacquire1(0xc000002354, 0x0, 0x3, 0x1, 0x15)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/runtime/sema.go:160 +0x225 fp=0xc001070e98 sp=0xc001070e30 pc=0x450c05
sync.runtime_SemacquireMutex(0xc0008f36e0?, 0x80?, 0x0?)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/runtime/sema.go:77 +0x25 fp=0xc001070ed0 sp=0xc001070e98 pc=0x46d6e5
sync.(*Mutex).lockSlow(0xc000002350)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/sync/mutex.go:171 +0x15d fp=0xc001070f20 sp=0xc001070ed0 pc=0x47a6dd
sync.(*Mutex).Lock(...)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/sync/mutex.go:90
net/http.(*http2clientStream).cleanupWriteRequest(0xc0008ee600, {0xf98f60, 0x1578700})
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/h2_bundle.go:8568 +0x85 fp=0xc001070f98 sp=0xc001070f20 pc=0x65e0a5
net/http.(*http2clientStream).doRequest(0xc0008ee600, 0xc0008a87e0?)
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/h2_bundle.go:8354 +0x28 fp=0xc001070fc0 sp=0xc001070f98 pc=0x65cd88
net/http.(*http2ClientConn).RoundTrip.gowrap1()
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/h2_bundle.go:8259 +0x25 fp=0xc001070fe0 sp=0xc001070fc0 pc=0x65cd25
runtime.goexit({})
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/runtime/asm_amd64.s:1695 +0x1 fp=0xc001070fe8 sp=0xc001070fe0 pc=0x4712e1
created by net/http.(*http2ClientConn).RoundTrip in goroutine 2270
	/opt/homebrew/Cellar/go/1.22.0/libexec/src/net/http/h2_bundle.go:8259 +0x2ed

Looking specifically at the stack for goroutine 2377 it appears that there is a panic here:
https://github.com/golang/go/blob/6cbe522fe1db19bb7d404d613bb9f2f46ca40655/src/net/http/h2_bundle.go#L3751
which occurs as a result of p.b being nil. It looks like the deadlock occurs because as the stack unwinds and the deferred functions are called, cleanup() attempts to acquire a mutex which is already held further up the stack here:
https://github.com/golang/go/blob/6cbe522fe1db19bb7d404d613bb9f2f46ca40655/src/net/http/h2_bundle.go#L9733
What did you expect to see?
The HTTP2 round tripper should not panic and cause a deadlock.

The client would set up separate goroutines for reading and writing, this can happen in theory when some error occurred in the write goroutine and it closed the the pipe while the read goroutine reading it. That's my guess for this, could you provide a reproducible demo for us to diagnose more deeply?

CC @neild

@panjf2000 The scenario you are proposing makes a lot of sense with what I am seeing.
I wish I could provide a reproducible example, so far I have not been able to recreate it locally, but it inevitably appears on production systems after some time. I am still trying to put something together to trigger the issue locally for debugging though.
If it helps, the environment that my code is running has the following features:

Approx 32 concurrent goroutines making HTTP requests (each uses its own instance of http.Client)
HTTP requests are all GET or HEAD
Each goroutine will be spawning its own worker routines making many simultaneous HTTP requests to a single server.
The host machines CPU is under stress, typical load average is 15.
The application makes requests to servers across the internet, frequently coming across servers which do not implement the HTTP and HTTP2 protocols properly. Lots of output like the following accumulates over time:

2024/02/19 22:44:18 protocol error: received DATA after END_STREAM
2024/02/19 22:44:20 protocol error: received DATA after END_STREAM
2024/02/19 22:44:33 protocol error: received DATA on a HEAD request
2024/02/19 22:44:49 Unsolicited response received on idle HTTP channel starting with "<!DOCTYPE html>\r\n"; err=<nil>
2024/02/19 22:47:03 protocol error: received DATA after END_STREAM
2024/02/19 22:47:04 Unsolicited response received on idle HTTP channel starting with "0\r\n\r\n"; err=<nil>
2024/02/19 22:47:20 protocol error: received DATA before a HEADERS frame
2024/02/19 22:48:57 protocol error: received DATA on a HEAD request
2024/02/19 22:48:58 protocol error: received DATA on a HEAD request
2024/02/19 22:49:48 Transport: unhandled response frame type *http.http2UnknownFrame

So far, I have not correlated these kinds of protocol errors with the times at which the deadlock occurs, so I doubt it is related but thought it worth mentioning.
I am in the process of adding additional instrumentation to my application in production in order to collect more details, I will report back if I find anything interesting or manage to recreate the issue locally.

The client would set up separate goroutines for reading and writing, this can happen in theory when some error occurred in the write goroutine and it closed the the pipe while the read goroutine reading it. That's my guess for this, could you provide a reproducible demo for us to diagnose more deeply?

After a deeper look at the source code, my previous assumption may not stand. If that was the case, the pipe.Write would have returned from here:
https://github.com/golang/go/blob/83da21f0526ccebf0bcd83434e56b82c8a75f269/src/net/http/h2_bundle.go#L3748-L3750
I'm pretty sure that this had something to do with the fact that pipe.setBuffer was never invoked in clientConnReadLoop.handleResponse which is inside clientConnReadLoop.processHeaders. There are some cases that might cause handleResponse to miss the call to pipe.setBuffer without returning a non-nil error, I'm unable to determine which one is the root cause that is responsible for this issue before some more exhaustive info from your production environment. But I think we can fix this issue by checking if the pipe is initialized before writing on it, which also is a good thing in general.

One possible path for this (possibly the only path? I haven't found any others): Server sends a 1xx response, followed by a DATA frame. processData checks to see if the request has begun, but it checks cs.firstByte (have we received any frames for the stream, including a 1xx header) rather than cs.pastHeaders (have we received headers for the stream).
https://go.googlesource.com/net/+/refs/tags/v0.21.0/http2/transport.go#2687

I've been running in production with the patch from https://go.dev/cl/566675 applied to the stdlib for about 8 days now and many million HTTP requests later I have not seen the deadlock issue pop up at all, so that appears to fix the issue.
I am not sure about the patch in https://go.dev/cl/567175 but if needed I can apply it as well (either on its own or with the other one) to test it.

@niallnsec Thanks, that gives me some added confidence that we've correctly identified the root cause.
Historically, we haven't backported HTTP/2 fixes that can be applied by importing golang.org/x/net/http2 and using ConfigureServer to swap out the bundled implementation. I think that for clear bugs with no workaround short of using an entirely different package, we should be a bit more aggressive about backports, though, so:
@gopherbot please open backport issues. This is an HTTP/2 bug with no good workaround.


envoy: Update to release 1.14.4

Update host proxy to Envoy release 1.14.4
Signed-off-by: Jarno Rajahalme<EMAIL_ADDRESS>

test-me-please

Coverage increased (+0.06%) to 37.008% when pulling 98293829bbb7e12cc36808969f894b7dba51f924 on pr/jrajahalme/envoy-1.14.4-update into 3a311ab0b0c5698e130e82ce4dcf75efb9d18fe8 on master.

Bumped Envoy build to run in latest cilium-builder (Ubuntu 20.04), which results in cilium-envoy binary that requires glibc > 2.27. The packer-ci image used for the Runtime tests is still Ubuntu 18.04 and it has glibc 2.27.
Will downgrade Envoy builder back to 18.04 using an older cilium-builder image (cilium-builder:2020-04-16).

test-me-please


Support for the "# import" syntax

GraphQL Yoga uses graphql-import that allows for using the following syntax:
# import B from "b.graphql"

type A {
  # test 1
  first: String
  second: Float
  b: B
}

This PR adds support for that syntax.
Thanks for this amazing package @dotansimha 👍

Looks good. Thanks @davidyaha !

The import doesn't seem to be working for the graphql-codegen-apollo-angular-template, I will reproduce when I get a chance

The import doesn't seem to be working for the graphql-codegen-apollo-angular-template, I will reproduce when I get a chance


Configuring email

I tried to update my email and even create the path to the mail/contact_me.php however I never got the email.
Reading the code, I dont see a form pointing to the php. Unless is using AJAX, I wonder how to verify the location of the file.

Hey @Jzarecta ,
I suppose this answer will help you.

Thanks @toubou91


[site]: Move scripts stuff into the site/public folder

Moved scripts folder into site/public/
Renamed scripts/README.md to publish.md and moved to site/content/
This PR fixes #615

@rufuspollock information on how to publish using the scripts can be found at the /publish endpoint which I have added to the homepage as well.
If I still have to write a blog post, what will the content generally entail ?

Merging this now as it looks correct. Not sure if we need a blog post at the moment - we can come back to it later.


Fixes #4159 - Issue with options on the toolbar in media detail view.

Description (required)
Fixes #4159
What changes did you make and why?
The issue is because of current item position is not set, So instead of passing position as a parameter to MediaDetailPagerFragment constructor, I have passed it to showImage method in MediaDetailPagerFragment that will set the current item position in viewpager.
Tests performed (required)
Tested betaDebug on Pixel 3 with API level 29.

Codecov Report

Merging #4193 (907a1e7) into master (9c82ce1) will decrease coverage by 0.00%.
The diff coverage is 0.00%.

@@             Coverage Diff              @@
##             master    #4193      +/-   ##
============================================
- Coverage     10.56%   10.56%   -0.01%
  Complexity      476      476
============================================
  Files           343      343
  Lines         12927    12928       +1
  Branches       1015     1015
============================================
  Hits           1366     1366
- Misses        11493    11494       +1
  Partials         68       68

Impacted Files
Coverage Δ
Complexity Δ

...e/nrw/commons/explore/ExploreListRootFragment.java
0.00% <0.00%> (ø)
0.00 <0.00> (ø)

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 9c82ce1...907a1e7. Read the comment docs.

Codecov Report

Merging #4193 (907a1e7) into master (9c82ce1) will decrease coverage by 0.00%.
The diff coverage is 0.00%.

@@             Coverage Diff              @@
##             master    #4193      +/-   ##
============================================
- Coverage     10.56%   10.56%   -0.01%
  Complexity      476      476
============================================
  Files           343      343
  Lines         12927    12928       +1
  Branches       1015     1015
============================================
  Hits           1366     1366
- Misses        11493    11494       +1
  Partials         68       68

Impacted Files
Coverage Δ
Complexity Δ

...e/nrw/commons/explore/ExploreListRootFragment.java
0.00% <0.00%> (ø)
0.00 <0.00> (ø)

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 9c82ce1...907a1e7. Read the comment docs.


Staging

Pull Request type

Please check the type of change your PR introduces:

[ ] Bugfix
[ ] 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?

Issue Number: N/A
What is the new behavior?

Does this introduce a breaking change?

[ ] Yes
[ ] No

Other information

Codecov Report

:exclamation: No coverage uploaded for pull request base (pre-prod@2bb34de). Click here to learn what that means.
The diff coverage is n/a.

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more.
@@             Coverage Diff             @@
##             pre-prod       #8   +/-   ##
===========================================
  Coverage            ?   53.71%
===========================================
  Files               ?       12
  Lines               ?     2273
  Branches            ?        0
===========================================
  Hits                ?     1221
  Misses              ?     1052
  Partials            ?        0


Required/Positional arguments and "--"

Hi,
I'm trying to use Gooey with python-fire and am having trouble with required (positional) arguments. It seems that Gooey is always passing positional arguments at the end of command line after a "--" but python-fire seems to not accept this form.
Why does Gooey passes positional arguments this way and would it be possible to opt out from this behavior ?
Just to clarify my use case:
parser = GooeyParser()
sub_parsers = parser.add_subparsers()
action = sub_parsers.add_parser("action")
action.add_argument("folder", type=str, widget="DirChooser")
action.add_argument("--force", action='store_true', default=False)

With the configuration above, Gooey generates the following command line parameters:
action --force -- <folder>

While python fire expects:
action <folder> --force

or
action --force <folder>

Thanks!

I don't know enough about argparse/gooey to know why this is, but it looks like if you change the nargs parameter to "*" or "?" parameters become optional, and get positioned in the place you're expecting.
action.add_argument("folder", type=str, widget="DirChooser", nargs="?")

Are there downsides to using nargs or having your argument categorized as optional? No idea, but at least it seems to work!


Integrate cryptoconditions 2

[x] Integrate cryptoconditions 2
[x] Bump transaction version to 1.0

@diminator i think that's kind of tested by the integration tests that POST transactions.


[SS-51] fix deployment with new docker structure, fix dockerignore file

fixing fly deploy
oops, dockerignore should always live in same level as src code

LGTM 👍


\GuzzleHttp\RequestOptions don't contain constant for base_uri param

Guzzle 6.3.3 version

Correct. That is because base_uri is no request option.

@Nyholm But this does not mean that this parameter should not have a constant. Everyone else has them.


mapping accuracy ellipse [CPP-906]

Frontend and Release Workflow Started here

Frontend and Release Workflow Started here

Frontend and Release Workflow Started here


[Pages] Fixed broken gitlab redirect linked from dash

This link is currently on pages dash https://developers.cloudflare.com/pages/platform/gitlab-integration, it should redirect to https://developers.cloudflare.com/pages/platform/git-integration

Closing as page is not visible in dash


Send slow command to statsd

#33
@maralla @wooparadog

@maralla
Changed to save slow log in server connection, and collect them in stats thread.

@maralla


⚠ Bofrost.es has degraded performance

In 51bd510, Bofrost.es (https://www.bofrost.es) experienced degraded performance:

HTTP code: 200
Response time: 2162 ms

Resolved: Bofrost.es performance has improved in bcbb222 after 6 minutes.


Show thread ID in logs

Closes: #XXX
Description
Sep 22 18:20:10.006 DEBUG ThreadId(01) spawned Client worker: client::ibc-0->ibc-1:07-tendermint-0
Sep 22 18:20:10.006  INFO ThreadId(32) [ibc-0 -> ibc-1:07-tendermint-0] running client worker & initial misbehaviour detection
Sep 22 18:20:10.009 DEBUG ThreadId(01) done spawning workers for chain ibc-1 and channel channel-0
Sep 22 18:20:10.101 DEBUG ThreadId(31) [ibc-1 -> ibc-0:07-tendermint-0] checking misbehaviour at 0-0, number of consensus states: 7
Sep 22 18:20:10.101 TRACE ThreadId(31) [ibc-1 -> ibc-0:07-tendermint-0] checking misbehaviour for consensus state heights (first 50 shown here): 1-3225, 1-3215, 1-543, 1-536, 1-532, 1-530, 1-526

For contributor use:

[ ] Added a changelog entry, using unclog.
[ ] If applicable: Unit tests written, added test to CI.
[ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work.
[ ] Updated relevant documentation (docs/) and code comments.
[ ] Re-reviewed Files changed in the Github PR explorer.

@mircea-c Not very pretty but it can unfortunately not be customized easily. Is that good enough for now?


Add base STL

Are the STL exports missing the base STL? Just exported it from the STEP file, can also add it as a separate STEP file if that makes sense?

yes, it was missing. Thank you


fix(rust): fix unused variable warning in ockam_node_test_attribute

Current Behaviour
https://github.com/ockam-network/ockam/pull/2156 changed this test harness to execute under the  #[cfg(feature = "std")] macro. cargo test by default does not execute the tests under this block, so the variable is then unused.

Proposed Changes
This change moves the variable instantiation to the same code block. This will only instantiate the variable then when it is needed for this block upon execution. In the future, if this behavior is no longer wanted, the instantiation of trybuild::TestCases can be moved.
Closes  #2188

Checks

[x] All commits in this Pull Request are signed.
[x] All commits in this Pull Request follow the Ockam commit message convention.
[x] I accept the Ockam Community Code of Conduct.
[x] I have accepted the Ockam Contributor Licence Agreement by adding my Git/Github details in a row at the end of the CONTRIBUTORS.csv file in a separate pull request to the ockam-network/contributors repository.

@tcd156 Thank you and congratulations on an awesome first contribution 🎉

Thanks!


Eliminate Long Storage Indexing Time at Node Startup

Description: Every time the node starts, it creates indices of block height -> block hash and era number -> block hash.  These are expensive and take ~1.5 minutes on mainnet.
Acceptance Criterion: Either eliminate the indices altogether or eliminate the long wait time to create them for good.  We might need a one-time indexing to get rid of them though.

@alsrdn If you pull this into the sprint, please start with Fraser.


Unable to update Rust since lastest AMP version

Bug Report
System Information

Operating System

Windows 10 Home, version 21H1

AMP version and build date

Version <IP_ADDRESS>, built 26/07/2021

Which AMP release stream you're using

Mainline

I confirm:

[x] that I have searched for an existing bug report for this issue.
[x] that I am using the latest available version of AMP.
[x] that my operating system is up-to-date.

Symptoms

What are you trying to do?

Update Rust server files.

What are you expecting to happen?

The server to update like on previous builds.

What is actually happening?

Since I updated AMP yesterday when I try updating Rust it asks for a steam login (which is not need for Rust since it can be done anonymously) and after I input a steam account that owns the game. The application state is on Stopping, there is nothing in the console and notifications says Updating Rust Dedicated Server but nothing is downloading or happening no matter how long I leave it.

Logs
These logs are from ten minutes after I tried to update.
AMP Instance
[14:48:08] [System:admin Info]    : Waiting for AMP instance to start...
[14:48:08] [InstanceManager:admin Notice] : AMP instance Rust01 is now running.
[14:48:21] [ADS:admin Activity]   : Managed remote instance Rust01 at http://<IP_ADDRESS>:8081/
[14:48:21] [Auth:admin Activity]  : Authentication token for admin requested by ManageInstance on behalf of admin
Rust Instance
[14:48:09] [Program Info]         : OS: Windows / x86_64
[14:48:09] [Program Info]         : CPU: Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz (4C/8T)
[14:48:09] [Program Info]         : AMP Instance ID: 3b56611d-3ab9-44b9-a4f9-4d72ba018a35
[14:48:09] [Core Info]            : Loaded RustModule version <IP_ADDRESS> by CubeCoders Limited
[14:48:09] [Core Info]            : Metrics publishing is enabled at udp://localhost:12820.
[14:48:09] [ModuleLoader Info]    : Loaded FileManagerPlugin version <IP_ADDRESS> by CubeCoders Limited
[14:48:09] [ModuleLoader Info]    : Loaded EmailSenderPlugin version <IP_ADDRESS> by CubeCoders Limited
[14:48:09] [ModuleLoader Info]    : Loaded WebRequestPlugin version <IP_ADDRESS> by CubeCoders Limited
[14:48:09] [ModuleLoader Info]    : Loaded LocalFileBackupPlugin version <IP_ADDRESS> by CubeCoders Limited
[14:48:09] [ModuleLoader Info]    : Loaded CommonCorePlugin version <IP_ADDRESS> by CubeCoders Limited
[14:48:09] [Core Info]            : RustModule requests dependency steamcmdplugin...
[14:48:09] [ModuleLoader Info]    : Loaded steamcmdplugin version <IP_ADDRESS> by CubeCoders Limited
[14:48:09] [Core Info]            : RustModule requests dependency RCONPlugin...
[14:48:09] [ModuleLoader Info]    : Loaded RCONPlugin version <IP_ADDRESS> by CubeCoders Limited
[14:48:09] [Core Info]            : Licence Present: AMP Professional Edition (Licenced to Mason Bush)
[14:48:09] [ModuleLoader Info]    : SFTP Server started on <IP_ADDRESS>:2224
[14:48:09] [WebServer Info]       : Websockets are enabled.
[14:48:10] [Core Info]            : Webserver started on http://<IP_ADDRESS>:8081
[14:48:10] [WebServer Warning]    : RouterTimer@10Hz with 2 jobs started
[14:48:10] [System Info]          : Checking for AMP updates...
[14:48:10] [System Info]          : AMP is up-to-date.
[14:48:22] [RemoteAMPAuth:Anonymous Activity] : Authentication attempt for user admin from <IP_ADDRESS>
[14:48:25] [RemoteAMPAuth:Anonymous Activity] : Authentication success
[14:48:30] [API:admin Activity]   : Updating the application.
[14:48:43] [API:admin Activity]   : Updating the application.

Known issue - you can resolve this by finding Plugins/steamcmdplugin/Apps.json and turning on "AnonymousLogin" for the Rust application. This change is included in the next update.


Ensure products are created in Admin scope first

I have seen issues where

products are created in a store specific scope
updated in the admin scope
Some of the values in the store specific scope incorrectly have "Use Default Value" set against them

This exception will ensure that products are created and fully defined in the admin scope prior to any store specific updates.

Reviewers, contact me directly if you want the ticket number or further details.


Upgrade to Docusarus 2.2.0

This website has been using an Alpha version of Docusaurus 2 (Alpha 54) for a very long time and I think it's time to upgrade it now since I have trouble starting up the website all of a sudden. The website still has exactly the same functionality, with headers, darkmode/lightmode, imageswitching, etc.
~The only issue left is upgrading the theming inside the src/theme folder, which hopefully isn't too tricky finding equivalents like useLogo();.~ Any idea where this custom theme we use might have come from @Indicardo? We would also have to get a new API key for search which stopped indexing items back in February.

https://docusaurus.io/docs/styling-layout#css-in-js

Comparison between new and old docs
https://imgur.com/a/qs7yncs
There's still a few styling issues left:

[ ] Fix <code> margins
[ ] Fix <label> size (code in red)
[ ] Center navbar and footer
[ ] Remove navigation above the title
[ ] Increase margins in the document body

After editing the CSS files, the new website is almost visually identical. I've decided to keep in the breadcrumbs and the differing appearance of the sidebar since I thought they were better and good additions. All that's left add in the search bar!

Good job!


Allow user account deletion (from OddBird).

NOTE: This should be reviewed and merged after https://github.com/SFDO-Tooling/Metecho/pull/2019 and https://github.com/SFDO-Tooling/Metecho/pull/2030 are already merged.

Features:

Allow deleting user accounts (https://github.com/oddbird/Metecho/pull/2165)

@jgerigmeyer another pr to update from main :D

@jgerigmeyer another pr to update from main :D

@davidjray Done! ✅

@davidjray @davidmreed Is there anything we can do to assist with review/merge of this PR? Thanks!


Add note field

Each task may have an optional note. Note may contain one or more URLs? Maybe use markdown for notes?

This functionality would allow the estimators to give stakeholders insight into the task estimates. This would assist in the reviewer understanding what's behind the estimate instead of having to guess. Example would be why a task is high risk or low risk.


s3cmd: ERROR: [SSL: CERTIFICATE_VERIFY_FAILED]

When I try to use s3cmd I get an error:
$ s3cmd ls s3://superjoe/
ERROR: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)

I verified that accessing my s3 account via a different program worked fine.
$ nixos-version
15.06pre64030.e1af50c (Dingo)

config: https://github.com/andrewrk/dotfiles/blob/master/nixconfigs/configuration.nix

Relevant to #8247

So that's Python HTTP  failing ssl certificate validation. Most probably s3cmd doesn't have set CA bundle location

@domenkozar This might not be a Python only problem. Seems like Amazon's SSL certificates have a broken chain of trust lately. For example, trying to check s3.amazonaws.com using SSLShopper's SSL Checker, I'm getting:
The certificate is not trusted in all web browsers. You may need to install an Intermediate/chain certificate to link it to a trusted root certificate. Learn more about this error. You can fix this by following Symantec's Certificate Installation Instructions for your server platform. Pay attention to the parts about Intermediate certificates.

and if I try with curl...
[bash:~]$ echo $SSL_CERT_FILE
/etc/ssl/certs/ca-certificates.crt

[bash:~]$ curl -L https://s3.amazonaws.com
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.

Hmm https://www.ssllabs.com/ssltest/analyze.html?d=s3.amazonaws.com&s=<IP_ADDRESS>&latest looks good

Even though that test appears to pass, if you look closely you will see that certificate has "chain issues".  Look under "Additional Certificates (if supplied)", you will see that it says Chain issues	Extra certs.
I had also tried the SSL Labs tool but I preferred to link the SSL Checker result because in this case it is more explicit. Last time (a couple of weeks back. I think), I could "curl" that URL just fine.

@domenkozar I've just realised that on NixOS 15.06pre62649.f93a8ee I can still curl that URL fine but on NixOS 15.06pre64030.e1af50c I no longer can but I can still curl other HTTPS endpoints fine.

Hmmm, @wkennington @vcunat any ideas? I think something changed again regarding CA bundles

Interesting, as the behavior changes without changing the certificate bundle. However, curl from both revisions you specified fail for me (but my own still succeeds).
$ ./result/bin/curl -v -L https://s3.amazonaws.com
* Rebuilt URL to: https://s3.amazonaws.com/
*   Trying <IP_ADDRESS>...
* Connected to s3.amazonaws.com (<IP_ADDRESS>) port 443 (#0)
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: none
* TLSv1.2, TLS handshake, Client hello (1):
* TLSv1.2, TLS handshake, Server hello (2):
* TLSv1.2, TLS handshake, CERT (11):
* TLSv1.2, TLS alert, Server hello (2):
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0
curl: (60) SSL certificate problem: unable to get local issuer certificate
...

And it "regresses" for me on some other locations, too (tried local https://seznam.cz), but most importantly, https://nixos.org is OK ;-)
After picking just the openssl bump 415407bd93 it curls all these again. I can't see anything relevant in the news file https://github.com/openssl/openssl/blob/OpenSSL_1_0_1-stable/NEWS#L16, but I guess that the behavior of only a few versions in-between was wrong.

Unless someone's willing to dig deeper upstream, I think we can close with fixed in staging.


UniqueIndex does not work in symfony 4

Some of annotations does not work in my documents
`
/**
 * @var string
 * @ODM\Field(type="string")
 * @ODM\UniqueIndex
 * @Assert\NotBlank()
 */
private $email;

 * @ODM\UniqueIndex
 * @Assert\NotBlank()

`
I can insert many  same email than i want and i have no mongodb error.
Field not blank does not work (Assert\NotBlank) with doctrine mongodb.
If you have any solution that will be great.
Thank

For UniqueIndex to work you need to create indexes, please consult this StackOverflow answer. The Assert\NotBlank is Symfony's annotation and its presence does not affect how ODM is working.

Ok @malarzm Thank !

So the only one solution for validate field empty is
         * @ODM\PrePersist      * @ODM\PreUpdate
?

That, or using Symfony's forms or requiring email to be present in __construct - there's plenty of ways :)

Ok thank @malarzm !


Redirect loop from race condition in overlord for leadership

It is possible for an overlord to know who the leading overlord is, but not realize internally that it is the leader. This can cause any interaction with the endpoints which redirect to the "leading" overlord to get caught in a redirect loop.

Our internal tooling pings /status on the node until it gets a 200 response, then watches /druid/indexer/v1/workers for the progression of the middle managers.
On the check for the workers, it often gets caught in a redirect loop.

It redirects many times to the same host.
Restart the overlord will be ok but it will happen after time.
Location: http://overlord_ip:8090/ [following]
--2016-10-18 09:35:13--  http://overlord_ip:8090/
Reusing existing connection to overlord_ip:8090.
HTTP request sent, awaiting response... 307 Temporary Redirect
Location: http://overlord_ip:8090/ [following]
--2016-10-18 09:35:13--  http://overlord_ip:8090/
Reusing existing connection to overlord_ip:8090.
HTTP request sent, awaiting response... 307 Temporary Redirect
Location: http://overlord_ip:8090/ [following]
--2016-10-18 09:35:13--  http://overlord_ip:8090/
Reusing existing connection to overlord_ip:8090.
HTTP request sent, awaiting response... 307 Temporary Redirect
Location: http://overlord_ip:8090/ [following]
--2016-10-18 09:35:13--  http://overlord_ip:8090/
Reusing existing connection to overlord_ip:8090.
HTTP request sent, awaiting response... 307 Temporary Redirect
Location: http://overlord_ip:8090/ [following]
20 redirections exceeded.


Okta 60284 hrishikesh add documentation

Please review this. I've added a few comments and would add more as I encounter more functions

Looks good to me. Thanks!


CARML team feedback - improve dependencies

[11:06 AM] Alexander Sehr
I also see a lot of dependencies that can be removed. With the later Bicep versions Linter should automatically complain about them too
[11:23 AM] Alexander Sehr
Also a question - why is there a key vault & storage account deployment at the and of the image template. Neither seems to be used post-deployment
[11:25 AM] Alexander Sehr
Also, you could reduce the AVD template further by deploying e.g. the RGs & NSGs using a loop, instead of specifying them one by one
[11:26 AM] Alexander Sehr
An example with a different resource:

But I hope it gets the idea across. You could have an array of the RG-Names and just loop over it. It's always the same anyways

main baseline reformatted to modular approach and CARML team suggestions.


⚠ Bofrost.de has degraded performance

In e4632a1, Bofrost.de (https://www.bofrost.de) experienced degraded performance:

HTTP code: 200
Response time: 1774 ms

Resolved: Bofrost.de performance has improved in 5ccd215 after 6 minutes.


A multipleHAWT problem

I need help with a problem.
I used openfast to run the ad_MultipleHAWT example in the areodyn module.
I applied the olaf method and modified the olaf file and replaced the original airfoil with the IEA 15MW model file.
Now there is an error, I want to seek a solution.
problem.zip

For some reason, I can't open your zip file.  What error are you receiving?
Best regards,

Sorry, this is my problem. I changed the airfoil parameters of 15mw to here and got such an error.

Dear @Americandream123,
As with any input file processing error, I suggest you enable the Echo option to debug issues with input file formatting.  That said, it looks like you've set NumTwrNds = 9 for the first wind turbine, but you've entered more than 9 rows of tower data, so, that is a problem.
Best regards,

Thank u,doctor.You are welcome to visit China and we will see u then.；）


Page change is removing/unbinding Plugin functions - $references[1]' is undefined

We are facing an issue in which loaded plugins are being unbounded/undefined.
Case 1: Our apps open XWebview with a "/login" URL and then user enters credentials to go inside "/dashboard" of the App. Now in this flow all the loaded plugins work well.
Flow 1: login -> dashbaord
Case 2: But when user logs in and then logs out of the app and goes back to "/login" screen and then tries to login again to go to "/dashboard", then the already loaded plugins do not work.
Flow 2: login -> dashboard -> logout ->login -> dashboard

login & logout pages URL = /login-page
dashboard page URL = /dashboard-page

In case 2: the already loaded plugins are not working. And am getting below exception.
Error: Optional(Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo={WKJavaScriptExceptionLineNumber=1, WKJavaScriptExceptionMessage=TypeError: Plugin.PdfPreview.$references[1] is not a function. (In 'Plugin.PdfPreview.$references[1]("true")', 'Plugin.PdfPreview.$references[1]' is undefined), WKJavaScriptExceptionSourceURL=http://localhost:8080/myserver/abc/dashboard-page, NSLocalizedDescription=A JavaScript exception occurred, WKJavaScriptExceptionColumnNumber=65})

I know nothing about your app's logic. I guess you retained a javascript callback during the 1st session, but tried to call it during the 2nd session.

I think somehow your guess is near to correct. But the callback is not bound to a session of the app. I saw every-time XWebview visits a page, it creates a new instance. So probably the instance initially created was bound with plugins and then when page changed and new XWebview instance came, then it is no longer able to find the plugins.

I changed below line of code and it fixed my issue.
Original Code:
deinit {
        guard let webView = webView else { return }
        let script: String
        if origin === self {
            script = "delete \(namespace)"
        } else if reference != 0, let origin = origin {
            script = "\(origin.namespace).$releaseObject(\(reference))"
        } else {
            return
        }
        webView.evaluateJavaScript(script, completionHandler: nil)
    }

Change only IF condition:
 } else if reference >1, let origin = origin {
Actually this code is triggering a delete $references inside the $releaseObject method of the generated XWVPlugin js.
As per my understanding, when App gets initialised it creates $references for each plugin and when a plugin method is being called it first executes the plugin method and passed control to native code to perform the task and then the deinit of XWebView (above method) gets called to clear references as they are already been executed.
If my understanding and above change is wrong let me know please. Thanks


Populate Github release with changelog for each tag / release that is created

Adding the changelog for a release to the releases tab in Github would be very helpful. The changelog file is useful, but not everyone checks it. Adding the changelog notes plus allowing for a Title to be provided when "unleashing" a new release would be a nice addition.

@micahr that would be really cool, never thought of that. Thanks for the suggestion.
👍

https://www.npmjs.com/package/ghreleases
https://developer.github.com/v3/repos/releases/#create-a-release

[ ] create github app for token et al
[ ] obtain git(hub) user
[ ] ensure repo-type/repoType is github
[ ] check if user passed title, come up with default otherwise
[ ] check if user passed body, come up with default otherwise
[ ] determine github org & repo name from git remote
[ ] use tag name used already
[ ] pass all of the above to ghreleases#create

Great job you are doing there!

Thanks @portokallidis

Just a thought, but instead of going through all the GitHub-specific stuff, what about if the changelog (perhaps just for the last release) is added to the commit message for the tag? This would (a) not require any GitHub auth, but would also support other git providers (BitBucket, GitLab, etc). I've tested with `git tag  -m "some message" and I see that GitHub doesn't support markdown in the tag message, but it does show the message upon expanding the ellipsis next to the tag name.
btw, thanks for unleash -- I've written my own release stuff with gulp before, but this is (a) way simple to use and (b) does the tagging bit that I never got to :+1:


Design undo/redo functionality

Updates #43 and especially deletes #44 can lead to costly mistakes unless there's reliable undo/redo functionality. This issue is about designing that.
In most applications, undo/redo history is designed as linear. Advanced editors use a tree structure for the history, which is more powerful but harder to display and navigate -- I guess I prefer this. I'll use "undo stack" to cover whatever implementation we end up with.

Add 'foo_deleted' tables. Instead of really deleting a row, we would "move" it to a table designed for this purpose. The 'foo_deleted' table could probably have the same schema as the 'foo_conflict' table. To undo a delete we would "move" the row back into 'foo' or 'foo_conflict'. The undo stack would have to be managed with a table that can refer to these various '*_deleted' tables.

A single 'history' table storing JSON representations of rows from any other table as they are updated or deleted. The JSON format could be what we use as the argument to update_row or it could be one of the richer internal representations of a row with messages inline. We could store "before" and "after" representations, if necessary. The implementation should be pretty close to update_row.

Other ideas?

I don't think there's any way to get this undo/redo functionality out of the SQL layer alone. The two ideas above require going through VALVE. If a user bypasses VALVE and makes changes to the SQL tables directly, we can't track that.

Option 3 is a better version of Option 1. I think that Option 2 could still work. It's worthwhile to think through both, then prototype whichever seems more promising.


refactor endpoint new page

A new PR created for this: https://github.com/OpenCSGs/CSGHub/pull/363


Update Statistic

1. Update README.md
I forget mark <Step> as implemented.
2. Update usage of Message
<Message> was updated to v1 API, I've updated its usage in docs.
3. Update Statistic's docs
I've updated naming of docs to the most recent pattern.
4. Update prop handling

Allow only string for shorthands.
Shorthands on StatisticLabel and StatisticLabel.
StatisticGroup:

Update key handling for children (antipattern with index usage);
Extend prop validation of items with Proptypes.shape.

Current coverage is 93.84% (diff: 100%)

Merging #390 into master will decrease coverage by <.01%

@@             master       #390   diff @@
==========================================
  Files            74         74
  Lines           960        959     -1
  Methods           0          0
  Messages          0          0
  Branches          0          0
==========================================
- Hits            901        900     -1
  Misses           59         59
  Partials          0          0

Powered by Codecov. Last update 012cba6...95a91d1

Thanks much for this!  A few comments and we can merge.

Anything else on this guy or is it ready for merging?

I'll update it now with oneOf, so we can merge it.

Great, I'll merge this tomorrow.  It's getting late here! 🌔

Released in v0.34.2


Add PartialOrd impls

What struct(s) should this be implemented for? I would like to take a stab a this

To start with, like PartialEq does it. Then possibly expand to mismatching dimension parameters and broadcasting later. I'd keep it simple first.

Oh PartialEq simply says false for unequal shapes. We can't really translate that to PartialOrd (except using partiality, but that doesn't affect the comparison operators..). Maybe returning None in partial_cmp method for unequal sizes, and panicking in the lt, etc methods will be ok?

See src/arraytraits.rs line 60.

How could I return None in partial_cmp?
Isn't the signature:
fn partial_cmp(&self, other: &Rhs) -> Option<Ordering>;

Yes, Option admits None. Maybe you see better what makes sense while implementing it.

Ahh, I get it. Sorry. First real experience with rust. Working on it now. Should have a PR ready soon.

Ok I think I have something that makes some sense, but I think I could use some feedback.
impl<S, S2, D> PartialOrd<ArrayBase<S2, D>> for ArrayBase<S, D>
    where D: Dimension,
          S: Data,
          S2: Data<Elem = S::Elem>,
          S::Elem: PartialOrd,
{
    /// Return `None` if the array shapes `self` and `rhs` are not equal.
    /// Return appropriate `Option<Ordering>` otherwise.
    fn partial_cmp(&self, rhs: &ArrayBase<S2, D>) -> Option<Ordering>
    {
        // Balk on arguments with different shapes. Should probably
        // broadcast at some point
        if self.shape() != rhs.shape() {
            return None;
        }
        // Use partial_cmp from the slice version if contiguous
        if let Some(self_s) = self.as_slice() {
            if let Some(rhs_s) = rhs.as_slice() {
                return self_s.partial_cmp(rhs_s);
            }
        }

        let mut cmps = self.iter().zip(rhs.iter()).map(|(a, b)| a.partial_cmp(b));
        let first_cmp_opt = cmps.next();
        if let Some(first_cmp) = first_cmp_opt {
            if cmps.all(|x| x == first_cmp) {return first_cmp}
        }
        None
    }
}

Any comments or thoughts?

PartialOrd semantics for ndarray

There is no precedent for array-wise (not elementwise) comparison operators in numpy. There is array equality and equivalency (broadcasts), but no less than etc relations

Challenges

Shape mismatch
Shape mismatch where broadcasting does not solve it
Float comparison with NaN returns None for .partial_cmp() but false for all other comparisons. Returning false when incomparable is a bit like letting errors pass silently.

Approach 1: Lexicographical ordering

&[T] does this. Different length is no problem
For one-dimensional ndarrays we have no problem to mimic this. But for higher dimensional? Implicitly comparing every array pair by their corresponding unravelled one dimensional sequence is not very intuitive.

Approach 2: Every element is less (or le, gt, ge), otherwise the comparison is false

Still has shape mismatch issues

Panic on shape mismatch would be the alternative to letting errors pass silently in < comparison, but it's also a nasty surprise.

Summary above is good, we simply hold this off since it seems there are no good semantics.


[Enhancement] SDK support

We would like to eventually want to port the SDK from Visual Studio to this extension. Currently it's an internally tracked work item but have no dedicated dev cycles for the feature. As such it might take some time for the SDK to make an appearance, but it's certainly something we're aiming for (eventually).

https://github.com/microsoft/vscode-powerquery-sdk


Add regex to parse time from the $request_time directive of nginx.

R: @andrewsg
Last change to the fluentd regex from me. Both of the below (and one with either timestampSeconds/latency and not the other, although that case is unexpected) should parse fine.
Sample log before change:
<IP_ADDRESS> - - [23/Aug/2016:01:57:20 +0000] "GET /_ah/health HTTP/1.1" 200 2 "-" "curl/7.26.0" tracecontext="-"
Sample log after change:
<IP_ADDRESS> - - [23/Aug/2016:01:57:20 +0000] "GET /_ah/health HTTP/1.1" 200 2 "-" "curl/7.26.0" tracecontext="-" timestampSeconds="1471917440.683000000" latencySeconds="0.003"

LGTM


PUPIL-415 replace typography related components with oak-components

Description
Replace typography related components with relevant oak-components.
Most of the components has beed updated. There should be no visual changes.
I've documented what is remaining/needs to be looked at here (at the bottom of document):
https://www.notion.so/oaknationalacademy/Replacing-SharedComponents-in-OWA-app-with-oak-components-de39c55b33e947bbbd30888547f5b10e
Issue(s)
Fixes #PUPIL-415
How to test

Go to https://deploy-preview-2228--oak-web-application.netlify.thenational.academy
Check the main journeys/menus/etc
There should be no visual changes

:tada: This PR is included in version 1.339.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Unable to click select element options with IEDriver

Bug report

Node Version: 7.9.0
Protractor Version: 5.1.1
Angular Version: 2.4.6
Browser(s): Internet Explorer 11
Operating System and Version Windows 7 (64 bit)

It is not possible to click on a select option with IEDriver. The following error is given:
Error
- Failed: Cannot click on element (WARNING: The server did not provide any stacktrace information)
  Command duration or timeout: 47 milliseconds
  Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
  System info: host: 'COMPUTERNAME', ip: '<IP_ADDRESS>', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_121'
  Driver info: org.openqa.selenium.ie.InternetExplorerDriver
  Capabilities [{browserAttachTimeout=0.0, ie.enableFullPageScreenshot=true, enablePersistentHover=true, ie.forceCreateProcessApi=false, ie.forceShellWindowsApi=false, pageLoadStrategy=normal, ignoreZoomSetting=false, ie.fileUploadDialogTimeout=3000.0, version=11, platform=WINDOWS, nativeEvents=true, ie.ensureCleanSession=false, elementScrollBehavior=0.0, ie.browserCommandLineSwitches=, requireWindowFocus=false, browserName=internet explorer, initialBrowserUrl=http://localhost:21958/, javascriptEnabled=true, ignoreProtectedModeSettings=false, enableElementCacheCleanup=true, unexpectedAlertBehaviour=dismiss}]
  Session ID: 23cd9516-8e61-4d13-97df-937c7c1e8c61

Protractor Code
element(by.id('role')).click();
element(by.id('role')).element(by.cssContainingText('option', 'Standard User')).click();

Page HTML
<select class="form-control ng-pristine ng-invalid ng-touched" id="role" name="role" placeholder="Enter the users role" required="" type="text" ng-reflect-name="role">
    <option>Standard User</option>
    <option>Admin</option>
    <option>Super User</option>
</select>

I also tried doing this in the REPL by setting a browser.explore() and the command returns null.
This works perfectly with Chrome & Firefox!

B.T.W. I have changed by code to not use PageObjects for the purpose of this post.

I would like to point out I have also tried adding a wait for the select option element to be visible and this fails too. When using REPL I can see the select options and firing the click event just returns null.
Really there needs to be a wrapper for this so it's possible to do something like ElementFinder.selectOptionByText("Option text"). This would make things much cleaner!

@hudson-t ,
Doesn't only this element(by.id('role')).element(by.cssContainingText('option', 'Standard User')).click(); work? I'm using IE11 also and I don't have a problem when I click on the option without clicking on the select-box to open it. The code also works on Chrome, Firefox, Edge and Safari (9)
And true for the ElementFinder.selectOptionByText("Option text"), maybe you can add a PR for that ;-)

@wswebcreation - that worked! no problems now. Still can't understand why the option element is clickable when it is actually not visible... but it works!
Thanks

Tnx for the feedback and closing the issue

@wswebcreation
Can you suggest me a good capabilities list for IE11?


Fix configuration replacement for auth in HttpAuthBootloader

This pull request addresses an issue in the HttpAuthBootloader where configuration settings for authentication transports and storages defined in the auth.php config file are overridden by hardcoded defaults during the booting process.
According to the documentation, it should be possible to configure where the authentication token is stored (e.g., in a cookie or header) and customize related parameters, such as the token's name, through the configuration file, as shown:
return [
    'defaultStorage'   => 'session',
    'defaultTransport' => 'cookie',

    'transports' => [
        'header' => new HeaderTransport(header: 'X-Auth-Token-Custom'),
        'cookie' => new CookieTransport(cookie: 'token-custom', basePath: '/'),
    ],
];

However, these configuration settings are ignored, and the token is always stored in the default token cookie. Currently, the only way to change the cookie name is by overriding it in the AppBootloader.
Issue:
In the Spiral\Bootloader\Auth\HttpAuthBootloader::init() method, the configuration values are replaced by hardcoded defaults:
$kernel->booting(function () {
    $this->addTransport('cookie', $this->createDefaultCookieTransport());
    $this->addTransport('header', new HeaderTransport('X-Auth-Token'));
    $this->addTokenStorage('session', SessionTokenStorage::class);
});

Benefits:

Ensures that configuration settings in auth.php are respected.
Works correctly with or without configuration.
PR does not break backward compatibility

Q
A

Bugfix?
✔

Breaks BC?
❌

New feature?
❌

The createDefaultCookieTransport method uses the HTTP config ($config = $this->config->getConfig(HttpConfig::CONFIG);). This change will cause it to be requested earlier, immediately upon calling setDefaults. After that, it will no longer be possible to modify it. I think this could become an issue. What do you think @butschster @roxblnfk ?

msmakouz I didn't change createDefaultCookieTransport, that's how it works now

Ok, then the behaviour really changes. Do you have any ideas how to do it better?

@laxity7 Perhaps I'm wrong and everything is ok.
Changes are restricted once the config object has already been created:
https://github.com/spiral/framework/blob/master/src/Config/src/ConfigManager.php#L63
But the getConfig method does not create it:
https://github.com/spiral/framework/blob/master/src/Config/src/ConfigManager.php#L82
Sorry. I thought it would be better to fix this with a check in the event itself before adding. But it seems your approach is good too.


Extension is using git:// for ssh remotes

Fix #2669

Thanks for the quick fix! 🎉 Which release version of the extension is this targeting?

This will be in the next release, 0.26.0, which should be released two weeks from now when VS Code 1.56 ships!


[PE-D][Tester A] The link in the DG brings to AB3 and not the group's repo

The links to the API for Ui, Logic result in the page for AB3 and not the team's repository page.

Labels: severity.Medium type.DocumentationBug
original: SKarthikeyan28/ped#5

Ensure all links point to the team's repo page and not that original ab3 one


ndt5: emulate Web100 variables used by MK's advanced field

I noticed that ndt5 only sets MinRTT and zeroes all other variables. There is a bunch of variables that we use in OONI. This issue tries to document what we'll be missing in the new platform and suggest ways to compute these values. The discussion is from the point of view of the variables that need to be computed (and possibly added) to the ndt5 code. All the variables that are listed in this issue are not directly shown to OONI users but are part of an "advanced" summary compiled by MK. See #161 for the more critical variables.
In doubt

SndLimTime{Cwnd,Rwin,Sender}: possibly from tcpi_busy_time, tcpi_rwnd_limited, and tcpi_sndbuf_limited but I hit the time box limit when thinking at that.

Pessimistic, no clue

FastRetran: like *CongestionSignals (and pessimistic)  [help needed]

Discovered by me and discussed with @stephen-soltesz. Added as assignees also @mattmathis and @gfr10598 hoping that they may correct me, if wrong, and help where I am stuck.

Per the email thread with CIRA, they needs the following metrics (and whatever fields make up the metrics):

Jitter (if possible - @mattmathis needs to clarify)
Packet loss
Upload speed
Download speed

Per the email thread with CIRA, they needs the following metrics (and whatever fields make up the metrics):

Jitter (if possible - @mattmathis needs to clarify)
Packet loss
Upload speed
Download speed

I will switch OONI soon to use ndt7. So, this issue is not very relevant to us anymore. I also see that these variables may be useful to others (https://github.com/m-lab/ndt-server/issues/163#issuecomment-529553532), thus I don't feel like closing this issue myself now.


Deployment Script Error: Set-AzKeyVaultSecret

Having an error with the 2 lines of Set-AzKeyVaultSecret on lines 547 and 548 regarding KeyVaults:

"Set-AzKeyVaultSecret -VaultName $KeyVaultName -Name 'appid' -SecretValue (ConvertTo-SecureString -String $global:appId -AsPlainText -Force) | Out-Null"
"Set-AzKeyVaultSecret -VaultName $KeyVaultName -Name 'appsecret' -SecretValue (ConvertTo-SecureString -String $global:appSecret -AsPlainText -Force) | Out-Null"

The same error is thrown:
"Set-AzKeyVaultSecret : Operation returned an invalid status code 'Forbidden'"

Note the 2 warnings prior to the errors. There were no errors prior to this.
Thank you!

Hi @alexc-MSFT , any updates on the issue

@alexc-MSFT If I'm not mistaken, I am a global administrator. I have been able to run these lines without errors before, I'm unsure why they are being thrown now. I have tried deleting the key vault and rerun, as well as just creating an entirely new key vault (with a different name).

@alexc-MSFT I was having some issues with some of my other apps I am trying to deploy onto Teams, turns out I was providing my Azure testing environment tenant ID rather than my Teams' tenant ID (where I am deploying my app). I tried to run the script with my Teams' tenant Id this time around, but I got the following error.

All the other apps I deployed using the GUI on the web. I suspect it is because the script uses the same tenantID to deploy the app as well as create resources. Could this be the issue?


[state sync] add support for multicasting chunk request

Motivation
Add  multicasting functionality in state sync
Currently there is the option to failover to the next available upstream network if there are no active peers in the primary upstream network, i.e. based on the liveness of peers in a network
This PR extends the failover functionality based on no progress made by requesting chunks from a given network. (This is possible if all peers in the network are behind, possibly due to trying to state sync and catch up itself)
If no progress is made by a certain configurable timeout duration, state sync next sends the same  chunk request to more networks, if available. This "multicasting" continues until a primary upstream peer gives a successful chunk response first, and afterwards state sync resumes only requesting chunks from the primary network
Test Plan
New test

not related to the change itself, but the logic is getting more and more complicated and exceeds my ability to reason about. I hope we can have a more organized structure both for reviewing and testing.
for example, the peer manager can evolve to handle all the logic of how/who to send the requests, and maybe other actors and let coordinator only does coordination.

/land


Drag and Drop Causing Child Windows to Disappear

Checklist

[X] I'm reporting a problem with Chatterino
[X] I've verified that I'm running the most recent nightly build or stable release
[X] I've looked for my problem on the wiki
[X] I've searched the issues and pull requests for similar looking reports

Describe your issue
Opening a search window or pinning open a usercard on a chat behaves as normal until the parent chat is directly moved using the drag and drop system.  After which any and all such windows belonging to that chat will disappear but still exist.  Even if the chat is returned to it's starting position. These windows are all completely inaccessible and will only appear again when trying to move the same chat again, disappearing once dropped into place.
Moving other chats via the drag/drop system does not affect the child windows of other chats.
Screenshots
https://github.com/user-attachments/assets/0307e3ec-308f-4740-ad4a-72b8a8ffc40a
OS and Chatterino Version
commit 44abb190 from 2024-07-20 running on Windows 10 version 22H2

I suspect this is related to https://github.com/Chatterino/chatterino2/issues/5432


Team 4 shadowdash new language design

Commits combined into one.

Test Plan:
Added the following test to be automatically performed by Circle CI:
check_success() {
  if [ $? -eq 0 ]; then
    echo "$1"
  else
    echo "$1"
    exit 1
  fi
}

cd src/shadowdash

g++ -w -std=c++17 -fPIC -c manifest.cc  manifest.h
check_success ".o compiled successfully"

g++ -w -shared -o manifest.so manifest.o
check_success ".so compiled successfully"

cd ../..

Test Result:
Overall Test
Test to compile manifest.o and manifest.so

Latest PR: https://github.com/nyuoss/ninja-shadowdash-nyu/pull/26


feat:  improved metrics and added rate limit for the batch request feature in ws server (#2474)

Description:

added shouldRateLimitOnMethod() function to ConnectionLimiter class which utilizes the shouldRateLimit() method from RateLimit class to apply rate limit logic on both batch requests and single requests in the WS server
added methodsCounter metric for batch_requests methods
added a list of acceptancetest for rateLimit in the WS server
modified acceptancetest:ratelimiter script to run tests with @web-socket-ratelimiter tag. This change will add the new acceptancetest to the ratelimiter CI workflow

Metrics result:
**Startup:

** After multiple batch requests calls:

Fixes #2474
Notes for reviewer:

Checklist

[ ] Documented (Code comments, README, etc.)
[ ] Tested (unit, integration, etc.)

as @Nana-EC pointed is missing UT for rate limits.
also, atm we don't do automated tests for metrics but we usually add a screenshot of the /metrics endpoint where you can see the metrics added with some values on Notes for reviewer: section of the PR description.

added prrof for metrics


hide VersionDropdown on non-versioned pages, reduce the visible versions list

Why & How
Since latest changes to the docs structure and introducing multiple docs instances part of the website is versioned, and part of the website is static.
Due to those changes I feel like the VersionDropdown adds a bit of unnecessary confusion, so I have decided to swizzle it and propose a change that hides the version selector from all of the non-versioned pages. The selector is only visible when viewing the pages from Guides, APIs and Components. This might not be in line with other Docususaurus sites, but I feel like it's a better UX in our case.
I have decided to swizzle because AFAIK Docusuaurs do not offer a configs for the changes I would like to achieve.
The code I have added has been annotated with comment starting with (CUSTOM), so we can identify the part we edited during Docusuaurs updates in the future.
In addition to that, I have reduced the number of visible versions in the dropdown to 5 latest releases + next.
Preview

Let's ship this then, we can always revert this commit, if the change breaks anything. 😉


Add Light and Dark Theme Toggle Feature

Feature Request: Light and Dark Theme Toggle
Description
I would like to propose the addition of a light and dark theme toggle feature for the application. This will enhance user experience by allowing users to choose their preferred viewing mode, which can help reduce eye strain and improve accessibility.
Motivation

User Preference: Many users have different preferences for light or dark themes based on their environment and comfort.
Accessibility: Offering both themes can make the application more accessible to users with visual impairments or light sensitivity.
Aesthetic Appeal: A well-implemented theme toggle can enhance the overall look and feel of the application.

Proposed Solution

Theme Toggle Button:

A toggle button should be added to the header or settings menu to switch between light and dark themes.

CSS Variables:

Utilize CSS variables for colors, backgrounds, and other UI elements to make the themes easy to implement and maintain.

Local Storage:

Store the user's theme preference in local storage so that the selected theme persists across sessions.

Implementation:

Add the necessary CSS styles for both themes.
Implement JavaScript functionality to toggle between themes and update local storage.

Additional Information

Please refer to the existing UI components to ensure the themes are applied consistently throughout the application.
Consider using a library or framework that simplifies theme management if applicable.

Tags

feature
enhancement

@Vinit710 I would love to work on this issue.

@Vinit710 I have made the PR please review it.

uh..?

please assign this to me @codingkatty

hi!! I want to clarify here that this is done :)) @ayushiu thanks for tryin to participate but its done dy


Wrong language tag for “undefined”

Currently, there’s a few places in the SILE source code where xx indicates an undefined or unknown language. However, assuming that SILE wants to use the same IETF BCP-47 language tag system as XML and pretty much everyone else these days, the correct tag for “unknown/undefined” would be und.
https://github.com/simoncozens/sile/search?utf8=✓&q=xx

Sticking with that standard makes a lot of sense to me. The xx has always bothered me but I didn't know there was even a standard tag for undefined. I put together a PR with the necessary changes.

Good catch, and nice fix. Thank you both!


DMP-3792: Add no audio error/warning message to hearing screen

Jira link
DMP-3792
Change description

Adding a no audio error message to the hearing screen in the event of no audio and only events for a give hearing.
Split up spec file into before and after component initialisation to allow easier before and after mocking
Removed redundant queryparam tab setting as we now have the ActiveTabService that manages the tab state

@deanbullock-hmcts the screenshot shows the message in the wrong place, but the code looks to be correct?

@deanbullock-hmcts the screenshot shows the message in the wrong place, but the code looks to be correct?

Screenshot updated, I initially did it in the wrong place and moved it so the screenshot was out of date.


move under webpack-contrib organisation.

@tomchentw ping

@graingert I'm open to this. But do they provide any rules for repositories to be moved into it? I don't see one there. Also, the repositories under webpack-contrib now are mainly official ones.

Official stuff is here https://github.com/webpack/


hincrby fix for Redis Presence

This fixes client's issue (https://lucidsight.slack.com/archives/C01S50ZU8SJ/p1661782430617389)

We are having difficulty using Redis properly because the hincrby doesn't seem to be implemented properly.  This function is suppose to return a value, when used with redis, and that is what makes using redis as a semaphore possible. We don't have another way of keeping bots from entering multiple times with the same account without an atomic function, and all the atomic functionality of redis seems to be disabled.

The hincrby is returning a promise, but it only returns null.  Whereas the redis documentation specifies that the value is initialized to 0 if it is not already set. However, even if it is preset to a value, the result is always null

thanks @endel


auth token appears to expire after ~60 minutes

currently running: rfgamaral/gphotos-uploader:amd64-latest
I follow the steps outlined for CLI authentication
Log information
2019/07/04 20:22:14 You will now be taken to your browser for authentication or open the url below in a browser.
2019/07/04 20:22:14 https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=<snipped>
2019/07/04 20:22:14 If you are opening the url manually on a different machine you will need to curl the result url on this machine manually.
2019/07/04 20:22:15 Failed to open browser, you MUST do the manual process.
2019/07/04 20:22:16 Authentication will be cancelled in 120 seconds
2019/07/04 20:22:56 Shutting down server...
Server gracefully stopped
2019/07/04 20:22:56 stored token for user<EMAIL_ADDRESS>2019/07/04 20:22:56 Entering Directory: /photos
2019/07/04 20:22:58 using album: photos / Id: <snipped>
2019/07/04 20:22:58 Uploading den_20190703-071154.jpg
2019/07/04 20:22:58 Uploading den_20190703-071156.jpg
2019/07/04 20:22:58 Uploading den_20190703-071504.jpg

<Snipped upload activity>

[prompt]# docker exec -it gphotos-uploader oauth.sh start
2019/07/04 21:22:15 No Dbus support
2019/07/04 21:22:15 Saving credentials in Leveldb
2019/07/04 21:22:15 Entering Directory: /photos
2019/07/04 21:22:17 using album: photos / Id: <snipped>
2019/07/04 21:22:17 all uploads done
2019/07/04 21:22:17 all deletions done
[prompt]# docker exec -it gphotos-uploader oauth.sh start
2019/07/04 21:23:24 No Dbus support
2019/07/04 21:23:24 Saving credentials in Leveldb
2019/07/04 21:23:24 Need to log login into account<EMAIL_ADDRESS>2019/07/04 21:23:25 You will now be taken to your browser for authentication or open the url below in a browser.
2019/07/04 21:23:25 https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=<snipped>
2019/07/04 21:23:25 If you are opening the url manually on a different machine you will need to curl the result url on this machine manually.
2019/07/04 21:23:26 Failed to open browser, you MUST do the manual process.
2019/07/04 21:23:26 Authentication will be cancelled in 120 seconds```

Just to be sure, do the files actually stop being uploaded in the background after ~60mins?

No all uploads stop.

No all uploads stop.

What do you mean? In what way is that different from what I said? I just need to understand what's really happening so I can debug the issue...

@rfgamaral I have the same issue:
after about an hour (exactly 1h08m) I get the same log messages (copy from @beed2112 log)
`2019/07/04 21:23:24 Need to log login into account<EMAIL_ADDRESS>2019/07/04 21:23:25 You will now be taken to your browser for authentication or open the url below in a browser.
2019/07/04 21:23:25 https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=
2019/07/04 21:23:25 If you are opening the url manually on a different machine you will need to curl the result url on this machine manually.
2019/07/04 21:23:26 Failed to open browser, you MUST do the manual process.
2019/07/04 21:23:26 Authentication will be cancelled in 120 seconds````
that means I have to open the url https://accounts.google.com/o/oauth2/aut...  in my browser and paste the resulting url in the docker container ( docker exec -it gphotos-uploader oauth.sh store-token"http://<IP_ADDRESS>:14565/oauth/callback?sta...")
the images are uploading again and after every 1h08m I have to reauthorize gphoto-uploader again and again.
I already
docker stop gphotos-uploader
docker rm gphotos-uploader
docker rmi IMAGE-ID of rfgamaral/gphotos-uploader:latest
deleted the config folder
and done again the steps from the Readme
And THX for your work!

No all uploads stop.

What do you mean? In what way is that different from what I said? I just need to understand what's really happening so I can debug the issue...

My apologies.
Yes the files actually stop being uploaded in the background after ~60mins

I need to debug this, it could be an upstream issue or my own, I'm not sure yet. I apologize in advance because I'm not quite sure when I'll find the time to look into this problem.

Understand that time is hard to come by.  Hope that when you are able to look into it you can recreate.

In the mean time I built the previous image, which is using an older version of gphotos-uploader-cli, but includes the fix for #7. I haven't tested it yet (sorry) but it should be working. If it helps with the issue described here, I'm not sure, I need you guys help with that :)
So, to try this, just invoke your docker run command with one of these images (pick the right one for your device's architecture):

rfgamaral/gphotos-uploader:amd64-test
rfgamaral/gphotos-uploader:arm64v8-test
rfgamaral/gphotos-uploader:arm32v6-test

Please let me know how that works out for you :)

Docker can't find the tag amd64-test
even
git clone https://github.com/rfgamaral/google-photos-api-client-go.git
--branch ad6b3ba3
can't find the branch.
Am Sa., 6. Juli 2019 um 12:25 Uhr schrieb Ricardo Amaral <
<EMAIL_ADDRESS>
In the mean time I built the previous image, which is using an older
version of gphotos-uploader-cli, but includes the fix for #7
https://github.com/rfgamaral/docker-gphotos-uploader/issues/7. I
haven't tested it yet (sorry) but it should be working. If it helps with
the issue described here, I'm not sure, I need you guys help with that :)
So, to try this, just invoke your docker run command with one of these
images (pick the right one for your device's architecture):

rfgamaral/gphotos-uploader:amd64-test
rfgamaral/gphotos-uploader:arm64v8-test
rfgamaral/gphotos-uploader:arm32v6-test

Please let me know how that works out for you :)
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/rfgamaral/docker-gphotos-uploader/issues/8?email_source=notifications&email_token=ACAQZTHCPTYMWWDHPN2OSFLP6BXH7A5CNFSM4H577C7KYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODZKW3CI#issuecomment-508915081,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ACAQZTG4JRGRVTFXX3C65MLP6BXH7ANCNFSM4H577C7A
.

I’m seeing this too; the old version would stay authenticated while this new version refuses to.

Docker can't find the tag amd64-test even git clone https://github.com/rfgamaral/google-photos-api-client-go.git --branch ad6b3ba3 can't find the branch. Am Sa., 6. Juli 2019 um 12:25 Uhr schrieb Ricardo Amaral <<EMAIL_ADDRESS>…
In the mean time I built the previous image, which is using an older version of gphotos-uploader-cli, but includes the fix for #7 <#7>. I haven't tested it yet (sorry) but it should be working. If it helps with the issue described here, I'm not sure, I need you guys help with that :) So, to try this, just invoke your docker run command with one of these images (pick the right one for your device's architecture): - rfgamaral/gphotos-uploader:amd64-test - rfgamaral/gphotos-uploader:arm64v8-test - rfgamaral/gphotos-uploader:arm32v6-test Please let me know how that works out for you :) — You are receiving this because you commented. Reply to this email directly, view it on GitHub <#8?email_source=notifications&email_token=ACAQZTHCPTYMWWDHPN2OSFLP6BXH7A5CNFSM4H577C7KYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODZKW3CI#issuecomment-508915081>, or mute the thread https://github.com/notifications/unsubscribe-auth/ACAQZTG4JRGRVTFXX3C65MLP6BXH7ANCNFSM4H577C7A .

I'm aware, that's why I removed my comment. Thought nobody would see but I forget some people receive e-mail notifications for comments 😆

There's a new gphotos-uploader-cli version that should fix this issue. However, during my testing I found a different issue that needs to be fixed first.
I'm not sure if it's actually an upstream issue or my own.

This issue should now be fixed. Please pull the latest Docker image.

I’m still seeing this with the latest image.
Is there anything I can use to help you? (BTW, is there a way to tag your releases so I can refer to them? I’m using the 11 July release.)

Refer to them by date for now, thanks.

Is there anything I can use to help you?

I'm not sure, I thought this was an upstream issue that should've been fixed with the latest release, I'll have to debug it more thoroughly but I'm kinda short on time.

I did some further testing and I now believe again this is an upstream issue...
I've downloaded a gphotos-uploader-cli binary directly from the upstream project and tried to use that without Docker on a Linux machine using the file mode for the SecretsBackendType option and the authentication expired after ~60 minutes too.
If any of you guys use Linux (like Ubuntu or something) or macOS could you do me a favor and do the same test as me?

Download the appropriate binary from here for your system.
Run gphotos-uploader-cli init and change the config.hjson with your credentials and e-mail. Leave SecretsBackendType to auto for now.
Wait 60 minutes or more and run gphotos-uploader-cli. Did it work or were you asked to authenticate again?
Remove any files from ~/.gphotos-uploader-cli (should have your e-mail for name, they contain the authentication token from Google).
Change config.hjson file and set SecretsBackendType to file for this second test.
Run gphotos-uploader-cli again and you should be asked to authenticate again (this is OK).
Wait 60 minutes or more and run gphotos-uploader-cli. Did it work or were you asked to authenticate again?

I'm trying to pinpoint the problem so we can open an upstream issue if it makes sense.

I’m starting this now, so I’ll get back to you tomorrow. Meanwhile, in doing this testing, I’m getting a prompt “Enter passphrase to unlock /Users//.config/gphotos-uploader-cli”. I’m just pressing return. Is this something expected?

OK, SecretsBackendType being either auto or file made no difference. They both stored the auth token in a file in the config directory named after my login, and both times it expired after an hour. (The auth server always just immediately regranted the token without a relogin, but that’s still a problem.)

I’m starting this now, so I’ll get back to you tomorrow. Meanwhile, in doing this testing, I’m getting a prompt “Enter passphrase to unlock /Users/[username]/.config/gphotos-uploader-cli”. I’m just pressing return. Is this something expected?

Yes, it's expected. That's asking you for a passphrase to encrypt the access token to your Google account. IF you press Return you're just encrypting with an empty string I believe. For these tests, that's irrelevant, keep pressing Return when needed.

OK, SecretsBackendType being either auto or file made no difference. They both stored the auth token in a file in the config directory named after my login, and both times it expired after an hour.

That could be one of two things:

SecretsBackendType setting to auto is picking file.
The same problem exists in other types of backends.

I'm kinda busy at the moment, would you be so kind and open an upstream issue as detailed as possible?

Upstreamed.

Upstream was closed out. How do we stand here?

Upstream was closed out. How do we stand here?

The implemented solution in the upstream project introduced a lot of breaking changes, some of which I'm not sure are compatible with this project. I advised against the changes proposed the way they were implemented because it wouldn't help this project, unfortunately they were ignored.
As such, I'm not sure when I'll pick this up cause I'm quite busy at the moment and don't have time to investigate this further.

@avidrissman I took a shot at making the latest version working with Docker and made a few fixes but it's not enough to get this working again.
While gphotos-uploader-cli never supported an headless mode, it was possible to workaround it with some manual steps (as currently described on my README). However, latest changes completely broke the authentication process with headless machines.
Without proper support, or at least some ability to workaround that missing support, I can't update to the latest version and thus fix this issue.

FYI, the preview image is now updated to the latest gphotos-uploader-cli v0.8.1 and it also includes new authentication mechanism that should make authentication much easier for headless servers.
You can see the documentation changes here or just check the new README.md.
These changes were supposed to fix this issue but during my testing the auth token still expired and didn't refresh automatically. Still trying to figure out why and what I can do to fix it, please bear with me.

I can not see why docker is not refreshing the key. Have you tried to start auth process from scratch? Previous gphotos-uploader-cli versions where not storing RefreshToken inside the credentials file.
Good job @rfgamaral

I can not see why docker is not refreshing the key. Have you tried to start auth process from scratch? Previous gphotos-uploader-cli versions where not storing RefreshToken inside the credentials file.

I had to change the OAuth client ID from "Other" to "Web application" due to "redirect_url_mismatch" errors. It needed that type of application for the OAuth client ID so that I could whitelist a proper redirect URL (I can't do that with "Other"). I believe the token refresh is not working properly because of this change.

Hey @rfgamaral, thanks for the heads up!  I gave the new version a try - but I'm having a problem with the new auth method. I followed all the steps - recreated the Client ID, authorised the nip.io domain, deleted the config so a new one would be created.  When I run the docker and go to the appropriate URL, everything looks fine, I get the green "Success" message, but when I return to the terminal window, I see this:
2019/09/16 10:14:56 could not get a token: error while exchanging authorization code and token: Post https://oauth2.googleapis.com/token: x509: certificate signed by unknown authority
I tried running the docker logs -f gphotos-uploader to see the logs, but I don't seem to get anything past:
[services.d] starting services [services.d] done.
This might just be a problem with certificates on the Synology NAS I'm using though - so I'll have a look into it and update if I find a solution!  Thanks for your work!

@monkeyhat Thank you for giving the preview version a try.
That error is what happens when the auth token is no longer valid and gphotos-uploader-cli tries to use the refresh token to get a new auth token. The implementation is not compatible with the "Web application" type of OAuth ID and I'm not even sure if it can be made compatible. I don't know GoLang so it's hard for me to debug this, but if @pacoorozco could take a look, that would be awesome 😁
For that reason this new approach is not feasible and I might revert to the previous one if I can find a way and hack around a solution to fix the issue here at hand.

Actually, I might be able to fix this problem... 🤞

Actually, I might be able to fix this problem... 🤞

Ah, almost... Now I got a different error:
2019/09/16 19:18:03 Token has been expired, refreshing
2019/09/16 19:18:03 could not refresh the token: oauth2: token expired and refresh token is not set

I kinda require GoLang skills, which I don't have, to debug this and investigate a possible solution...

This issue should now be fixed in the preview branch and thus the preview tag, please test it guys and let me know how it goes. Also bear in mind that the preview version is using gphotos-uploader-cli v0.8.4 (latest available at the time of writing).
P.S: The authentication steps are similar to the current ones (I don't use nip.io anymore) with one less step, please check the instructions in the preview branch.

Hey @rfgamaral, sorry for the delay in feeding back on this!  It took me a couple of days to find time to set up the new preview branch, and then I wanted to let it run for a while to make sure it was getting the token each time it was cron-ed.  So far it's been up for 4 days, and seems to be behaving exactly as it should!  Thanks so much for all your work on this.

Hey @rfgamaral, sorry for the delay in feeding back on this! It took me a couple of days to find time to set up the new preview branch, and then I wanted to let it run for a while to make sure it was getting the token each time it was cron-ed. So far it's been up for 4 days, and seems to be behaving exactly as it should! Thanks so much for all your work on this.

Glad to hear that :)

@rfgamaral. I have the same feedback been running the preview since release.   Thanks so much for the work.

You may need to update the authentication steps listed at https://hub.docker.com/r/rfgamaral/gphotos-uploader/ .

You may need to update the authentication steps listed at https://hub.docker.com/r/rfgamaral/gphotos-uploader/ .

Was hoping that would be automatic, guess not. Updated! Thank you 👍


Support Multiple Models

Allow user to specify multiple models to download when loading server
Allow user to switch between models
Allow user to load multiple models on the cluster (nice to have)

For first and second feature request, why don't you just kill the old server and start a new one with the new model?

It’s what we are doing now but takes long time to download and load large models (33/65b). For train to deploy pipeline not possible to have zero downtime without multiple servers and blue green deployment strategy.

The downloading should only happen at the very first time when using a model. However, the loading cost is unavoidable. Are you looking for something that can swap the model with zero downtime?

I think multi-models is important to some bussiness logic like ensemble model, do you have any ideas I can reference, then I will try to implement it on vLLM.

Is there any progress on this feature?

+1

+1

+1 For enterprise, instead of one monolithic, API-based LLM like GPT4, their strategy may be a collection of SLMs dedicated/fine-tuned to specific tasks. THis is why they will want to serve multiple models simultaneously, for e.g. phi2/mistral-7B/yi-34B. Could we have an update on this feature request please?

+1
how is the progress of this feature

+1

+1

+1

+1

+1

+1

++++1

+1

+1

+1 desperately need multiple models

+1

+1

+1

+1

What is the general thought process or strategy into implementing like this if this is open for contributions? Does the vLLM team or anyone have a roadmap or idea into it's implementation that someone can pick up?
This would be highly useful. All I can quickly think of is how tensorflow allows to specify memory used something similar to gpu util here on vLLM or using subprocesses within python (although I must admit I do not understand much about this topic in general anyway)

+1

One work around that I notice vLLM already gives is using Docker containers.
Use docker compose to serve multiple models that way two or more models can be served at a time based on your memory capabilities.

+++1

+1+1

So i can have a complex vllm setup with batching and all but can't change the current model except spin a new container ? 😅

+1

+1

+1

+1

vLLM does not support multiple models.
for anyone who is interested, please pin up multiple vllm instances, and use routers like litellm https://docs.litellm.ai/docs/simple_proxy#load-balancing---multiple-instances-of-1-model to route among vllm instances.

+1

+1 Good to have this.

+1, at the very least would be great to see an example. Ray serve's vLLM example does not work with multiple models and tensor parallelism

+1, I just need two models load separately

+1

Would it be possible to switch models by utilizing RAM?
E.g.,

Load all models to RAM and load one of them from RAM to the GPU memory.
If the requested model is not the one loaded in the GPU memory, load it from the RAM.

I am not sure if it is possible.

+1

+1

+1

++

+1

+1

+1


#98 Proposal for fix for issue with notification handlers

Hi!
Details about the underlying problem can be found here: https://github.com/skttl/umbraco-fulltextsearch8/issues/98
This PR will:

Revert our the UpdateCacheOnPublish notification handler to be synchronous
Keep the async nature of the IPageRenderer and CacheService by using Task.WaitAll() in UpdateCacheOnPublish.
Ensure that  UpdateCacheOnPublish will be executed before Umbraco's ContentIndexingNotificationHandler by re-ordering them in the DI-container during registration.

I've performed some testing and can confirm that UpdateCacheOnPublish will run to complete before the ContentIndexingNotificationHandler starts the re-indexing and fires the AddFullTextItemsToIndex.IndexProviderTransformingIndexValues()-method in a background thread.

Works as expected 👍 thanks!

Great news! See you soon in the CodeCabin 👨💻


Writing logs to an external file

Hi,
How can i write the logs in postgraphql console to an external file

Are you asking for something more than the following?
postgraphql > file.txt 2>&1

@benjie
When postgraphql is up and we are running queries we can see the queries in console like

0 error(s) in 87.99ms :: { allDevelopers { edges { node { id } } } }

I want to write these logs to a external file and my postgraphql version is 3.2.0

@benjie
I tried the above solution and it works perfect. Thanks a lot


Update Documentation

The third position of the SDK version number communicates both the minor and patch number. The minor version is multiplied by 100. Minor version 1, patch version 2 would be represented as 102. The final two digits represent the patch number. For example, the release of .NET Core 2.2 may create releases like the following table:

Change
.NET Core Runtime
.NET Core SDK (*)

Initial release
2.2.0
2.2.100

SDK Patch
2.2.0
2.2.101

Runtime and SDK Patch
2.2.1
2.2.102

SDK Feature change
2.2.1
2.2.200

It's already late here thus i apologize in advance if I'm wrong, but 2*100 is still 200 not 100. Therefore the initial SDK release should be 2.2.200 and each patch would add +1 to it. Likewise the last line should have been 2.2.204. Seems like the explanation to your versioning is not correct.
Also check out the 2.2.X SDK versions of your own download page
Your example table does not match your own version page.
UPDATE: I propose following change to your versioning to be more logical:

SKD patch version will be runtime patch version times 100 + 1 for each SDK patch
this would create following table:

Change
.NET Core Runtime
.NET Core SDK (*)

Initial release
2.2.0
2.2.000

SDK Patch
2.2.0
2.2.001

Runtime and SDK Patch
2.2.1
2.2.100

SDK Feature change
2.2.1
2.2.101

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 4723eb4d-c4b9-f44c-7753-caa4a3c8cfdd
Version Independent ID: 17270776-9bf5-fe60-f9a7-43311e5b4654
Content: How the .NET Core Runtime and SDK are versioned - .NET Core
Content Source: docs/core/versions/index.md
Product: dotnet-core
GitHub Login: @bleroy
Microsoft Alias: mairaw

Hello, thank you for your question :)
This is part talking about the versioning of the SDK, not the versioning of the Runtime. If you look at the paragraph before the one you quoted, it says this:

The .NET Core SDK releases faster and its versions must communicate both the aligned runtime and the SDK's own minor and patch releases. The first two positions of the .NET Core SDK version are locked to the .NET Core Runtime it released with.

So in versioning the SDK, it follow this format:
RM.Rm.SMmm

RM = Runtime Major
Rm = Runtime Minor
SM = SDK Major
mm = SDK Minor

Regarding suggestion a version number system change, you should make that request over on the core/sdk repos, like https://github.com/dotnet/core
I think this answers your question and I'm going to close this issue. Cheers!


where you load the train_img.txt about cifar10 dataset??

For the ADSH_pytorch, in the ADSH_CIFAR_10.py, I find you random sample the training set from database, the codes is as follows,
for iter in range(max_iter):
        iter_time = time.time()
        '''
        sampling and construct similarity matrix
        '''
        select_index = list(np.random.permutation(range(num_database)))[0: num_samples]
        _sampler = subsetsampler.SubsetSampler(select_index)
        trainloader = DataLoader(dset_database, batch_size=batch_size,
                                 sampler=_sampler,
                                 shuffle=False,
                                 num_workers=4)

However, follow your paper, the training set is randomly sample 500 images for each class. Such that there are 5000 training samples. so in your program there is a list "train_img.txt" with 5000 lines for training.
The problem is I cannot find any codes about loading the train_img.txt ?? can you introduce it clearly?

5000 samples are sampled from database_img.txt
https://github.com/jiangqy/ADSH-AAAI2018/blob/2e95574aaafa6ab139a142e5fb5020317384b338/ADSH_pytorch/ADSH_CIFAR_10.py#L196

I would like to ask whether each class of random sampling in the test set has an impact on MAP?And if it is completely random sampling, how will the results change?