[Feature] Auto-create remote when attempting to check out a PR from a fork

Context
Our repo setup requires contributors to fork the base repo and work in branches on their fork. Contributors then create a PR from fork branches against the base repo master branch.
Problem
This means that a user of this addon who is also using the workflow described above needs to manually manage remotes for all contributors - otherwise, when trying to checkout a branch, the user sees an error that they need to create a remote for the fork (this is quite a cryptic error too, since it's only in the logs, and the logs quickly fill with junk leaving the message scrolled out of the console buffer).
Solution
Ideally this addon would prompt a user that a remote does not exist which corresponds to this PR and would the user like to create that remote. If the user answers yes, the remote is added to the git config.
Benefits
This will help to create a more seamless workflow. I imagine it would be especially useful for open source repos where a list of contributors is not known ahead of time, or for large organisations where manually creating a list of remotes for every contributor is not feasible.
Notes
Perhaps the addon could also remove the auto-generated remote after completing the PR review to keep the user's git config clean.

Remotes should automatically be added when you checkout a PR from the "Pull Requests" view. If you're not seeing that happen then please ping the issue and I will investigate!


fix: use parent temp table strategy in cross store node

What type of PR is this?
Bug fix

What does this PR do / why is it needed ?
Fixes NPE in cross store graph fetch

Which issue(s) this PR fixes:

Fixes #
Other notes for reviewers:
Does this PR introduce a user-facing change?
Yes, bug fix

Can you add in a unit test


insert an ssd in graph when feedback connection detected

as of #182 , Audio.js can detect feedback connections. however, it prevents passing them along to genish, which means that while we see the feedback cable in VR, we do not hear a self-patched sound.

[ ] when feedback is detected, modify the patch.document to include a new ssd object, between the src and dest nodes.
[ ] confirm that if a feedback path has an ssd object, that it doesn't trigger a true from Audio.js:docHasFeedback()
[ ] set ssd cable colour to red

since the feedback cable has an op that is only going to exist in the audio graph, should we create a new property in the patch.document for feedback objects? no, this complicated the doc2graph process in genish. instead, let's add it as a node in the graph and give it a property for not visualising it?


Add async SqsBatchSensor

Refer to https://github.com/apache/airflow/pull/24554

I can see deferrable in SqsSensor so this should require now. https://github.com/apache/airflow/blob/ea8c08068bc9fcc744e4cef38da99c5263923099/airflow/providers/amazon/aws/sensors/sqs.py#L75


When you click the lower "calculate" button, the style.visibility = "hidden" dissapears and the elements return back to their normal positions. + HIDE UNNECESSARY ELEMENTS

When re-showing the elements use:
.style.display = "inline-block";
instead of "block"
https://stackoverflow.com/questions/38669247/why-does-the-position-of-the-element-change-when-i-use-style-display-block


phpunit error "must be a array or ArrayAccess"

Laravel Version: 5.3.30
PHP Version: 7.1.0
Database Driver & Version: pgsql

$ phpunit --version
PHPUnit 5.7.15 by Sebastian Bergmann and contributors.

Description:
When running tests with phpunit I get:
$ phpunit --filter RoleControllerTest
PHPUnit 5.7.15 by Sebastian Bergmann and contributors.

E...                                                                4 / 4 (100%)

Time: 1.64 seconds, Memory: 24.00MB

There was 1 error:

1) RoleControllerTest::testMethodAll
PHPUnit_Framework_Exception: Argument #2 (No Value) of PHPUnit_Framework_Assert::assertArrayHasKey() must be a array or ArrayAccess

/home/nisevi/documents/recom-electronics/keepclear-backend/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:369
/home/nisevi/documents/recom-electronics/keepclear-backend/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:363
/home/nisevi/documents/recom-electronics/keepclear-backend/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:367
/home/nisevi/documents/recom-electronics/keepclear-backend/tests/api/RoleControllerTest.php:19

Steps To Reproduce:
I'm trying to validate this structure:
 13     public function testMethodAll()
 14     {
 15         factory(Role::class, 'superadmin')->create();
 16         $this->get('api/v1/roles')
 17             ->seeJsonStructure(
 18                 [
 19                     'total',
 20                     'per_page',
 21                     'current_page',
 22                     'last_page',
 23                     'next_page_url',
 24                     'prev_page_url',
 25                     'from',
 26                     'to',
 27                     'data' => [
 28                         '*' => [
 29                             'id',
 30                             'name',
 31                             'description',
 32                             'created_at',
 33                             'updated_at'
 34                         ],
 35                         'limit'
 36                     ]
 37                 ]
 38             );
 39     }

If I wrongly change (on purpose) one of the expected keys inside "data" I get the expected behavior:
$ phpunit --filter RoleControllerTest
PHPUnit 5.7.15 by Sebastian Bergmann and contributors.

F...                                                                4 / 4 (100%)

Time: 2.39 seconds, Memory: 24.00MB

There was 1 failure:

1) RoleControllerTest::testMethodAll
Failed asserting that an array has the key 'descriptio'.

/home/nisevi/documents/recom-electronics/keepclear-backend/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:369
/home/nisevi/documents/recom-electronics/keepclear-backend/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:363
/home/nisevi/documents/recom-electronics/keepclear-backend/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:367
/home/nisevi/documents/recom-electronics/keepclear-backend/tests/api/RoleControllerTest.php:19

FAILURES!
Tests: 4, Assertions: 22, Failures: 1.

However if everything is ok with the keys, I get:
$ phpunit --filter RoleControllerTest
PHPUnit 5.7.15 by Sebastian Bergmann and contributors.

E...                                                                4 / 4 (100%)

Time: 2.43 seconds, Memory: 24.00MB

There was 1 error:

1) RoleControllerTest::testMethodAll
PHPUnit_Framework_Exception: Argument #2 (No Value) of PHPUnit_Framework_Assert::assertArrayHasKey() must be a array or ArrayAccess

/home/nisevi/documents/recom-electronics/keepclear-backend/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:369
/home/nisevi/documents/recom-electronics/keepclear-backend/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:363
/home/nisevi/documents/recom-electronics/keepclear-backend/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:367
/home/nisevi/documents/recom-electronics/keepclear-backend/tests/api/RoleControllerTest.php:19

ERRORS!
Tests: 4, Assertions: 24, Errors: 1.

I asked on phpunit repository, here and they suggest to take a look at the code on the Laravel framework here.
Please let me know if you need more info regarding this issue.

Please ask on the forums, we try to keep this repo for bug reporting only.

@themsaid yeah well, I'm not asking how to use anything, or trying to get help for checking the keys of a hash, I thought it was a bug. I can make an algorithm for checking each key if I want to, but I wanted to use the method that figures in your documentation, thanks anyways.

@nisevi sorry, we're just trying to narrow down the issues in this repo to only include actual framework bugs.

+1 to this as a bug

I had the same issue. This should fix this.
https://github.com/laravel/lumen-framework/pull/779/commits/47777bb8a93e8a5494907cc488490bd79c06f61c

Maybe it will helps to some one, I hope:
I had the same issue when I had a typo in my URI and called to unavailable route ()
(I missed an id of the user):
    /**
     * GET /user request
     *
     * @return void
     */
    public function testGetUser()
    {
        $this->json('GET', '/api/v1/user')
            ->seeJsonStructure([
                'data' => [
                    'id',
                    'nickname',
...
                ],
                'status',
                'api_version'
            ])->assertResponseStatus(200);
    }

So when I have set the correct URI and make a call to an existed route: '/api/v1/user/1'

this issue was gone.

As above in case someone can use my input.
In my case, it was happening because I was specifying the structure should return an array when it actually was just a simple object.
Using the example from the original question.
public function testMethodAll()
{
   factory(Role::class, 'superadmin')->create();
   $this->get('api/v1/roles')
       ->seeJsonStructure(
           [
               'total',
               'per_page',
               'current_page',
               'last_page',
               'next_page_url',
               'prev_page_url',
               'from',
               'to',
               'data' => [
                   '*' => [       // Here it's literally specifying that this part of the response is an array.
                       'id',
                       'name',
                       'description',
                       'created_at',
                       'updated_at'
                   ],
                   'limit'  // I believe this shouldn't be here as it's the key "data"  cannot be an array and an object at the same time, otherwise "limit" should outside of "data", or "data" should have another key as an array to contain all the fields specified underneath it
               ]
           ]
       );
}

so basically to validate the following json response:
{
    'total': 1000,
    'per_page': 10,
    'current_page': 1,
    'last_page': 3,
    'next_page_url': '...',
    'prev_page_url' '...',
    'from': 0,
    'to': 10,
    'data': [
      {
        'id': 1,
        'name': 'name 1',
        'description': '',
        'created_at': '2019-04-19 10:23:31',
        'updated_at': null,
      }
    ],
    'limit': 10
}

