Error! App '227300' state is 0x496 after update job.

Describe the bug
I am trying to launch the game without success. I tried to launch the game either with root and without root. I also tried the command mentioned here, but I keep getting the same error. Searching for this error doesn't help either, I am unable to find any reference to 0x496.
If you need more logs or anything please let me know, I would be happy to provide them.
Note: I have removed my login name from the log and command and replaced it with xxxx, because of privacy reasons.
Command
truckersmp-cli -v -n xxxx

Terminal output
Collapsed log
[daan@Lithium ~]$ truckersmp-cli -v -n xxxx
** INFO **  Platform is Linux, using Proton
** INFO **  Log file: <empty> (Default)
** INFO **  Game directory: /home/daan/.local/share/truckersmp-cli/Euro Truck Simulator 2/data (Default)
** INFO **  Prefix directory: /home/daan/.local/share/truckersmp-cli/Euro Truck Simulator 2/prefix (Default)
** INFO **  Game options: -nointro -64bit (Default)
** INFO **  TruckersMP MOD directory: /home/daan/.local/share/truckersmp-cli/TruckersMP (Default)
** INFO **  Whether to disable Steam Runtime (deprecated): False (Default)
** INFO **  Whether to disable Steam Runtime: False (Default)
** INFO **  Whether to use Flatpak version of Steam: False (Default)
** INFO **  Whether to disable Steam Overlay: False (Default)
** INFO **  Proton directory: /home/daan/.local/share/truckersmp-cli/Proton (Default)
** INFO **  Steam Runtime directory: /home/daan/.local/share/truckersmp-cli/SteamRuntime (Default)
** INFO **  Rendering backend: gl (Default)
** INFO **  AppID/GameID: 227300 (ets2)
** INFO **  SteamCMD: /home/daan/.local/share/truckersmp-cli/steamcmd/steamcmd.sh
** INFO **  Running SteamCMD:
  /home/daan/.local/share/truckersmp-cli/steamcmd/steamcmd.sh
    +force_install_dir /home/daan/.local/share/truckersmp-cli/SteamRuntime
    +login anonymous
    +app_update 1391110 validate
    +quit
tid(4999) burning pthread_key_t == 0 so we never use it
Redirecting stderr to '/home/daan/.local/share/Steam/logs/stderr.txt'
Logging directory: '/home/daan/.local/share/Steam/logs'
/tmp/dumps is not owned by us - delete and recreate
Unable to delete /tmp/dumps. Continuing anyway.
[  0%] Checking for available updates...
[----] Verifying installation...
UpdateUI: skip show logoSteam Console Client (c) Valve Corporation - version<PHONE_NUMBER>
-- type 'quit' to exit --
Loading Steam API...OK

Connecting anonymously to Steam Public...OK
Waiting for client config...OK
Waiting for user info...OK
 Update state (0x3) reconfiguring, progress: 0.00 (0 / 0)
 Update state (0x5) verifying install, progress: 43.94 (283275009 / 644647232)
Success! App '1391110' fully installed.
** INFO **  Running SteamCMD:
  /home/daan/.local/share/truckersmp-cli/steamcmd/steamcmd.sh
    +force_install_dir /home/daan/.local/share/truckersmp-cli/Proton
    +login xxxx
    +app_update 2348590 validate
    +quit
tid(5023) burning pthread_key_t == 0 so we never use it
Redirecting stderr to '/home/daan/.local/share/Steam/logs/stderr.txt'
Logging directory: '/home/daan/.local/share/Steam/logs'
/tmp/dumps is not owned by us - delete and recreate
Unable to delete /tmp/dumps. Continuing anyway.
[  0%] Checking for available updates...
[----] Verifying installation...
UpdateUI: skip show logoSteam Console Client (c) Valve Corporation - version<PHONE_NUMBER>
-- type 'quit' to exit --
Loading Steam API...OK
Logging in user 'xxxx' to Steam Public...OK
Waiting for client config...OK
Waiting for user info...OK
 Update state (0x5) verifying install, progress: 1.85 (22620435 /<PHONE_NUMBER>)
Success! App '2348590' fully installed.
** INFO **  Game branch: public
** INFO **  Running SteamCMD:
  /home/daan/.local/share/truckersmp-cli/steamcmd/steamcmd.sh
    +@sSteamCmdForcePlatformType windows
    +force_install_dir /home/daan/.local/share/truckersmp-cli/Euro Truck Simulator 2/data
    +login xxxx
    +app_update 227300 -beta public validate
    +quit
tid(5048) burning pthread_key_t == 0 so we never use it
Redirecting stderr to '/home/daan/.local/share/Steam/logs/stderr.txt'
Logging directory: '/home/daan/.local/share/Steam/logs'
/tmp/dumps is not owned by us - delete and recreate
Unable to delete /tmp/dumps. Continuing anyway.
[  0%] Checking for available updates...
[----] Verifying installation...
UpdateUI: skip show logoSteam Console Client (c) Valve Corporation - version<PHONE_NUMBER>
-- type 'quit' to exit --
Loading Steam API...OK
"@sSteamCmdForcePlatformType" = "windows"
Logging in user 'xxxx' to Steam Public...OK
Waiting for client config...OK
Waiting for user info...OK
 Update state (0x3) reconfiguring, progress: 0.00 (0 / 0)
 Update state (0x5) verifying install, progress: 2.02 (273791738 /<PHONE_NUMBER>7)
 Update state (0x5) verifying install, progress: 14.63<PHONE_NUMBER> /<PHONE_NUMBER>7)
 Update state (0x5) verifying install, progress: 27.07<PHONE_NUMBER> /<PHONE_NUMBER>7)
 Update state (0x5) verifying install, progress: 39.69<PHONE_NUMBER> /<PHONE_NUMBER>7)
 Update state (0x5) verifying install, progress: 52.30<PHONE_NUMBER> /<PHONE_NUMBER>7)
 Update state (0x5) verifying install, progress: 64.73<PHONE_NUMBER> /<PHONE_NUMBER>7)
 Update state (0x5) verifying install, progress: 77.20<PHONE_NUMBER>9 /<PHONE_NUMBER>7)
 Update state (0x5) verifying install, progress: 90.98<PHONE_NUMBER>4 /<PHONE_NUMBER>7)
 Update state (0x41) staging, progress: 71.91<PHONE_NUMBER>5 /<PHONE_NUMBER>9)
 Update state (0x41) staging, progress: 79.70<PHONE_NUMBER>3 /<PHONE_NUMBER>9)
 Update state (0x41) staging, progress: 90.20<PHONE_NUMBER>2 /<PHONE_NUMBER>9)
Error! App '227300' state is 0x496 after update job.
SteamCMD exited abnormally

Information

OS: Arch linux 6.7.8-arch1-1
Proton or Wine version:Proton 8.0
truckersmp-cli version: 10.1-1

Please see if ~/.local/share/Steam/logs has something interesting. content_log.txt should be the most interesting.
According to this calculation the errors are:
1174 = 0x496
1024: StateUpdateStarted
128:  StateFilesCorrupt
16:   StateLocked
4:    StateFullyInstalled
2:    StateUpdateRequired

With the normal steam client I had it once, that a game was on a hard drive with a bad sector. Steam wasn't able to resolve this issue by itself because after every update the file was still corrupt.

After trying it again this was the output of the content_log.txt:

