Feature Request: where style clauses within join

Environment
Knex version: latest
Database + version: MySQL 5.7.x
OS: Ubuntu 14.04
When I use this:
let products = await db.select({
      id: 'p.ID',
      status : 'p.post_status',
      name: 'p.post_title',
      // type: 'terms.name',
      price: 'price.meta_value',
      createdAt: 'p.post_date_gmt',
      updatedAt: 'p.post_modified_gmt'
    })
    .from({p:'wp_posts'})
    .leftJoin({price: 'wp_postmeta'},
    function() {
      this.on('p.id', '=', 'price.post_id').andOn('price.meta_key', '_regular_price')
    })

When I execute this query I get this error:
select `p`.`ID` as `id`, `p`.`post_status` as `status`, `p`.`post_title` as `name`, `price`.`meta_value` as `price`, `p`.`post_date_gmt` as `createdAt`, `p`.`post_modified_gmt` as `updatedAt` from `wp_posts` as `p` left join `wp_postmeta` as `price` on `p`.`id` = `price`.`post_id` and `price`.`meta_key` = `_regular_price` order by `post_date_gmt` asc limit 2 - Unknown column '_regular_price' in 'on clause'

I need to use a string here not a column for join

The current solution, which admittedly is very ugly is to do:
.andOn('price.meta_key', db.raw('"_regular_price"'))

We should probably add the concept of a where clause to the join object, so you could do:
  this.on('p.id', 'price.post_id').andWhere('price.meta_key', '_regular_price')

and it would be output as:
select ....
left join `wp_postmeta` as `price` on `p`.`id` = `price`.`post_id`
  and `price`.`meta_key` = "_regular_price"
...

Wouldn't it make more sense with something like .onValue / .andOnValue or .onVal / .andOnVal or .onEquals / .andOnEquals ? (for lack of better name)
It just sounds a bit weird to have .where / .andWhere in a join builder since it doesn't generate a where clause.

.andOn('price.meta_key', db.raw('"_regular_price"'))

In 0.15.0 there is also helper for being able to write  db.raw('??', '_regular_price') easier like db.ref('_regular_price') which does quoting automatically.

@wubzz yeah I think onVal / andOnVal / orOnVal sounds like a good option, where it would have the same semantics as a query builder's where clause.

I started playing around with this a bit:
Builder
qb()
        .select({
          id: 'p.ID',
          status : 'p.post_status',
          name: 'p.post_title',
          // type: 'terms.name',
          price: 'price.meta_value',
          createdAt: 'p.post_date_gmt',
          updatedAt: 'p.post_modified_gmt'
        })
        .from({p:'wp_posts'})
        .leftJoin({price: 'wp_postmeta'},
          function() {
            this
              .on('p.id', '=', 'price.post_id')
              .onVal(function() {
                this.onVal('price.meta_key', '_regular_price')
                  .andOnVal('price_meta_key', '_regular_price')
              })
              .orOnVal(function() {
                this.onVal('price_meta.key', '_regular_price')
              })
          })

Output
select "p"."ID" as "id", "p"."post_status" as "status", "p"."post_title" as "name", "price"."meta_value" as "price", "p"."post_date_gmt" as "createdAt", "p"."post_modified_gmt" as "updatedAt" from "wp_posts" as "p" left join "wp_postmeta" as "price" on "p"."id" = "price"."post_id" and ("price"."meta_key" = ? and "price_meta_key" = ?) or ("price_meta"."key" = ?)

What I don't really like is having to call .onVal() with an additional .onVal() + .andOnVal() to get it wrapped, but I guess it's the same for normal join functions, so maybe it's ok..

Closing, feature merged towards next version. #2746


Having some issues running the bind exporter