the json structure definition should look like:
public function testMethodAll()
{
   factory(Role::class, 'superadmin')->create();
   $this->get('api/v1/roles')
       ->seeJsonStructure(
           [
               'total',
               'per_page',
               'current_page',
               'last_page',
               'next_page_url',
               'prev_page_url',
               'from',
               'to',
               'data' => [
                   '*' => [
                       'id',
                       'name',
                       'description',
                       'created_at',
                       'updated_at'
                   ],
               ],
               'limit'
           ]
       );
}

But if the key "data" is not an array, then the above should be like:
public function testMethodAll()
{
   factory(Role::class, 'superadmin')->create();
   $this->get('api/v1/roles')
       ->seeJsonStructure(
           [
               'total',
               'per_page',
               'current_page',
               'last_page',
               'next_page_url',
               'prev_page_url',
               'from',
               'to',
               'data' => [
                       'id',
                       'name',
                       'description',
                       'created_at',
                       'updated_at'
               ],
               'limit'
           ]
       );
}

Hope this helps to someone.

It happens to me when array of objects with one prop as follows:
'data' => [
    '*' => [
        '_id',
        'title',
        'sku',
        'categories' => [
            '*' => [ 'name' ],
        ]
    ]
]

It raises an error like this:
Argument #2 (No Value) of PHPUnit\Framework\Assert::assertArrayHasKey() must be a array or ArrayAccess
When I add another prop to categories the error converts to failure.
@taylorotwell
It has problem with objects with single prop and definitely it's a bug.

This issue still happening on Laravel 8, I'm stuck on it!!!

Everything works correctly for GET request:
$this->getJson($this->baseUri())
    ->assertOk()
    ->assertJsonStructure([
        'data' => [
            '*' => ['id', 'key', 'value', 'type', 'description', 'is_encrypted', 'created_at', 'updated_at']
        ]
    ]);

But when I want to make same assertion after patch request:
$this->patch($this->baseUri() . "/$setting->id", $request) // or ->patchJson - they both don't work...
    ->assertOk()
    ->assertJsonStructure([
        'data' => [
            '*' => ['key', 'value', 'type', 'description', 'is_encrypted', 'created_at', 'updated_at']
        ]
    ]);

It fails: Argument #2 of PHPUnit\Framework\Assert::assertArrayHasKey() must be an array or ArrayAccess

Written 2 cases, insert and update API, then after both I use GET, the GET after insert always return correctly, but the GET after update always return ArrayAccess, dunno why, so weird

Laravel: 6.20.42
PHP: 7.4.20
PHP Unit: 8.5.19


where is the params.py?please

please sure your commit is new. beacuse the new commit don't have params.py(old version has)

please sure your commit is new. beacuse the new commit don't have params.py(old version has)
So，could you tell me how I can train yolo on my dataset?Thanks


Vercel doesn't want to deploy anything until we upgrade to node 18

As seen in https://github.com/silverstripe/github-issue-search-client/pull/113, Vercel isn't deploying anything for us right now.
Looking at the deployment overview, vercel shows this error:

Error: Node.js Version "12.x" is discontinued and must be upgraded. Please set Node.js Version to 18.x in your Project Settings to use Node.js 18.

It's been a while since we've really looked at this repo properly - probably worth updating all the dependencies at the same time so long as that doesn't cause any major issues.
Acceptance criteria

[x] The project is compatible with node 18
[x] If feasible, dependencies are updated to their latest versions
[x] The vercel project is updated to use node 18
[ ] The updated changes are deployed and working as expected.

PRs

https://github.com/silverstripe/github-issue-search-client/pull/116

@GuySartorelli assigned back to you to confirm deployment works

Deployment successful: https://vercel.com/silverstripe/github-issue-search-client/9YqQuc8pubb9aNPNHgcBMUhV6coq


Fail to create and render large set of pages(about 20,000) from API programmatically during build

Description
Hello everyone! I have an API that fetches a very large set of data on books(about 20,000) and need to pre-fetch and render about 20,000 of pages using the createPages API. It worked well in  dev mode and took me 7-8 mins to wait for Gridsome to finish rendering every pages and routes programmatically but when I try to run gridsome build, it will always end up with fatal error javascript heap out of memory error.
Any help? Is there any other way to create pages dynamically without using the createPages API
Steps to reproduce
gridsome.server.js
api.createManagedPages(async ({ createPage }) => {
    const agent = new https.Agent({
      rejectUnauthorized: false
    });
    const { data } = await axios.get(
      "https://api.books.com/Books/all",  //about 20,000 data
      { httpsAgent: agent }
    );
    data.forEach(item => {
      createPage({
        path: "/books/"+item.book_id,   // this generates 20,000 routes
        component: "./src/templates/Book.vue",
        context: {
          id: item.book_id,
          name: item.name,
          alias: item.alias
        }
      });
    });
  });

Browser:

[x] Chrome (desktop) version XX

[ ] Chrome (Android) version XX

[ ] Chrome (iOS) version XX

[ ] Firefox version XX

[ ] Safari (desktop) version XX

[ ] Safari (iOS) version XX

[ ] IE version XX

[ ] Edge version XX

Node version: 10.15

Platform:  Windows

Gridsome version: 0.6.5

Hi @newtonlaw18 I'll try tonight to replicate this and see if I can help you solve this. Could you give me access to the api which you are pulling from I don't have such a huge dataset to test with.

Hi @u12206050 unfortunately I'm not allowed to give you the API as it contains private and confidential information of my company. To give it another round of simulation, I just tried looping the Gridsome createPages API for 60,000 time and it gave me the same error too.
for (let index = 0; index < 60000; index++) {
    api.createPages(({ createPage }) => {
      createPage({
        path: '/books/'+index,
        component: './src/templates/Books.vue'
      })
    })
  }

Build output:

Is there any workaround on this? Gridsome is great and has given me a great development experience building delightful apps but I'm seriously thinking should I consider using Nuxt(SSR) for my case? Will it solve this issue of rendering large datasets?

@newtonlaw18 no problem I found a large blog post dataset containing 26000 posts. I built a simple site around that built it without problems. What I do see now is that it is crashing on creating the routes which might be too big.
I think if you use the Date Store api with a dynamic route then it might actually work.
So just replace your code to this:

api.loadSource(async store => {
  const books = store.addContentType({
    typeName: 'Books',
    route: '/books/:book_id'
  })

  const agent = new https.Agent({
    rejectUnauthorized: false
  })
  const { data } = await axios.get(
    "https://api.books.com/Books/all", //about 20,000 data
    { httpsAgent: agent }
  )

  data.forEach(item => {
    books.addNode(item)
  })
})

the typeName automatically matches to src/templates/Books.vue

I did a few small changes and was able to reduce the create pages duration from 126s to 1.5s on my computer when creating 60000 of them :)
I also needed to reduce the number of routes to make it work. The example in https://github.com/gridsome/gridsome/issues/548#issuecomment-511190280 will work, but there is also a workaround that you can use with the Pages API. You can have a route option for the createPage method like this:
api.createPages(({ createPage }) => {
  const route = '/books/:id' // generates one route

  for (let i = 1; i <= 60000; i++) {
    createPage({ route, path: `/books/${i}`, component: '...' })
  }
})

The workaround will probably change in the next version to something better.


AnimatedSprite.animation shall complain wrong animation name

Godot version:
3.0.2
OS/device including version:
Win 10, but it should be general
Issue description:
For now, when assigning the AnimatedSprite.animation in GDScript to a wrong name, the output won't complain but instead hides the node from displaying during the game. It will be convenient to add an error checking mechanism.
Steps to reproduce:
One can simply use the "Dodge the Creep" project, either Mob or Player node. In the script, let AnimatedSprite.animation = a wrong name comparing to what you wrote when editing the animation in the Godot editor.

I started to work on this one, I got do make it verify if the animation exists, but I couldn't find a way to throw the error. Any hints? @akien-mga

I've managed to emit an error with ERR_FAIL_COND and other error macros, but it doesn't show to the end user. I can't find a simple way to show it to the user.

Fixed by #24489.


Babel + Citation-Style-Language not compiling?

Describe the bug
The simple code below does not compile, either on my computer or on Overleaf. Do you know what I'm doing wrong?
Additional information

TeX distribution: MacTeX 2023, Overleaf
Package citation-style-language version: v0.5.0 (my computer), v0.4.2 (Overleaf)
LaTeX engine: lualatex

To Reproduce
\documentclass{article}
\usepackage{babel}
\usepackage{citation-style-language}
\begin{document}
test
\end{document}

Thank you. This is my mistake. I was trying to fix an issue with Greek characters in website citations but it turns out that citation-style-language is not the problem, hyperref is (or my use of hyperref). Thank you for your help.


Discord link is not working request for a api key!

can you give me e a new link of discord. need a test api key. thanks.

hi, i don't understant your request?


[AIFlow] Update AIFlow script to use the new cli to start/stop server and init config

Describe the feature
Update AIFlow script to use the new cli to start/stop server and init config

fixed in #211


use aggregation for queries limit, order, offset