[2024-03-06 21:44:47] AppID 2348590 state changed : Fully Installed,Update Queued,Update Running,
[2024-03-06 21:44:47] AppID 2348590 update changed : Running Update,
[2024-03-06 21:44:47] AppID 2348590 update changed : Running Update,Reconfiguring,
[2024-03-06 21:44:47] AppID 2348590 update changed : Running Update,
[2024-03-06 21:44:47] AppID 2348590 update changed : Running Update,Validating,
[2024-03-06 21:44:49] AppID 2348590 update changed : Running Update,
[2024-03-06 21:44:49] AppID 2348590 update changed : None
[2024-03-06 21:44:49] AppID 2348590 state changed : Fully Installed,Update Queued,
[2024-03-06 21:44:49] AppID 2348590 state changed : Fully Installed,
[2024-03-06 21:44:49] AppID 2348590 scheduler finished : removed from schedule (result No Error, state 0xc)
[2024-03-06 21:44:51] Client version:<PHONE_NUMBER>
[2024-03-06 21:44:51] Loaded Steam library folders configuration: /home/daan/.local/share/Steam/steamapps/libraryfolders.vdf
[2024-03-06 21:44:51] Loaded 1 apps from install folder "/home/daan/.local/share/truckersmp-cli/Euro Truck Simulator 2/data/steamapps\appmanifest_*.acf".
[2024-03-06 21:44:51] Triggered async write of Steam library folders configuration (1 libraries).
[2024-03-06 21:44:53] AppID 227300 config changed : added depots 558245,1056760,1209460,2004210,2371170,2611740
[2024-03-06 21:44:53] AppID 227300 config changed : updated depots 227301,227302,227310,304212,531130,558244,925580
[2024-03-06 21:44:53] AppID 227300 scheduler update : Priority First, not played for 83 seconds, update disabled for 0 seconds
[2024-03-06 21:44:53] AppID 227300 state changed : Update Required,Fully Installed,Update Queued,Update Optional,Files Corrupt,Update Started,
[2024-03-06 21:44:53] AppID 227300 config changed : added depots 558245,1056760,1209460,2004210,2371170,2611740
[2024-03-06 21:44:53] AppID 227300 config changed : updated depots 227301,227302,227310,304212,531130,558244,925580
[2024-03-06 21:44:53] AppID 227300 state changed : Update Required,Fully Installed,Update Queued,Update Optional,Files Corrupt,Update Running,Update Started,
[2024-03-06 21:44:53] AppID 227300 update changed : Running Update,
[2024-03-06 21:44:53] AppID 227300 update changed : Running Update,Reconfiguring,
[2024-03-06 21:44:54] AppID 227300 update changed : Running Update,
[2024-03-06 21:44:54] AppID 227300 update changed : Running Update,Validating,
[2024-03-06 21:45:16] Validation: 731 chunks failed to read of 2018 total in file "dlc_lunar_new_year.scs" (None)
[2024-03-06 21:45:20] Validation: full scan in "/home/daan/.local/share/truckersmp-cli/Euro Truck Simulator 2/data" found 1/100 mismatching files (714.38 MB/13.54 GB) in 25 seconds).
[2024-03-06 21:45:20] AppID 227300 update changed : Running Update,
[2024-03-06 21:45:20] AppID 227300 update started : download<PHONE_NUMBER>4/16997035344, store 0/0, reuse<PHONE_NUMBER>/8419760011, delta 422716333/1451971069, stage<PHONE_NUMBER>6/26243180599
[2024-03-06 21:45:20] AppID 227300 update changed : Running Update,Staging,
[2024-03-06 21:45:20] AppID 227300 update changed : Running Update,
[2024-03-06 21:45:20] AppID 227300 update changed : Running Update,Staging,
[2024-03-06 21:45:29] AppID 227300 update canceled : Failed updating depot 227301 while reading chunk "b6b8136aa55b14b2dfd08cbe41042bdb80ba285c" (Read Failed) (Corrupt game files) "/home/daan/.local/share/truckersmp-cli/Euro Truck Simulator 2/data/dlc_lunar_new_year.scs"
[2024-03-06 21:45:29] AppID 227300 update changed : Running Update,Staging,Stopping,
[2024-03-06 21:45:30] AppID 227300 update changed : Running Update,Stopping,
[2024-03-06 21:45:30] AppID 227300 update changed : None
[2024-03-06 21:45:30] AppID 227300 state changed : Update Required,Fully Installed,Update Queued,Update Optional,Files Corrupt,Update Started, (Corrupt game files)
[2024-03-06 21:45:30] AppID 227300 state changed : Update Required,Fully Installed,Update Optional,Files Corrupt,Update Started,
[2024-03-06 21:45:30] AppID 227300 scheduler finished : removed from schedule (result Corrupt game files, state 0x49e

I can remember that the first time it stopped downloading at ~91%. So I deleted the mentioned folder and it stopped downloading again but this time with error 0x10c. I started the update one more time and now it is fully installed without any error.

Thanks for sharing that info.
In the log is the exact file mentioned, might have got away with just deleting that single file but great it works now!
[2024-03-06 21:45:29] AppID 227300 update canceled : Failed updating depot 227301 while reading chunk "b6b8136aa55b14b2dfd08cbe41042bdb80ba285c" (Read Failed) (Corrupt game files) "/home/daan/.local/share/truckersmp-cli/Euro Truck Simulator 2/data/dlc_lunar_new_year.scs"


Consolidate option.zero and option.none

I keep getting tripped up using option.none forgetting that it widens the value generic type to any. I noticed that option.zero is provided to allow a generic to be passed through. I wonder if we could consider consolidating these to help ensure type safety. What do you think?

The difference between option.none and option.zero() is that zero is an identity function and none is a variable. Variables can't be generic. I don't think you can consolidate without turning none into an identity function too, and at that point, what's the difference between zero and none?

Hey @SimonMeskens! I guess I'm questioning when you would choose to use the variable form over the function form, given that the latter is safer?

You can easily use the none safely like this:
option.none as None<A>

There's no problem with always wanting to use zero() if you prefer that. The only "downside" is it fires a function each time, which is probably so small of a performance hit, it'd be hard to write code that even feels it.

The current none is disappointing
// compiles...
export const f = (n: number): option.Option<number> => n > 0 ? option.some('a') : option.none

The culprit seems this line https://github.com/gcanti/fp-ts/blob/master/src/Option.ts#L33
I guess should be
static value: Option<never> = new None()

I like that solution 👍

I wonder if there is also potential to use never in other places, such as the right generic for either.left?

The difference between void and never is that you can assign null or undefined to void, so yeah, we should probably use never in all cases.


Cannot import BackendOptions from namespace in TypeScript

I'm using the typescript definitions provided by the library itself, not the ones on @types, and am trying to import the BackendOptions interface (so I can strongly type my options). Example:
import * as I18NextXhrBackend from 'i18next-xhr-backend';

let options: I18NextXhrBackend.BackendOptions = {
    loadPath: '{{lng}}/{{ns}}'
};

However this produces the following error:
TS2694: Namespace '"node_modules/i18next-xhr-backend/index"' has no exported member 'BackendOptions'.

@VincentLanglet ideas?
@michaelbull i do not maintain the types myself - so hopefully some other typescript user can help

@michaelbull Hi !
import Backend, { I18NextXhrBackend } from 'i18next-xhr-backend';

Does work, so you should write
import * as Foo from 'i18next-xhr-backend';

let options: Foo.I18NextXhrBackend.BackendOptions = {
    loadPath: '{{lng}}/{{ns}}'
};

I agree, it's not the best

Ah, that's how you do it. Thanks for your help guys.


Document the dependency of running the prep.go script

In order to download and prepare all the appropriate schema files used for testing run the prep.go script at: https://github.com/TIBCOSoftware/vulnrep/blob/master/cmd/prep/prep.go
This should be documented in the README.md

README.md updated!


Allow building bootstrap.php.cache when app/autoload.php is absent

If app/autoload.php is absent then use the autoload.php in Composer's
vendor directory.
symfony/symfony#21837 opens the door for removing app/autoload.php in Symfony apps. I tried removing that and updating the various reference to it in symfony-standard and my app works (:tada:), but when I run composer install/update it complains about the buildBootstrap task expecting to find app/autoload.php.
This fix tells the buildBootstrap task to use vendor/autoload.php if app/autoload.php is absent.

Heya folks, any news on this? The fabbot failure is unrelated to this diff

Thank you @BPScott.


Fix displaying swap memory in percents

When swap is disabled, swap memory in percents was shown incorrect.

Thanks for contributing!


Ability to change all sheets to Monarch at once.

Please leave this as an option b/c I like to have Monarch for Hands, and Core for Pile/Deck.

Naturally, it will just be a button for convenience. Some have found changing the sheets to be tedious.


Unable to update PDF

PDF does not update when setState is called, updates only in initState mathod.

Did you try to change the key of the PdfView? Solved my problem.

Issue fixed on version 2.0.0


Chat - No download button for attachment sent with comment

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Version Number: v1.4.70-1
Reproducible in staging?: Y
Reproducible in production?: Y
If this was caught during regression testing, add the test name, ID and link from TestRail: https://expensify.testrail.io/index.php?/tests/view/4536722
Email or phone of affected tester (no customers<EMAIL_ADDRESS>Logs: https://stackoverflow.com/c/expensify/questions/4856
Issue reported by: Applause-Internal team
Action Performed:
Pre-requisite: the user must be logged in.

Go to any chat.
Enter any text on the compose box but do not send the message yet.
Tap on "+" and send an attachment, like an image.
Wait for the attachment to upload.
Verify the comment and the attachment have been sent.
Tap and hold on the attachment.
Verify the is no download button.

Expected Result:
Download button should be displayed.
Actual Result:
There is no download button.
Workaround:
Unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[ ] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[ ] MacOS: Desktop

Screenshots/Videos
https://github.com/Expensify/App/assets/115492554/43e36a3d-9854-44d9-a9d6-d417a1867e08

View all open jobs on GitHub

We think this issue might be related to the #vip-vsb.

Proposal
Please re-state the problem that we are trying to solve in this issue.
The download button isn't available for an attachment + text action.
What is the root cause of that problem?
One of the conditions for the download button to show is that the isAttachment condition is true. However, ReportActionsUtils.isReportActionAttachment checks whether the action contains ONLY attachment or not.
https://github.com/Expensify/App/blob/0f39e4370ccd84ccf7e1647b42cb505a69a2e9a3/src/pages/home/report/ContextMenu/ContextMenuActions.tsx#L459-L465
Because in our case it's an attachment + text, the download option won't show.
What changes do you think we should make in order to solve the problem?

I would keep ReportActionsUtils.isReportActionAttachment behavior the same, that is to check whether the action contains only attachment or not, otherwise it could break some parts of the app function.
So, I suggest creating a new function called ReportActionsUtils.isReportActionAttachmentAndText to check if an action is an attachment + text, based on isReportActionAttachment, but simpler.
function isReportActionAttachmentAndText(reportAction: OnyxEntry<ReportAction>) {
    const message = reportAction?.message?.[0];

    return message ? isReportMessageAttachmentAndText(message) : false
}

I don't include the check for reportAction.isAttachment and reportAction.attachmentInfo because both data are only available on the client, so if you re-login, you won't see it anymore. isReportMessageAttachmentAndText will look like this:
export default function isReportMessageAttachmentAndText(message: Message | undefined): boolean {
    if (!message?.text || !message.html) {
        return false;
    }

    const regex = new RegExp(` ${CONST.ATTACHMENT_SOURCE_ATTRIBUTE}="(.*)"`, 'i');
    return (message.text.split(' ').pop() === CONST.ATTACHMENT_MESSAGE_TEXT || !!Str.isVideo(message.text)) && !!message.html.match(regex);
}

It will return true if the message text last word is [Attachment] (or a video) and the message HTML match the attachment source regex.

@sobitneupane  Actually we can send multiple images in one report action. If we send a text with attachment then edit then copy paste the attachment part mutipples times, then we get multiples images. Example of the message :
Many images ![czNmcy1wcml2YXRlL3Jhd3BpeGVsX2ltYWdlcy93ZWJzaXRlX2NvbnRlbnQvcHUyMzMxNjM2LWltYWdlLTAxLXJtNTAzXzMtbDBqOXFrNnEucG5n.png](https://images.rawpixel.com/image_png_800/czNmcy1wcml2YXRlL3Jhd3BpeGVsX2ltYWdlcy93ZWJzaXRlX2NvbnRlbnQvcHUyMzMxNjM2LWltYWdlLTAxLXJtNTAzXzMtbDBqOXFrNnEucG5n.png)
![czNmcy1wcml2YXRlL3Jhd3BpeGVsX2ltYWdlcy93ZWJzaXRlX2NvbnRlbnQvcHUyMzMxNjM2LWltYWdlLTAxLXJtNTAzXzMtbDBqOXFrNnEucG5n.png](https://images.pexels.com/photos/2071873/pexels-photo-2071873.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1)
![czNmcy1wcml2YXRlL3Jhd3BpeGVsX2ltYWdlcy93ZWJzaXRlX2NvbnRlbnQvcHUyMzMxNjM2LWltYWdlLTAxLXJtNTAzXzMtbDBqOXFrNnEucG5n.png](https://images.rawpixel.com/image_png_800/czNmcy1wcml2YXRlL3Jhd3BpeGVsX2ltYWdlcy93ZWJzaXRlX2NvbnRlbnQvcHUyMzMxNjM2LWltYWdlLTAxLXJtNTAzXzMtbDBqOXFrNnEucG5n.png)
![czNmcy1wcml2YXRlL3Jhd3BpeGVsX2ltYWdlcy93ZWJzaXRlX2NvbnRlbnQvcHUyMzMxNjM2LWltYWdlLTAxLXJtNTAzXzMtbDBqOXFrNnEucG5n.png](https://images.pexels.com/photos/45201/kitty-cat-kitten-pet-45201.jpeg)
![czNmcy1wcml2YXRlL3Jhd3BpeGVsX2ltYWdlcy93ZWJzaXRlX2NvbnRlbnQvcHUyMzMxNjM2LWltYWdlLTAxLXJtNTAzXzMtbDBqOXFrNnEucG5n.png](https://images.pexels.com/photos/1472999/pexels-photo-1472999.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1)

copy paste that text and sent the text, you will get many images.
Should we show the download button for this multiple images too? What is the expected result for this case?

Thanks for bringing this up, @tsa321
@slafortune What would be the expected behavior if user uploads multiple images in a single action as suggested by @tsa321 here? My inclination is to display the Download option only if the message is a single attachment. If the message includes both text and an attachment, or if there are multiple attachments, it might be best not to show the Download option at all.

Thanks for bringing this up, @sobitneupane - we are going to do nothing for now.  Here’s an issue for the next iteration of showing the in-lime image in the live preview - https://github.com/Expensify/App/issues/40181#top


Some questions about P4-OVS

Each time I  add a new bridge and a new port through ovs-vsctl, the command acts like waiting for something and it never stop. However, the bridge(port) is added seemingly.  This question is similar to Originally posted by @fatihusta in https://github.com/osinstom/P4-OvS/issues/4#issuecomment-768256486

root@P4-OVS-1 ~/P/demo# ovs-vsctl add-port br0 ovsp4-p1 -- set Interface ovsp4-p0 ofport_request=1

Ctrl C

2021-05-03T08:44:54Z|00002|fatal_signal|WARN|terminating with signal 2 (Interrupt)
root@P4-OVS-1 ~/P/demo# ovs-vsctl show
7aaba263-85b9-4ee8-add8-1c788b9935fb
    Manager "ptcp:5000"
    Bridge br0
        p4: true
        datapath_type: ubpf
        Port br0
            Interface br0
                type: internal
        Port ovsp4-p0
            Interface ovsp4-p0
        Port ovsp4-p1
            Interface ovsp4-p1

After Compiling with P4-OVS with all the dependencies, I have started to run the demos provided by this repo. However, I met the error shown below. Did I miss some steps before running the demos?

root@P4-OVS-1 ~/P/demo# ../../p4runtime-shell/p4runtime-sh-docker  --grpc-addr <IP_ADDRESS>:50051 --device-id 0 --config demo.p4info.txt,demo.o
CRITICAL:root:StreamChannel error, closing stream
CRITICAL:root:P4Runtime RPC error (UNAVAILABLE): failed to connect to all addresses
CRITICAL:root:Failed to establish session with server

When I use ovs-p4ctl, I met the error shown below.

root@P4-OVS-1 ~/P/demo# ovs-p4ctl show
Traceback (most recent call last):
  File "/usr/local/bin/ovs-p4ctl", line 37, in <module>
    from google.rpc import status_pb2, code_pb2
ModuleNotFoundError: No module named 'google.rpc'

Hi,
First of all Thank you for your effort for this project.
I'm testing p4-ovs on my lab.
I'm using ubuntu20.04 vm in proxmox.

I saw the same problem above and fixed it like here.
After;
I compiled many dependencies. (that was so painful :) )
I started the ovs-vswitchd, but that waiting something,
2021-01-27T11:31:28Z|00001|vlog|INFO|opened log file /var/log/openvswitch/ovs-vswitchd.log
2021-01-27T11:31:28Z|00002|ovs_numa|INFO|Discovered 3 CPU cores on NUMA node 0
2021-01-27T11:31:28Z|00003|ovs_numa|INFO|Discovered 3 CPU cores on NUMA node 1
2021-01-27T11:31:28Z|00004|ovs_numa|INFO|Discovered 2 NUMA nodes and 6 CPU cores
2021-01-27T11:31:28Z|00005|reconnect|INFO|unix:/usr/local/var/run/openvswitch/db.sock: connecting...
2021-01-27T11:31:28Z|00006|reconnect|INFO|unix:/usr/local/var/run/openvswitch/db.sock: connected

CTRL + C

^CServer listening on <IP_ADDRESS>:50051
2021-01-27T11:31:45Z|00007|bridge|INFO|Setting P4 support for bridge br0
2021-01-27T11:31:45Z|00001|fatal_signal(ipf_clean1)|WARN|terminating with signal 2 (Interrupt)

I restarted the OVS with strace. And I saw this trace line.
connect(16, {sa_family=AF_UNIX, sun_path="/tmp/pi_rpc.ipc"}, 110) = -1 ENOENT (No such file or directory)

How can I pass this step?
Originally posted by @fatihusta in https://github.com/osinstom/P4-OvS/issues/4#issuecomment-768256486

same issues


fix/commander-migrator-priorities

I was trying to use .env and failed miserably :)

@mkloouo hey thanks for the pr)
I want to understand the issue you having with the priorities, if you running migrations using command line interface why .env should have priority over user args (isn't it defeating the point of user entering command args in the first place). I would like to know what is your specific scenario.

@mkloouo hey thanks for the pr)
I want to understand the issue you having with the priorities, if you running migrations using command line interface why .env should have priority over user args (isn't it defeating the point of user entering command args in the first place). I would like to know what is your specific scenario.
In case you using programmatic approach (I see the point) but even then why not:

import Migrator from 'ts-migrate-mongoose'

const migrator = new Migrator({

  uri: process.env.MIGRATE_MONGO_URI,

  collection: 'migrations',

  migrationsPath:  '/path/to/migrations/',

  templatePath: '/path/to/template.ts',

  autosync: true

})

await migrator.run('up')

https://github.com/ilovepixelart/ts-migrate-mongoose#options-override-order

You're right, I stumbled upon that when using with cmdline interface.
I agree with you on matter of cmdline over env, but. There is an issue with cmdline being defaulted, but package does not check if there are env passed, thus uses default ones.

Alright now I get your point, then we need to change the approach a bit for default values in Migrate class, and there is no need to change an order in getMigrator

https://github.com/ilovepixelart/ts-migrate-mongoose/pull/56 ok lets proceed with this


GBR occasionally crash, attempt to reload but fail requiring a restart

GBR Logs:
l130 2 187 processing  99CD38A9 with level 130
l151 4 187 processing  80CDDF1C with level 151
{"level":"ERROR","timestamp":"2022-11-22T03:55:01.164Z","logger":"kafkajs","message":"[Runner] Error when calling eachMessage","topic":"l151","partition":4,"offset":"270","stack":"Error: Evaluation failed: SyntaxError: Unexpected token 'T', \"The reques\"... is not valid JSON\n    at ExecutionContext._ExecutionContext_evaluate (/usr/src/app/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js:229:15)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async ExecutionContext.evaluate (/usr/src/app/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js:107:16)\n    at async AppService.evaluateBattleKey (/usr/src/app/dist/app.service.js:112:16)\n    at async AppService.getRaidInfo (/usr/src/app/dist/app.service.js:96:32)\n    at async Runner.eachMessage (/usr/src/app/dist/kafka.service.js:104:36)\n    at async Runner.processEachMessage (/usr/src/app/node_modules/kafkajs/src/consumer/runner.js:231:9)\n    at async onBatch (/usr/src/app/node_modules/kafkajs/src/consumer/runner.js:447:9)\n    at async Runner.handleBatch (/usr/src/app/node_modules/kafkajs/src/consumer/runner.js:461:5)\n    at async /usr/src/app/node_modules/kafkajs/src/consumer/worker.js:29:9","error":{}}
l120 3 187 processing  EF7A9EA5 with level 120
reloading page
l151 4 187 processing  80CDDF1C with level 151
polling config for changes

message with offset 270 partition 4 in topic l151
{
"locale":"JP"
"message":""
"battleKey":"80CDDF1C"
"quest_id":"305241"
}

More info soon

possibly fixed with 608a8e06fb83cfa7c125a88ba36c0c735c6822ed
need to confirm


Wire py_listener to chatter launch

This PR should improve examples based on feedback from  #37 (which we can close now I think).
@JohnRudolfLewis Sounds good?

Sample output:
bazel run //chatter
...

SUMMARY
========

NODES
  /
    cc_listener (chatter/listener)
    py_listener (chatter/py_listener)
    talker (chatter/talker)

auto-starting new master
process[master]: started with pid [35660]
ROS_MASTER_URI=http://localhost:11311/

setting /run_id to f58438de-67d4-11ef-8314-a98ddde85cf7
process[rosout-1]: started with pid [35681]
started core service [/rosout]
process[talker-2]: started with pid [35684]
process[cc_listener-3]: started with pid [35685]
process[py_listener-4]: started with pid [35690]
[ INFO] [1725134983.040697211]: C++ listener received: hello world 3
[ INFO] [1725134983.140694279]: C++ listener received: hello world 4
[ INFO] [1725134983.240661466]: C++ listener received: hello world 5
[ INFO] [1725134983.340709824]: C++ listener received: hello world 6
[ INFO] [1725134983.440831649]: C++ listener received: hello world 7
[ INFO] [1725134983.540803154]: C++ listener received: hello world 8
[INFO] [1725134983.541026]: Python listener received: hello world 8
[ INFO] [1725134983.641039401]: C++ listener received: hello world 9
[INFO] [1725134983.641477]: Python listener received: hello world 9
[ INFO] [1725134983.741111930]: C++ listener received: hello world 10
[INFO] [1725134983.741417]: Python listener received: hello world 10

@JohnRudolfLewis kind reminder on the open question here

lgtm


fix Fix excessive warnings on macOS due to unavailable /proc filesystem

Proposed changes
Issue Number: close #xxx

Further comments
If this is a relatively large or complex change, kick off the discussion at<EMAIL_ADDRESS>by explaining why you chose the solution you did and what alternatives you considered, etc...

run buildall

run buildall


Protocol handler API

Primary goal of this milestone is to enable Firefox addon to provide custom network protocol implementation. This will not enable add-on to provide full IPFS, Dat, SSB implementations (as that would for example require exposing UDP socket API to add-ons) but it would enable add-on to add associated protocol handler and possibly delegate actual networking to local node via native messaging API or a through a public gateway. Unlike current support of decentralized network protocols this will not redirect request but rather load them under specified URL and have content origin be set to scheme://${hostname}.
Option 1
Allow addon to register ServiceWorker against custom network protocol, allowing Firefox to delegate all network requests to the dedicated ServiceWorker run in the separate background thread.
Option 2
There is already established Electron API used by Beaker Browser and IPFS extension for Brave browser to do exactly that. Compatible Firefox addon API could be exposed to enable that in Firefox. Firefox could leverage existing components like nsIProtocolHandler, nsIStandardURL, nsIURL to expose such API.
🐞 1271553
API Draft
Current work-in progress implementation has a following API exposed under browser.protocol namespace
interface ProtocolAPI = {
  registerProtocol(scheme:string, handler:Request => Response):Promise<void>;
}

interface Request = {
  url:string;
}

interface Response = {
  contentCharset?: string; // default: "utf-8"
  contentLength?: number; // default: -1 (Unknown)
  contentType?: string; // default: "text/html"
  content: AsyncIterator<ArrayBuffer>;
}

Status

[x] Wire background script with nsIProtocolHandler
[x] Fix Malformed URL error reports in the browser console.
[x] Handle unload / unregister properly.
[x] Fix reported unhandled exceptions in browser console.

[ ] Allow protocol to provide content in secure context. 🚫🐞
[ ] Address "connection is not secure" dropdown

Made some progress on this issue last week. As things stand now above described API is available to the background script if protocol permission is requested. Current implementation still does not handle back-pressure or cancelling as in if consumer attempts to pause or cancel underlying channel, but I'd work towards getting this wired up as well.
Only other thing that I'm considering is going with ProtocolWorker API due to reasons described at https://github.com/Gozala/libdweb/issues/8#issuecomment-390437124. Other the performance it's also just a lot simpler to manage multiple messaging channels with worker than it is to do it with add-on's background script.

I observe uncaught exceptions being reported in the browser console, but can't seem to figure out where it's coming from

It seems that for whatever reason loader spinner for new tab into which content from custom protocol handler is loaded never finishes spinning. Oddly enough it works fine for the first tab. Maybe it's related to #issuecomment-390724031 ?

In separate conversation @olizilla asked if we could support CSP headers in custom protocols  ? At least that is a mechanics in Electron.
Support for HTTP headers in non-http protocol seems odd on one hand, but on the other hand it's reasonable request. According to the [nsIChannel] (https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIChannel) page on MDN:

After a request has been completed, the channel is still valid for accessing protocol-specific results. For example, QueryInterfacing to nsIHttpChannel allows response headers to be retrieved for the corresponding http transaction.

I wonder if implementing nsIHttpChannel interface from our custom channels would allow us to do that.
@olizilla I also as I mentioned in that conversation there are some protocol flags that could be used to control policies to a much lesser degree.

@Gozala  a somehow related question: are these flags taken in consideration when browser decides if loaded resource is a  Secure Context? Asking because localhost is marked as a Secure Context (even on HTTP without encryption), and I seen flags like   URI_IS_LOCAL_RESOURCE, URI_IS_LOCAL_FILE, which is kinda true for things like a locally running IPFS node.

@Gozala a somehow related question: are these flags taken in consideration when browser decides if loaded resource is a Secure Context?

I honestly don't know, but that is what I would expect.

Asking because localhost is marked as a Secure Context (even on HTTP without encryption), and I seen flags like URI_IS_LOCAL_RESOURCE, URI_IS_LOCAL_FILE, which is kinda true for things like a locally running IPFS node.

In case of URI_IS_LOCAL_RESOURCE my guess it's what used for resource:/// URLs that are firefox bundled content and as description says it "would not hit the network" which I don't think is true of IPFS content. It also note imply secure context it resource:/// urls inherit that from the loader.
As of URI_IS_LOCAL_FILE I'm confused by the description of this flag. But I also think it's pretty much for file:/// URLs.
At the moment protocol handler uses URI_STD | URI_INHERITS_SECURITY_CONTEXT which I assumed was enough for all intended purposes, but it turns out self.isSecureContextisfalse` wihch is not great.

In regards to isSecureContext I did some research and according to the nsIContentSecurityManager.idl :

/**
   * Implementation of
   * https://w3c.github.io/webappsec-secure-contexts/#is-origin-trustworthy
   *
   * The value returned by this method feeds into the the Secure Context
   * algorithm that determins the value of Window.isSecureContext and
   * WorkerGlobalScope.isSecureContext.
   *
   * This method returns false instead of throwing upon errors.
   */
boolean isOriginPotentiallyTrustworthy(in nsIPrincipal aPrincipal);

Then looking at the current implementation of isOriginPotentiallyTrustworthy it does not seem like any protocol, channel or URI flags affect the outcome, it's a hard-coded list of protocol schemas that are granted "secure context".
😞

Turns out there is a bug 1328695 that says "isOriginPotentiallyTrustworthy should consider URI Flags" and as far as I can tell from the attached changes it adds URI_SAFE_TO_LOAD_IN_SECURE_CONTEXTflag that is then used inisOriginPotentiallyTrustworthyimplementation instead of hard-coded protocol schema list. Which is exactly what we'd need to enableisSecureContext` in the custom protocol implementations.
:relieved:  :grinning:

Infinite loading issue is finally resolved!

Unfortunately I discovered yet another issue this time it's a clam that connection is not secure:

And I have also verified it's not related to the isSecureContext as that even with system principal same error seems to appear. I am suspecting it's related to securityInfo field of nsIChannel.

@lidel @olizilla @mafintosh above "connection is not secure" raised some interesting questions, specifically:

What do we want to display there for ipfs, dat URLS ? If you interact with it on https:// page you can drill down into more details. I assume in case of IPFS it would be ensuring that content receive hashes to the same hash as in URL. In case of Dat do you validate that content fingerprints with same public key ?

At which point can we report connection security ? I think stream reports progress and status updates via nsIProgressEventSink and currently connection can have one of this statuses nsISocketTransport (in-lining below for continence)
STATUS_RESOLVING | 0x804b0003 | Transport is resolving the host. Usually a DNS lookup.
STATUS_RESOLVED | 0x804b000b | Transport has resolved the host.
STATUS_CONNECTING_TO | 0x804b0007 |
STATUS_CONNECTED_TO | 0x804b0004 |
STATUS_SENDING_TO | 0x804b0005 |
STATUS_WAITING_FOR | 0x804b000a |
STATUS_RECEIVING_FROM | 0x804b0006 |

There is even more states that can be reported via nsIWebProgressListener (not sure how yet). Question is what does protocol handler API should expose and in which form. I could use some input on this from implementers.

Dat does validate all of its content against the public key. We also only use DNS names which we can receive from authenticated sources (spec here).

@pfrazee maybe I did not described what I meant properly, I assume there is some audit happening that content you get is authored by the owner of the private key, I imagine wanting to update status of the stream when this validation can be done.

@Gozala oh you mean the timing? Yeah the data is verified when it is received, prior to it ever being used.
I suppose one of the tricks here is that "secure" has a different meaning than with https, since https is referring to the TLS session. If you're looking at just whether dat's data is verified, it always will be and invalid data is basically just ignored -- so arguably it's always secure? But there is channel encryption, and that has to be negotiated too.

@Gozala oh you mean the timing? Yeah the data is verified when it is received, prior to it ever being used.
I suppose one of the tricks here is that "secure" has a different meaning than with https, since https is referring to the TLS session.

Yeah I meant this in a broader sense, what kind of security properties does protocol needs to communicate with a browser and what API would make sense to expose to do so.

If you're looking at just whether dat's data is verified, it always will be and invalid data is basically just ignored -- so arguably it's always secure?

What if some data is invalid should not that be communicated in some way to a browser ? What if you encounter alternate forks of the same archive ? I imagine it is another thing that is worth communicating with a browser in some form.

But there is channel encryption, and that has to be negotiated too.

I think in more concrete terms how should we change current draft of the protocol handle interface to allow network protocol implementation to communicate status updates of the request with a browser. And how do we make this not tied to an individual protocol like Dat or IPFS as they might have a different  properties to communicate. Also what other properties does protocol handler needs to communicate with browser here example that come into my mind:

Number of peers seeding, being seeded to.
Even progress in terms of overal % doesn't necessarily makes sense, maybe in terms of chunks makes more sense ?

I could really use some help in terms of API change suggestions.

@Gozala  to answer your two questions from  https://github.com/mozilla/libdweb/issues/2#issuecomment-391528890:

Things to show in protocol popup
Protocols such as IPFS rely on content-addressing so if we were successful in receiving data, it means a chunk   has been verified by the node before passing to the browser.

For ipfs:// and other content-addressed protocols putting simple Content-addressed in green (or blue, to indicate different guarantees than HTTPS) would be a good default.
For mutable protocols such as ipns:// information about real source could be displayed (eg. current  /ipfs/ path behind  latest record published to IPNS)
For IPFS, the browser extension could provide DAG/IPLD Explorer to which a link could be put there as well.
If additional info screen available after click-thru could be a page similar to browser or page actions, we could put additional, fetched-on-demand diagnostics there, such as number of known peers hosting the content, but I am not sure how useful such hard-to-access UI could be. I'd just go with one sentence from the first bullet point.

At which point can we could report progress

For IPFS a minimum set of states worth reporting I see is:

request is being prepared
request was sent to local  IPFS node
waiting for response from node
started receiving data

we could provide download progress here in the future, or if we provide expected total size to the browser, it could be calculated on the fly

all data was received

For immutable, content-addressed protocols  like ipfs:// reporting connection security would be the moment we got some data, confirmed hashes match and start pushing data to the content iterator (STATUS_RECEIVING_FROM).
For "mutable" protocols such as ipns:// (which resolves to immutable /ipfs/ path behind the scenes) it would be useful to have an ability of reporting STATUS_RESOLVING and STATUS_RESOLVED, but it is rather low priority, as resolve is happening inside of the node is is not exposed to the outside yet.

Will think about it some more tho.

@lidel Thanks for the feedback. I suggest to think about browser as a node itself rather that something that talks to IPFS node. If you angle things that way I think communicating back any status / progress update would make sense. I also suspect that existing status flags and security info in gecko doesn't quit translate in IPFS and I don't suggest we shoehorn it, but it worth documenting what we'd like to be able to do. In terms of UI also agree that current door-hanger makes little sense, but how we present that info if at all is a separate problem, ideally we still want to provide browser with all the info as it arrives.
I also do understand that both IPFS and Dat do audit data as it arrives, never the less I imagine there could be an instance where node receives some malicious data and I imagine that is worth reporting to the browser. And what if valid data can't be found that's also worth reporting.
On the somewhat related note does is anything like HTTP Status codes, or Headers make sense in either of these contexts ?

never the less I imagine there could be an instance where node receives some malicious data and I imagine that is worth reporting to the browser. And what if valid data can't be found that's also worth reporting.

Open to debate, but IMO you only need to escalate in Dat if it's a corruption event. Misbehaving non-author peers will degrade performance, but that's all. If valid data can't be found, you just get a timeout (but keep searching).

On the somewhat related note does is anything like HTTP Status codes, or Headers make sense in either of these contexts ?

The way that I've approached this is by thinking of the Dat protocol handler like a server. It's another area that's open to debate but you can see how we've approached it here.

I wonder if that was somewhat driven by the Electron API itself ?

Sure. We're basically using the headers and status codes as a way to configure the browser handling. It wouldn't have to be that way.

On the somewhat related note does is anything like HTTP Status codes, or Headers make sense in either of these contexts ?

Main uses I see:

Status codes
a way to signal a redirect to a different URI or return a clear error code when hash/URI is invalid or network connectivity is down (eg. no peers, or no peers with data withing a timeout window).

Headers
a way to pass some additional metadata to protocol handler and/or return it along with response
It would enable us not only to have redirects, but also open possibility of making things like XHR's .getAllResponseHeaders() work.

IMO these are generic building blocks that could be useful for different protocols, even if we make them a lot less powerful than HTTP ones.  Headers could be optional, and if not explicitly defined could have an implicit OK Status.
An open question is if/how much of  HTTP abstractions should we copy.
My initial intuition is that going with HTTP-like semantics: Headers with mandatory Status Code following HTTP conventions (2xx == OK, 3xx == Redirtect, etc) would simplify wiring new protocols into the browser (eg. dev tools) and reduce cognitive load for  developers that consume the API, like it did in Beaker. But I also understand it may not be possible due to constrains/complexity that I am not aware of.

On a related note, I noticed some additional edge cases specific to ipfs://, but which may be worth mentioning here as additional data points:

contentType/contentEncoding
In IPFS we do not store mime-types along with data, so we don't know it before data starts arriving. Public HTTP gateways are doing mime-type-sniffing and we will have to do the same in browser.
Question: does it make sense for Firefox to provide access to its own mime-type-sniffer? Perhaps setting contentType to auto or null could enable already existing heuristics described here?

on-the-fly normalization of case-sensitive identifiers in ipfs://<cid>
AFAIK URI is force-lowercased before it is passed to handler.
Not sure if this is technically feasible, but it would be really useful if we could automatically detect legacy, case-sensitive hashes (CIDv0) and convert+redirect them to case-insensitive encoding (CIDv1 in Base32) that can be safely used in ipfs://<cid> contexts.
My initial thinking is that it may not be trivial, as it requires browser to flex rules a bit:

Find a way to pass the original (case-sensitive) address string  to the handler function (just like the current redirect-based one does). Right now URI is forced to lowercase before it is passed to handler and we don't want to change how URI object is created by the browser. Perhaps a Header with original string could be added when original and lowercased versions differ? It would be generic enough to enable other protocols to do their own checks/normalization. Not sure how realistic is this. Thoughts?
convert the CID
make it possible for handler function to return a redirect to a different URI  (or do everything in webRequest/onBeforeRequest or onBeforeSendHeaders).

Without  mentioned normalization we will have to just display an error informing user that CIDv0 is not allowed in ipfs:// and suggesting conversion to case-insensitive CIDv1. It is not deal-breaker for us, but if we could have transparent conversion to CIDv1 that would be huge UX win for users.

why copy anything? let’s keep the API simple.
If someone wants to add headers and redirections to their protocol, let them parse them from the content themselves, right?

I think it's a benefit to be able to use the features provided by HTTP headers. Content Security Policy and Caching immediately come to mind; I'm sure there will be more over time. If we say, "These new protocols are not HTTP so they shouldn't use HTTP codes & headers," I think we may find ourselves porting over the functionality repeatedly.
Can we generalize "HTTP" headers into "Request and Response Headers" ? With that line of thinking, we're able to inherit all of the features and minimize the amount of novel work, and then we add new features to them.
There's definitely some differences in terms of potential response states, for instance:

Not finding any peers
Found a peer but didn't find the file
Found a peer, found the metadata for the file, but couldn't find the file in time

And so on. But my gut reaction is, we should adapt the HTTP behaviors unless it completely fails to map in some key fashion.

It seems the use-cases for making HTTP headers part of this API are tied to wanting some aspects of the browser security model to seamlessly apply to new protocols. As we are loading these pages on a web browser, we expect the tooling to behave like the web platform does. That means CSP and cross-origin restrictions etc. However, these features are tightly coupled with HTTP, and rely on HTTP verbs and headers which may not have equivalents on different protocols.
If this is to be a header-less protocol handler, it may be useful to enable some configurability of the browser environment. The concept of origins may or may not be appropriate, depending on the protocol, and questions such as whether pages on custom protocols can then load third-party content on other protocols.

That’s connected to the protocol handling URLs or the more general URIs:
authority = [userinfo@]host[:port]
URI = scheme:[//authority][/]path[?query][#fragment]
URL = scheme://authority[/path][?query][#fragment]
PRL = //authority[/path][?query][#fragment]

An URL is an URI with an authority. A protocol-relative link (PRL) is a URL without scheme/protocol.
The protocol handler API should accept URIs, to which the concept of origin(=authority) doesn’t necessarily apply

My main interest is minimizing the amount of effort this takes. I'm not in favor of changing the definitions of origins (ie authority = origin) if it means a lot of work-arounds; there's no reason any of the new protocols need to change from the standard URL form.
My point is that the HTTP semantics are not hard to map to these protocols, and so I think we ought to be approaching this from the standpoint of asking "how do the request/response semantics actually need to change?" rather than assuming we need to start from a blank slate.
For Dat, we need mechanisms that are functionally equivalent to status codes and HTTP headers. It's also useful that fetch() works with Dat URLs just the same as HTTP.

Bug preventing secure context was fixed and is available nightly builds. I also have landed  5751026 take make use of it in our protocol API and with that we have secure context:

contentType/contentEncoding
In IPFS we do not store mime-types along with data, so we don't know it before data starts arriving. Public HTTP gateways are doing mime-type-sniffing and we will have to do the same in browser.
Question: is it possible for Firefox to provide access to its own mime-type-sniffer? Perhaps setting contentType to auto or null could enable already existing heuristics described here?
Reusing it would be more elegant than doing mime-sniffing in userland.

I believe omitting contentType / contentEncoding would do exactly that.

on-the-fly normalization of case-sensitive identifiers in ipfs://
AFAIK URI is force-lowercased before it is passed to handler.
Not sure if this is technically feasible, but it would be really useful if we could automatically detect legacy, case-sensitive hashes (CIDv0) and convert+redirect them to case-insensitive encoding (CIDv1 in Base32) that can be safely used in ipfs:// contexts.

@lidel  It would be challenging, but might be doable. I would encourage you to give it a shot. I personally would rather spend time on other issues, because:

Even with redirects I think user experience is not going to be great.
It seems like you're onboard with switch to case-insensitive encoding by default.
Adding complexity to support that would require justification if were land this APIs into firefox.

That being said here is some pointers that might provide necessary context to try implementing this.

nsIProtocolHandler used in the implementation is actually passed URL string to be parsed in newURI in fact if you look at logs you can see those coming in. In fact nsIStandardURLMutator used there is what causes it to be normalized into case-insensitive form. Now problem is that newURI needs to return synchronously but it runs on the different process from add-ons so there is no way for us to call into a function that would transcoding.
Good news is you can technically return nsIURI instance there which does not require lowercase hostname and can be done with nsISimpleURIMutator (example). The drawback is though that if we used them we would have content that either has "null" origin or origin will be full uri which would break CSP.
What might work though is to use nsISimpleURIMutator in newURI method but then in the newChannel2 return channel that on asyncOpen would asynchronously redirect via asyncOnChannelRedirect. Truth is I don't know how to do that exactly but usually you can figure out by searching like this one.

One more thing to consider is that I do not know how to wrap all this into a nice API where uses that don't care about such redirects won't end up with nsIURIs instead of nsIStandardURLs.  Or how facilitate redirects without imposing round-trip with add-on each time.

My initial thinking is that it may not be trivial, as it requires browser to flex rules a bit:

Find a way to pass the original (case-sensitive) address string to the handler function (just like the current redirect-based one does). Right now URI is forced to lowercase before it is passed to handler and we don't want to change how URI object is created by the browser. Perhaps a Header with original string could be added when original and lowercased versions differ? It would be generic enough to enable other protocols to do their own checks/normalization. Not sure how realistic is this. Thoughts?

I think my comment above should clarify what are the options and challenges here. Only other thing I could add there might be an option to return some bastardized nsIStandardURL  from newURI that would have original spec and then do actual parse in newChannel2. That would allow passing originalURL to the protocol handler and provide some way to do redirects.

convert the CID

I'm not entirely sure what is your suggesting here, if it just switching to case-insensitive CID 👍 Otherwise you'd need all the things I've described above. Also keep in mind that you have to choose between standard URLs which have notion of relative URLs and proper origin support but require case-insensitive hostname and URIs that have neither but are case-sensitive.

make it possible for handler function to return a redirect to a different URI (or do everything in webRequest/onBeforeRequest or onBeforeSendHeaders).

I'm not sure actually how webRequest works (like when in the process is it triggered) if it can be used to do redirects I would absolutely recommend going with that as it would bypass all the complications I've described.

Without mentioned normalization we will have to just display an error informing user that CIDv0 is not allowed in ipfs:// and suggesting conversion to case-insensitive CIDv1. It is not deal-breaker for us, but if we could have transparent conversion to CIDv1 that would be huge UX win for users.

I totally understand. How migration costs compares to implementation + added complexity costs that I don't know.
I'd suggest to explore if current behavior can be preserved by using nsISimpleURIMutator in newURI but then use nsIStandardURLMutator to produce nsIStandardURL that will be used in channel. If that will work that would allow us to pass originalURL as part of the request which in turn will allow redirecting.

I think it's a benefit to be able to use the features provided by HTTP headers. Content Security Policy and Caching immediately come to mind; I'm sure there will be more over time. If we say, "These new protocols are not HTTP so they shouldn't use HTTP codes & headers," I think we may find ourselves porting over the functionality repeatedly.

Problem is we'd have to port them anyway for custom protocol anyway. On one hand it sure makes it easier for ipfs, dat, ssb folks as to not think about that, on the other hand if we do think about it and decide on a subset it would make porting that easier.

Can we generalize "HTTP" headers into "Request and Response Headers" ? With that line of thinking, we're able to inherit all of the features and minimize the amount of novel work, and then we add new features to them.

The way gecko is setup I don't think it's possible. It's individual protocol handler implementation that do parsing and interpreting those into specific actions. So nsIHTTPProtocolHandler does that in gecko what that means I'd need to replicate all that it does, which is not only challenging but I'm almost certain it also makes use of some non-scriptable APIs to do that which means it would have to be done in the gecko and land into firefox itself. That is why I would very much prefer to minimize the scope by considering what does and does not make sense. Additional benefit is considering all this  would be helpful any standardization effort we might consider.
Also from what I can tell Request Headers don't make any sense in this context, or am I missing something ?

It seems the use-cases for making HTTP headers part of this API are tied to wanting some aspects of the browser security model to seamlessly apply to new protocols. As we are loading these pages on a web browser, we expect the tooling to behave like the web platform does. That means CSP and cross-origin restrictions etc. However, these features are tightly coupled with HTTP, and rely on HTTP verbs and headers which may not have equivalents on different protocols.
If this is to be a header-less protocol handler, it may be useful to enable some configurability of the browser environment. The concept of origins may or may not be appropriate, depending on the protocol, and questions such as whether pages on custom protocols can then load third-party content on other protocols.

Most of these are tight to origin and isSecureContext current implementation supports both. There are also CSP headers but some support of that would be much easier to expose that supporting all of HTTP.
Cross protocol interactions is another good topic to discuss and I suspect Moz Security will have opinions in this regard too.

My main interest is minimizing the amount of effort this takes. I'm not in favor of changing the definitions of origins (ie authority = origin) if it means a lot of work-arounds; there's no reason any of the new protocols need to change from the standard URL form.

👍 I totally agree.

My point is that the HTTP semantics are not hard to map to these protocols, and so I think we ought to be approaching this from the standpoint of asking "how do the request/response semantics actually need to change?" rather than assuming we need to start from a blank slate.

I don't really suggest starting from blank slate, rather I'm trying to reduce the scope. Think of it not as reinvent status codes / headers but rather picking just subset we need as it would greatly simplify implementation efforts.

For Dat, we need mechanisms that are functionally equivalent to status codes and HTTP headers. It's also useful that fetch() works with Dat URLs just the same as HTTP.

Custom protocols in gecko are more similar to file:/// than they are to http:// note that fetch and xhr does work in both as pretty much all other APIs. But there are no redirects nor headers.
I think what you really want is small subset of features provided by combination of HTTP status codes and headers. If we could figure out what that subset is it would be a lot easier to add support for it.

If it's not possible to reuse any existing HTTP handling code, then I can understand why my suggestion (to not reinvent) doesn't get us much.
Here's what we currently use from the HTTP semantics right now for dat in Beaker. I'll rate how important they are for us, but that's just to say we do/dont need the functionality but it could be by other mechanisms.
Requests:

Method: GET (usually) HEAD (rarely & not vital)
Range: vital
If-None-Match: nice to have (along with all other If-* headers)
Accept: dont use this yet, could be nice to have (along with all Accept-*)
Cache-Control: dont use this yet, could be nice to have

Responses:

Codes: 200, 206 (range reply), 204 (HEAD reply), 303 (redirects), 304 (caching response), 404, 405 (bad method), 500 (error with the dataset), 504 (timeout searching for dat on network)
Content-Type: vital
Content-Disposition: pretty useful (download as .zip)
Content-Security-Policy: vital
Access-Control-Allow-Origin: probably don't need it? Not sure, we set it to '*'
Location: vital
Accept-Ranges: vital
Content-Range: vital
Content-Length: vital
Cache-Control: useful not vital
ETag: useful not vital

Hope that's helpful

@pfrazee thanks for this list, it's very helpful. Just one followup question, in which context are these request methods / headers are used ? Is it just to support XHR / fetch APIs or is there some other use cases ? And if it's used by XHR / fetch how is that preferable over use of DatArchive API ?

Mainly they are used for browsing - for visiting pages and for embedded resources. (The range requests come in for video/audio, for instance.) Generally the DatArchive API is the ideal choice, but XMR / fetch is useful when you want to be transport-agnostic. A dat url works just as well as an http url in that API.

I was attending Mozilla All Hands meeting last week and that gave me a chance to talk to necko (gecko networking stack) engineers. About some of the still open issues in regards to custom protocol handlers. More coordination & research+work will be required to address remaining limitations but here is a some takeaways:

Async redirects - Turns out we could do async redirects that should enable @lidel to redirect requests from old encoding to a new encoding. Specifically it seems that channel could invoke asyncOnChannelRedirect on corresponding nsIChannelEventSink, unfortunately I do not know how to get a reference to it but I hope to find that out soon from the necko engineer who's helping me out with this.

Response (HTTP) status codes - Turns out nsIHttpChannel reports that by passing nsresult as statusCode parameter to onStopRequest of nsIStreamListener which was passed to channel's asyncOpen. I've asked necko team to point me to the source that does mapping between HTTP status codes and nsresult codes and once I have that it should be fairly easy to support status codes. Please note that very likely things like redirects caching and alike won't just magically start doing right things, most likely those don't have corresponding nsresult it's just implementation of protocol handler does the right thing there instead, which is to say doing caching is on the protocol implementer. Not sure about redirects I'm inclining to just let protocol handler return response with different url and data stream than requested as it would reduce messaging overhead but we'll see after there's more clearance on 1. Async Redirects.

Request Headers - Things seems here sadly far more complicated, but it is also clear that this is really important for proper support of Video / Audio tags that just assume HTTP backend. It was suggested to me to that we could do following:

Plain data from request so that protocol handler can parse HTTP headers or alternative encoding of metadata.
Expose existing HTTP parser so it could be used. There was quite a reluctance on this though for reasons I did not understand (Part of it was that it's written in C++ and could not be easily extracted for just parsing use). It was highly recommended to instead just support more strictly encoded subset of the headers as anything send from video / audio tags would fit.

Unfortunately it seems that supporting request headers would require C++ work and landing corresponding changes into Firefox which is to say it's likely going to take a while and likely will come after we illustrated that people are actually building on this work.

Response Headers - Things don't seem all that great here either. From what I understood there is logic branching based on whether url.scheme is http(s)  and if so that is where channel is casted to nsIHttpChannel. It was suggested to add another interface like nsIHttpHeadersChannel that would be able to provide HTTP headers, after which we can update earlier mentioned logic branch to support headers on non http(s) protocols as well. As with Request Headers it seems to require C++ changes which makes it more difficult and requires landing it in Firefox. Although necko team seemed 👍 on accepting such changes.

Sadly I don't have C++ experience to tackle Request / Response headers, if anyone interested in this work does please let me know and I'll be happy to get you started and connect to people who can mentor you in this process. Otherwise I'll probably end up tackling this myself but only after everything else here is solid.

Moved out remaining items into individual issues. Closing this one.


Inference on custom data

Hello,
Thank you for sharing your amazing work. I am just trying to inference on custom RGB data. But I checked in the example that the model is using  ['keyframe', 'keyframe_pose', 'keyframe_intrinsics', 'frames', 'poses', 'intrinsics', 'sequence', 'image_id'] for inference. I am just curious to know is it possible to run the inference pipeline just for RGB data?
Thank you

Hi, thanks for your interest in our work!
To answer your question more precisely, may I ask what do you mean by "RGB data" exactly? Do you mean images without poses and intrisincs?

Question 1: Simply RGB data (no poses no intrinsics)
Is it possible to run the inference on such data?
Question 2: I  want to collect real-world data for inference can you please tell me what all data I need to collect along with RGB frames? Does it need lidar data also? If possible can you brief what you mean by intrinsic, keyframe_pose, and poses?

Q1: It is possible to run inference on such data as long as you know the intrinsics for the camera (Tutorial by OpenCV). However, you will have to run an odometry system to obtain the pose information (camera rotation and position). We recommend to use the open-source implementation of DSO (we tested this) to compute the poses (this will give the same format for the poses that is used in the implementation of the KITTI Odometry dataset).
Q2: Neither for training, nor for inference you need lidar data. We only use it to evaluate the predicted depth maps.


MCUmgr over UDP stops working if two consecutive "Network Connected" events are received by SMP UDP

Bug Description
When CONFIG_NET_MGMT_EVENT and CONFIG_NET_CONNECTION_MANAGER are enabled, the API net_conn_mgr_resend_status() is implemented and goes through all the registered callback functions and notifies them of the connection status, even if they had already been notified about it. This API function can be called arbitrarily from anywhere in the code (Zephyr or application) at any time.
When CONFIG_MCUMGR_TRANSPORT_UDP_AUTOMATIC_INIT is enabled, smp_udp_start() (in smp_udp.c) is one of the places where net_conn_mgr_resend_status() is called.
When smp_udp_open() is executed multiple times in a row, the thread receiving the data from the UDP socket turns into a useless and never-ending loop executing LOG_ERR() statements and basically killing communication via MCUmgr over UDP.

Fixed by #58169


convert "Optimizing-p5.js-Code-for-Performance" tutorial to ES6

https://github.com/processing/p5.js/wiki/Optimizing-p5.js-Code-for-Performance
As a step forward in the transition to ES6 all of the tutorials on http://p5js.org/learn should be updated to use ES6 standard. This will often mean simply switching 'var' to 'let' or in some cases using es6 classes where applicable.
There are tons of resources online for learning about ES6. Here is an interactive guide that covers the biggest features.

Hi @lmccart, I would like to work on this issue

@arturolc great! i've sent you an invite to be a member of the p5.js repository so you will have edit access. please comment back here when you've updated so we can review.

@lmccart It seems that they were updated already. I will keep an eye out on the issues, so I can contribute in the future :)

oh thank you for letting me know!
maybe take a look at this page if you'd like? it has been partially updated but still needs some more work before it's ES6 complete
https://github.com/processing/p5.js/wiki/Transitioning-from-Processing
https://github.com/processing/p5.js-website/issues/309


No Backup Copy Jobs detail in report.

Bug description
Report not create backup copy job description.
VBR v12. VMware VM Backup.
Command-line input
New-AsBuiltReport -Report Veeam.VBR -Target $VBRSRV -Credential $Creds -Format Html,Text,Word -OutputFolderPath $FolderPath -EnableHealthCheck -AsBuiltConfigPath $FolderPath\AsBuiltReport.json -ReportConfigFilePath $FolderPath\AsBuiltReport.Veeam.VBR.json -Timestamp
Steps to reproduce
Install Install-Module AsBuiltReport.Veeam.VBR -scope AllUsers -force -SkipPublisherCheck -AllowClobber
Create config file New-AsBuiltReportConfig -Report Veeam.VBR -FolderPath $FolderPath -Force
Run New-AsBuiltReport -Report Veeam.VBR -Target $VBRSRV -Credential $Creds -Format Html,Text -OutputFolderPath $FolderPath -EnableHealthCheck -ReportConfigFilePath $FolderPath\AsBuiltReport.Veeam.VBR.json
Edit config to increase job InfoLevel to 2
Run Run New-AsBuiltReport -Report Veeam.VBR -Target $VBRSRV -Credential $Creds -Format Html,Text -OutputFolderPath $FolderPath -EnableHealthCheck -ReportConfigFilePath $FolderPath\AsBuiltReport.Veeam.VBR.json
Expected behaviour
Backup Copy Jobs Detailed report
Screenshots
No response
Operating System
Windows Server 2019
PowerShell Version
Name                           Value

PSVersion                      5.1.17763.3770
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.17763.3770
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           <IP_ADDRESS>
PowerShell Modules
Name                    Version

AsBuiltReport.Core      1.3.0
AsBuiltReport.Veeam.VBR 0.7.2
AsBuiltReport.Veeam.VBR 0.7.0
PScribo                 0.10.0
Additional Context
No response
Before submitting

[X] I have read and followed the bug reporting guidelines.
[X] I have read the documentation, and referred to the known issues before submitting this bug report.
[X] I have checked for previously opened & closed issues before submitting this bug report.

Reviewing the report, you are absolutely right. I don't know how I overlooked not having information about the Backup Copy Jobs.


Acess problems with new user. CityGML Export

New users cant make CityGML exports.
I´ve set up a new database user. Granting RO access using GRANT_ACCESS.bat
In my atempts, the new users can sucessfully use "KML/COLLADA/glTF Export".
But when exporting to CityGML I get an error.

[13:16:04 ERROR] Failed to query the database.
[13:16:04 ERROR] org.postgresql.util.PSQLException: FEL: rättighet saknas för schema citydb
Position: 23

( translation: ERROR: rights missing for schema citydb )
Using Postgres v.12
importer-exporter v.4.2.3
3dCityDB v.4.0.3
Windows 10 / Windows Server 2019
The new Postgres user:
CREATE ROLE iread WITH
  LOGIN
  NOSUPERUSER
  INHERIT
  NOCREATEDB
  NOCREATEROLE
  REPLICATION

Checking the schema citydb
GRANT USAGE ON SCHEMA citydb TO iread;

Thanks for reporting, @Flodkvist. The export process uses a cache to be able to resolve geometry and feature XLinks as well as global appearances. This cache is held in main memory and, by default, is drained to the database if cache limits are reached. For this purpose, temporary tables are created in the citydb schema for storing the cache information and dropped after export has finished.
A RO user is, however, not allowed to create these cache tables. That's why the export fails with error messages. This is a bug and needs to be fixed but it will take us some time because the caching mechanism is a core functionality.
Here are two workarounds for the meantime:

You can choose to drain the cache to the local file system instead of the database. Please use the "Global > Cache" settings on the Preferences tab for this purpose. This will already solve the issue in most cases. However, if your 3DCityDB contains global appearances, then some temporary information must go into the database because we use SQL joins to resolve global appearances. So in this special case, you will still run into errors because some temporary tables need to created in the database.

You can grant usage and create privileges on the citydb schema:
GRANT USAGE, CREATE ON SCHEMA citydb TO iread;

This will enable the iread user to create temporary tables. And since the user has still only SELECT privileges on the 3DCityDB tables, there is no way that the user can perfom INSERT, DELETE, TRUNCATE, or DROP operations on these tables.

You can even combine both workarounds.
We will check the best way how to solve this issue for a future version. For example, we could add another citydb_tmp schema that is just used for temporary information.
Hope this helps.

Thank you so much for the detailed and well formulated response @clausnagel
I will try theese workarounds.
The user is also intended to be used for access from visualization service (Bentleys Open Cities Planner). I hope theese workarounds solves that too.
I will report how things go, if for nothing else, future reference to other users searching for answers.

Ah, interesting use case to directly connect to Bentley software. I am not sure how the Open Cities Planner queries and retrieves data from the 3DCityDB. Depending on how it is implemented, it might not even need to create temporary tables, and you might not run into issues.
Yes, I would be happy if you report back your experiences.
Cheers.

Thanks for your feedback. Yes, the new release now implements solution 2.
Closing this issue now. If there is more we can do to help you connect Bentley OCP with 3DCityDB, let us know.


Cache

It would be nice if there would a cache folder where the already compressed images are in so they won't need a new compression. It takes long to do the images on my website currently so deployment is slower.

@RichardLindhout I already though about that! 😁 But that would require some harder thinking.

But expect it in 1.2.0

@NikolaRHristov does this work now, would be really cool!

Hey @RichardLindhout, still not I'm afraid 😅 That's why astro-compress is still version 1.1.x 🤣

I have some time over the weekend so I'll give it a crack.

Wow that would be so great!!

Hey @NikolaRHristov Thanks again for opening that PR against FusionAuth!
I know you are trying to pull back from this project, but did you have thoughts on how this would work? I might hack on this and make a PR if you haven't gotten very far.

Yeah, no problem! I've been thinking about using the internal git cache of a repository and simply outputting a folder with already processed files. Then just calling that folder to see if something's cached or not. The simplest of things. P.S. I'm not backing out just hedging.
sequenceDiagram
participant User
participant AutomationLibrary
participant Cache
participant Processor
User->>AutomationLibrary: Input Files
loop Check Cache
    AutomationLibrary->>Cache: Check if cached
    Cache-->>AutomationLibrary: Cache status
end
alt Cache Found
    AutomationLibrary->>Cache: Retrieve from Cache
    Cache-->>AutomationLibrary: Cached Files
else Cache Not Found
    AutomationLibrary->>Processor: Process Files
    Processor-->>AutomationLibrary: Processed Files
    AutomationLibrary->>Cache: Store in Cache
    Cache-->>AutomationLibrary: Cache Stored
end
AutomationLibrary->>User: Output Files

This would ideally be implemented in FilesPipe - https://github.com/NikolaRHristov/FilesPipe

This is very well still in ideation stage, so all PRs are welcome.

Thank you, I love your package.
Really looking forward to the caching feature.

Thank you, I love your package. Really looking forward to the caching feature.

🙏🏻 Yeah, same, this is a hard feature.


[SPARK-10028][MLlib][Python] Add Python API for PrefixSpan

Merged build triggered.

Merged build started.

Test build #45022 has started for PR 9469 at commit 6db1db9.

LGTM except two minor issues.

Merged build triggered.

Merged build started.

Test build #45024 has started for PR 9469 at commit ceb4a7f.

Test build #45022 has finished for PR 9469 at commit 6db1db9.

This patch passes all tests.
This patch merges cleanly.
This patch adds the following public classes (experimental):\n  * class PrefixSpanModel(JavaModelWrapper):\n  * class PrefixSpan(object):\n  *     class FreqSequences(namedtuple(\"FreqSequences\", [\"sequence\", \"freq\"])):\n

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/45022/
Test PASSed.

Merged build finished. Test PASSed.

Test build #45024 has finished for PR 9469 at commit ceb4a7f.

This patch passes all tests.
This patch merges cleanly.
This patch adds the following public classes (experimental):\n  * class PrefixSpanModel(JavaModelWrapper):\n  * class PrefixSpan(object):\n  *     class FreqSequence(namedtuple(\"FreqSequence\", [\"sequence\", \"freq\"])):\n

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/45024/
Test PASSed.

Merged into master. Thanks!

Thanks for merging it!


Bugfix/RELENG-6497_fix_sha1_in_artifact_name

When setting artifact name get the currently checked out commit sha1 from the HEAD, not from the github context, because it can be from a different commit when triggering a workflow from a different branch or when the workflow checkout the repository at differnt commit/tag/branch.

Waiting for approval
The following approvals are needed before I can proceed with the merge:

the author

one peer

:partying_face:

/approve

Queue out of order
The changeset has received all authorizations to enter the merge queue,
however the merge queue is currently in an incoherent state. In order
to protect this pull-request, I have not added the changeset to the
queue.
Please contact a member of release engineering.
The following options are set: approve

/reset

Reset complete
I have successfully deleted this pull request's integration branches.
The following options are set: approve

In the queue
The changeset has received all authorizations and has been added to the
relevant queue(s). The queue(s) will be merged in the target development
branch(es) as soon as builds have passed.
The changeset will be merged in:

:heavy_check_mark: development/3.1

The following branches will NOT be impacted:

development/1.0
development/2.0
development/3.0

There is no action required on your side. You will be notified here once
the changeset has been merged. In the unlikely event that the changeset
fails permanently on the queue, a member of the admin team will
contact you to help resolve the matter.
IMPORTANT
Please do not attempt to modify this pull request.

Any commit you add on the source branch will trigger a new cycle after the
current queue is merged.
Any commit you add on one of the integration branches will be lost.

If you need this pull request to be removed from the queue, please contact a
member of the admin team now.
The following options are set: approve

I have successfully merged the changeset of this pull request
into targetted development branches:

:heavy_check_mark: development/3.1

The following branches have NOT changed:

development/1.0
development/2.0
development/3.0

Please check the status of the associated issue RELENG-6497.
Goodbye lavigne958.


chore: switch to maintained fork of rpm-rs, rpm-rs/rpm

Since rpm-rs/rpm is maintained, I'd suggest to address https://github.com/cat-in-136/cargo-generate-rpm/issues/20 to move over.
The first alpha release is pending a signoff https://github.com/rpm-rs/rpm/pull/73 .
Ref #39
TODO

[x] replicate functionality to add /bin/sh by default, but omit with a flag(?)

Thanks a lot!


Bad contribution

What type of PR is this?

Uncomment one (or more) /kind <> lines:

/kind bug

/kind cleanup

/kind design

/kind documentation

/kind failing-test

/kind feature

Any specific area of the project related to this PR?

Uncomment one (or more) /area <> lines:

/area build

/area config

/area outputs

/area tests

Github/bot configuration?

What this PR does / why we need it:
This PR is an example of a bad PR. I need to make a PR to show where the current no-DCO-error link is pointing. PLEASE DO NOT MERGE THIS.
Which issue(s) this PR fixes:
This is a demonstration PR. It will create an issue.

Special notes for your reviewer:
DO NOT MERGE THIS PR

Thanks for your pull request. Before we can look at it, you'll need to add a 'DCO signoff' to your commits.
:memo: Please follow instructions in the contributing guide to update your commits with the DCO
Full details of the Developer Certificate of Origin can be found at developercertificate.org.
The list of commits missing DCO signoff:

dd7f1c5 Bad contribution

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by: distortedsignal
To complete the pull request process, please assign cpanato after the PR has been reviewed.
You can assign the PR to them by writing /assign @cpanato in a comment when ready.
The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment


Support security config updates on the REST API using permission

Description
Instead of setting SECURITY_UNSUPPORTED_RESTAPI_ALLOW_SECURITYCONFIG_MODIFICATION settings to update security configuration using PATCH or PUT a new permission was added: restapi:admin/config/update.
So far I decided to keep this flag as it is due to a backward compatibility and log a deprecation message that these settings will be removed in the future. Maybe it is better to remove it completely.
Besides, added the missed test for SecurityConfigApiAction
Issues Resolved
https://github.com/opensearch-project/security/issues/2577
Check List

[ ] New functionality includes testing
[ ] New functionality has been documented
[ ] 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.

Hmmm BWC tests failed with an exception:
  Caused by: org.opensearch.index.engine.RecoveryEngineException: Phase[1] prepare target for translog failed
»  	at org.opensearch.indices.recovery.RecoverySourceHandler.lambda$prepareTargetForTranslog$22(RecoverySourceHandler.java:629) ~[opensearch-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
»  	at org.opensearch.core.action.ActionListener$1.onFailure(ActionListener.java:90) ~[opensearch-core-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
»  	at org.opensearch.core.action.ActionListener$4.onFailure(ActionListener.java:192) ~[opensearch-core-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
»  	at org.opensearch.core.action.ActionListener$6.onFailure(ActionListener.java:311) ~[opensearch-core-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
»  	at org.opensearch.action.support.RetryableAction$RetryingListener.onFinalFailure(RetryableAction.java:218) ~[opensearch-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
»  	at org.opensearch.action.support.RetryableAction$RetryingListener.onFailure(RetryableAction.java:210) ~[opensearch-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
»  	at org.opensearch.action.ActionListenerResponseHandler.handleException(ActionListenerResponseHandler.java:75) ~[opensearch-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
»  	at org.opensearch.security.transport.SecurityInterceptor$RestoringTransportResponseHandler.handleException(SecurityInterceptor.java:402) ~[?:?]
»  	at org.opensearch.transport.TransportService$ContextRestoreResponseHandler.handleException(TransportService.java:1526) ~[opensearch-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
»  	at org.opensearch.transport.InboundHandler.lambda$handleException$3(InboundHandler.java:421) ~[opensearch-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
»  	at org.opensearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:849) ~[opensearch-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
»  	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
»  	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
»  	at java.lang.Thread.run(Thread.java:833) ~[?:?]

Created an issue https://github.com/opensearch-project/security/issues/3456.

Thanks for creating that issue @willyborankin - I've merged your change bypassing the BWC issues.  I've got a PR that should merge shortly that will fix the issue in main.

will prepare manual backport


Is there way to programmatically change zoom level?

Does any API exist on for zooming in / out programmatically?  I know you can turn on mouseWheelZoom, but lets say we wanted to increase the zoom to 150% of the default after some timeout, say:
const editor = monaco.editor.create(myContainer, {
	value: `Hello, World!`,
	language: "plaintext",
        mouseWheelZoom: true,
});

setTimeout(function() {
    editor.updateOptions({zoomLevel: 150})
}, someTimeout);

is there a way to do that?
Furthermore, but not as important to my current use case, is there any way to get the current zoom level should one zoom in or out using the mouse wheel?

The zoom level of ctrl + mouse scroll is just a multiplier applied to fontSize. So you can simply change the fontSize option to get the same behavior.
There is no getter for that in the API. You can of course access the JS objects directly if you want to.

The zoom level of ctrl + mouse scroll is just a multiplier applied to fontSize. So you can simply change the fontSize option to get the same behavior.
There is no getter for that in the API. You can of course access the JS objects directly if you want to.

Hmmm.  I've actually tried using  fontSize to replicate this same behavior, but through basic usage determined that they are not actually the same thing.
For example, consider the following use case:
1.  Create an editor where the fontSize is 14
2.  Create a timeout for 3 or 4 seconds that will update the fontSize  "back" to 14 as well as alert or console.log or something, just so you know the setTimeout actually fired.
3. Once the editor loads, immediately zoom in or out significantly using the mouse wheel.
4. You'll see that "updating" the fontSize doesn't actually change the appearance at all.
You can copy/paste the following code here to test this out.
const editor = monaco.editor.create(myContainer, {
	value: `Hello, World!`,
	language: "plaintext",
        mouseWheelZoom: true,
        fontSize: 14,
});

setTimeout(function() {
        editor.updateOptions({fontSize: 14})
        console.log("SetTimeout Fired")
}, 5000);

I would try to use zoomLevel, but it's readonly.  Any ideas?

Hmmm.  I've actually tried using  fontSize to replicate this same behavior, but through basic usage determined that they are not actually the same thing.
For example, consider the following use case:
1.  Create an editor where the fontSize is 14
2.  Create a timeout for 3 or 4 seconds that will update the fontSize  "back" to 14 as well as alert or console.log or something, just so you know the setTimeout actually fired.
3. Once the editor loads, immediately zoom in or out significantly using the mouse wheel.
4. You'll see that "updating" the fontSize doesn't actually change the appearance at all.
You can copy/paste the following code here to test this out.
const editor = monaco.editor.create(myContainer, {
	value: `Hello, World!`,
	language: "plaintext",
        mouseWheelZoom: true,
        fontSize: 14,
});

setTimeout(function() {
        editor.updateOptions({fontSize: 14})
        console.log("SetTimeout Fired")
}, 5000);

I would try to use zoomLevel, but it's readonly.  Any ideas?

There is no API for this, but if you really really want to do this you can use JS. e.g. require('vs/editor/common/config/editorZoom').EditorZoom.getZoomLevel() or setZoomLevel().

There is no API for this, but if you really really want to do this you can use JS. e.g. require('vs/editor/common/config/editorZoom').EditorZoom.getZoomLevel() or setZoomLevel().


~!Shannon Sharpe Live Audio Leak On Reddit [!Viral~Video!] Shannon Sharpe Ig Viral Video Oficial Tutorial Leaks on Twitter X.Xx

~!Shannon Sharpe Live Audio Leak On Reddit [!Viral~Video!] Shannon Sharpe Ig Viral Video Oficial Tutorial Leaks on Twitter X.Xx
34 seconds ago — Shannon Sharpe reveals the truth after SEX video streams and Now Sharpe came clean that he was not hacked nor was the video a prank. The longtime NFL tight end confirmed he was having sex during the video
Watch 🟢 ➤ ➤ ➤ 🌐 Click Here To link (Full Viral Video Link)
🔴 ➤►DOWNLOAD👉👉 (Full Viral Video Link)
Watch 🟢 ➤ ➤ ➤ 🌐 Click Here To link (Full Viral Video Link)
🔴 ➤►DOWNLOAD👉👉 (Full Viral Video Link)
Instagram Fumble? Shannon Sharpe posts live sex video, claims he was hacked
Recents Days New Videos of Tiktok Unseen Video Instagram Fame Shannon Sharpe MMS Drunk Viral Video Click here to view Brace yourself for the most talked-about footage of the year!
Where i can watch Shannon Sharpe Full Video? WATCH HERE! Viral Shannon Sharpe Full Video Instagram, Twitter (X), Discord.
NFL Hall of Famer and ESPN personality Shannon Sharpe is at the center of an online controversy following a viral Instagram Live video that appeared on his account early Wednesday morning.
Shannon Sharpe's Instagram Live scandal
The live stream, which quickly circulated across social media platforms, allegedly captured audio of an apparent sexual encounter.
Sharpe has since addressed the situation, claiming that his Instagram account was hacked.
In the now-deleted Instagram Live, no faces were visible, but a woman's voice can be heard, accompanied by moaning, during the audio that lasts several minutes.