Running bind_exporter throws the following error and the service dies when trying to get out to the URL
(root@test:~)# ./bind_exporter
{"level":"info","msg":"Starting Server: :9109","time":"2015-10-01T10:33:23-04:00"}
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x55336d]
goroutine 24 [running]:
github.com/prometheus/client_golang/prometheus.(*CounterVec).WithLabelValues(0x0, 0xc8202d9c08, 0x1, 0x1, 0x0, 0x0)
/root/go/src/github.com/prometheus/client_golang/prometheus/counter.go:141 +0xbd
main.(*Exporter).Collect(0xc820018840, 0xc82017a120)
/root/go/src/github.com/digitalocean/bind_exporter/bind_exporter.go:211 +0xb46
github.com/prometheus/client_golang/prometheus.(*registry).writePB.func2(0xc82016a1c0, 0xc82017a120, 0x2b88bba77df8, 0xc820018840)
/root/go/src/github.com/prometheus/client_golang/prometheus/registry.go:413 +0x58
created by github.com/prometheus/client_golang/prometheus.(*registry).writePB
/root/go/src/github.com/prometheus/client_golang/prometheus/registry.go:414 +0x343
goroutine 1 [IO wait]:
net.runtime_pollWait(0x2b88bba77b48, 0x72, 0xc82000a240)
/usr/local/go/src/runtime/netpoll.go:157 +0x60
net.(*pollDesc).Wait(0xc820120d80, 0x72, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:73 +0x3a
net.(*pollDesc).WaitRead(0xc820120d80, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:78 +0x36
net.(*netFD).accept(0xc820120d20, 0x0, 0x2b88bba78120, 0xc8201760a0)
/usr/local/go/src/net/fd_unix.go:408 +0x27c
net.(*TCPListener).AcceptTCP(0xc820028158, 0x455ec0, 0x0, 0x0)
/usr/local/go/src/net/tcpsock_posix.go:254 +0x4d
net/http.tcpKeepAliveListener.Accept(0xc820028158, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:2135 +0x41
net/http.(*Server).Serve(0xc820018c00, 0x2b88bba780e8, 0xc820028158, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:1887 +0xb3
net/http.(*Server).ListenAndServe(0xc820018c00, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:1877 +0x136
net/http.ListenAndServe(0x8d03a8, 0x5, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:1967 +0x8f
main.main()
/root/go/src/github.com/digitalocean/bind_exporter/bind_exporter.go:285 +0x3d6
goroutine 17 [syscall, locked to thread]:
runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:1696 +0x1
goroutine 18 [IO wait]:
net.runtime_pollWait(0x2b88bba77a88, 0x72, 0xc82000a240)
/usr/local/go/src/runtime/netpoll.go:157 +0x60
net.(*pollDesc).Wait(0xc82016e060, 0x72, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:73 +0x3a
net.(*pollDesc).WaitRead(0xc82016e060, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:78 +0x36
net.(*netFD).Read(0xc82016e000, 0xc82017c000, 0x1000, 0x1000, 0x0, 0x2b88bba72050, 0xc82000a240)
/usr/local/go/src/net/fd_unix.go:232 +0x23a
net.(*conn).Read(0xc820172000, 0xc82017c000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
/usr/local/go/src/net/net.go:172 +0xe4
net/http.(*liveSwitchReader).Read(0xc820174048, 0xc82017c000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:219 +0xa4
io.(*LimitedReader).Read(0xc820176020, 0xc82017c000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
/usr/local/go/src/io/io.go:427 +0xbd
bufio.(*Reader).fill(0xc82017a000)
/usr/local/go/src/bufio/bufio.go:97 +0x1e9
bufio.(*Reader).ReadSlice(0xc82017a000, 0xc81fff3d0a, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/bufio/bufio.go:328 +0x21a
bufio.(*Reader).ReadLine(0xc82017a000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/bufio/bufio.go:357 +0x53
net/textproto.(*Reader).readLineSlice(0xc820170150, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/textproto/reader.go:55 +0x81
net/textproto.(*Reader).ReadLine(0xc820170150, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/textproto/reader.go:36 +0x40
net/http.ReadRequest(0xc82017a000, 0xc8201840e0, 0x0, 0x0)
/usr/local/go/src/net/http/request.go:653 +0xb6
net/http.(*conn).readRequest(0xc820174000, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:633 +0x32f
net/http.(*conn).serve(0xc820174000)
/usr/local/go/src/net/http/server.go:1319 +0x727
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:1910 +0x3f6
goroutine 19 [chan receive]:
github.com/prometheus/client_golang/prometheus.(*registry).writePB(0xc8200186c0, 0x2b88bd8b5390, 0xc820176480, 0x0, 0x0)
/root/go/src/github.com/prometheus/client_golang/prometheus/registry.go:425 +0x3fd
github.com/prometheus/client_golang/prometheus.(*registry).ServeHTTP(0xc8200186c0, 0x2b88bd8b5280, 0xc820172010, 0xc820184000)
/root/go/src/github.com/prometheus/client_golang/prometheus/registry.go:373 +0x173
net/http.(Handler).ServeHTTP-fm(0x2b88bd8b5280, 0xc820172010, 0xc820184000)
/root/go/src/github.com/prometheus/client_golang/prometheus/http.go:61 +0x50
github.com/prometheus/client_golang/prometheus.InstrumentHandlerFuncWithOpts.func1(0x2b88bd8b5180, 0xc820174160, 0xc820184000)
/root/go/src/github.com/prometheus/client_golang/prometheus/http.go:158 +0x335
net/http.HandlerFunc.ServeHTTP(0xc820079180, 0x2b88bd8b5180, 0xc820174160, 0xc820184000)
/usr/local/go/src/net/http/server.go:1422 +0x3a
net/http.(*ServeMux).ServeHTTP(0xc820010a50, 0x2b88bd8b5180, 0xc820174160, 0xc820184000)
/usr/local/go/src/net/http/server.go:1699 +0x17d
net/http.serverHandler.ServeHTTP(0xc820018c00, 0x2b88bd8b5180, 0xc820174160, 0xc820184000)
/usr/local/go/src/net/http/server.go:1862 +0x19e
net/http.(*conn).serve(0xc8201740b0)
/usr/local/go/src/net/http/server.go:1361 +0xbee
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:1910 +0x3f6
goroutine 20 [chan send]:
github.com/prometheus/client_golang/prometheus.computeApproximateRequestSize(0xc820184000, 0xc82017a0c0, 0x144f)
/root/go/src/github.com/prometheus/client_golang/prometheus/http.go:187 +0x1b6
created by github.com/prometheus/client_golang/prometheus.InstrumentHandlerFuncWithOpts.func1
/root/go/src/github.com/prometheus/client_golang/prometheus/http.go:146 +0x18c
goroutine 21 [runnable]:
sync.runtime_Semacquire(0xc82016a1cc)
/usr/local/go/src/runtime/sema.go:43 +0x26
sync.(*WaitGroup).Wait(0xc82016a1c0)
/usr/local/go/src/sync/waitgroup.go:126 +0xb4
github.com/prometheus/client_golang/prometheus.(*registry).writePB.func1(0xc82016a1c0, 0xc82017a120)
/root/go/src/github.com/prometheus/client_golang/prometheus/registry.go:407 +0x21
created by github.com/prometheus/client_golang/prometheus.(*registry).writePB
/root/go/src/github.com/prometheus/client_golang/prometheus/registry.go:409 +0x26c
goroutine 32 [IO wait]:
net.runtime_pollWait(0x2b88bba77908, 0x72, 0xc82000a240)
/usr/local/go/src/runtime/netpoll.go:157 +0x60
net.(*pollDesc).Wait(0xc82016e370, 0x72, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:73 +0x3a
net.(*pollDesc).WaitRead(0xc82016e370, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:78 +0x36
net.(*netFD).Read(0xc82016e310, 0xc8201ca000, 0x1000, 0x1000, 0x0, 0x2b88bba72050, 0xc82000a240)
/usr/local/go/src/net/fd_unix.go:232 +0x23a
net.(*conn).Read(0xc8201720a8, 0xc8201ca000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
/usr/local/go/src/net/net.go:172 +0xe4
net/http.noteEOFReader.Read(0x2b88bd8b5088, 0xc8201720a8, 0xc820174318, 0xc8201ca000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
/usr/local/go/src/net/http/transport.go:1370 +0x67
net/http.(*noteEOFReader).Read(0xc820176820, 0xc8201ca000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
:126 +0xd0
bufio.(*Reader).fill(0xc82017a960)
/usr/local/go/src/bufio/bufio.go:97 +0x1e9
bufio.(*Reader).Peek(0xc82017a960, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/bufio/bufio.go:132 +0xcc
net/http.(*persistConn).readLoop(0xc8201742c0)
/usr/local/go/src/net/http/transport.go:876 +0xf7
created by net/http.(*Transport).dialConn
/usr/local/go/src/net/http/transport.go:685 +0xc78
goroutine 33 [select]:
net/http.(*persistConn).writeLoop(0xc8201742c0)
/usr/local/go/src/net/http/transport.go:1009 +0x40c
created by net/http.(*Transport).dialConn
/usr/local/go/src/net/http/transport.go:686 +0xc9d
(root@test:~)#

You have bind running and you have the statistics port open? Try curling http://localhost:8053

Also, we use jira issues instead of github issues for services.

Curl succeeds, The machine is running named.
rpm -qa bind
bind-9.9.5-1.el5

Do you have a link to your Jira? I'd can fill out another issue
On Thu, Oct 1, 2015 at 12:03 PM, Mac Browning<EMAIL_ADDRESS>wrote:

Also, we use jira issues instead of github issues for services.
—
Reply to this email directly or view it on GitHub
https://github.com/digitalocean/bind_exporter/issues/1#issuecomment-144772697
.

Here is fine, I pushed some extra guards in the code but its still quite strange. Try the new build I pushed. If you dont mind can you email me a copy of the data that you get from "curl http://localhost:8053" so I can add some tests around this<EMAIL_ADDRESS>

Sorry @nikgrok I thought this was on our internal github. This is in fact the right place!

I seem to have the same problem. Did you find a solution?

Nope, I brought it up to the devs but no answer
On Oct 29, 2015 5:22 PM, "Marco Kaulea"<EMAIL_ADDRESS>wrote:

I seem to have the same problem. Did you find a solution?
—
Reply to this email directly or view it on GitHub
https://github.com/digitalocean/bind_exporter/issues/1#issuecomment-152332074
.

I'm sorry I pushed this to our internal github, I just pushed the fix can you try it?

@mattkanwisher It does not crash any more, so that's an improvement. :)
But I don't think it is working right. I get the data of the following paste from the metrics link,
and I can't find any data about the bind server. Is there a dependency on a specific bind version?
https://paste.noname-ev.de/7496
The data should be stored there for 1 month.

@Don42 check if named -V returns --enable-newstats if you're running <9.10

grab latest and its fixed


Confusion around which steps actually have to be done to enable MISX App Attach

This doc is confusing.
It seems like there are three options here.
1.) Get the image from the tap portal
2.) Use the marketplace
3.) roll your own on prem and upgrade it.
The doc launches into getting the image from the the TAP portal, and then says you can use the marketplace with a note that is says...if you want you can just skip to the VHD  and VHDX preparation, and then goes down to PREPARE THE VHD.
I would put grabbing the image from the marketplace first, and then say...if you've done, this you can skip to the app portion of this doc.  Move the download from TAP portal and prepare image to second steps, or remove the download from TAP portal step all together.

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

ID: 62521d12-9efc-d132-176b-ca6a4ea83f16
Version Independent ID: 21322b77-a2e0-41a2-b128-7681d2d62577
Content: Windows Virtual Desktop MSIX app attach - Azure
Content Source: articles/virtual-desktop/app-attach.md
Service: virtual-desktop
GitHub Login: @Heidilohr
Microsoft Alias: helohr

Thanks for your contribution in improving the document. The changes will be merged once the PR is reviewed and approved by the author.

The updates have been made. Thanks for bringing this to our attention. We will now close this issue. If there are further questions regarding this matter, please tag me in a comment. I will reopen it and we will gladly continue the discussion.

PR has been merged. Thanks for bringing this to our attention. We will now close this issue. If there are further questions regarding this matter, please tag me in a comment. I will reopen it and we will gladly continue the discussion.


Course Offering Design

[x] database design
[x] stored procedures
[x] business logic/tasks
[ ] screens

implemented this in new structure @mqpasta closing this issue


Update create-a-device-account-using-office-365.md

The registrar pool retrieval should be declared as a step

@CTroessaert Thanks!


Quick Fix for comment-to-PR

:tada: This PR is included in version 1.5.0-next.3 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Add support to build msixbundle

PR Summary
Update release pipeline to build msixbundle from built msix pkgs and upload.  Also disable building win-arm32 msix as it's no longer supported.
PR Checklist

[x] PR has a meaningful title

Use the present tense and imperative mood when describing your changes

[x] Summarized changes
[x] Make sure all .h, .cpp, .cs, .ps1 and .psm1 files have the correct copyright header
[x] This PR is ready to merge and is not Work in Progress.

If the PR is work in progress, please add the prefix WIP: or [ WIP ] to the beginning of the title (the WIP bot will keep its status check at Pending while the prefix is present) and remove the prefix when the PR is ready.

Breaking changes

[x] None
OR
[ ] Experimental feature(s) needed

[ ] Experimental feature name(s):

User-facing changes

[x] Not Applicable
OR
[ ] Documentation needed

[ ] Issue filed:

Testing - New and feature

[x] N/A or can only be tested interactively
OR
[ ] Make sure you've added a new test if existing tests do not effectively test the code changed

Tooling

[x] I have considered the user experience from a tooling perspective and don't believe tooling will be impacted.
OR
[ ] I have considered the user experience from a tooling perspective and opened an issue in the relevant tool repository. This may include:

[ ] Impact on PowerShell Editor Services which is used in the PowerShell extension for VSCode
(which runs in a different PS Host).

[ ] Issue filed:

[ ] Impact on Completions (both in the console and in editors) - one of PowerShell's most powerful features.

[ ] Issue filed:

[ ] Impact on PSScriptAnalyzer (which provides linting & formatting in the editor extensions).

[ ] Issue filed:

[ ] Impact on EditorSyntax (which provides syntax highlighting with in VSCode, GitHub, and many other editors).

[ ] Issue filed:

@daxian-dbw is going to rework this and submit a new PR


firejail: <IP_ADDRESS> -> 0.9.66

Automatic update generated by nixpkgs-update tools. This update was made based on information from https://github.com/netblue30/firejail/releases.
meta.description for firejail is: "Namespace-based sandboxing tool for Linux"
meta.homepage for firejail is: "https://firejail.wordpress.com/"
meta.changelog for firejail is: ""
Updates performed

Version update

To inspect upstream changes

Release on GitHub

Compare changes on GitHub

Impact

Checks done (click to expand)

built on NixOS

The tests defined in passthru.tests, if any, passed

Warning: no invocation of /nix/store/ncrjq86s3ycqabwq4za0vvyg6cavban0-firejail-0.9.66/bin/firejail had a zero exit code or showed the expected version

/nix/store/ncrjq86s3ycqabwq4za0vvyg6cavban0-firejail-0.9.66/bin/firemon passed the binary check.

/nix/store/ncrjq86s3ycqabwq4za0vvyg6cavban0-firejail-0.9.66/bin/firecfg passed the binary check.

/nix/store/ncrjq86s3ycqabwq4za0vvyg6cavban0-firejail-0.9.66/bin/jailcheck passed the binary check.

3 of 4 passed binary check by having a zero exit code.

3 of 4 passed binary check by having the new version present in output.

found 0.9.66 with grep in /nix/store/ncrjq86s3ycqabwq4za0vvyg6cavban0-firejail-0.9.66

found 0.9.66 in filename of file in /nix/store/ncrjq86s3ycqabwq4za0vvyg6cavban0-firejail-0.9.66

directory tree listing: https://gist.github.com/7a6ee3c6946307d033a772832879c740

du listing: https://gist.github.com/70169bcc25ed52d53e5d3684f5038750

Rebuild report (if merged into master) (click to expand)

3 total rebuild path(s)

1 package rebuild(s)

1 x86_64-linux rebuild(s)
1 i686-linux rebuild(s)
0 x86_64-darwin rebuild(s)
1 aarch64-linux rebuild(s)

First fifty rebuilds by attrpath
firejail

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/ncrjq86s3ycqabwq4za0vvyg6cavban0-firejail-0.9.66 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A firejail https://github.com/r-ryantm/nixpkgs/archive/91466bb62a59dbd8c22d5d7810939463a95db3dd.tar.gz

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/ncrjq86s3ycqabwq4za0vvyg6cavban0-firejail-0.9.66
ls -la /nix/store/ncrjq86s3ycqabwq4za0vvyg6cavban0-firejail-0.9.66/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
Result of nixpkgs-review run on x86_64-linux 1

1 package built:

firejail

Maintainer pings
cc @7c6f434c for testing.

Works for me :+1:


Updating to 0.22.2 causes all devices to see each other, regardless of ACLs

Bug description

After updating to 0.22.0, running tailscale status on any connected machine shows a list of all devices in the tailnet, even if machine A doesn't have any ACL allowing access to machine B.
Environment

OS: Linux
Headscale version: 0.22.2
Tailscale version: 1.40.0

[ ] Headscale is behind a (reverse) proxy
[ ] Headscale runs in a container

To Reproduce

Run headscale 0.22.2
Run tailscale status on a connected machine
See all devices in the tailnet

Hi, I do not see this behavior in my environment.
Can you provide a minimal ACL file where the problem occurs?

{
    "hosts": {
        "a": "fd7a:115c:a1e0::4",
        "b": "fd7a:115c:a1e0::6",
    },
    "acls": [
        {
            "action": "accept",
            "proto": "tcp",
            "src": ["b"],
            "dst": ["a:8001"]
        },
    ],
}

Hi, yes I can confirm that, the problem occurs as soon as a hosts entry is used.

Hi, with this configuration, users also began to see each other, although previously they saw only exit nodes. This happened after updating from 0.21.0 to 0.22.3.
      headscale-acl.yaml: |-         ---         tagOwners:           tag:exitnode:             - exitnodes         acls:           - action: accept             src:               - "*"             dst:               - "tag:exitnode:*"           - action: accept             src:               - "*"             dst:               - "<IP_ADDRESS>/0:*"

If the case is as mentioned above, this is intended behaviour, this is because a one way direction needs to be present on both nodes even if one node cannot actually access the other. This was previously wrongly implemented in Headscale, giving the wrong impression of how it should work.
If this is not the case, please reopen with a reply to the previous comment.

Sorry for only coming back to this now.

{
    "hosts": {
        "a": "fd7a:115c:a1e0::4",
        "b": "fd7a:115c:a1e0::6",
    },
    "acls": [
        {
            "action": "accept",
            "proto": "tcp",
            "src": ["b"],
            "dst": ["a:8001"]
        },
    ],
}

To clarify, the issue is that after version 0.22.2, when you run tailscale status on host a or b, both a and b will be listed?
Previously, when you ran tailscale status on host a, you did not see host b in the list?

They would both see each other perfectly fine previously, this is just the minimal reproducible config to trigger the issue.
What was not clear from my example is that there were actually a lot more devices in the tailnet, hence my "all devices in the tailnet" description initially. Just those don't need to be mentioned in the hosts or acls for the issue to accur, as such I left them out when reducing.
The following config would be a more "complete" example, hinting at the other devices existing. Running tailscale status on any one of those (also ones that are not explicitly listed in the hosts section would yield a list of all nodes in the entire network, again regardless of acls.
{
    "hosts": {
        "1": "fd7a:115c:a1e0::1",
        "2": "fd7a:115c:a1e0::2",
        "3": "fd7a:115c:a1e0::3",
        "a": "fd7a:115c:a1e0::4",
        "5": "fd7a:115c:a1e0::5",
        "b": "fd7a:115c:a1e0::6",
    },
    "acls": [
        {
            "action": "accept",
            "proto": "tcp",
            "src": ["b"],
            "dst": ["a:8001"]
        },
    ],
}

@kradalby could you please take another look at this?

Ive reopened this, but I don't expect to get to it in a while.

Did stalebot fix this bug? Or just close it?


Add fedoracoreos module, extend release API

Changes needed to port coreos-assembler.

See https://github.com/coreos/coreos-assembler/pull/1993 for an example port.

See https://github.com/coreos/coreos-assembler/pull/1993 for an example port.

In the interest of non-blocking, assuming that the fixes above are good and we can do any further fixes as followups.

LGTM


'GCDAsyncUdpSocket.h' file not found

react-native-udp 2.7.0
"react-native": "0.58.6",

@CCSWXD, it looks like you have not installed all the pods or Xcode is not able to find them.


Webpack 5.26+: outputPath.replace is not a function

I found an issue with this line:
https://github.com/crimx/webpack-target-webextension/blob/d0dc5c448592875b69a42e329736072b11744596/lib/webpack5/AutoPublicPathRuntimeModule.js#L27
Which causes an unhelpful error:
ERROR in webpack/runtime/publicPath
outputPath.replace is not a function

because Webpack's getUndoPath function accepts a string, not a boolean, since v5.26:
https://github.com/webpack/webpack/blob/5dd661cc39c1c59c70859afa55757cdb483418cc/lib/util/identifier.js#L309-L313
https://github.com/webpack/webpack/commit/7dc945f147a189386de82d7b1a362fb737aeb414

@Jack-Works Any idea how to fix this?


Support rendering visualization_msgs/ImageMarker messages from Node Playground

Right now, Node Playground can only output to topics with the /webviz_node/ prefix but the image panel will only seem to render visualization_msgs/ImageMarker messages from topics that share a namespace with cameras. I was hoping just setting the frame_id of the image marker to the same frame as my camera was enough to make the association.
On a separate note, it's much more difficult to create image markers in Node Playground than 3d markers because there is no ImageMarkerArray message type, so each playground node can only create a single image marker. This is fine for any of the array-compatible primitives like lines and points, but doesn't work out if you want to create more than one polygon for example. This seems to be a ROS limitation though, I'm not sure there's anything webviz can do about it.

Topics that share a namespace with the camera are only used to provide the default list. There should be an Add topic button at the bottom of that list, which will allow you to subscribe to any topic you like. Is that showing up for you?
As for no ImageMarkerArray message type, that's an interesting point. We do support an array type internally. One hack you could potentially use is to change this line to include visualization_msgs/MarkerArray. I believe the types are similar enough where this might work.

@troygibb that's correct, my mouse cursor turns into a circle with a line through it and the greyed out dropdown says "no markers" even though I can see my visualization_msgs/ImageMarker messages being continuously published to a /webviz_node/... topic with the raw messages panel.


Adding tests for assemble, sign and usage.

Signed-off-by: dblock<EMAIL_ADDRESS>Description
Adds tests for assemble and sign workflows. Checks that --help outputs usage.
Check List

[x] Commits are signed per the DCO using --signoff

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Codecov Report

Merging #552 (6fb8d62) into main (9e3c6f9) will increase coverage by 1.67%.
The diff coverage is 30.18%.

@@            Coverage Diff             @@
##             main     #552      +/-   ##
==========================================
+ Coverage   75.81%   77.48%   +1.67%
==========================================
  Files          59       59
  Lines        1604     1612       +8
==========================================
+ Hits         1216     1249      +33
+ Misses        388      363      -25

Impacted Files
Coverage Δ

bundle-workflow/src/run_assemble.py
41.02% <23.33%> (+41.02%)
:arrow_up:

bundle-workflow/src/run_sign.py
50.00% <39.13%> (+50.00%)
:arrow_up:

bundle-workflow/src/run_manifests.py
94.11% <0.00%> (+11.76%)
:arrow_up:

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 9e3c6f9...6fb8d62. Read the comment docs.


Number of master nodes

Kindly help with the following queries:

Is there a way to figure out the number of master nodes at any given point?
Is there a way to figure out the number of active nodes (master + replica) nodes at any given point?

Thank you.

There is no API for getting this information, but it would be possible to get this kind of knowledge from the internals via the context. The risk of doing it is that the internals might change though..
The known master nodes could be inspected via an async cluster context, and the number of master nodes would be:
dictSize(acc->cc->nodes).
To check which are active you would need to check the state of them (via a cluster_node's con or acon).
Replika information is only kept when configured to do so. It can be enabled via redisClusterSetOptionParseSlaves(..) and the replika node information is kept in its master cluster_node (see slaves in the struct cluster_node).
You would need to check the state of the replika-nodes in the same way as for the masters.
If you have ideas of an API we are happy to get a draft or even a proposal via a PR :)

Thank you very much for the helpful information.
To elaborate further, we have the following requirements from our applications:

inform me when at least one connection is available
inform me when no connections are available

The first one is easy at least when we create the connection - we inform the application from the first connect callback. We also keep track of all the masters from which we receive all the connect callbacks.
Second part is a bit tricky as disconnect callbacks don't match against the connect callbacks. We can knock off the known masters on the basis of disconnect callbacks, but their slaves would now become masters so it's actually not a loss of master in a sense.
We will use the trick you mentioned above to inspect the state of known masters. Hopefully this gets updated based on the run-time state of the cluster?
Thank you again for all the help. Yes we will certainly look at the possibility of a PR once we have a better understanding.


breaking: enforce use of type-imports where possible

@jeswr I'm in favour of this, but I would like to know the scale of the problem in adding this rule and if it can automatically be fixed?
would you be able to run this on each of the solid-client repos & add numbers here (number of errors per repo for this rule)

This is the number of errors introduced on the repos I tested
solid-client-js: 183
solid-client-notifications-js: 18
solid-client-authn-*: (50 in core)
In the first 2 cases running npm run lint:fix resolves the errors with no further changes required.
In the authn library there seems to be ~10min manual work because running lint fix causes imports looking like
import type * as SolidClientAuthnCore from "@inrupt/solid-client-authn-core";
import { mockStorageUtility } from "@inrupt/solid-client-authn-core";

which violates the imports/no-duplicates rule - so that rule needs to be manually disabled inline in those instances (it seems there are only a few per package).
in some cases it might be able to replace it with the following rather than disabling the rule (depending on what the default export actually is).
import { mockStorageUtility, type default as SolidClientAuthnCore } from "@inrupt/solid-client-authn-core";


Make output metrics extendable

Is your feature request related to a problem? Please describe.
For the k-NN plugin, I am working on adding a custom runner that will execute queries from a numeric data set and calculate the recall. k-NN plugin has an assortment of Approximate Nearest Neighbor algorithms. Generally, users will need to make tradeoffs between the approximateness of their system and the latency/throughput - so they need the ability to see both of these metrics when benchmarking.
In the custom query runner, I return the recall alongside the latency, but this only gets stored as request meta data - not as an outputted result.
Describe the solution you'd like
I would like the ability to specify that "recall" should be output as a metric in the results and define the aggregation as taking the mean average.
In a more general sense, I would like the ability to be able to define custom metrics for runners and define their aggregations and get them to show up in the results.
Describe alternatives you've considered

Find the metadata and collect my metric this way -- requires a lot of manual effort

Additional context

https://github.com/opensearch-project/k-NN/pull/409
https://github.com/opensearch-project/opensearch-benchmark/issues/103

This is going to require flexibility in how the results metrics are defined, computed, processed and reported.  It will take some consideration.

Right, I guess there are a few other applications I can think of that may require similar functionality: Anomaly Detection, Learning to Rank. For these, recall/accuracy are KPIs.

+1 on this. extendable metrics would help Anomaly Detection as well, we are starting to define how we benchmark AD in various ways such as our own execution time to get an anomaly result, recall/precision, and other KPIs on our own specific workloads and as a detector is running. I also want to add that this will greatly benefit ML-Commons as well

@IanHoang as discussed offline, taking a look at this issue

Added a new issue https://github.com/opensearch-project/opensearch-benchmark/issues/435 which would allow the user to specify percentiles they want to see, which would be a subset of this issue


why hmi index and dreamview use two diffrent port ?

I think one port is enough~~ like some web server.

That's a good point, and is actually in our TODO list.
HMI is more like a general web page, with some buttons to control the vehicle, while dreamview is a 3D terminal based on WebGL. Currently they have different backend and data model, which will last for a period of time. But, as I said, it's a good point, and we'll try to achieve.


ALI fixes

@ianmsgit
When this PR is ready for review, can you take it out of "Draft" mode?
@jjaygbay1
Can you review the proposed changes when this PR is marked ready for review?
When the changes are ready for publication, add a #sign-off comment to signal that the PR is ready for the review team to merge.
#label:"aq-pr-triaged"
@MicrosoftDocs/public-repo-pr-review-team


[Suggestion] Google FlexBoxLayout

Hey Guys,
I created a binding library and turned it into a Nuget. It is basically a wrapper of Googles new FlexBoxLayout.
https://github.com/btripp/FlexboxLayoutXamarinBindingAndroid

@btripp  if you want to include this in the repo, please feel free to prepare a PR so we can review, test and merge it.


RSSI Crash

After retrieving the cache, since we did not cache the
RegionResolver, we have to insert the Txpower and rssi
data that we had cached for each UrlDevice.

Imperative commit subjects
72 is line length for the message, so you can extend those lines a bit more.

@cco3 fixed


Correlation failed, despite Redis cached DataProtectionKeys and forwarded headers

I was hoping to avoid making an issue, but I have run out of options and documentation to try, and my stackoverflow post has not gotten any comments either.
I would be extremely grateful for help, as I've been stuck on this correlation failed problem for a month almost.
My problem is as follows:

I am running a dotnet core 2.1 container in Kubernetes, behind a loadbalancer (GLBC).
I followed the microsoft docs for web farms as well as proto headers forwarding for kestrel.
I am using a Redis container to host my data protection keys, and when I executed into the container they seemed to be there. I got the idea  here
My application needs access to Outlook and Google calendars, and I use this excellent example for Outlook Graph integration and Google Apis for google calendar access.

Since my stackoverflow post I have tried one more thing, because I thought maybe the problem was occurring due to file persistence with the google FileStore, and so I followed this post on how to use a database approach for storage  but it did not help.
My Startup.cs is as follows:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.EntityFrameworkCore;
using Muninn.Data;
using Muninn.Models;
using Muninn.Services;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Muninn.Extensions;
using Muninn.Helpers;
using Microsoft.AspNetCore.HttpOverrides;
using Microsoft.AspNetCore.DataProtection;
using Muninn.Models.ContactManagement.ContactInformations;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Rewrite;
using Muninn.Logic;
using Microsoft.AspNetCore.Http.Features;
using Google.Apis.Calendar.v3;
using Microsoft.AspNetCore.Authentication.OAuth;
using System.Security.Claims;
using Google.Apis.Auth.OAuth2.Responses;
using System;
using Google.Apis.Util.Store;
using Serilog;
using StackExchange.Redis;
using Microsoft.AspNetCore.Http;

namespace Muninn
{
    public class Startup
    {
        public IConfiguration Configuration { get; }
        public const string ObjectIdentifierType = "http://schemas.microsoft.com/identity/claims/objectidentifier";
        public const string TenantIdType = "http://schemas.microsoft.com/identity/claims/tenantid";

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDistributedRedisCache(options =>
            {
                options.Configuration = Configuration["Redis:DefaultConnection"];
                options.InstanceName = "master";
            });

            services.AddDbContext<ApplicationDbContext>(options =>
                options.UseNpgsql(Configuration.GetConnectionString("DefaultConnection")));

            services.AddIdentity<ApplicationUser, IdentityRole>()
                .AddEntityFrameworkStores<ApplicationDbContext>()
                .AddDefaultTokenProviders();

            services.AddAuthentication(sharedOptions =>
            {
                sharedOptions.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
            })
            .AddAzureAd(options => Configuration.Bind("AzureAd", options))
            .AddGoogle(googleOptions =>
            {
                googleOptions.Scope.Add(CalendarService.Scope.Calendar);
                googleOptions.ClientId = Configuration["Google:ClientId"];
                googleOptions.ClientSecret = Configuration["Google:ClientSecret"];
                googleOptions.AccessType = "offline";
                googleOptions.SaveTokens = true;
                googleOptions.CallbackPath = "/signin-google";
                googleOptions.Events = new OAuthEvents()
                {
                    OnCreatingTicket = async (context) =>
                    {
                        var userEmail = context.Identity.FindFirst(ClaimTypes.Email).Value;
                        Log.Information("New user logged in with Google: " + userEmail);

                        if(string.IsNullOrEmpty(context.AccessToken))
                            Log.Error("Access token was null");
                        if (string.IsNullOrEmpty(context.RefreshToken))
                            Log.Error("Refresh token was null");

                        var tokenResponse = new TokenResponse()
                        {
                            AccessToken = context.AccessToken,
                            RefreshToken = context.RefreshToken,
                            ExpiresInSeconds = (long)context.ExpiresIn.Value.TotalSeconds,
                            IssuedUtc = DateTime.UtcNow,
                            Scope = CalendarService.Scope.Calendar
                        };

                        var dbContext = services.BuildServiceProvider().GetService<ApplicationDbContext>();
                        IDataStore dataStore = new GoogleAuthEFDatastore(dbContext);
                        await dataStore.StoreAsync(userEmail, tokenResponse);
                        Log.Information("User has been saved to the system: " + userEmail);
                    },
                    OnRemoteFailure = async (context) =>
                    {
                        Log.Error(context.Result.Failure.Message);
                    }
                };
            })
            .AddCookie(options =>
            {
                options.LoginPath = "/Account/SignIn";
                options.LogoutPath = "/Account/SignOut";
            });
            services.AddMvc();

            var redis = ConnectionMultiplexer.Connect(Configuration["Redis:DefaultConnection"]);
            services.AddDataProtection()
                .PersistKeysToRedis(redis, "DataProtection-Keys")
                .SetApplicationName("myapp");

            services.Configure<MvcOptions>(options =>
            {
                options.Filters.Add(new RequireHttpsAttribute());
            });
            services.Configure<CookiePolicyOptions>(options =>
            {
                options.CheckConsentNeeded = context => false;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            services.AddSession(options =>
            {
                options.Cookie.Domain = ".myapp-domain.com";
                options.Cookie.SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.Always;
                options.Cookie.Name = ".MyApp.Session";
                options.IdleTimeout = TimeSpan.FromSeconds(5);
            });

            services.AddSingleton<IGraphAuthProvider, GraphAuthProvider>();
            services.AddTransient<IGraphSdkHelper, GraphSdkHelper>();
            services.AddTransient<IEmailSender, EmailSender>();
            services.AddTransient<ICalendarActions, CalendarActions>();
            services.AddTransient<IOutlookCommunication, OutlookCommunication>();
            services.Configure<GoogleAuthOptions>(Configuration.GetSection("Google"));
            services.AddTransient<IGoogleCommunication, GoogleCommunication>();
            services.Configure<FormOptions>(x =>
            {
                x.ValueLengthLimit = int.MaxValue;
                x.MultipartBodyLengthLimit = int.MaxValue; // In case of multipart
            });
            services.AddAntiforgery();

        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ApplicationDbContext dbContext)
        {
            dbContext.Database.Migrate();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseBrowserLink();
                app.UseDatabaseErrorPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }
            app.UseForwardedHeaders(new ForwardedHeadersOptions
            {
                ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
            });
            app.Use(async (context, next) =>
            {
                context.Request.Scheme = "https";
                await next.Invoke();
            });
            app.UseHttpsRedirection();

            var forceSSL = new RewriteOptions()
                .AddRedirectToHttps();
            app.UseRewriter(forceSSL);

            app.UseStaticFiles();
            app.UseAuthentication();
            app.UseSession();
            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }
    }
}

My dockerfile:
FROM microsoft/dotnet:2.1-sdk as builder
COPY . .
RUN dotnet restore && dotnet build
WORKDIR Muninn
RUN dotnet publish --output /app --configuration release -r ubuntu.16.04-x64

FROM microsoft/dotnet:2.1-runtime
RUN apt-get update && apt-get install -y libgdiplus
EXPOSE 5000/tcp
ENV ASPNETCORE_URLS http://*:5000
COPY --from=builder /app .
ENTRYPOINT dotnet Muninn.dll

And latest stacktrace:
[11:09:06 INF] Error from RemoteAuthentication: Correlation failed..
[11:09:06 ERR] An unhandled exception has occurred while executing the request.
System.NullReferenceException: Object reference not set to an instance of an object.
at Muninn.Startup.<>c.<b__6_11>d.MoveNext() in /Muninn/Startup.cs:line 103
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler1.HandleRequestAsync() at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) at Muninn.Startup.<>c.<<Configure>b__7_0>d.MoveNext() in /Muninn/Startup.cs:line 176 --- End of stack trace from previous location where exception was thrown --- at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.Invoke(HttpContext context)
[11:09:06 ERR] An unhandled exception has occurred while executing the request.
at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.Invoke(HttpContext context)
[11:09:06 INF] Route matched with {action = "Error", controller = "Home"}. Executing action Muninn.Controllers.HomeController.Error (Muninn)
[11:09:06 INF] Executing action method Muninn.Controllers.HomeController.Error (Muninn) - Validation state: Valid
[11:09:06 INF] Executed action method Muninn.Controllers.HomeController.Error (Muninn), returned result Microsoft.AspNetCore.Mvc.ViewResult in 0.0073ms.
[11:09:06 INF] Executing ViewResult, running view Error.
[11:09:06 INF] Executed action Muninn.Controllers.HomeController.Error (Muninn) in 8.487ms
[11:09:06 ERR] An exception was thrown attempting to execute the error handler.
System.NullReferenceException: Object reference not set to an instance of an object.
at AspNetCore.Views_Shared_Error.ExecuteAsync() in /Muninn/Views/Shared/Error.cshtml:line 3
at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageCoreAsync(IRazorPage page, ViewContext context)
at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageAsync(IRazorPage page, ViewContext context, Boolean invokeViewStarts)
at Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync(ViewContext context)
at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ViewContext viewContext, String contentType, Nullable1 statusCode) at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ActionContext actionContext, IView view, ViewDataDictionary viewData, ITempDataDictionary tempData, String contentType, Nullable1 statusCode)
at Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.ExecuteAsync(ActionContext context, ViewResult result)
at Microsoft.AspNetCore.Mvc.ViewResult.ExecuteResultAsync(ActionContext context)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultAsync(IActionResult result)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResultFilterAsyncTFilter,TFilterAsync
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResultExecutedContext context)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.ResultNext[TFilter,TFilterAsync](State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultFilters()
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
at Muninn.Startup.<>c.<b__7_0>d.MoveNext() in /Muninn/Startup.cs:line 176
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.Invoke(HttpContext context)
[11:09:06 ERR] Connection id "0HLG7VVB2R4E8", Request id "0HLG7VVB2R4E8:00000002": An unhandled exception was thrown by the application.
System.NullReferenceException: Object reference not set to an instance of an object.
at Muninn.Startup.<>c.<b__6_11>d.MoveNext() in /Muninn/Startup.cs:line 103
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler1.HandleRequestAsync() at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) at Muninn.Startup.<>c.<<Configure>b__7_0>d.MoveNext() in /Muninn/Startup.cs:line 176 --- End of stack trace from previous location where exception was thrown --- at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication1 application)
[11:09:06 INF] Request finished in 246.7697ms 500

Here I tried to log the context at OnRemoteFailure = async (context) which is the only difference from the stack trace in my stackoverflow posted trace.
Any help would be greatly greatly appreciated.

@Tratcher
When are you seeing this? Is the user already logged in and trying to connect to google or outlook to get the rights? If they're already logged in then how are they logged in? With an ASP.NET identity cookie, or with an external auth cookie (for example, they just logged in with google, and now they're doing facebook).
Can you grab a fiddler trace we can look at of the flow that causes this state?

Oh, darn, I had thought this might be when you login to both, one after the other.

No but there is something odd going on, since when I log out of Google it takes me to the Azure endpoint - which I was gonna figure out after the correlation problem :slightly_smiling:

If you do everything on a single instance (i.e. without web farm stuff), does everythign work?

It works on local, with a local redis and a local db. The issue started already with just one deployed docker container however. I found that odd but figured it was due to the container being reassigned to a different node sometimes - but it seemed to happen also on a single node cluster.

I'll go double check, but I'll need a day or two due to some personal things - sorry. :slightly_smiling_face: it may be that "single node" is not actually single node on GKE and I didn't verify at the time.

@Sharor thanks for following up. The more info we can get about the environment in which it's failing will help us get to the bottom of this.

Sorry for the delay in answering, wife went into labour :stuck_out_tongue:
@Eilon I really appreciate the help, it's been killing me the last month :slightly_smiling_face:
So, I've looked at GKE:
kubectl get nodes
NAME                                        STATUS    ROLES     AGE       VERSION
gke-production-default-pool-2281479d-7fcp   Ready     <none>    1m        v1.9.7-gke.3

And it's only one node it gets scheduled on.
And initially I was running one replica (git history) of my deployment, and later added it to 2. The problem was happening already on only one replica, i.e only the container on a single node in GKE.
The structure of my cluster is quite simple and straight forward, I've a deployment (now back to 1 replica for testing) and a service and the following ingress:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: justdroppingby
  namespace: production
  annotations:
    kubernetes.io/ingress.class: "gce"
    ingress.kubernetes.io/rewrite-target: "/"
    kubernetes.io/ingress.allow-http: "false"
    ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
  tls:
  - hosts:
    - www.myapp.com
    secretName: myapp-com-tls
  rules:
  - host: www.myapp.com
    http:
      paths:
      - path: "/*"
        backend:
          serviceName: myapp
          servicePort: 5000

Although the force ssl redirect/allow-http seems to not work since I can access http.
It's always https after login though. Also a side note, my container is http but tls is terminated at this ingress - I need to figure out eventually how to get the certificate from the cluster into the container, but for now that seemed too much complexity. :slightly_smiling_face:
Once again, really thank you for helping.

@Sharor congrats!
We'll take a look at this and see what we can come up with. Just also wondering if there's any way to get a simple repro for this to try to isolate which component(s) are acting up.

A Fiddler trace and the debug output from https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-2.1#troubleshoot are the next things to collect. We need to see the state of the failing request to understand what's going on.

@Eilon thank you - you guys are being fantastic in regards to this correlation issue, hugely appreciated.
@Tratcher
The logging troubleshooting returned the following on all requests:
Request Method: GET
Request Scheme: http
Request Path: /
Request Headers:
Connection: Keep-Alive
Via: 1.1 google
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
Cookie: .AspNetCore.Antiforgery.qrgDo4zQCUY=CfDJ8M_xM-Oxp8REm_6YDKRDeLqheNByPTykZMN2wDpXEsc_oHCY--PT-QrXJ76pLj2ZKdGFNrBtbx8ayzgy6JwsMRyks-e-eCr7aPj_vAC6aOljUbmQ4W7KRUllVH6aERCjtxEFZ3kPtwyCcX8-JzTop_U; .AspNetCore.Cookies=CfDJ8M_xM-Oxp8REm_6YDKRDeLpHC_UsiyMUhEaMpEP3b4eMoaD16TnBxSsm7FdsVgXBxOz8F1nIVc6mf9PE_wPe_8JN9hbTfzaUu6wfDuVvMCvo74EUwAK3p2qmF-hrUT1dBm6G0bmouUKgW_a38HnTlvO-yvN0iBOehNCwYNCQNyQBFmFenztkuxxHXukcDHC_d9DQz74YURl4hloHA287beZeLldG_blPrE93hE7TcBGxicwhVgAEC2EHrp1Fb6-Q6RxRqL6ZQUAWUDtt7s9NoYwZZss0U6k2wZzrHjlVsKEo0WpppJts0ZPEHVl9F4FrtCxl6DetB-WL0NWXS0FZZq_8e3jkrgf-EzWCrJtkghlyBuWulQuPLyZmtihQfNXidn08G_mdfbOf_QxBPn2uwU-BZ0s2T7-lq6waJ-G4AwBmSKKu5Fet1i5Yn942q0EVk6oKwchw1pklr5kXIxnmUuaCrwU38r9XAS2PkMXgCPfktgJP4dTowgh-lBBa4eUS3089NW5KinIChqSbMtVNxuRgJ7hwGBvbF49fNsbFWEav4GLevmHuDjs1ceCtgF8fYJEqD7xalteJhFTzDavre3Q9w00jka6Vcpc2nDlkxi61yxacTmwYOnVD784nZHc_xycC4ivsV6Z23PK58HVOzjyEoBw8MCGBOQarPsJ78AW-q5ESFskVAWe7zVX7mbou6bIDM6kAps8wFq_7gA4iy9ChlwLwYbpcQ6PIJm2NZ5BZvTbHd5kp19O7scLRMV2PY08A2z1-LeV2wR0d-P1NLX1yIaZ7W4lGcLVGfVaZfluZu5aHBFN_yK2wnupdlEWPbwdDE5JSuaM54E0Ju-CROgY0e6ygRVb-gNR4qt9axH2sO2cNDb7AJUK-lP-w4coRYFSqq2IX9CdCRpjLB7HLJ3xn3uY5Ili9rCKGPtdm7np5MyXtDkW3JguO8XMwalN7ey6kBM3wRFsZCExXHzkkHZNHey-pQcVKo469w07Pz_FTgy8jg9CPLW4rS_q2zR2lM-sagiJZJlBeufQ3eN81KZbuGF-9dzRWB2QSzbn_ZlrzRbdBHEGQSY2z-mAoVotF8PV7LjDs1UwnJPyqSFK8PDw7OfRzrqf0_tu23n5WigMJaSmriGU9I--6PD4zdxgcfKskqq_5sBhlxojpHmOZK6okY6qbQiixsImpxCAruImVTOMjxL02KsAiPDdwLm5b60ch7ZtNGlo8nfUnSrUbAlmrNBuPjYFp1QR3oVEWzsr5w0EXKQGl5tSvG5spoaYvR3r1dYYSyz4eXOnnFAixSRrqHvYS_r04jfHnuDqn2puc-EPuxsfu8yHPXjUMsTlAro21nHx2dn9eZtMGEhtNmNw
Host: www.myapp.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
upgrade-insecure-requests: 1
dnt: 1
X-Cloud-Trace-Context: 1237632e61d96da6b7142ff3cc048abf/3211100041593879341
X-Forwarded-For: <IP_ADDRESS>, <IP_ADDRESS>
X-Forwarded-Proto: https

Request RemoteIp: ::ffff:<IP_ADDRESS>

As for Fiddler, apologies if this isn't the right one (never used Fiddler before) but I think this is what you want?

# | Result | Protocol | Host | URL | Body | Caching | Content-Type | Process | Comments | Custom
-- | -- | -- | -- | -- | -- | -- | -- | -- | -- | --
423 | 200 | HTTPS | console.cloud.google.com | /m/operations?authuser=1&maxResults=100 | 892 | no-cache, no-store, max-age=0, must-revalidate; Expires: Mon, 01 Jan 1990 00:00:00 GMT | application/json; charset=utf-8 | chrome:11380 |   |

GET /m/operations?authuser=1&maxResults=100 HTTP/1.1
Host: console.cloud.google.com
Connection: keep-alive
Accept: application/json, text/plain, */*
DNT: 1
X-Goog-Request-Log-Data: clientVersion=caramel-nation-201808261502-rc00,pagePath=/kubernetes/clusters/details/:resourceZone/:resourceName,pageViewId=4252227221974175
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
x-pan-versionid: caramel-nation-201808261502-rc00
X-Client-Data: CI22yQEIpLbJAQjEtskBCKmdygEI2J3KAQjancoBCKijygE=
Referer: https://console.cloud.google.com/kubernetes/clusters/details/europe-west1-d/production?edit=true&project=myapp-id&authuser=1&tab=details&persistent_volumes_tablesize=50&storage_class_tablesize=50&nodes_tablesize=50
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
Cookie: CONSENT=YES+DK.da+20150628-20-0; __utmc=243896023; _ga=GA1.3.1616223699.1528557407; OSID=Owbw6s7ej_NqKXEK90sgiC5s9zOeihzbR9gdsUEjeLAkO-iHqbsK9WZCMb9M86N6d2Zxjg.; S=billing-ui-v3=BsSDObCOuOV8VhwhasPylaPGH94bJ1XC:billing-ui-v3-efe=BsSDObCOuOV8VhwhasPylaPGH94bJ1XC; SID=Twbw6oMEy62-rUvF7pyWp-X9GDsQ1RaWayDMdFHl__1y0NDWRaFUGqcy7c5xDNMynqwhmg.; HSID=A00S_SQI7Pbb0GoIy; SSID=A8kfD4biHz6Si2Wky; APISID=WXxG1jqxUyyoXP-P/A0E8LKBFvho7EdjrJ; SAPISID=6uhXVWsCWdHdNsav/AFNN2Xt7cI6U3Q1-p; __utma=243896023.1616223699.1528557407.1533578990.1534320358.18; __utmz=243896023.1534320358.18.16.utmcsr=github.com|utmccn=(referral)|utmcmd=referral|utmcct=/GoogleCloudPlatform/google-cloud-dotnet; NID=137=Zgaw5-gm-7z3TsJO1QS4NMgsROUT94sDJrsPMl1genPB4O3L-H1P-uw0DTKD3u6VULj-YHiCU26-nh6gxRk-hjh1nzKQpazbcZrS0adRFlxPQtk8L4we7X_6yJvXPR2K61j7843clmfud2uJ0BGbldp1A0TxRwCayYjujkpHw26dOdIVDT3h4upDNe1f670aRajYauASC0Kq-XsA2-dux1Lrh_NqaNL0Tvbki4yVW0afF9BdELCigkqfhxq-pAR4nnak_XGFQA96QGriKr1uO_EaqE1eYXxnYZEbmMP8AEQRrGSPGg; 1P_JAR=2018-08-29-21; SIDCC=AGIhQKRl4ucQPLUkWcALtvuIuQQ__VX77qANH09-XNndJ1uKhRG05bWgxaXTfLAWWVJ-2SdHgIEh

Please just let me know if the Fiddler trace is not what you were looking for. 🙂  You guys are being amazing, really appreciate it.

You can save the fiddler session as a saz file and share the whole thing.

Alright, cheers - here you are 🙂
This session goes from :

Visit root
Choose which login to use (outlook or google, here I use google)
Login
Redirect (successfully, as I have not been able to make the error myself) back to root now logged in with a google (or microsoft) account.

totalFiddlerSession.zip

Ah, a trace of a successful login is only interesting if you can also capture a failed login to compare to.

I'll reach out to the user who consistently gets the error and ask if I can guide him through how to get the failing trace :slightly_smiling_face:
I haven't been able to make it fail myself which is quite frustrating.

Okay, here is the same steps as before but where the correlation error happens 😉 Sorry for the additional session things, we had a google hangouts open to guide him through the process w/Fiddler
fiddler_with_correlation_error.zip

@Tratcher I also just tested properly that indeed it is also happening with a cluster where there is one container, and one node and nothing else.
Does it matter that the cluster is rebooted over night? I figured it shouldn't - the data protection keys are just appended, correct? 🙂 So when a new container joins, it just adds its machine key to the redis cache or reuses the existing one?

Ah, I think I see the problem. You're initiating the login flow from an HTTP endpoint but returning to an HTTPS endpoint. You need to redirect to HTTPS prior to starting your login flow. This code is wrong:
            app.Use(async (context, next) =>
            {
                context.Request.Scheme = "https";
                await next.Invoke();
            });

You're lying to the application, it thinks all requests are HTTPs but some aren't.
You start by requesting HTTP | www.justdroppingby.com | /Account/ExternalLogin. This returns Set-Cookie: .AspNetCore.Correlation.Google.kev71ROMz8l_Mw5wvqZHSDIldrX7JB9RoOSt_TOS3es=N; expires=Mon, 03 Sep 2018 11:20:49 GMT; path=/signin-google; secure; httponly (note the secure). It also says redirect_uri=https%3A%2F%2Fwww.justdroppingby.com%2Fsignin-google (note the https).
When the request comes back to HTTPS | www.justdroppingby.com | /signin-google it doesn't have any cookies and it fails.

@Tratcher  Oh! What a fantastic finding, I did not even consider that Kestrel would look at its own request in that way.
Do you have some documentation you can direct me to that would solve this problem or does it need to be sorted out on loadbalancer level?
I would like to solve it both on application level (ie not allow http traffic, which I thought these lines in y startup were already doing:
app.UseHttpsRedirection();

var forceSSL = new RewriteOptions()
    .AddRedirectToHttps();
app.UseRewriter(forceSSL);

and also on load balancer level, but I'll sort that out straight way. 😉

Start here:
https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-2.1
https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl?view=aspnetcore-2.1&tabs=visual-studio

@Tratcher So I have finally solved it with your help, thank you so very much your help has been invaluable. Also your work/issues left around this repo and other places helped a lot, truly appreciated before I made this issue.
The full solution in the end was a bit different then I thought, but nonetheless:

Enable https only (redirect http to s) on loadbalancer level, and keep container (.NET core) running purely http already solves it.
The correct longterm solution is to then also amount the certificate into the container and enable https on the container level but seemed not necessary to make things work.

So to summarize for anyone coming later with the same issue:

The issue happens because the application thinks all traffic is https, but not enforcing https before reaching the container causes the issue.
The solution is redirect at loadbalancer level.
The proper solution is to also redirect at container level.

Cheers! :wink:


  Can you try the high cpu camera with only one sensor type enabled to see if it persists?

yes, both are on the same FW version. tested with single camera, only one motion alarm - still bad
17-03-03 08:30:56 INFO (MainThread) [homeassistant.loader] Loaded binary_sensor.hikvision from homeassistant.components.binary_sensor.hikvision
17-03-03 08:30:56 INFO (MainThread) [homeassistant.bootstrap] Setting up binary_sensor
17-03-03 08:30:56 INFO (MainThread) [homeassistant.components.binary_sensor] Setting up binary_sensor.hikvision
17-03-03 08:30:56 DEBUG (Thread-3) [pyhik.hikvision] Initializing new hikvision device at: http://<IP_ADDRESS>
17-03-03 08:30:56 DEBUG (Thread-3) [pyhik.hikvision] Using Namespace: http://www.hikvision.com/ver20/XMLSchema
17-03-03 08:30:56 DEBUG (Thread-3) [pyhik.hikvision] Found events: ['VMD']
17-03-03 08:30:56 DEBUG (Thread-3) [pyhik.hikvision] Initialized Dictionary: {'Motion': [False, 1, 0, datetime.datetime(2017, 3, 3, 8, 30, 56, 322019)]}
17-03-03 08:30:56 DEBUG (Thread-12) [pyhik.hikvision] Stream Thread Started: CAMERA, 5269afcc-ea79-11b4-8390-a4143724644a
17-03-03 08:30:56 DEBUG (Thread-3) [homeassistant.components.binary_sensor.hikvision] Entity: CAMERA - Motion, Options - Ignore: None, Delay: None
17-03-03 08:30:56 INFO (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: new_state=<state binary_sensor.camera_motion=off; last_tripped_time=2017-03-03T02:30:56.322019-06:00, friendly_name=CAMERA Motion, device_class=motion @ 2017-03-03T08:30:56.344510-06:00>, old_state=None, entity_id=binary_sensor.camera_motion>
17-03-03 08:30:56 INFO (MainThread) [homeassistant.core] Bus:Handling <Event component_loaded[L]: component=binary_sensor>

First, in the interest of working with the latest, please test against the latest HASS dev build which now utilizes the latest version of pyHik.

Seems like with the latest dev image there is no high-cpu usage, however it doesn't register the motion on HA side.
Perhaps, I can test it with an isolated script? Do you remember the camera URL with the event feed? I can capture it from camera via some wget/curl and provide for the reference.

This would be the curl command to get the event stream:
curl -u USER:PASS http://YOURCAMIP/ISAPI/Event/notification/alertStream

If you can, capture the output during a motion event and post it here.  If nothing looks odd there i'll provide a test file to work with the library directly.

update.
I tried to access /ISAPI/Event/notification/alertStream via browser (after logged in as the same user as used on haas into camera). I've got XML with insufficient permission error message instead of a stream.
Turns out that camera username didn't have "Remote: Notify Surveillance Center" permission enabled.
So, it looks like missing permission is what was causing the whole snafu, but for some reason it wasn't handled gracefully by pyHik module...
Hope, this helps.

Glad you got it figured out.  The latest version does a check to ensure the connection response is OK, that's why you got no response on motion events.  You should have seen a "Connection Unsuccessful" message in the logs though.  Do you recall if that was the case?

don't have the log anymore, but now as I know what was causing the problem, it's easy to check by removing that permission and checking what happens in the log,  if you want me to.
Thank you for the help and tweaks; I'm closing the ticket.


how to access private key

I am playing around with https://github.com/serum-community/pyserum
For the order placing api (and some other functions), I need the private key to access my Account.
For now, I don't have any clue how to obtain private key of sollet wallet.
Any suggestion ?

https://github.com/michaelhly/solana-py/issues/47#issuecomment-735238646

I used Solflare instead, it provides the option to download private key file. It will be helpful if sollet can provide the same option.

@yurenji sollet does provide the option to export an account's private key. See the bottom right of the account card here

Feel free to re-open if this doesn't provide the functionality you need.

I lost one word in sollet io
Please help


Add missing export build dependency

This dependency was accidentally removed in https://github.com/ros2/rosidl_typesupport_connext/pull/49.
We have a dependency on a specific version since required behvavior changed in https://github.com/ros2/rosidl_typesupport_connext/pull/41.

Can you describe why the dependency is needed?

When a dependent package invokes the generator, it uses needs rosidl_generator_c when expanding this template: https://github.com/ros2/rosidl_typesupport_connext/blob/2a408f8f410c68c9b67ece28d245fcbaefbfc3d5/rosidl_typesupport_connext_c/resource/msg__type_support_c.cpp.em#L4-L6
I think this means we should have a build dependency, no? Maybe it should be <build_export_depend>?

I think this means we should have a build dependency, no? Maybe it should be <build_export_depend>?

buildtool_export is correct (as in the patch) since the Python code runs on the host not in the target platform.


Composable Microstates

Microstates lets you define atoms of data and the state transitions that move you from one valid atom to the next. Hence we have numbers, lists, strings, etc.. However, for more complex interactions, we need to be able to compose these atomic microstates into larger microstates, for example a list of numbers, or a object containing lists of more objects.
We need a way to compose microstates into higher-order objects while still making the API to work with them simple and intuitive. If we lose the intuitiveness of it, then what's the point?
Simple Construction
It must be simple to construct a composed microstate. That means being able to use a pojo to construct it, and to have it "just work". E.g.
let lobs = new ListOfBooleans([true, false, true, true]);

You shouldn't have to have any knowledge about the internal format, but be secure that the individual booleans will be passed to the BooleanState constructor. Among other things, this allows for simple re-hydration of a microstate from persistent data, or something brought in over the wire.
How would we declare this? Probably something like:
import { list, boolean } from 'microstates';

export default list(boolean) {
  transitions: {
    selectAll(current) {
      return current.map(bool => false)
    },
    deselectAll(current) {
      return current.map(bool => true)
    }
  }
}

In this case the list function takes a constructor function and returns a list constructor that passes each of its constitutents to the boolean constructor.
It is possible that we could implement this by having microstate constructors return instances when invoked with new but constructors when invoked without.
In the selectAll and deselectAll transitions, it should also be implicit that the bare false and true values will get passed to the BooleanState constructor.
Recursive transitions
In this example, the booleans should not behave like mere booleans. Instead, we should be able to enact all of the normal boolean transitions, but instead of returning the next boolean state, it returns the next state of the entire datastructure that contains them. E.g.
let lobs = new ListOfBooleans([true, false, false]);
let next = lobs.get(2).replace(true);

which will return a new ListOfBooleans object that contains that boolean value replaced with true instead of false.
Taking Snapshots
Finally, to make things as simple as possible, it should be trivial to get an entire tree of a microstate as a simple object. This will make persistence a snap. The rule to adhere to is that the output of this snapshot should always be valid as the input to the constructor.
my current thinking is that this should be implemented with valueOf() which will recurse through all substates and call valueOf() on them. E.g.
let lobs = new ListOfBooleans([false, true]);
lobs.valueOf() //=> [false, true]

Should we close this? I believe this is done.


Docker for Machine: update

Proposed changes
Various fixes, see the commit messages.

@gtardif For the records.


2 out of 3 members panic when upgrading from 2.0.1 to 2.0.9

We were upgrading a 3 node environment.
The first node was successfully upgraded from 2.0.1 -> 2.0.9.
Our other 2 start to panic on start with alternating panics and resolve the issue after about an hour.
2015/04/16 21:19:04 etcdserver: start member 16ddfd8ab9399a99 in cluster 47021f879c1614df
2015/04/16 21:19:04 raft: 16ddfd8ab9399a99 became follower at term 0
2015/04/16 21:19:04 raft: newRaft 16ddfd8ab9399a99 [peers: [], term: 0, commit: 0, applied: 0, lastindex: 0, lastterm: 0]
2015/04/16 21:19:04 raft: 16ddfd8ab9399a99 became follower at term 1
2015/04/16 21:19:04 raft: 16ddfd8ab9399a99 [term: 1] received a MsgHeartbeat message with higher term from 942b5bcc165d3d6f [term: 151]
2015/04/16 21:19:04 raft: 16ddfd8ab9399a99 became follower at term 151
2015/04/16 21:19:04 raft.node: 16ddfd8ab9399a99 elected leader 942b5bcc165d3d6f at term 151
2015/04/16 21:19:04 raft: 16ddfd8ab9399a99 [logterm: 0, index: 33133105] rejected msgApp [logterm: 151, index: 33133105] from 942b5bcc165d3d6f
2015/04/16 21:19:04 raft: 16ddfd8ab9399a99 [commit: 0, lastindex: 0, lastterm: 0] starts to restore snapshot [index: 33123669, term: 151]
2015/04/16 21:19:04 raftlog: log [committed=1, applied=0, unstable.offset=0, len(unstable.Entries)=0] starts to restore snapshot [index: 33123669, term: 151]
2015/04/16 21:19:04 raft: 16ddfd8ab9399a99 restored progress of 942b5bcc165d3d6f [next = 33123670, match = 0, wait = 0]
2015/04/16 21:19:04 raft: 16ddfd8ab9399a99 restored progress of dbac133a02199046 [next = 33123670, match = 0, wait = 0]
2015/04/16 21:19:04 raft: 16ddfd8ab9399a99 restored progress of f56437f52767f9ea [next = 33123670, match = 0, wait = 0]
2015/04/16 21:19:04 raft: 16ddfd8ab9399a99 [commit: 0] restored snapshot [index: 33123669, term: 151]
2015/04/16 21:19:04 etcdserver: saved incoming snapshot at index 33123669
2015/04/16 21:19:04 rafthttp: starting client stream to 942b5bcc165d3d6f at term 151
2015/04/16 21:19:04 etcdserver: recovered from incoming snapshot at index 33123669
2015/04/16 21:19:05 raft: 16ddfd8ab9399a99 [commit: 33123669] ignored snapshot [index: 33123669, term: 151]
2015/04/16 21:19:05 rafthttp: unexpected removal of unknown peer '15829047930164711494'
2015/04/16 21:19:05 rafthttp: encountered error reading the client log stream: read tcp <IP_ADDRESS>:7001: use of closed network connection
2015/04/16 21:19:05 rafthttp: client streaming to 942b5bcc165d3d6f at term 151 has been stopped
panic: rafthttp: unexpected removal of unknown peer '15829047930164711494'

goroutine 19 [running]:
log.Panicf(0x8d53f0, 0x31, 0xc208d354f8, 0x1, 0x1)
	/var/vcap/data/packages/golang_1.4/80fd10aaca7fafada6e7f228f03c5024faa0b51a.1-9d3a1c8e5be38f64424db093270d5ab90f5ed290/src/log/log.go:314 +0xd0
github.com/coreos/etcd/rafthttp.(*transport).removePeer(0xc20808b1f0, 0xdbac133a02199046)
	/var/vcap/data/compile/etcd/github.com/coreos/etcd/gopath/src/github.com/coreos/etcd/rafthttp/transport.go:152 +0x1c3
github.com/coreos/etcd/rafthttp.(*transport).RemovePeer(0xc20808b1f0, 0xdbac133a02199046)
	/var/vcap/data/compile/etcd/github.com/coreos/etcd/gopath/src/github.com/coreos/etcd/rafthttp/transport.go:136 +0x77

2015/04/16 21:20:14 etcdserver: start member 16ddfd8ab9399a99 in cluster 47021f879c1614df
2015/04/16 21:20:14 raft: 16ddfd8ab9399a99 became follower at term 0
2015/04/16 21:20:14 raft: newRaft 16ddfd8ab9399a99 [peers: [], term: 0, commit: 0, applied: 0, lastindex: 0, lastterm: 0]
2015/04/16 21:20:14 raft: 16ddfd8ab9399a99 became follower at term 1
2015/04/16 21:20:14 raft: 16ddfd8ab9399a99 [term: 1] received a MsgHeartbeat message with higher term from 942b5bcc165d3d6f [term: 151]
2015/04/16 21:20:14 raft: 16ddfd8ab9399a99 became follower at term 151
2015/04/16 21:20:14 tocommit(33133112) is out of range [lastIndex(0)]
panic: tocommit(33133112) is out of range [lastIndex(0)]

goroutine 10 [running]:
log.Panicf(0x8c9670, 0x2c, 0xc2080ca510, 0x2, 0x2)
	/var/vcap/data/packages/golang_1.4/80fd10aaca7fafada6e7f228f03c5024faa0b51a.1-9d3a1c8e5be38f64424db093270d5ab90f5ed290/src/log/log.go:314 +0xd0
github.com/coreos/etcd/raft.(*raftLog).commitTo(0xc208038b90, 0x1f99238)
	/var/vcap/data/compile/etcd/github.com/coreos/etcd/gopath/src/github.com/coreos/etcd/raft/log.go:177 +0x179
github.com/coreos/etcd/raft.(*raft).handleHeartbeat(0xc20803a580, 0x8, 0x16ddfd8ab9399a99, 0x942b5bcc165d3d6f, 0x97, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
	/var/vcap/data/compile/etcd/github.com/coreos/etcd/gopath/src/github.com/coreos/etcd/raft/raft.go:593 +0x47
github.com/coreos/etcd/raft.stepFollower(0xc20803a580, 0x8, 0x16ddfd8ab9399a99, 0x942b5bcc165d3d6f, 0x97, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
	/var/vcap/data/compile/etcd/github.com/coreos/etcd/gopath/src/github.com/coreos/etcd/raft/raft.go:563 +0xfdd
github.com/coreos/etcd/raft.(*raft).Step(0xc20803a580, 0x8, 0x16ddfd8ab9399a99, 0x942b5bcc165d3d6f, 0x97, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
	/var/vcap/data/compile/etcd/github.com/coreos/etcd/gopath/src/github.com/coreos/etcd/raft/raft.go:461 +0x23f
github.com/coreos/etcd/raft.(*node).run(0xc208038b40, 0xc20803a580)
	/var/vcap/data/compile/etcd/github.com/coreos/etcd/gopath/src/github.com/coreos/etcd/raft/node.go:275 +0x689
created by github.com/coreos/etcd/raft.StartNode
	/var/vcap/data/compile/etcd/github.com/coreos/etcd/gopath/src/github.com/coreos/etcd/raft/node.go:168 +0x50a

It does eventually start to work, and I don't really know why...
2015/04/16 21:21:24 etcdserver: start member 1548e6e4f941098d in cluster 47021f879c1614df
2015/04/16 21:21:24 raft: 1548e6e4f941098d became follower at term 0
2015/04/16 21:21:24 raft: newRaft 1548e6e4f941098d [peers: [], term: 0, commit: 0, applied: 0, lastindex: 0, lastterm: 0]
2015/04/16 21:21:24 raft: 1548e6e4f941098d became follower at term 1
2015/04/16 21:21:24 raft: 1548e6e4f941098d [term: 1] received a MsgHeartbeat message with higher term from 942b5bcc165d3d6f [term: 151]
2015/04/16 21:21:24 raft: 1548e6e4f941098d became follower at term 151
2015/04/16 21:21:24 raft.node: 1548e6e4f941098d elected leader 942b5bcc165d3d6f at term 151
2015/04/16 21:21:24 raft: 1548e6e4f941098d [logterm: 0, index: 33133815] rejected msgApp [logterm: 151, index: 33133815] from 942b5bcc165d3d6f
2015/04/16 21:21:24 raft: 1548e6e4f941098d [commit: 0, lastindex: 0, lastterm: 0] starts to restore snapshot [index: 33133682, term: 151]
2015/04/16 21:21:24 raftlog: log [committed=1, applied=0, unstable.offset=0, len(unstable.Entries)=0] starts to restore snapshot [index: 33133682, term: 151]
2015/04/16 21:21:24 raft: 1548e6e4f941098d restored progress of 942b5bcc165d3d6f [next = 33133683, match = 0, wait = 0]
2015/04/16 21:21:24 raft: 1548e6e4f941098d restored progress of a3871bb6d0a075ef [next = 33133683, match = 0, wait = 0]
2015/04/16 21:21:24 raft: 1548e6e4f941098d [commit: 0] restored snapshot [index: 33133682, term: 151]
2015/04/16 21:21:24 etcdserver: saved incoming snapshot at index 33133682
2015/04/16 21:21:24 rafthttp: starting client stream to 942b5bcc165d3d6f at term 151
2015/04/16 21:21:24 etcdserver: recovered from incoming snapshot at index 33133682
2015/04/16 21:21:25 raft: 1548e6e4f941098d [commit: 33133682] ignored snapshot [index: 33133682, term: 151]
2015/04/16 21:21:25 etcdserver: added local member 1548e6e4f941098d [http://<IP_ADDRESS>:7001] to cluster 47021f879c1614df
2015/04/16 21:21:25 etcdserver: published {Name:etcd_z2-0 ClientURLs:[http://<IP_ADDRESS>:4001]} to cluster 47021f879c1614df
2015/04/16 21:30:47 rafthttp: encountered error reading the client log stream: read tcp <IP_ADDRESS>:7001: use of closed network connection
2015/04/16 21:30:47 rafthttp: client streaming to 942b5bcc165d3d6f at term 151 has been stopped

2015/04/16 21:20:14 etcdserver: start member 16ddfd8ab9399a99 in cluster 47021f879c1614df
Based on this log, i think these two members start without the original data dir.
I tried to reproduce it(start 2.0.1 cluster, shut down, restart them with 2.0.9), and it works fine for me.

Our upgrade doesn't quite work that way.
We have 3 up, we bring one down, upgrade, bring it back up and then continue to the next member.

@fraenkel
For some reason, one of your upgraded member does not have the previous wal and snapshot files. We are pretty sure this happened to your cluster based on the log you provided. This is a unsafe behavior and might lead to data inconsistency.
your log
2015/04/16 21:21:24 etcdserver: start member 1548e6e4f941098d in cluster 47021f879c1614df

restarting a member with data should look like this
2015/04/17 19:39:03 etcdserver: restart member 6e3bd23ae5f1eae0 in cluster e9c7614f68f35fb2 at commit index 71

The leader of raft was doing its best to prevent re-adding a member who lost its data. The error gets resolved when the leader switched to a new one, who is unaware of the the data loss of the member.

We have 3 up, we bring one down, upgrade, bring it back up and then continue to the next member.

Rolling upgrade is good. But I would suggest you to check the upgraded member is OK before upgrading another one.

So what we were doing is removing the current member, then wiping the data_dir. After the code was upgraded, we added the member, and waited until a successful sync.
We did learn that if we do the above without removing the data_dir, we do not panic.  Just seems a bit confusing since we remove the member which is what is causing the panic when we add it back without a data_dir.

@fraenkel

So what we were doing is removing the current member, then wiping the data_dir. After the code was upgraded, we added the member, and waited until a successful sync.

You do not need to remove the data-dir. And if you lose the data-dir, it means you lose the member. You have to remove the member and add it back again via run time configuration change API.
Please see https://github.com/coreos/etcd/blob/master/Documentation/admin_guide.md#lifecycle.

The way the machines are created and destroyed requires us to remove the member then add it back.
If we remove the member, wipe the data_dir, then add the member, when the server starts we get the follow error about rafthttp: unexpected removal of unknown peer '4954212033102115228'
If we then try to start again, it seems to come up just fine.
But if we remove the member, then add the member back again, the server produces the same error each time we do this cycle.
2015/04/21 18:21:30 etcd: listening for peers on http://<IP_ADDRESS>:7001
2015/04/21 18:21:30 etcd: listening for client requests on http://<IP_ADDRESS>:4001
2015/04/21 18:21:30 etcdserver: datadir is valid for the 2.0.1 format
2015/04/21 18:21:30 etcdserver: name = etcd_z1-1
2015/04/21 18:21:30 etcdserver: data dir = /var/vcap/store/etcd
2015/04/21 18:21:30 etcdserver: member dir = /var/vcap/store/etcd/member
2015/04/21 18:21:30 etcdserver: heartbeat = 50ms
2015/04/21 18:21:30 etcdserver: election = 1000ms
2015/04/21 18:21:30 etcdserver: snapshot count = 10000
2015/04/21 18:21:30 etcdserver: advertise client URLs = http://<IP_ADDRESS>:4001
2015/04/21 18:21:30 etcdserver: start member c92a4990fad5c84a in cluster f61148e36337417a
2015/04/21 18:21:30 raft: c92a4990fad5c84a became follower at term 0
2015/04/21 18:21:30 raft: newRaft c92a4990fad5c84a [peers: [], term: 0, commit: 0, applied: 0, lastindex: 0, lastterm: 0]
2015/04/21 18:21:30 raft: c92a4990fad5c84a became follower at term 1
2015/04/21 18:21:30 raft: c92a4990fad5c84a [term: 1] received a MsgHeartbeat message with higher term from c49b621b412fb83e [term: 74]
2015/04/21 18:21:30 raft: c92a4990fad5c84a became follower at term 74
2015/04/21 18:21:30 raft.node: c92a4990fad5c84a elected leader c49b621b412fb83e at term 74
2015/04/21 18:21:30 raft: c92a4990fad5c84a [logterm: 0, index: 478105] rejected msgApp [logterm: 74, index: 478105] from c49b621b412fb83e
2015/04/21 18:21:30 raft: c92a4990fad5c84a [logterm: 0, index: 478105] rejected msgApp [logterm: 74, index: 478105] from c49b621b412fb83e
2015/04/21 18:21:30 raft: c92a4990fad5c84a [commit: 0, lastindex: 0, lastterm: 0] starts to restore snapshot [index: 470068, term: 74]
2015/04/21 18:21:30 raftlog: log [committed=1, applied=0, unstable.offset=0, len(unstable.Entries)=0] starts to restore snapshot [index: 470068, term: 74]
2015/04/21 18:21:30 raft: c92a4990fad5c84a restored progress of 44c0e5987704719c [next = 470069, match = 0, wait = 0]
2015/04/21 18:21:30 raft: c92a4990fad5c84a restored progress of 602db4bc0b4b8334 [next = 470069, match = 0, wait = 0]
2015/04/21 18:21:30 raft: c92a4990fad5c84a restored progress of c49b621b412fb83e [next = 470069, match = 0, wait = 0]
2015/04/21 18:21:30 raft: c92a4990fad5c84a [commit: 0] restored snapshot [index: 470068, term: 74]
2015/04/21 18:21:30 etcdserver: saved incoming snapshot at index 470068
2015/04/21 18:21:30 raft: c92a4990fad5c84a [commit: 470068] ignored snapshot [index: 470068, term: 74]
2015/04/21 18:21:30 rafthttp: starting client stream to c49b621b412fb83e at term 74
2015/04/21 18:21:30 etcdserver: recovered from incoming snapshot at index 470068
2015/04/21 18:21:31 raft: c92a4990fad5c84a [commit: 470068] ignored snapshot [index: 470068, term: 74]
2015/04/21 18:21:31 rafthttp: unexpected removal of unknown peer '4954212033102115228'
2015/04/21 18:21:31 rafthttp: encountered error reading the client log stream: read tcp <IP_ADDRESS>:7001: use of closed network connection
2015/04/21 18:21:31 rafthttp: client streaming to c49b621b412fb83e at term 74 has been stopped
panic: rafthttp: unexpected removal of unknown peer '4954212033102115228'

goroutine 19 [running]:
log.Panicf(0x8d6d90, 0x31, 0xc2083734f8, 0x1, 0x1)
        /var/vcap/data/packages/golang1.4/f57ddbc8d55d7a0f08775bf76bb6a27dc98c7ea7.1-b7b27b40f381b6fb59e45e37ea96847381781996/src/log/log.go:314 +0xd0
github.com/coreos/etcd/rafthttp.(*transport).removePeer(0xc2080831f0, 0x44c0e5987704719c)
        /var/vcap/data/compile/etcd/etcd/gopath/src/github.com/coreos/etcd/rafthttp/transport.go:152 +0x1c3
github.com/coreos/etcd/rafthttp.(*transport).RemovePeer(0xc2080831f0, 0x44c0e5987704719c)
        /var/vcap/data/compile/etcd/etcd/gopath/src/github.com/coreos/etcd/rafthttp/transport.go:136 +0x77
github.com/coreos/etcd/etcdserver.(*EtcdServer).applyConfChange(0xc20806e200, 0x9c4cdcffc2a1dcca, 0x1, 0x44c0e5987704719c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
        /var/vcap/data/compile/etcd/etcd/gopath/src/github.com/coreos/etcd/etcdserver/server.go:791 +0x81e
github.com/coreos/etcd/etcdserver.(*EtcdServer).apply(0xc20806e200, 0xc208526048, 0x1f84, 0x1f8d, 0xc20803ddd0, 0x0, 0x0)
        /var/vcap/data/compile/etcd/etcd/gopath/src/github.com/coreos/etcd/etcdserver/server.go:699 +0x399
github.com/coreos/etcd/etcdserver.(*EtcdServer).run(0xc20806e200)
        /var/vcap/data/compile/etcd/etcd/gopath/src/github.com/coreos/etcd/etcdserver/server.go:430 +0xf4c
created by github.com/coreos/etcd/etcdserver.(*EtcdServer).start
        /var/vcap/data/compile/etcd/etcd/gopath/src/github.com/coreos/etcd/etcdserver/server.go:298 +0x294

remove the member, wipe the data_dir, then add the member

How did you remove the member and add the member back?

etcdctl -C '${CLUSTER_ENDPOINTS}' member remove ${my_id}
etcdctl -C '${CLUSTER_ENDPOINTS}' member add ${node_name} ${advertise_peer_url}

@jpalermo I think this is related to https://github.com/coreos/etcd/pull/2701.
It will be resolved in 2.1 soon. And we will back-port the patch back to 2.0 release if possible.

/cc @yichengq


other protocols

can this bundle run on tcp instead of ws?

I'm not sure to understand your meaning.
If you want use directly tcp there is no more websocket, as websocket is based on tcp. What is the use case? Or to simplify what are the benefits to support tcp wire protocol directly into this bundle and what kind of feature it bring?


tdo PWA

Nice!
I see only a few minor issues. The svg file contains a lot of inkscape noise. Can you pass it through https://jakearchibald.github.io/svgomg/.
The Workbox plugin should be moved to webpack.prod.js and you should make sure that the service worker is not used in development mode. Most CxJS apps use the same development server port and service workers messes up other applications. Maybe http rule can be replaced with https.


Add support for Meteor.

Fixes: #1

Is it documented somewhere on how to address Meteor package imports breaking Storybook? Can we stub/mock these somehow? I do have an older install of Storybook, should I just uninstall it and use the new getstorybook process?

That part is not there yet. May be we can create a new issue here.
The docs will be available on our new getstorybook.io domain by next week.

@arunoda Are the docs available?

@arunoda is it solved? I'm still seeing Meteor imports errors.

@arunoda it will be great if Meteor example can have some code related to Meteor. talking about files under: https://github.com/kadirahq/getstorybook/tree/master/generators/METEOR


Prevent tilemap editor hang and crash by mutex guarding tile_map_layer dirty.cell_list.

TilesEditorUtils calls tile_map->set_pattern from a thread (to refresh tile pattern preview images). set_pattern sets each of the cells into the temporary map, marking them dirty via set_cell.
This can race against the tree invoking the TileMapLayer's internal_update, which proceses dirty.cell_list and eventually clears it. If a cell's shared dirty entry ends up losing the race, clear can get stuck in an infinite loop where remove refuses to change it because the entry doesn't think it's a member of the list, but the list head still points to it. This spams
ERROR: Condition "p_elem->_root != this" is true.
   at: remove (./core/templates/self_list.h:80)

And eventually leads to a crash when the error message buffer fills.
Guarding the list mutations avoids the race that sets up for this failure, fixes #86226.

Bugsquad edit, alternative to: https://github.com/godotengine/godot/pull/87470

Opened an alternative PR that handles this by making the editor preview thread safe instead, this solves the crash and generates the previews properly
We might want to look into general thread safety of this class as well, but I think this issue should be solved by making the editor management of this thread safe instead

Superseded by https://github.com/godotengine/godot/pull/87470. Thanks for your contribution nevertheless!


Update setup.py

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Jenkins, test this please

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.

Jenkins, test this please

Build finished.


"The specified account is disabled."

Preflight Checklist

[X] I have installed the latest version of Storage Explorer.
[X] I have checked existing resources, including the troubleshooting guide and the release notes.
[X] I have searched for similar issues.

Storage Explorer Version
1.21.1, upgraded to 1.21.3 current version and still the same
Regression From
1.21.1
Architecture
x64
Storage Explorer Build Number
20211020.2
Platform
Windows
OS Version
Windows 10
Bug Description
Hi,
Starting today, me and my colleagues cannot access any File Share which was set on this specific account "cmfvmshares" with the following error every time we try to expand the File Shares or accessing one of the SAS URL which was pointing to one of this File shares.
The message we get is the following:
Unable to retrieve child resources.
Details:
The specified account is disabled.
RequestId:cac8b4a9-b01a-0130-2ece-d03b29000000
Time:2021-11-03T16:21:04.6201017Z
My and my colleagued had accessed this account by connection with the AccountName and AccountKey, and we have full permissions, but overnight it seems the account has been disabled with no Actions from our part.

What could be the reason for this behavior? And is there a possibility in order for us to re-access this File Shares linked to this account? How could we re-activate it? I understand the error is pretty much specific but so far I am unable to find how can we enable this account which was disabled. Any tips or hints would be more than welcome.
Best of regards,
Steps to Reproduce

Launch Storage Explorer
Expand the specific storage account "cmfvmshares"
Expand Blob Containers / File Shares / Queues / Tables

Actual Experience
This happened when I was on version 1.21.1 and I have updated to 1.21.3 accordingly and still experience this same behavior:

Expected Experience
The expected outcome is for us to be able to access the File Shares
Additional Context
No response

If nothing has done on your part to cause this to happen, it's unlikely it was caused by Storage Explorer. A few things I suggest to check:

The permission to the File Shares. Check to see if the name/key pair is still valid
If you are running behind a proxy, is the proxy setting still valid
If you can access to the Azure portal, check if you have access from the portal
Let us know it how goes.  Thanks.

Closing due to lack of response. If you are still facing this issue, we recommend opening a support ticket via the Azure Portal.


File deletion

Currently the platform doesn't allow any users to delete any files - what happens if they upload a wrong file or put wrong metadata? Should we allow users to delete files that uploaded by themselves?

Duplicate of #98


Create cagetorys

Hi,
Do you have a structure that allows you to create categories within categories ?
Thanks

Hi again,
i solved the problem above. But now i have to ask you something again, there is a download button on the panel in your web site but when i download it. i couldnt see that button in my panel.
thanks.

Hello,
If you are talking about our web version, not the package - you are downloading whole project, not generator. This means that you are downloading the files that you can upload to your server and go live. If you need to edit anything - you must visit our page to edit it and download again.

ok, thnx.
And i have another question :) i couldnt find a way to upload multiple pictures. Do i have to write a code about it or is there a way i missed?
thanks.

We don't have it yet. The problem with multi-upload is that there is way too many usage cases and it would be a potential nightmare to include such system so at this point - you must include it yourself.
We are still working on improvements but we can't promise anything due to the complexity required for this system to work.

good luck :) ty


Framework not found Pods

According to Xcode new update, it didn't work for me. How do i solve this?

Hi @NisalChathuranga! Thank you for reporting the issue. Please, check out the repo with update


Give an example for creating DEP in SPO/OneDrive Geo

Hello!
The documentation for Register-SPODataEncryptionPolicy does not list an example nor does this documentation. The instructions for a DEP in Exchange online provided an example/sample values and I'd like to see the same for SPO.
SPO is different since it asks for 3 pieces of information versus using the URI for the key like it does in EXO...  So displaying how that breaks down would be helpful to have in the documentation. I'd recommend having a sample in the cmdlet reference for Register-SPODataEncryptionPolicy as well but at minimum it should be here just like it is for EXO.
Thanks!

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

ID: 58b6670c-3ed1-97f9-b728-79bb77106206
Version Independent ID: 50934005-9e01-e6ea-21dc-af6735e1faa7
Content: Set up Customer Key - Microsoft 365 Compliance
Content Source: microsoft-365/compliance/customer-key-set-up.md
Service: o365-seccomp
GitHub Login: @KCCross
Microsoft Alias: krowley

@andypituch  Thank you for your feedback. We have added an example to this document via PR# https://github.com/MicrosoftDocs/microsoft-365-docs/pull/2509 and also added an example to Register-SPODataEncryptionPolicy the via PR#https://github.com/MicrosoftDocs/office-docs-powershell/pull/6252
Thanks
Sri

@msbemba Thank you very much for the contribution and updating the documentation with PR. @andypituch Hope this update is helpful for you. Thanks for taking out some time to open the issue. Appreciate and encourage you to do the same in future also.


rubocop 0.49.1 shouldn't suggest ApplicationRecord for models in a Rails 4 app

Expected behavior
Rubocop shouldn't trigger and suggest using ApplicationRecord for models in an app using Rails 4, since ApplicationRecord was first introduced in Rails 5.
Rails/ApplicationRecord: Models should subclass ApplicationRecord
Actual behavior
Offenses:

app/models/activity.rb:21:18: C: Rails/ApplicationRecord: Models should subclass ApplicationRecord.
class Activity < ActiveRecord::Base
                 ^^^^^^^^^^^^^^^^^^

Steps to reproduce the problem
› rubocop -R app/models/activity.rb

Rails version
› rails -v
Rails 4.1.16

RuboCop version
› rubocop -V
0.49.1 (using Parser <IP_ADDRESS>, running on ruby 2.3.1 x86_64-darwin13)

HI.
This cop supports TargetRailsVersion option.
https://github.com/bbatsov/rubocop/blob/e21d0ed0e39d30a495a3e44a20a086514606ceda/lib/rubocop/cop/rails/application_record.rb#L22
And default value of the option is 5.0.
https://github.com/bbatsov/rubocop/blob/e21d0ed0e39d30a495a3e44a20a086514606ceda/config/default.yml#L118
So, if your project using Rails 4, please set the option.
AllCops:
  TargetRailsVersion: 4.0

Thanks. I wasn't aware of that option, but added it to our .rubocop.ymlfile now.
So we ought to use TargetRailsVersion: 4.0 for all Rails versions 4.x?

So we ought to use TargetRailsVersion: 4.0 for all Rails versions 4.x?

No, we can use TargetRailsVersion: 4.1 for Rails 4.1. But currently, RuboCop does not have a cop that is aware of minor version. Existing cops are aware of major version only.
At present, specifying minor version does not affect, but I think specifying minor version is better for the future.

Ok thanks again, it's nice to know. :) Have a good day!