Hello,
I've modified your library in order to use aggregation when use limit, offset or orderBy methods. When manipulate a lot of documents in mongo collections, my solution improves the response time.
My merge request use your v2.0.2 tag
You can contact me to talk about the solution

Coverage decreased (-19.09%) to 78.59% when pulling 8309fdc2e1e252a619558589df221001d1a4528b on giboow:query-aggregation into 3bddd4b13be72d30f5af09ae41eec0c38028ca63 on jenssegers:master.

Hi @giboow, thank you for this pull request. Did you see the error from Travis?

Hi @jenssegers, I've seen it. I' will correct this soon

Coverage decreased (-11.95%) to 85.73% when pulling c52fe6925dc3a0c6458e9b1f9e63b6377e2c4c40 on giboow:query-aggregation into 3bddd4b13be72d30f5af09ae41eec0c38028ca63 on jenssegers:master.

Coverage decreased (-0.06%) to 97.62% when pulling 928d216054ad6b3adde9fe85103a10999d932c37 on giboow:query-aggregation into 3bddd4b13be72d30f5af09ae41eec0c38028ca63 on jenssegers:master.

It works now!
I've correct my mistakes in order to pass library's phpunit tests.
My solution uses map reduce of mongo to get datas.
Contact me if you have any comments about my merge request
Philippe

Coverage decreased (-0.07%) to 97.61% when pulling 728a0378d65946ebab0f5bdf236e634976a04edd on giboow:query-aggregation into 3bddd4b13be72d30f5af09ae41eec0c38028ca63 on jenssegers:master.


fix user popouts

apparently this is because some users still have the old user popout, the new one looks different

I don't have access to the old popout on any of my accounts, so I hope this still works


nnx is very slow than linen

System information

OS Platform and Distribution (e.g., Linux Ubuntu 16.04):

Distributor ID:	Ubuntu
Description:	Ubuntu 22.04.3 LTS
Release:	22.04
Codename:	jammy

Flax, jax, jaxlib versions (obtain with pip show flax jax jaxlib:

Name: flax
Version: 0.10.2
Summary: Flax: A neural network library for JAX designed for flexibility
Home-page: https://github.com/google/flax
Author:
Author-email: Flax team<EMAIL_ADDRESS>License:
Location: /usr/local/lib/python3.10/dist-packages
Requires: jax, msgpack, optax, orbax-checkpoint, PyYAML, rich, tensorstore, typing-extensions
Required-by: dopamine_rl, flax-pilot
---
Name: jax
Version: 0.4.37
Summary: Differentiate, compile, and transform Numpy code.
Home-page: https://github.com/jax-ml/jax
Author: JAX team
Author-email<EMAIL_ADDRESS>License: Apache-2.0
Location: /usr/local/lib/python3.10/dist-packages
Requires: jaxlib, ml_dtypes, numpy, opt_einsum, scipy
Required-by: chex, dopamine_rl, flax, flax-pilot, optax, orbax-checkpoint
---
Name: jaxlib
Version: 0.4.36
Summary: XLA library for JAX
Home-page: https://github.com/jax-ml/jax
Author: JAX team
Author-email<EMAIL_ADDRESS>License: Apache-2.0
Location: /usr/local/lib/python3.10/dist-packages
Requires: ml-dtypes, numpy, scipy
Required-by: chex, dopamine_rl, jax, optax

Python version: Python 3.10.12
GPU/TPU model and memory: Kaggle GPU T4 X2
CUDA version (if applicable): CUDA Version: 12.6

Problem you have encountered:
I tried implementing a basic CNN in both linen and nnx and I found that nnx is very slow than linen. Is it normal ?
What you expected to happen:
Expected nnx to give almost similar performance as linen.
Logs, error messages, etc:
No errors. I found that time taken to execute a nnx forward pass is incredibly slower than linen.
Steps to reproduce:
Whenever possible, please provide a minimal example. Please consider submitting it as a Colab link.
Steps to reproduce can be found here

Solution: https://flax.readthedocs.io/en/latest/guides/performance.html


[docs] Opposite logic for StaticBackdrop in Modal/Offcanvas demos

We have opposite examples of StaticBackdrop for Modal/Offcanvas demos. Please use set or not set for both demos.

Wow. It is not the demo, it is the implementation in HxModal, which is wrong (in the light of today's library concept).
HxModal default for backdrop is static whereas Bootstrap has true as default.
We allow the true-mode by setting UseStaticBackdrop="false" parameter.
Bootstrap modal has third state false which is currently not supported by our HxModal (something we have to fix).

[ ] We have to replace the UseStaticBackdrop parameter with full-featured enum-base Backdrop parameter with the same options as OffcanvasBackdrop (True, False and Static).
[ ] The current default of HxModal is static. We have to decide whether we want to override the Bootstrap's true default with our ModalSettings.Backdrop = ModalBackdrop.Static or whether we stick with ModalBackdrop.True and let the users override the default if desired. The true option aligns with our strategy to "keep as much Bootstrap terminology and defaults as possible" the static option aligns with typical usage of modal behavior - a dialog which has to be resolved explicitly.
[ ] We should decide whether we want to align default setting of HxModal.Backdrop and HxOffcanvas.Backdrop. Bootstrap aligns them to true. If we go for HxModal.Backdrop = ModalBackdrop.Static we might also want to se HxOffcanvas.Backdrop = OffcanvasBackdrop.Static.
[ ] OPTIONAL: Alternative approach to defaults might be to add some setup-method (for Startup.cs) which would allow optional setup of "our applications" defaults (on top of those Bootstrap default which we would keep as library-defaults). Something like:

services.AddHxServices().WithHavitApplicationDefaults();

@crdo? @jirikanda?


Effect on the where clause?

So how marking a property as a concurrency token change the where clause of the query?
Would love to see examples and comparison between no token and with token.
Is it possible to mark multiple properties as concurrency token?

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

ID: 041e7a47-a632-132a-3c9e-db46e3782a63
Version Independent ID: a5de9c4c-56fe-416e-0801-f6acd061f25e
Content: Concurrency Tokens - EF Core
Content Source: entity-framework/core/modeling/concurrency.md
Product: entity-framework
Technology: entity-framework-core
GitHub Login: @rowanmiller
Microsoft Alias: divega

Duplicate of #492


Installing SAP HANA, express edition with Docker - persistence on zfs

I tried to install the HANA Express Docker on a Debian 9 system where all storage is zfs.  The creation of the docker failed when creating the persistence layer.  See below for the actual output from the failure.
Suspecting that the problem was with lack of support for ZFS, I created a sparse image file on the zfs system, mounted it, changed the ownership of the mount point to hxeadm.sapsys (12000.79) and the docker creation completed.
The commands to create and mount the file are:

dd if=/dev/zero of=HANA.img bs=128k seek=819200 count=0
mkfs.ext4 HANA.img
mount HANA.img HANA
chown hxeadm.sapsys HANA

This creates and mounts a 100G sparse file, I chose bs based upon zfs recordsize on underlying filesystem
I suggest documentation to show what the filesystems are supported as persistence layers.  I was unable to find this information from my searches.
Cheers,
lbe
Error Message on zfs:

Initializing persistence for first start of HANA (system db) ...
nameserver localhost:39001 not responding.
creating persistence ...
assign failed with persistence startup error. exception  1: no.2000004  (Basis/IO/FileAccess/impl/FileDescriptors.cpp:328)
Cannot open file ""/datavolume_0000.dat" ((closed, mode= RW, access= rw-rw-r--, flags= DIRECT|LOCK), factory= (root= "/hana/mounts/data/mnt00001/hdb00001/" (access= rw-rw-r--, flags= AUTOCREATE_DIRECTORY, usage= DATA, fs= UNKNOWN (zfs), config= (async_write_submit_active=on,async_write_submit_blocks=all,async_read_submit=on,num_submit_queues=1,num_completion_queues=1,size_kernel_io_queue=512,max_parallel_io_requests=64,min_submit_batch_size=16,max_submit_batch_size=64))", rc=22: Invalid argument
exception throw location:
1: 0x00007fd814b03b5b in FileAccess::FileAccessor::getAccessRights(ltt::basic_string<char, ltt::char_traits, ltt::integer_constant<64> > const&) const+0x1757 (libhdbbasis.so)
2: 0x00007fd814b263a3 in FileAccess::IoThreadHandler::~IoThreadHandler()+0x34f0 (libhdbbasis.so)
3: 0x00007fd814b268b8 in FileAccess::IoThreadHandler::~IoThreadHandler()+0x3a04 (libhdbbasis.so)
4: 0x00007fd814b331eb in FileAccess::DiskFullEvent::printEvent(ltt::basic_ostream<char, ltt::char_traits >&) const+0x5c97 (libhdbbasis.so)
5: 0x00007fd828e74936 in PageAccess::ReclaimDataVolumeTraceCallback::notifyFail(unsigned int, char const*)+0x8662 (libhdbdataaccess.so)
6: 0x00007fd828e76675 in PageAccess::DataVolume::createInstance(ltt::allocator&, Configuration::ConfigurationHandler&, Diagnose::StatisticsData const*, PageAccess::PageIO const&, PageAccess::ExtendedDataVolumeInfo const&, bool, bool)+0x141 (libhdbdataaccess.so)
7: 0x00007fd828e7e350 in PageAccess::DataVolumesSPI::forEachDataVolume(PageAccess::DataVolumeWriteFunctor&)+0xa00 (libhdbdataaccess.so)
8: 0x00007fd828e7f723 in PageAccess::DataVolumesSPI::forEachDataVolume(PageAccess::DataVolumeWriteFunctor&)+0x1dd0 (libhdbdataaccess.so)
9: 0x00007fd828e816d1 in PageAccess::DataVolumesSPI::forDataVolume(unsigned int, PageAccess::DataVolumeReadFunctor&) const+0xd30 (libhdbdataaccess.so)
10: 0x00007fd828e81d32 in PageAccess::DataVolumesSPI::createInstance(ltt::allocator&, Configuration::ConfigurationHandler&, Diagnose::StatisticsData const*, PageAccess::PageIO const&, PageAccess::ExtendedDataVolumesInfo const&)+0xb0 (libhdbdataaccess.so)
11: 0x00007fd828ec0345 in PageAccess::PageIOSPI::collectAndCheckPages(unsigned long&, unsigned long&, unsigned long*, unsigned long&, unsigned long*, unsigned long&, unsigned long*, ltt::vectorPageAccess::PhysPageNo, unsigned long&, unsigned long, ltt::vectorPageAccess::PhysPageNo) const+0xd1 (libhdbdataaccess.so)
12: 0x00007fd828ec400a in PageAccess::PageIO::createInstance(ltt::allocator&, Configuration::ConfigurationHandler&, Diagnose::StatisticsData const, PageAccess::ExtendedDataVolumesInfo const&)+0xb6 (libhdbdataaccess.so)
13: 0x00007fd828b5dfde in DataAccess::PersistenceManagerImpl::resetAfterIncompleteRecovery(DataAccess::SavepointVersion, bool)+0x169a (libhdbdataaccess.so)
14: 0x00007fd828b5ed71 in DataAccess::PersistenceManagerImpl::resetAfterIncompleteRecovery(DataAccess::SavepointVersion, bool)+0x2430 (libhdbdataaccess.so)
15: 0x00007fd828b5f12d in DataAccess::PersistenceManagerImpl::resetAfterIncompleteRecovery(DataAccess::SavepointVersion, bool)+0x27e9 (libhdbdataaccess.so)
16: 0x00007fd828b34f2b in DataAccess::PersistenceManager::create(ltt::refcounted_handleDataAccess::PersistenceConfiguration const&)+0x7 (libhdbdataaccess.so)
17: 0x00007fd82b676572 in PersistenceLayer::PersistenceSystem::initialize(NameServer::ServiceStartInfo const&, bool, PersistenceLayer::PERSISTENCE_MODE)+0x780 (libhdbpersistence.so)
18: 0x00007fd82b6b5b06 in PersistenceLayer::PersistenceFactory::initPersistence(PersistenceLayer::PERSISTENCE_MODE, DataAccess::TransactionCallback*, NameServer::ServiceStartInfo&, ltt::refcounted_handleTransactionManager::TransactionControlBlockFactory&, bool, ltt::smartptr_handleDataAccess::DisasterRecoverySecondaryCallback&)+0x3d2 (libhdbpersistence.so)
19: 0x00007fd83160065b in PersistenceController::startup(PersistenceLayer::PERSISTENCE_MODE, NameServer::ServiceStartInfo*, bool, DataAccess::TablePreloadWriteCallback*, DataAccess::TablePreloadReadCallback*, Backup::RecoverCbc_Federation*)+0x2157 (libhdblogger.so)
20: 0x00007fd830e99808 in NameServer::Topology::initPersistence(NameServer::ServiceStartInfo&, bool, bool, TREX_ERROR::TRexError*, bool, ltt_adp::basic_string<char, ltt::char_traits, ltt::integral_constant<bool, true> >, NameServer::ServiceStartInfo::RequestAction)+0x254 (libhdbns.so)
21: 0x00007fd830e9284a in NameServer::Topology::initPersistence(bool, bool, TREX_ERROR::TRexError*, bool, ltt_adp::basic_string<char, ltt::char_traits, ltt::integral_constant<bool, true> >, NameServer::ServiceStartInfo::RequestAction)+0x2e6 (libhdbns.so)
22: 0x000055fe12cc0314 in NameServer::HADRProviderManager::~HADRProviderManager()+0xb2c0 (hdbnsutil)
23: 0x000055fe12ccaf20 in config::IniFile::setValue(ltt_adp::basic_string<char, ltt::char_traits, ltt::integral_constant<bool, true> > const&, ltt_adp::basic_string<char, ltt::char_traits, ltt::integral_constant<bool, true> > const&, char const*)+0x79b0 (hdbnsutil)
24: 0x000055fe12cf9829 in NameServer::ServerInfo::operator=(NameServer::ServerInfo const&)+0x98f5 (hdbnsutil)
25: 0x000055fe12c59d20 in +0x0 (hdbnsutil)
26: 0x00007fd814da2034 in mainInitialPhase+0x2b40 (libhdbbasis.so)
stopping service...
error: Unknown persistence layer error
failed. trace file nameserver_localhost.00000.000.trc may contain more error details.

We will add storage recommendations in the next release.

@lbe
Thanks for the hint on the ZFS.
I followed the above steps but still experiencing the issue.  The minor  difference on how I mounted

dd if=/dev/zero of=HANA.img bs=128k seek=1638400 count=0
mkfs.ext4 HANA.img
mount HANA.img /mnt/hxe1data
chown hxeadm.sapsys /mnt/hxe1data
chmod 666 /mnt/hxe1data

I'm using the latest release if that makes a difference
store/saplabs/hanaexpressxsa:<IP_ADDRESS>.20180925.2
The base OS is Ubuntu 18.04.1 LTS
Docker -
Server Version: 18.06.1-ce
Snippet of error log:

Change hardware key...
nameserver hxehost:39001 not responding.
Opening persistence ...
assign failed with persistence startup error. exception  1: no.2000004  (Basis/IO/FileAccess/impl/FileDescriptors.cpp:334)
Cannot open file ""/datavolume_0000.dat" ((closed, mode= RW, access= rw-rw-r--, flags= DIRECT|MUST_EXIST|LOCK), factory= (root= "/hana/shared/data/HXE/mnt00001/hdb00001/" (access= rw-rw-r--, flags= AUTOCREATE_DIRECTORY, usage= DATA, fs= UNKNOWN (zfs), config= (async_write_submit_active=on,async_write_submit_blocks=all,async_read_submit=on,num_submit_queues=1,num_completion_queues=1,size_kernel_io_queue=512,max_parallel_io_requests=64,min_submit_batch_size=16,max_submit_batch_size=64))", rc=22: Invalid argument
exception throw location:
 stopping service...
error: Unknown persistence layer error
failed. trace file nameserver_hxehost.00000.000.trc may contain more error details.
~~~

*****

@TerryNing can you help?

Fow HXE docker full image: hanaexpressxsa, we recommend the devicemapper storage driver .
https://docs.docker.com/storage/storagedriver/select-storage-driver/#docker-ee-and-cs-engine
Docker EE and CS-Engine
For Docker EE and CS-Engine, the definitive resource for which storage drivers are supported is the Product compatibility matrix. To get commercial support from Docker, you must use a supported configuration.
Docker CE
For Docker CE, only some configurations are tested, and your operating system’s kernel may not support every storage driver. In general, the following configurations work on recent versions of the Linux distribution:
Linux distribution
Recommended storage drivers
Docker CE on Ubuntu aufs, devicemapper, overlay2 (Ubuntu 14.04.4 or later, 16.04 or later), overlay, zfs, vfs
Docker CE on Debian aufs, devicemapper, overlay2 (Debian Stretch), overlay, vfs
Docker CE on CentOS devicemapper, vfs
Docker CE on Fedora devicemapper, overlay2 (Fedora 26 or later, experimental), overlay (experimental), vfs
The detail steps:
Docker installation for HXE.
1.Install docker CE.
https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce-1
2.Stop Docker
$ sudo systemctl stop docker
3.Manage Storage System
If your host file system is xfs, you can recommend the storage driver through the devicemapper in Docker. Add -s devicemapper to the DOCKER_OPTS property in the docker folder.
The minimum recommended storage size is 50G. For example:
DOCKER_OPTS=“-s devicemapper —storage-opt dm.basesize=100G”
For Ubuntu and Debian, the DOCKER_OPTS property can be found at /etc/default/docker.
For Fedora, SuSE, and Centos, the DOCKER_OPTS property can be found at /etc/sysconfig/docker.
4.Increase Docker container size limit
sudo dockerd —storage-opt dm.basesize=100G
5.Edit /etc/docker/daemon.json. If it does not yet exist, create it. Assuming that the file was empty, add the following contents.
{
“storage-driver”: “devicemapper”
}
6.Edit the host /etc/sysctl.conf file
fs.file-max=20000000
fs.aio-max-nr=262144
vm.memory_failure_early_kill=1
vm.max_map_count=135217728
net.ipv4.ip_local_port_range=60000 65535
Verify the changes by running: sudo /sbin/sysctl -p
7.Start Docker
$ sudo systemctl start docker
Verify that the daemon is using the devicemapper storage driver. Use the docker info command and look for Storage Driver.
docker info |grep Base
8.ADD your docker user as sudo group
gpasswd -a your_user docker
Note: For HXE docker full images, we have to execute steps 3/4/5 (use devicemapper storage).

@songrui01
Thanks for the recapping the instructions.
I have a working docker install with ZFS and have been using for learning Hadoop sandbox, machine learning and other systems.
The HANA XSA docker image is failing to install.
Per docker's documentation:
https://docs.docker.com/storage/storagedriver/select-storage-driver/
recommended  storage driver order of preference
zfs (if supported by underlying OS)
overlay2
devicemapper is last.
Guess I'll just create ext4 FS over zfs and move my /var/lib/docker.

“storage-driver”: “devicemapper”

Hello,
Seems that devicemapper storage driver is deprecated. #1424
As a matter of fact, it cannot be used with the latest Docker CE Version 18.09. #452
Is there any solution for overlay2?
 I have wasted 1 day of my life trying to make it works. I have succeed to install it but it is soooo slow, xs a is listing only 3 services started after 27 mins.
Well, my HANA XSA on docker version ends here. HANA XSA and Server Only on docker are full of bugs and doesn't worth to waste your time.
Please go for HANA VM, it is just perfect.
I have installed first time Docker HANA Server only - I wasn't able to run a back-up.
Then I have installed HANA XSA - mensch, is taking eons to start the services. Inspite of my 32 GB RAM machine it is ridiculous slow. It is using devicemapper as a storage driver which is deprecated.
I would never throw on market such a poor documentation and product.
I really enjoy HANA, it is a great product, but this Docker version is far from beeing something usable.
Thank you,

Sorry, forgot to add: the doc wrote by SAP here is having a mistake.

{
"system_user_password" : "<password",
"default_tenant_system_user_password" : "<second_password>"
}

Obviously, i am not a political correctness fan when i am wasting my time with docs written by persons which are not aware of implications of a bad job!
Gruß

Thank you @lbe for posting this.  The HXE docker tutorial was not ever updated to talk about supported filesystems but I managed to Google my way to this page thanks to your post.

It doesn't work on the newest docker version. Anyone found a solution?


Bevy 0.15 support

there's already a pr open, you can start using it from its branch:
bevy_asset_loader = { version = "0.22.0", git = "https://github.com/NiklasEi/bevy_asset_loader", branch = "bevy-0-15" }

The branch above should work fine if you do not enable the progress_tracking feature. I will merge the PR and release the new version as soon as iyes_progress was updated.


#22148 Change expired password in MySQL

Shows the default "change password" dialog. This change only affects MySQL. I was unable to create such a user in MariaDB.

Sample user for testing:
CREATE USER 'expire_daily'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'expire_daily' PASSWORD EXPIRE INTERVAL 1 DAY;

ALTER USER 'expire_daily'@'%' PASSWORD EXPIRE;

Update: MariaDB doesn't seem to provide any driver property required to catch password expiration errors early.

verified


PopulationDensityData r1.2 release review (M4)

Release PR or issue to review

https://github.com/camaraproject/PopulationDensityData/pull/45
Review actions
Assign this issue to yourself and follow the below list.
For any review action, review the file(s) in the issue/PR listed above.
Put comments in the above issue or PR if they concern non-changed files/text.
Put a short summary of the main review result here into the review issue.

[ ] API definition files (YAML) (check version in info & servers objects)
[ ] test file(s) availability
[ ] changelog updated
[ ] readme updated (enforce correct release number / API version naming)
[ ] API readiness checklist(s)

Release actions
Assign this issue to yourself or another RM team member and follow the below list.
When done, tick the box in this issue.

[ ] API release tracker available on wiki
[ ] Review comments addressed (by Sub Project)
[ ] Release PR approved (on behalf of Release Management)
[ ] PR merged (by Sub Project codeowner)
[ ] Release created within GitHub (by Sub Project codeowner)
[ ] Release Tracker updated (with creation date of the release and the release tag link)

Additional comments

Initial review results provided in https://github.com/camaraproject/PopulationDensityData/pull/45#pullrequestreview-2257449828
Authorization and Authentication text in info.description need to be updated.


Retrain image detection with MobileNet for use in TFjs, failure in tensorflowjs_converter

It is unclear whether this is a documentation or a programming issue. If misfiled, please say so and suggest whether a new issue should be raised, or what else can be done.
System information

TensorFlow version:
('v1.13.1-0-g6612da8951', '1.13.1') (see #27538)
('v1.12.0-9492-g2c319fb415', '2.0.0-alpha0') (see #27539) and
tf-nightly-2.0-preview (see https://stackoverflow.com/questions/55682557/)

Doc Link:
https://www.tensorflow.org/hub/tutorials/image_retraining and
https://www.tensorflow.org/tutorials/images/hub_with_keras

Describe the documentation issue
Both documents mention but do not describe conversion to mobile models. Yet, conversion using tensorflowjs_converter failed in every attempt. See https://stackoverflow.com/questions/55849309/retrain-image-detection-with-mobilenet, which mentions two attempts by me as well as questions by others with the same problem.
We welcome contributions by users. Will you be able to update submit a PR (use the doc style guide) to fix the doc Issue?
As soon as it is working, I would gladly fix and/or augment the docs.  I have not gotten tensorflowjs_converter to work on a retrained MobileNet model, despite the docs stating that it should work, e.g.:

This saved model can loaded for inference later, or converted to TFLite or TFjs.

This issue is more suitable on tensorflow js repo. Please post it on tensorflow js. Thanks!

@ymodak: It's now at https://github.com/tensorflow/tfjs/issues/1576. Thanks!


[bug] No package.json file

When I try to run npx webdash serve I get an error saying that there is no package.json file even though there is one in the current directory. I installed webdash and it's plugins through yarn, as I did with the rest of my packages.
OS: ArchLinux 4.15
npx -v: 9.7.1
node -v: 9.9.0
npm -v: 5.7.1
Please let me know what else you need information wise.

Thanks for checking out webdash and reporting the issue 😄
Did you run it with --dev flag rather than --save-dev? (because you used yarn)
Also can you please make sure webdash and its plugins show up in the devDependencies in your package.json?

Okay, I tried doing everything from scratch with --dev and it worked this time, though I was pretty sure I did install it under dev the first time. I might have skipped the on one package ¯\_(ツ)_/¯.
Thanks anyway :)

Cool! Let me know if you've got feedback on webdash or if you have an idea for a plugin 🚀


Unfixable warning CS8669 in RCL components

Is there an existing issue for this?

[X] I have searched the existing issues

Describe the bug
Unfixable warning CS8669 occurs in razor components in a RCL.
Happens when you implement use a nullable reference type as type in an interface.
It's the same issue as here : #32733
Expected Behavior
The warning should not be there, or you should be able to prevent it.
Steps To Reproduce
Reproducable repo : https://github.com/Tyme-Bleyaert/RazorClassLibNullableIssue
Exceptions (if any)
No response
.NET Version
7.0.100-rc.2.22477.23
Anything else?

 Version:   7.0.100-rc.2.22477.23
 Commit:    0a5360315a

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.19043
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\7.0.100-rc.2.22477.23\

Host:
  Version:      7.0.0-rc.2.22472.3
  Architecture: x64
  Commit:       550605cc93

.NET SDKs installed:
  2.1.523 [C:\Program Files\dotnet\sdk]
  5.0.413 [C:\Program Files\dotnet\sdk]
  6.0.300 [C:\Program Files\dotnet\sdk]
  7.0.100-rc.2.22477.23 [C:\Program Files\dotnet\sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.All 2.1.27 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.30 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.27 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.30 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.1.30 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 5.0.17 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 6.0.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 7.0.0-rc.2.22476.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.1.27 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.30 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.1.30 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 5.0.17 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 6.0.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 7.0.0-rc.2.22472.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 3.1.30 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 5.0.17 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 6.0.5 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 6.0.10 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 7.0.0-rc.2.22472.13 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

Other architectures found:
  x86   [C:\Program Files (x86)\dotnet]
    registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\InstallLocation]

Environment variables:
  Not set

global.json file:
  Not found

Learn more:
  https://aka.ms/dotnet/info

Download .NET:
  https://aka.ms/dotnet/download

Seems like a compiler issue?


[enh] add demand to admin to notify when moderating

As this is something @natalianorori had to indicate a few times, this may ease the process :)

@natalianorori I'm going to put this on the dev site. Please let me know if like it!


Add Error Checks for new Blogs

Added Error checks for new blogs.
Added Keys array for different Models.
Updated error logging.

Merged error checks, keys arrays and error logging code.


[SPARK-30098][SQL] Turn on spark.sql.legacy.createHiveTableByDefault.enabled by default

What changes were proposed in this pull request?

Set spark.sql.legacy.createHiveTableByDefault.enabled to true by default.
Why are the changes needed?

According to the latest status of [DISCUSS] Resolve ambiguous parser rule between two "create table"s, we decide to turn this conf on by default to unblock Spark 3.0 release.
Does this PR introduce any user-facing change?

No(comparing to Spark 2.4)
How was this patch tested?

Pass jenkins.

@cloud-fan @gatorsmile @HeartSaVioR @rdblue

Test build #122507 has started for PR 28500 at commit ffccb4a.

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-K8s/27168/
Test PASSed.

Test build #122509 has started for PR 28500 at commit 0fc974f.

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-K8s/27170/
Test PASSed.

Test build #122507 has finished for PR 28500 at commit ffccb4a.

This patch fails Spark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test FAILed.

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

Test build #122509 has finished for PR 28500 at commit 0fc974f.

This patch fails Spark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test FAILed.

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

Hi, @Ngone51 .
Could you fix the UT? It's relevant failures.

+1 for this in master as an intermediate step.
-1 for this in 3.0 because it is not safe to release 3.0 with SPARK-30098, even with the property turned off. That PR introduces confusing behavior for CREATE TABLE that is not well understood. I don't think it is a good idea to include SPARK-30098 because we would have to support the flag with that behavior.

The discussion thread is still active. Let's make a consensus there before moving on.

However, we had better file a new JIRA as a subtask of SPARK-31085 and update this PR's title.

Thanks for your advice. Updated.

Thank you so much, @Ngone51 .

Since #28517 is merged, I'll close this PR. Thank you all.


feat: add validExitCodes to Container.withExec for custom return statuses

Fixes https://github.com/dagger/dagger/issues/5981, https://github.com/dagger/dagger/issues/8141.
Pulls in a buildkit update as well, so we can get https://github.com/moby/buildkit/pull/5339

thx for carrying this one over Justin! code LGTM.
While reviewing this I was thinking that I'd love if there's a way I could just make ALL exit codes not to fail. I'd assume that there's going to be CLI's not very well documented that could potentially return different exit codes depending on the error which could potentially frustrate users having to reverse engineer it or dig into code to correctly parametrize here.

While reviewing this I was thinking that I'd love if there's a way I could just make ALL exit codes not to fail

I did think about this - I'm not convinced we should do it though. Well-behaved programs should use exit codes to convey information on how the process failed (see https://tldp.org/LDP/abs/html/exitcodes.html). Specifically, 128 + <signal> is the exit code if the process is killed by a signal. So if the process is SIGKILLed, the exit status is 137. If this happens (e.g. an OOM), then this type of failure is quite different from "the command failed" - we don't want to allow just continuing on, this is probably very likely not the desired behavior.
So, maybe we could just catch ranges of codes, like 0-128 (excluding the sigals). But sadly, while the above is a convention that lots of programs will follow, there's no guarantee that 137 means a SIGKILL - any process can just exit(137).
I think we should probably require that the selection of exit codes is explicitly listed out - if a user really really wants to have all the codes, they can pass an array of 0-255 in - but the fact that's quite difficult to do should imply that that's probably not what they should be doing.

As pointed out by @charjr and @vito, we probably should also add a Container.exitCode API alongside this, since now an exec has multiple possible exit codes, and it can be useful to determine what it was.

@helderco any ideas as to why python is failing here?
         try:
            result = await resolver.get_result(self._converter, root, inputs)
        except Exception as e:
>           raise FunctionError(e) from e
E           dagger.mod._exceptions.FunctionError: Function execution error: 'Argument validExitCodes does not exist in Field: Container!.'

In discord, I've had separate conversations with both @vito (here) and @sipsma (here) about whether operations with an exitCode of non zero should cache or not.
We should probably bikeshed a bit, but here's my two cents:

There are good reasons for both behaviors - because of this, in the future, ideally we should be able to mark any operation as do-not-cache after it's completion

For caching: some operations can return non-zero exit codes and succeed (e.g. tests that check for error behavior, which is a pass :heavy_check_mark:)
Against caching: it's weird to see flaky tests cache

@shykes did point out though that if you've marked your tests to allow failing with exit code 1, usually because you might want to assemble and process a test report, you now actually have a very powerful primitive to handle your own flake logic - you can choose to retry certain tests, etc - this maybe makes sense to cache then.

I think it makes more sense to cache as the default - doing otherwise means that now operations can continue on in the flow, but now won't cache - I think this feels like a trap for users? We shouldn't hide this behavior in validExitCodes, but expose it at a higher+clearer level for users.
Implementing the do-not-cache after completion is necessary (for things like my idea for "super-impure" in https://github.com/dagger/dagger/pull/8358#issuecomment-2346006330) one day. But it's also quite tricky, we probably need to dive quite deep into buildkit, and I'm not sure what implications this has.

This does feel weirdly linked to https://github.com/dagger/dagger/issues/8421 as well - e.g. if you have a function that returns both a value and error (either bundled into the error object, or kept separate, however we decide), is this module call cacheable now? That said, I'm not quite it's the same - this is kind of more around providing a primitive in a core api call, while creating rich error types is more of a modules-y question.

@helderco any ideas as to why python is failing here?
         try:
            result = await resolver.get_result(self._converter, root, inputs)
        except Exception as e:
>           raise FunctionError(e) from e
E           dagger.mod._exceptions.FunctionError: Function execution error: 'Argument validExitCodes does not exist in Field: Container!.'

That just means there's a pipeline inside a function that returning that error from the API. What's the contents of the function that's returning this error?

It seems to me that the failure happens when the Python test suite is run without a dev build of the engine, which is understandable. But does that make sense to you?

It's actually not failing on an API request. It's failing because the Python query builder makes an introspection query to the API right after establishing a connection to the server:
https://github.com/dagger/dagger/blob/5e3299c08d62c3fc91d1ce02b79466ea20c02562/sdk/python/src/dagger/client/_session.py#L82
Then, when with_exec is used in a pipeline, I noticed the following line in the client binding has a bug that always adds mutable default arguments to the query:
Arg("validExitCodes", [] if valid_exit_codes is None else valid_exit_codes),

So I fixed that bug and will be pushing it shortly.

My issue with an array of exit codes, is that it makes it difficult to say "catch all errors". I think it's cool to have that level of control, but what I actually want is 1) an argument to say "always return control to me regardless of exit code" plus 2) a way to check the error code. If I have that, I can handle everything myself from there. The array feels unnecessary.

Yeah but at that point, why have the array at all? If you let me catch all error codes, and know what error code I caught, I can implement anything I need on top of that.

Yeah but at that point, why have the array at all? If you let me catch all error codes, and know what error code I caught, I can implement anything I need on top of that.

I think the biggest gap right now is that this all impacts caching too: if an exit code is ignored the exec op is still cached. So there would still be utility in only ignoring some exit codes vs ignoring all of them.
Obviously it would be ideal if we could also give cache control over all this but that requires rewiring the inner guts of caching in buildkit, so easier said than done.

Ah I see. Not sure it makes a big difference since devs will just provide the array that corresponds to "catch all the app-level errors". So either way, all my app-level errors will be cached.
Re: deep in the buildkit guts. That's something I meant to ask. Don't we already have the ability to do this in the shim, instead of buildkit itself? Not sure it would change anything in the ability to cache control, but maybe?

Re: deep in the buildkit guts. That's something I meant to ask. Don't we already have the ability to do this in the shim, instead of buildkit itself? Not sure it would change anything in the ability to cache control, but maybe?

No, we have control over the container execution but that's way below the stack in terms of caching. Components of buildkit that control caching call our worker (technically the correct term now since the "shim" is gone), but we can't control the caching from there.
We sort of have a sandwich going on where dagger is a top-level frontend and a low-level executor, but buildkit caching lies in the meaty center and we don't really have direct control over its mechanisms yet.

I wouldn't rule out some hack being possible but also would not advise that generally

The array feels unnecessary.

I previously put some points in https://github.com/dagger/dagger/pull/8466#issuecomment-2355244959 about this.
Here's some reasons why it makes sense to me:

I have a step that will always fail, and return exit status 1. We have a few of these in our integration tests, and users who write tests for their modules might use this to confirm that certain things definitely fail. Having an array lets me easily express this - without breaking the chain. If I return all the exit codes, and have to do manual work after to parse them, then I have to have a context, I break the chain, and have to insert a lot of extra logic :cry:
I don't actually usually want to catch all the exit codes - some exit codes (like SIGKILL 137) are truly exceptional - I don't think the user should be manually handling issues that could be caused by the underlying infrastructure (e.g. I run out of memory, OOMKiller steps in and SIGKILLs a withExec). Having the user manually work with these feels like now the user is exposed to details of where and how dagger runs. Most of my well-behaved tools are going to return 0 on success and 1 on failure, so I expect most of these usages will use validExitCodes: [0, 1].

Do you have a concrete use case for when you do actually want to catch every possible reason that the process exited?

Caching is a real problem here (as pointed out by @sipsma) - we really shouldn't be caching environmental failures (like the above SIGKILL from the OOMKiller) - the problem is, it's very hard to determine what an environmental failure is, and how it presents.

It's not just signals, e.g. a process that follows sysexits.h might exit with code 69 to indicate a "service unavailable" error - this is transient, and so we wouldn't want to catch that.

ExecErrors are important - catching all the signals means we never throw an ExecError for that step (even for really exceptional cases), which means that -i interactive debugging won't work, we won't be able to display the pretty errors from #8442, and at some point it might hurt observability in cloud if we add better ExecError displays there.

Having to figure out what exit codes to catch in the array, by a painful process of trial and error, won't make the caching situation any better, will it?

I suspect that most tools will be somewhat well behaved, and will either return an exit code of 0 or 1.

That is not an assumption we should make. The Unix convention is that non-zero exit code means an error. The bare minimum feature is for Dagger to make it easy to catch non-zero exit codes. Sure, sometimes tools explicitly document which exit code they will return; sometimes they even use it to communicate information about the type of error. But just as frequently, the tool is a black box and the only fact you can rely on for sure, is that non-zero = error.
So to say "catch all non-zero exit code" is not a niche special case: it's the primary case. Knowing exactly which exit codes your tool will return, and crafting an array based on that knowledge - that's the special case.

catch all errors, and let me process them

I guess I'm just a little confused as to why we would want to do this - all errors could include a bunch of very strange low-level system errors.

I don't mean all Dagger errors. I mean all non-zero exit codes. See above for why that's not strange.

We keep validExitCodes array as currently

May I propose catchExitCodes instead. "Valid" is confusing to me.

We add a new allExitCodes boolean, which catches 0-127 exit codes (not higher, those are magical signal exit codes as mentioned above, catching these by default is really not a good idea)

Similarly: catchErrors? I want to make that nice and simple since it will be what everyone uses :-P

I have a step that will always fail, and return exit status 1. We have a few of these in our integration tests, and users who write tests for their modules might use this to confirm that certain things definitely fail. Having an array lets me easily express this - without breaking the chain. If I return all the exit codes, and have to do manual work after to parse them, then I have to have a context, I break the chain, and have to insert a lot of extra logic 😢

I think we need a reference test case. How will you implement a go test which catches failed tests, to report them in a "report" object rather than a dagger error?
Here's what I'm picturing:
func (m *MyModule) Test(src *dagger.Directory, ctx context.Context) (*Report, error) {
  ctr := dag.Container().
    From("golang").
    WithMountedDirectory(".", src).
    WithExec([]string{"go", "test", "./..."}, dagger.ContainerWithExecOpts{
      CatchErrors: true,
    })
  code, err := ctr.ExitCode(ctx)
  if err != nil {
    return nil, err
  }
  report := new(Report)
  if code != 0 {
    report.Success = false
  }
  return report, nil
}

In this scenario, checking for exit code is kind of the point. Yes it breaks the chain - just like checking for stdout - but I'm at the end of the chain anyway.
This is the use case I have in mind when I make the arguments above, about catching non-zero exit codes as the primary use case. I don't care what specific exit code go test returns. I know it's non-zero, because that's the convention. There's no benefit for me in making it more specific. It's more work to find out, and if they change the convention of their tool, it breaks my module.
In some cases, like curl there's a legitimate reason to do it. But in that case, I can just replace if (code != 0) with if (code == 22) or whatever the specific code is. You may have another use case in mind - but in mine, I'm pretty sure that array is useless.

I think we need a reference test case. How will you implement a go test which catches failed tests, to report them in a "report" object rather than a dagger error?

For this case, catchErrors makes more sense.
But for a program that I expect to always fail, then I want the array to specify the code that I want it to fail with.
With the array (producing a valuable ExecError for readability in case of failure):
ctr.
	WithExec([]string{"command", "that", "fails"}, dagger.ContainerWithExecOpts{CatchExitCodes: []int{1}}).

Without the array (which also loses the readability):
code, err := ctr.
	WithExec([]string{"command", "that", "fails"}, dagger.ContainerWithExecOpts{CatchAllExitCodes: true}).
	ExitCode(ctx)
if code != 1 {
	return err
}

Maybe instead of an array we could have an enum? Expect - which takes a value Success, Failure, Any? That's zero, non-zero, and all. Handles all the use cases, but means that you can't distinguish between individual exit codes without getting .ExitCode, but maybe that's okay.

If we do catchErrors: bool and catchExitCodes: <array> now, and add Container.exitCode as a rapid follow-up, is that ok with you? I don't mind the array being there, as long as the "go test" case has a really nice and simple solution.

Container.exitCode is actually in here already - no need for a follow-up.

Having had the weekend to think about this a bit more, I think I like your original proposal of one catchErrors, I'm less sure about having a big array - but I would really like a way to just catch failures (and fail on 0).
Could we have an Expect value as I mentioned above? So:
# Success (default) - dagger expects the command to success with exit code 0
ctr.
	WithExec([]string{"command"}, dagger.ContainerWithExecOpts{Expect: dagger.Success)

# Failure - dagger expects the command to fail with any exit code 1-127
ctr.
	WithExec([]string{"command"}, dagger.ContainerWithExecOpts{Expect: dagger.Failure)

# Any - dagger doesn't expect anything, the exit code is discarded
ctr.
	WithExec([]string{"command"}, dagger.ContainerWithExecOpts{Expect: dagger.Any)

With all of the above, you can chain this into ExitCode:
exitCode, err := ctr.
	WithExec([]string{"command"}, dagger.ContainerWithExecOpts{Expect: dagger.Any).
	ExitCode(ctx)

This covers the main use cases:

Standard "exit 0" behavior that everything has today
Failure mode, that covers inverting a status code (to ensure a command fails)
Anything mode, that covers building your own report

If the user requires more precise covering of exit codes, I think it's fine to force the user to use exitCode (we don't need the array). Does this model work?
If it does, I can update the PR in a few minutes, we can ship it whenever.

Yeah that looks great @jedevc ! I say ship it

@jedevc Bit late to the party but expect is brilliant. Thank you very much! Looking forward to making use of this :rocket:


question: Multiple queries? Should I use transaction?

If I'm running a complex query
   Person
     .query()
     .where(...)
     .andWhere(...)
     .andWhere(function (builder) {
         builder
             .where(...)
             .orWhere(...)
             .orWhereJsonSupersetOf()
     })

How do I fetch both result of this query (above) and a count of all rows (bellow) where only this applies...
   Person
     .query()
     .where(...)
     .andWhere(...)

Do I wrap this in transaction?... and how? What is the best approach when you want to chain multiple calls (to different or same model(s))?
Thanks

You could do something like this:
let query1 = Person
  .query()
  .where(...)
  .andWhere(...);

let query2 = query1
  .clone()
  .andWhere(builder => {
    builder
      .where(...)
      .orWhere(...)
      .orWhereJsonSupersetOf()
  })

Promise.all([query1, query2.resultSize()]).spread((query1Result, count) => {

})

Did this answer your question?

That's exactly what I did (with bluebird). However... I didn't know you could clone queries... neat :smile: that'll cleanup things a bit.
One other thing.... How do you put custom methods on Models... I saw extending Query Builder but I'm not sure where that goes and I haven't seen any examples extending Query Builder. This is what I'm trying to accomplish.
var start = req.query.start;
var start = req.query.end;

....

Person
  .query()
  .where(...)
  .andWhere(...)
  .setRangeIfExists(start, end)

where setRangeIfExists in Model is something line this:
Person.prototype.setRangeIfExist = function (start, end) {
  if (_.isUndefined(start) && _.isUndefined(end)) {
    return this;
  }

  return this.range(start, end);
};

Hopefully this makes sense.
Thanks for all the help. You rock!!! :+1:

I think i figured it out but I would like you to confirm it.... It goes like this, right?
var Model = require('objection').Model;
var QueryBuilder = require('objection').QueryBuilder;

function Person() {
  Model.apply(this, arguments);
}

function MyQueryBuilder() {
  QueryBuilder.apply(this, arguments);
}

Model.extend(Person);
QueryBuilder.extend(MyQueryBuilder);

// Some custom method.
MyQueryBuilderPerson.prototype.setRangeIfExist = function (start, end) {
  if (_.isUndefined(start) && _.isUndefined(end)) {
    return this;
  }

  return this.range(start, end);
};

module.exports = Person;

// Instance of this is created when you call `query()` or `$query()`.
Person.QueryBuilder = MyQueryBuilder;
// Instance of this is created when you call `$relatedQuery()`.
Person.RelatedQueryBuilder = MyQueryBuilder;

// Table name is the only required property.
Person.tableName = 'person';

Person.jsonSchema = { ... }
// This object defines the relations to other models.
Person.relationMappings = { ... }

Yeah, that's the way to do it. If you want all models to use the same query builder you can just set the objection.Model.QueryBuilder and objection.Model.RelatedQueryBuilder properties.

Is there a best practice on setting global Query Builders? Separate file loaded in app.js or it always has to be part of a Model?
Next question that I have is about eager functionality. Lets say that I have this scenario:
*** Student Model***
'use strict';

var Model = require('objection').Model;

/**
 * @extends Model
 * @constructor
 */
function Student() {
  Model.apply(this, arguments);
}

Model.extend(User);
module.exports = Student;

// Table name is the only required property.
Student.tableName = 'student';

Student.jsonSchema = {};

// This object defines the relations to other models.
Student.relationMappings = {
  classes: {
    relation: Model.ManyToManyRelation,
    modelClass: __dirname + '/Class',
    join: {
      from: 'student.id',
      // ManyToMany relation needs the `through` object to describe the join table.
      through: {
        from: 'student_class.student_id',
        to: 'student_class.class_id'
      },
      to: 'class.id'
    }
  }
};

It would be nice If I do something like this:
Student
  .query()
  .eager('class')
  .whereEager('class.name', 'like', '%Geo')

where whereEager would build proper join based on relationMappings in the model. I've seen filterEager functionality in objection@next (which is one I'm using too) but as I understand, you still have to do manual joins (using joinRelation #73) even though you've declared relationalMappings in the model. Does joinRelation use relationalMappings? Also eager and filterEager are only for arbitrary graph of data (i.e. separate queries to fetch related data based on relationalMappings). Correct?
Sorry for all the silly questions... but I'm eagerly anticipating v0.5 for the updated docs :smiley:
And last but not least... Thanks for all the help :+1:

Objection.js doesn't care how you organise your code or where you assign the global properties. My personal preference is to write a separate file for each class. What I would do in this case is this:

Create a base class for your models in which you write all the common stuff. Let's call this BaseModel. This model goes in its own file BaseModel.js
Create a file for the custom query builder class. Let's call it CustomQueryBuilder
In the BaseModel.js require the CustomQueryBuilder and assign the BaseModel's QueryBuilder and RelatedQueryBuilder properties.
Inherit all your models from the BaseModel.

This way your code is modular and you don't modify library code (objection.Model), which is always a bit hacky. All this inheritance stuff becomes a lot prettier if you use ES6.
As for the second question: joinRelation and  all the eager stuff use the relationMappings. So to do what you want using joinRelation would go something like this:
Student
  .query()
  .eager('class')
  .joinRelation('class')
  .where('class.name', 'like', '%Geo')

I don't think the extra line joinRelation('class') is too much boilerplate and it makes the join explicit. You know exactly what is happening and what SQL is created just by looking at the query.

Thanks for everything!!! Keep up the good work :+1:

I'm stuck again :disappointed:  . My query is much complicated than the example I gave. Due to legacy project I have to reproduce Nhibernate query.
ReviewQueue
  .query(ReviewQueue.raw("distinct on (review_id) *"))
  .eager('[user, editFlags]')
  .joinRelation('editFlags')
  .whereNull('finalization_id')
  .andWhere('needs_finalization', true)
  .andWhere(function (builder) {
      builder
          .where(EditMetadata.raw('LOWER("name") LIKE ?', '%' + _.lowerCase(searchValue) + '%'))

          //THIS is the part that's giving me trouble
          .orWhereExists(function (bld) {
            bld
              .where('editFlags.category', 'like', '%' + _.lowerCase(searchValue) + '%')
          });
      })

Also on the side note...
I noticed that if you do this:
ReviewQueue
  .query()
  .select('name', 'review_id')
  .eager('[user, editFlags]')
...

Result is looks like this:
[
  {
    "name": "Foo",
    "review_id": 1,
    "user": null,
    "editFlags": []
  }
]

When I remove .select statement user and editFlags are populated but I get all the fields back.
Could this be a bug?

Here are the problems I found:

You give an argument to the query method that doesn't take any arguments. If that works, it is by accident :smile:
If editFlags is a OneToMany relation you get duplicate rows because of the join. Maybe the distinct is there to fix this issue? Also you select * which merges all the columns of the joined tables to the columns of the ReviewQueue table. Maybe you want to use select ReviewQueue.*.
You don't specify a table for the orWhereExitst subquery. See knex documentation. Why are you using a whereExists here anyway? Since you have joined editFlags couldn't you just say .where('editFlags.category', 'like', ...)?

The side note:
You select only name and review_id. You need id and user_id for the eager query to work since they are part of the relations. If you don't want to return those to the client, you can omit them from the result for example using the omit method.

That's totally my fault :smile: Typing it all out rather than simple copy/paste is the best practice :smile:
editFlags is ManyToMany with ReviewQueue (review_queue_flags is the joining table). review_id is just a string (poor naming convention) and can appear multiple times that's why I need distinct on (review_id). I've changed it to perm_id (better name for it from GIS perspective) and it looks like this {1ASDA-ASDAS-32135-ASDAS}. Hopefully that explains why I need distinct. User that's going through reviewQueue should only see one entry per perm_id. I don't fault you if you're confused by this point. I'm too :smile:
I'm simply trying to replicate SQL statement that fluent NHibernate is spitting out. For some reason they have the .orWhereExists. Here's the prettified fluent nhibernate query. I should've posted this long time ago :smile:

select distinct
	reviewqueuet0_.perm_id as col_0_0_
from
	review_queue reviewqueuet0_
where
	((TRUE)::bool)=TRUE
and
	reviewqueuet0_.needs_finalization=TRUE
and
	(reviewqueuet0_.edit_finalization_id is null)
and
	(
		((FALSE)::bool)=TRUE
		or
			upper(reviewqueuet0_.gnis_name) like ('%'||(('HELLO')::text)||'%')
		or
			exists (
					select
						editfla2_.Id
					from
						review_queue_flag reviewflags1_,
						edit_flag editflags2_
					where
						reviewqueuet0_.Id=reviewflags1_.metadata_id
					and
						reviewflags1_.flag_id=editflags2_.Id
					and
						(upper(editflags2_.Category) like ('%'||(('HELLO')::text)||'%'))
					)
	)
limit
	((25)::int4)
offset
	((0)::int4)

The side note
That makes sense. :+1:
Thanks for all your help.

Any chance you could make an example of these steps? I failed to build a working example. Sorry about this half hijack of this question.
Previous quote =>
Objection.js doesn't care how you organise your code or where you assign the global properties. My personal preference is to write a separate file for each class.
What I would do in this case is this:

Create a base class for your models in which you write all the common stuff. Let's call this BaseModel. This model goes in its own file BaseModel.js
Create a file for the custom query builder class. Let's call it CustomQueryBuilder
In the BaseModel.js require the CustomQueryBuilder and assign the BaseModel's QueryBuilder and RelatedQueryBuilder properties.
Inherit all your models from the BaseModel.

This way your code is modular and you don't modify library code (objection.Model), which is always a bit hacky. All this inheritance stuff becomes a lot prettier if you use ES6.

@anttilinno  Here you go...
Directory structure
core
    |_ BaseModel.js
    |_ CustomQueryBuilder.js
es6
    |_ ReviewQueue.js

BaseModel.js
'use strict';

const Model = require('objection').Model;
const CustomQueryBuilder = require('./CustomQueryBuilder');

class BaseModel extends Model {
  static get Model() {
    return Model;
  }

  static get QueryBuilder() {
    return CustomQueryBuilder;
  }
}

module.exports = BaseModel;

CustomQueryBuilder.js
'use strict';

const QueryBuilder = require('objection').QueryBuilder;
const _ = require('lodash');

class CustomQueryBuilder extends QueryBuilder {
  debugInDevelopment() {
    if (process.env['NODE_ENV'] && process.env['NODE_ENV'] === 'production') {
      return this;
    }

    return this.debug();
  }
}

module.exports = CustomQueryBuilder;

ReviewQueue.js
'use strict';

const BaseModel = require('../core/BaseModel');

class ReviewQueue extends BaseModel {
  // Table name is the only required property.
  static get tableName() {
    return 'review_queue';
  }

  // Optional JSON schema. This is not the database schema! Nothing is generated
  // based on this. This is only used for validation. Whenever a model instance
  // is created it is checked against this schema. http://json-schema.org/.
  static get jsonSchema() {
    return {
    };
  }

  // This object defines the relations to other models.
  static get relationMappings() {
    return {
    };
  }
}

module.exports = ReviewQueue;

Thank you very much.


fix(avm-simulator): fix message sender

It was already fixed for non-static calls, but not for static...
Fixes e2e_state_vars.test.ts under AVM (except for the assertion expression-related failures).

#6331  👈
master

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

Join @fcarreiro and the rest of your teammates on  Graphite

Merge activity

May 10, 11:56 AM EDT: @fcarreiro merged this pull request with Graphite.